That does the magic!
They should have explained about that at the beginning of the manual.
Thanks a lot!
--- On Sat, 11/8/08, Ben Abbott <address@hidden> wrote:
From: Ben Abbott <address@hidden> Subject: Re: function To: address@hidden Cc: address@hidden Date: Saturday, November 8, 2008, 4:14 PM
On Nov 8, 2008, at 5:58 PM, Steve MC Han wrote:
> Hi,
>
> I am a beginner of Octave and I was wondering if someone could help me.
>
> I followed direction described here and typed one by one at the prompt and
it works nicely and produce the graph;
>
> http://www.delorie.com/gnu/docs/octave/octave_11.html
> octave:8> function xdot = f (x, t)
> >
> > r = 0.25;
> > k = 1.4;
> > a = 1.5;
> > b = 0.16;
> > c = 0.9;
> > d = 0.8;
> >
> > xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
> > xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
> >
> > endfunction
> x0 = [1; 2];
> t = linspace (0, 50, 200)';
> x = lsode ("f", x0, t);
> plot(t,x);
>
> But if I make script file exactly the same then it produce a lot of error
> messages
> function xdot = f (x, t)
> r = 0.25;
> k = 1.4;
> a = 1.5;
> b = 0.16;
> c = 0.9;
> d = 0.8;
>
> xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
> xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
>
> endfunction
>
>
> x0 = [1; 2];
>
> t = linspace (0, 50, 200)';
> x = lsode ("f", x0, t);
> plot(t,x);
> The error messages are:
>
> error 'x' udefined near line 15 column 14
> error evaluating binary operator '*' near line 15 column 13
> ---- etc
>
> Can someone figure out what's going on?
>
> Thanks,
I think I see the problem. Please try ...
(1) Create a function file called "f.m" which contains the lines from
"function xdot = f (x, t)" through "endfunction".
---------------------
function xdot = f (x, t)
r = 0.25;
k = 1.4;
a = 1.5;
b = 0.16;
c = 0.9;
d = 0.8;
xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
endfunction
---------------------
(2) Create a script file called "my_script.m" which contains
-------------------------------
x0 = [1; 2];
t = linspace (0, 50, 200)';
x = lsode ("f", x0, t);
plot (t, x)
-------------------------------
(3) Type "my_script" from the Octave window
That you can type a define a function from Octave's command line is a nice
convenience. However, you cannot do so in a script file. Rather the function
must be defined in a function file (at least that is my understanding, I'm
sure someone will correct me if I'm wrong).
Ben
|