More on Functions… Lecture 8
Preserving Data between Calls to a function Persistent statement is declared in order to preserve some local information within a function between calls to afunction persistent var1,var2… Example: Running averages function [ave,std]=runstats(x) %runstats generate running ave /std deviation persistent n Persistent sum_x Persistent sum_x2 if x == ‘reset’ n=0 Sum_x=0 Sum_x2=0 else n=n+1 Sum_x = Sum_x Sum_x2=Sum_x2+x^2 end
Preserving Data between Calls to A function if n == 0 ave=0; std=0; elseif n == 1 ave=sum_x; std=0; else ave=sum_x/n; std=sqrt((n*sum_x2-sum_x^2)/(n*(n-1))); end script file [ave,std] = runstats(‘reset’) nvals=input(‘enter number of values’); for ii=1:nvals x=input(‘enter a value’, ‘s’); [ave,std]=runstats(x) end
Function functions A function includes the name of other functions in the input argument list. Function NameDescription fminbnd Minimize a function of one variable fzero find a zero of a function of one variable quad Numerically integrate a function ezplot easy to use function plotter fplot plot a function by name Common MATLAB Function functions
Function functions Common MATLAB Function functions >> fzero(‘cos’,[0 pi]) ans = >> fzero('exp(x)-2',[0 1]) ans = Locates a zero of the function cos between 0 and pi. Locates a zero of the function e x -2 between 0 and 1.
Function functions Common MATLAB Function functions >>fminbnd('x^3-2*x', 0,1) ans = >> ans = Locates a minimum between 0 and 1. integrate function in ‘fun’ using simpson’s rule function y=fun(x) y=x.^2-x; ‘fun’ includes any one variable function
Function functions Common MATLAB Function functions >>ezplot('x^3-2*x') quick plot of function in the string
Function functions Common MATLAB Function functions >> fplot('x^3-x',[-5 5]) quick plot of function in the string >> 2*pi])
Function functions eval and feval functions eval evaluates a character string as though it had been typed in the Command Window. feval evaluates a named function at a specific input value. >>x=eval('sin(pi/4)') x = eval (string) >>y=eval('x^2-2*x') ??? Error using ==> eval Undefined function or variable 'x'.
Function functions eval and feval functions eval evaluates a character string as though it had been typed in the Command Window. feval evaluates a named function at a specific input value. >>x=feval('sin’,pi/4) x = feval (fun,value) >> y = 2 function y=fun(x) y=x.^2-x;
Example: ascending sort function out = ssort(a) nvals=length(a); for i=1:nvals-1 iptr=i; for j=i+1:nvals if a(j)<a(iptr); temp = a(j); a(j) = a(iptr); a(iptr)= temp; end out=a; nvals=input('enter number of values to sort'); array=zeros(1,nvals); for i=1:nvals string=['enter value' int2str(i) ': ']; array(i)= input(string); end sorted =ssort(array); disp(' Sorted data '); for i=1:nvals sorted(i) end
Function Handles You can create a function handle to any function by using before the function name. You can name the handle if you wish and use the handle to reference the function. For example, to create a handle to the sine function; >> sine_handle >> plot ([0:0.01:6], sine_handle, [0:0.01:6])
Methods for Calling Functions There are four ways to invoke, or call, a function into a function. 1.As a character string identifying the appropirate function M-file: 2.As a function handle, 3.As an inline function object 4.As a string 1. function y= fun1(x) y = x.^2-4; The function may be called as follows, to compute the zero over the range 0<x<3. [x,value]=fzero(‘fun1’,[0,3])
2. As a function handle: [x,value] = 3. As an inline function object: >>fun1=‘x.^2-4’; >>fun_inline =inline(fun1); >>[x,value] = 4. As a string expression >>fun1=‘x.^2-4’; >>[x,value] = Or >>[x,value] = fzero(=‘x.^2-4’,[0,3]);
Anonymous Functions
You can pass the handle of an anonymous function to another function Multiple input arguments
Calling one function within another
Nested functions