# PRTools for Octave

As Octave is a public domain Matlab clone, PRTools might run on it. At this moment there is a **trial version that can be obtained from here**. Users are encourage to try it and send me comments. Below is a number of remarks on Octave bugs that had to be solved and changes that appeared to be necessary.

The new command `isoctave`

, included in PRTools, is used to switch between statements that can be handled by Matlab and the Octave replacements

The implementation of object oriented classes in Octave generated some problems. The major one is that the

command that defines the class that handles operations between different classes is in error under Octave. Processing ends up in the wrong class. In particular this holds for the **superiorto** `prmapping`

class. As no solution could be found to call one set of operator overlays from within another set of operator overlays, code had to be duplicated, mainly for the `mtimes`

operator.

Some Octave commands in the **optim** and **image** toolboxes/packages used by PRTools are different from the Matlab ones or use options that are not available. In the following PRTools commands adaptations had to be made for the Octave usage: `im_skel`

, `nu_svro`

(called by `nusvr`

), `nusvo`

(called by `nusvc`

), `svo`

(called by `svc`

), `plotc`

, `plotm`

, `scattern`

, `regoptc`

(called by all classifier regularization procedures). Consequently optimization results and images will differ.

The systems of **random number generators** differ. The PRTools command `randreset`

that saves and returns seeds had to be adapted for Octave. It is not yet fully tested whether the solution is sufficient for all places where it is used. PRTools tries to preserve seeds that are set by the user avoiding changes caused by internal calls to random number generators, e.g. for cross-validation.

Octave appears to be less flexible than Matlab w.r.t. finding **files in the search path**. E.g. files with another extension than .m and .mat may not be found or generate a warning.

Octave is more strict in **handling data classes**. E.g. Matlab accepts sometimes a cellstring where a character string is expected where Octave generates an error. In addition, Matlab accepts without complaining an empty double (`[]`

) in concatenating strings, while Octave generates a warning.

PRTools includes interfaces with Matlab functions, in particular with **Matlab classifiers**, in order to facilitate comparisons. Examples are `statsdtc`

, `statsknnc`

and `statslinc`

that integrate the decision tree classifier, the nearest neighbor rule and the linear classifier in the PRTools system. These are obviously not available under Octave.

Octave has not a active **neural network toolbox**. There is an old nnet-package that is not maintained and very limited. Consequently the PRTools classifiers `rnbc`

,` lmnc`

, `bpxnc`

, `neurc`

and `rnnc`

cannot be called.

Octave is sometimes considerably **slower **than Matlab. PRTools has a system to control optimization iterations called

. By default iterations stop after 10 seconds (adaptable by the user). Users may consider to change this to. e.g. 25 seconds to get comparable results.**prtime**

A very annoying property of Octave is that **structures** list on the CLI the contents of all fields. Consequently it is not feasible to inspect a PRTools dataset A by `struct(A)`

as it will list the entire dataset on the screen. This is now solved by adding a function `struct_octave`

that simulates the Matlab `struct`

. It is called automatically by `struct(X)`

if `X`

is a variable of one of the PRTools classes.

Remarks are welcome.

Bob Duin, March 18, 2018