help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: function


From: Steve MC Han
Subject: Re: function
Date: Sat, 8 Nov 2008 17:31:26 -0800 (PST)

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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]