200 likes | 298 Views
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)
E N D
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. Common MATLAB Function functions
Function functions Common MATLAB Function functions >> fzero(‘cos’,[0 pi]) ans = 1.5708 Locates a zero of the function cos between 0 and pi. >> fzero('exp(x)-2',[0 1]) ans = 0.6931 Locates a zero of the function ex-2 between 0 and 1.
Function functions Common MATLAB Function functions >>fminbnd('x^3-2*x', 0,1) ans = 0.816496985529690 Locates a minimum between 0 and 1. integrate function in ‘fun’ using simpson’s rule >> quad(@fun,0,1) ans = -0.166666666666667 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 >>ezplot(@sin)
Function functions Common MATLAB Function functions >> fplot('x^3-x',[-5 5]) quick plot of function in the string >> fplot(@sin,[-2*pi 2*pi])
Function functions eval and fevalfunctions eval evaluates a character string as though it had been typed in the Command Window. fevalevaluates a named function at a specific input value. eval (string) >>x=eval('sin(pi/4)') x = 0.707106781186547 >>y=eval('x^2-2*x') ??? Error using ==> eval Undefined function or variable 'x'.
Function functions eval and fevalfunctions eval evaluates a character string as though it had been typed in the Command Window. fevalevaluates a named function at a specific input value. feval (fun,value) >>x=feval('sin’,pi/4) x = 0.707106781186547 >> y=feval(@fun,2) 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 end 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 either @ 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 = @sin; >> 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. • As a character string identifying the appropirate function M-file: • As a function handle, • As an inline function object • 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] = fzero(@fun1,[0,3]) 3. As an inline function object: >>fun1=‘x.^2-4’; >>fun_inline =inline(fun1); >>[x,value] = fzero(@fun1,[0,3]); 4. As a string expression >>fun1=‘x.^2-4’; >>[x,value] = fzero(@fun1,[0,3]); 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