PRTools is the software package used in the book:

Classification, parameter estimation and state estimation,
an engineering approach using Matlab

by Ferdi van der Heijden, Robert P.W. Duin, Dick de Ridder and David M.J. Tax, John Wiley & Sons, 424 pages, ISBN 0470090138, 2004.The PRTools version used in the book is PRTools 4 (download).  This version is, however, not fully compatible with later distributions of Matlab. It is better to use the most recent version of PRTools, which can be can be found here. In relation with that a new version of the datasets should be used.


Code and data

The listings in the book can be downloaded as a ZIP archive, by following this link:

The data used in these listings can be downloaded as three separate ZIP archives:

The latter two files are distributed separately due to their size. The license plates data is needed only to run Listing 6.3; the time-of-flight data only for Listing 9.8.

Installation of the listings and the accompanying data is simple. Unpack (using, for example, WinZIP) the archives in a single directory, for example C:CPESE. Start up Matlab and type:

>> addpath('C:CPESE');

replacing C:CPESE by the directory name you chose.

You can add this path permanently by editing your startup.m script. On Windows, this is stored in a subdirectory work of the directory you installed Matlab in. On Unix, it is usually stored in $HOME/matlab.



Three different projects have been defined, covering most of the topics in the book.

  • A supervised classification problem. The distinction between rings, nuts and bolts.
  • A clustering problem. The segmentation of images.
  • A parameter estimation problem. The resistance of carbon film resistors.


  • Page 23, Listing 2.2:
    w2 = w1*classc*costm([],cost); % Take cost into account

    should read:

    w2 = w1*classc*costm([],cost'); % Take cost into account
  • Page 202, Listing 6.1:
    title(['forward: ' num2str(+w{2})]);

    should read:

    title(['forward: ' num2str(+w)]);
    title(['backward: ' num2str(+w{2})]);

    should read:

    title(['backward: ' num2str(+w)]);
    title(['b&b: ' num2str(+w{2})]);

    should read:

    title(['b&b: ' num2str(+w)]);
  • Page 278, Listing 8.3 and Page 290, Listing 8.4:
    z = acquire_measurement_vector();

    should read:

    z = acquire_measurement_vector;
    u = get_control_vector();

    should read:

    u = get_control_vector;