200 likes | 301 Vues
This lecture discusses the concept of persistent variables in MATLAB functions, which allow data to be retained between subsequent calls to the same function. Features like running averages, standard deviation calculations, and function handles are explored. The persistent statement enables the maintenance of local information, critical for applications such as statistics and numerical analysis. Examples include implementing running average functions and using built-in MATLAB functions like `fzero` and `fminbnd` for zero location and minimization, respectively.
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