help-octave
[Top][All Lists]

Re: [Fwd: How to make a read variable av lvalue?]

 From: Søren Hauberg Subject: Re: [Fwd: How to make a read variable av lvalue?] Date: Wed, 23 Jan 2008 09:36:35 +0100

ons, 23 01 2008 kl. 09:18 +0100, skrev Svante Signell:
> I have the following problem when coding in Octave/Matlab. After reading
> a string from an external file into a variable, like x=fscanf(...)
> resulting in x='string' how can I use this variable content as an
> lvalue, like x.a='something', where x is replaced by its string value,
> resulting in string.a='something' instead of x.a='something'.
I'm not sure if I've understood your problem correctly, but is this what
you are looking for:

octave:4> eval(sprintf('%s.a = "something"', 'x'))
x =
{
a = something
}

? There's possibly a faster or more elegant way of doing this, but I
can't think of anything right now.

> For functions calls eval() can be used but what about string
> substitution? BTW: We are writing som general software in Matlab/Octave
> and are planning to use eval() extensively in loops. How slow it is
> compared to fixed function calls?
I don't know. But I guess it's easy to figure out.

octave:12> Xs = linspace(1,100,1000000);
octave:13> tic, for x = Xs, sin(x); endfor, toc
Elapsed time is 7.26 seconds.
octave:14> tic, for x = Xs, feval('sin',x); endfor, toc
Elapsed time is 15.1 seconds.

So, when comparing 'sin(x)' to 'feval("sin", x)' there seems to be a
factor 2 speed loss. But I guess this depends on the function. I would
assume that for more complicated functions written as m-files, the speed
loss would be minimal.

Søren

reply via email to