MATLAB第5章函数概要.ppt
文本预览下载声明
第5章 函数 5.1 函数文件 §5.1 函数文件 例: nargin用法示例。 函数文件examp.m: function fout=examp(a,b,c) if nargin==1 fout=a; elseif nargin==2 fout=a+b; elseif nargin==3 fout=(a*b*c)/2; end 例:用Gauss-Serdel迭代法求解下列线性方程组。设迭代初值 为0,迭代精度为10-6。 在命令中调用函数文件gauseidel.m,命令如下: A=[10,-1,0;-1,10,-2;0,-2,10]; b=[9,7,6]; [x,n]=gauseidel(A,b,[0,0,0],1.0e-6) x = n = 0.9958 7 0.9579 0.7916 例: 求f(x)=x-10x+2=0在x0=0.5附近的根。 步骤如下: (1) 建立函数文件funx.m。 (2) 调用fzero函数求根 function fx=funx(x) z=fzero(funx,0.5) fx=x-10.^x+2; z = 0.3758 例: 求下列非线性方程组在(0.5,0.5) 附近的数值解。 (1) 建立函数文件myfun.m。 function q=myfun(p) x=p(1); 例: 求解著名的Van der Pol方程。 y(1)’’ - 1000*(1 - y(1)^2)*y(1)’ +y(1)=0; 见MATLAB –HELP---ODE45---EXAMPLE2 函数文件 function dy = vdp1000(t,y) dy = zeros(2,1); % a column vector dy(1) = y(2); dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1); 命令文件 [T,Y] = ode15s(@vdp1000,[0 3000],[2 0]); plot(T,Y(:,1),-) 运行结果 例:画Van der Pol方程的极限环。 画位移速度曲线,将1000改为0.001,初始条件改为[10,2],采样点个数取100。 例: 求定积分。 (1) 被积函数文件fx.m。 function f=fx(x) f=x.*sin(x)./(1+cos(x).*cos(x)); (2) 调用函数quadl求定积分。 I=quadl(fx,0,pi) I = 2.4674 例: 分别用quad函数和quadl函数求定积分的近似值,并在相同的积分精度下,比较函数的调用次数。 调用函数quad求定积分: format long; fx=inline(exp(-x)); [I,n]=quad(fx,1,2.5,1e-10) I = 0.28579444254766 n = 65 c、被积函数由一个表格定义 在MATLAB中,对由表格形式定义的函数关系的求定积分问题用trapz(X,Y)函数。其中向量X,Y定义函数关系Y=f(X)。 例:计算二重定积分 (1) 建立一个函数文件fxy.m: function f=fxy(x,y) global ki; ki=ki+1; %ki用于统计被积函数的调用次数 f=exp(-x.^2/2).*sin(x.^2+y); (2) 调用dblquad函数求解。 global ki;ki=0; I=dblquad(fxy,-2,2,-1,1) ki I = 1.57449318974494 ki = 1038 例:生成以向量V=[1,2,3,4,5,6]为基础的范得蒙矩阵,按列进行差分运算。 命令如下: V=vander(1:6) DV=diff(V) %计算V的一阶差分 例: 用不同的方法求函数f(x)的数值导数,并在同一个坐标系中做出f(x)的图像。 程序如下: f=inline(sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2); g=inline((3*x.^2+4*x-1)
显示全部