convert function files to inline functions?

  • Follow


Hello 

Is it possible to write a function, which is written in a file as an inline or anonymous function.
The function in question is for example
function [t,x]= euler(f,interval,xo,N)
h=(interval(2)-interval(1))/N;
t=zeros(1,N+1);
t(1)=interval(1);
x=zeros(size(xo,1),N+1);
x(:,1)=xo(:);
for k=2:N+1
    s=feval(f,t(k-1),x(:,k-1));
    s=s(:);
    t(k)=interval(1)+(k-1)*h;
    x(:,k)=x(:,k-1)+h*s;    
end

I can't see how to write that in the form 
f=@(t,x)[-50*(x-cos(t))]; 

thanks

Uwe Brauer 
0
Reply oub (94) 7/5/2009 6:37:01 PM

"Uwe Brauer" <oub@mat.ucm.es> wrote in message 
news:h2qrsd$cpq$1@fred.mathworks.com...
> Hello
>
> Is it possible to write a function, which is written in a file as an 
> inline or anonymous function.

Unless it's a simple function, probably not.

> The function in question is for example
> function [t,x]= euler(f,interval,xo,N)
> h=(interval(2)-interval(1))/N;
> t=zeros(1,N+1);
> t(1)=interval(1);
> x=zeros(size(xo,1),N+1);
> x(:,1)=xo(:);
> for k=2:N+1
>    s=feval(f,t(k-1),x(:,k-1));
>    s=s(:);
>    t(k)=interval(1)+(k-1)*h;
>    x(:,k)=x(:,k-1)+h*s;
> end
>
> I can't see how to write that in the form
> f=@(t,x)[-50*(x-cos(t))];

So you have the function above in euler.m and you want to call it on the 
function g(t,. x) = -50*(x-cos(t))?

g = @(t, x) -50*(x-cos(t));
[t, x] = euler(g, [0 10], 1, 100);

I made up the values [0 10], 1, and 100 as the latter three inputs to euler; 
replace these with appropriate values for your problem.

-- 
Steve Lord
slord@mathworks.com 


0
Reply slord (13366) 7/5/2009 11:09:32 PM


>>>>> "Steven" == Steven Lord <slord@mathworks.com> writes:

   > "Uwe Brauer" <oub@mat.ucm.es> wrote in message 
   > news:h2qrsd$cpq$1@fred.mathworks.com...
   >> Hello
   >> 
   >> Is it possible to write a function, which is written in a file as an 
   >> inline or anonymous function.

   > Unless it's a simple function, probably not.

   >> The function in question is for example
   >> function [t,x]= euler(f,interval,xo,N)
   >> h=(interval(2)-interval(1))/N;
   >> t=zeros(1,N+1);
   >> t(1)=interval(1);
   >> x=zeros(size(xo,1),N+1);
   >> x(:,1)=xo(:);
   >> for k=2:N+1
   >> s=feval(f,t(k-1),x(:,k-1));
   >> s=s(:);
   >> t(k)=interval(1)+(k-1)*h;
   >> x(:,k)=x(:,k-1)+h*s;
   >> end
   >> 
   >> I can't see how to write that in the form
   >> f=@(t,x)[-50*(x-cos(t))];

   > So you have the function above in euler.m and you want to call it on the 
   > function g(t,. x) = -50*(x-cos(t))?

No, sorry I did not explain that too well I am afraid:
I want to have ONE file to rule them all.

That is one file, say all.m which contains 

    -  the definition of euler, 

    -  the definition of g 

    -  and the call of g with concrete parameters.

Then I simply run all.

 g is an inline function so there is no problem, but euler right now is
 not and  I don't know how to rewrite euler as an inline function. 

 If I call all then of course matlab complains since I call a function
 as a script


Uwe Brauer 
0
Reply oub (94) 7/6/2009 9:28:16 AM

2 Replies
26 Views

(page loaded in 0.061 seconds)


Reply: