where its @ - I got two turntables and a microphone
matlab allows you to define inline functions, known as function handles. These are helpful for making small functions that can be used with quad, fzero and the ode solvers without having to formally define function code blocks. One advantage of function handles is they can "see" all the variables in the script, so you don't have to copy the variables all over the place.
the syntax is: f = @(variables) expression-using-the-variables
then f(argument) is evaluated using the expression.
Here are some examples
use dot operators to make the function vectorized. you should in general use the dot operators so your functions work with vectors, unless of course, your function uses linear algebra.
f = @(x) 1./x.^2; f(2) % should equal 0.25 f([1 2 3]) % should equal [1 0.25 0.111]
ans = 0.2500 ans = 1.0000 0.2500 0.1111
you can have more than one variable, e.g. f(x,y)=x*y
f2 = @(x,y) x.*y; f2(2,3) % should equal 6 f2([2 3],[3,4]) %should equal [6 12]
ans = 6 ans = 6 12
compute the integral of x^2 from 0 to 2
f3 = @(x) x.^3; quad(f3,0,2) %the answer is 4
ans = 4
solve the equation x^2=9.5
myfunc = @(x) 9.5-x^2; xguess = 3; fzero(myfunc,xguess)
ans = 3.0822
solve y' = k*t over the time interval t=0 to 10, y(0)=3
k = 2.2; myode = @(t,y) k*t; % myode is a function handle y0 = 3; tspan = [0 10]; [t,y] = ode45(myode,tspan,y0); % no @ on myode here because it is already % a function handle plot(t,y) xlabel('Time') ylabel('y') % it is also possible to do coupled odes by defining anonymous functions, % although not recommended! It's just harder to read than the functions. % % solve % % dX/dW = kp/Fao*(1-X)/(1+eps*X)*y % dy/dW = -alpha*(1+eps*X)/2/y % X(0) = 0, y(0)=1 % we will let X = Y(1), y = Y(2) eps = -0.15; kp = 0.0266; Fao = 1.08; alpha = 0.0166; myode2 = @(W,Y) [kp/Fao*(1-Y(1))./(1+eps*Y(1))*Y(2); -alpha*(1+eps*Y(1))./(2*Y(2))]; [W,Y] = ode45(myode2,[0 60],[0 1]); plot(W,Y(:,1),W,Y(:,2)) % even though you can do it, that doesn't mean it is easier to read! And % shame on me for not labeling the plot axes.
'done' % categories: Basic matlab
ans = done