[hidden email] (Przemek Klosowski) wrote:

: - I noticed that the linspace operator is fairly slow:

: linspace(-1,1, 10000) takes 25 seconds on a 150MHz r4400, while

: the a=(0:.0001:1); is very quick, and the FFT of the resulting

: matrix is only few seconds. What is the advantage of linspace

: over the range operator, and why is it so slow?

The range operator is built-in, and in Octave it creates a special

range object that only contains the base, limit, and increment, so it

requires the same amount of work and storage to say

1:3:5

or

1:0.1:1e6

The linspace function is currently implemented as an external

function, and creates a matrix with a for loop:

delta = (x2 - x1) / (npoints - 1);

retval = zeros (1, npoints);

for i = 0:npoints-1

retval (i+1) = x1 + i * delta;

endfor

which is terribly inefficient. Changing it to

delta = (x2 - x1) / (npoints - 1);

retval = x1:delta:x2;

should not change the result and will speed things up considerably.

With this change, about the only advantage of the linspace function is

that you don't have to compute the increment yourself.

BTW, the loop in logspace() should probably also be replaced with

retval = 10 .^ retval;

Thanks for pointing this out.

jwe