Matlab原理与工程应用第二版第五章(函数)培训教材

上传人:yuzo****123 文档编号:141178128 上传时间:2020-08-05 格式:PPT 页数:51 大小:562.50KB
返回 下载 相关 举报
Matlab原理与工程应用第二版第五章(函数)培训教材_第1页
第1页 / 共51页
Matlab原理与工程应用第二版第五章(函数)培训教材_第2页
第2页 / 共51页
Matlab原理与工程应用第二版第五章(函数)培训教材_第3页
第3页 / 共51页
Matlab原理与工程应用第二版第五章(函数)培训教材_第4页
第4页 / 共51页
Matlab原理与工程应用第二版第五章(函数)培训教材_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《Matlab原理与工程应用第二版第五章(函数)培训教材》由会员分享,可在线阅读,更多相关《Matlab原理与工程应用第二版第五章(函数)培训教材(51页珍藏版)》请在金锄头文库上搜索。

1、5.1 创建函数,例:x=cos(at)+b y=|x|+c 创建一个comxy函数计算,文件名为comxy.m functionx,y=comxy(a,t,b,c) x=cos(a*t)+b y=abs(x)+c 大写字母开头,5.1.1 函数文件,第五章 函数,1,2,functionx,y=comxy(t,a,b,c) %变量名可不一致 %x=sin(at)+b x=cos(a*t)+b; y=abs(x)+c;,n=3; b=linspace(1,1.4,n); for k=1:3 u,v=comxy(0:pi/4:pi,sqrt(1.8/(1+k)3),b(k),1/0.85) en

2、d,调用程序,3,5,functionx,y=comxy(t,a,b,c) %x=sin(at)+b x=cos(a*t)+b; y=abs(x)+c;,clear all n=3; b=linspace(1,1.4,n); t=0:pi/4:pi; p=zeros(n,length(t); q=zeros(n,length(t); for k=1:3 p(k,:),q(k,:)=comxy(t,sqrt(1.8/(1+k)3),b(k),1/.85) end,6,5.2.2 inline,fox=inline(x.2.*cos(a*x)-b,x,a,b) b=fox(pi/3 pi/3.5,

3、4,1),5.2.3 子函数,7,8,5.3 用户自定义函数、函数句柄和feval,函数句柄是一种引用函数的方法。函数句柄由和函数名构成。 feval就是把已知的数据或符号带入到一个定义好的函数句柄中。,clc clear all syms t %定义符号变量 f=(x,y) x3+y2 k1=feval(f,2,t) % k2=f(2,t) k3=feval(f,1,2) % k4=f(1,2),9,5.4 以数组变量为输入参数的MATLAB函数,5.4.1 多项式拟合-polyfit/polyval,函数polyfit()采用最小二乘法对给定数据进行多项式拟合,其具体使用方法如下: c =

4、 polyfit(x,y,n),采用n次多项式p来拟合数据x和y。 y(x)=c1xn+ c2xn-1 + +cnx + cn+1 (5.1) 求得c后,可以用下列语句求出式5.1 y=polyval(c,xnew),10,11,function nd=data nd=50,0.13;70,0.092;90,0.072;110,0.057;130,0.046;150,0.037;170,0.028;190,0.020;210,0.015;230,0.010;250,0.007;,ncs=data; c=polyfit(ncs(:,1),ncs(:,2),4); r=input(enter r(

5、0r0.2); su=input(enter su(50su250); q=1/(1+polyval(c,su)/sqrt(r); disp(q= num2str(q),函数名以字母开头,p=2 2 3; a=1,0;0,2; m=polyval(p,a),例:求m,12,5.4.2 插值-interp1,一维插值就是对函数y=f(x)进行插值,一维插值的原理如下图所示。,13,函数interp1()实现一维插值,其具体使用方法如下: yi=interp1(x,y,xi),x,y是已知数据集且具有相同长度的向量; yi = interp1(y,xi),默认x为1:n,其中n为向量y的长度; y

6、i = interp1(x,y,xi,method),method用于指定插值的方法。,14,subplot(1,3,1); plot(x,y,ro,xi,yi_nearest,b-); title(最邻近插值); subplot(1,3,2); plot(x,y,ro,xi,yi_linear,b-); title(线性插值); subplot(1,3,3); plot(x,y,ro,xi,yi_spline,b-); title(三次样条插值);,x=0:1.2:10; y=sin(x); xi=0:0.1:10; yi_nearest=interp1(x,y,xi,nearest); y

7、i_linear=interp1(x,y,xi); yi_spline=interp1(x,y,xi,spline); figure; hold on;,15,非线性方程数值求解 函数fzero()求一元函数的零点,其具体使用方法如下: x = fzero(fun,x0,options,p1,p2,),在x0点附近寻找函数的零点; x = fzero(fun,x0,x1),在x0,x1区间内寻找函数的零点; x = fzero(fun,x0,options),用options指定寻找零点的优化器参数; x,fval = fzero(.),附加自变量为x时的函数值。,16,例:求f(x)=x-1

8、0 x+2=0在x0=0.5附近的根。 步骤如下: (1) 建立函数文件funx.m。 function fx=funx(x) fx=x-10.x+2; (2) 调用fzero函数求根。 z=fzero(funx,0.5) z = 0.3758 (2) zero=inline(x-10.x+2,x) z=fzero(zero,0.5) (3) z=fzero(inline(x-10.x+2,x) ,0.5),17,对于多值函数,应使用,x1,x2形式,并且准确划定范围,然而,如果f(x1), f(x2)符号相同,则会得到一个错误。 例:w=fzero(cos,0.6*pi,2*pi)/pi w

9、=fzero(cos,0,2*pi)/pi,18,非线性方程组的求解 对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为: X=fsolve(funnctionname,X0,option,p1,p2,) 其中X为返回的解,funnctionname是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中

10、off为不显示,iter表示每步都显示,final只显示最终结果。optimset(Display,off)将设定Display选项为off。,19,求下列非线性方程组在(0.5,0.5) 附近的数值解。 (1) 建立函数文件myfun.m。 function q=myfun(p) x=p(1); y=p(2); q(1)=x-0.6*sin(x)-0.3*cos(y); q(2)=y-0.6*cos(x)+0.3*sin(y); (2) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。 x=fsolve(myfun,0.5,0.5,optimset(Display,

11、off) x = 0.6354 0.3734,20,将求得的解代回原方程,可以检验结果是否正确,命令如下: q=myfun(x) q = 1.0e-009 * 0.2375 0.2957 可见得到了较高精度的结果。,21,(1)多项式的根 函数roots()求多项式的根,其具体使用方法如下: r = roots(c),返回多项式c的所有根r。 (2)由根创建多项式 函数poly()实现由根创建多项式,其具体使用方法如下: p = poly(r),输入r是多项式所有根,返回值为多项式的系数向量; p = poly(A),输入A是方阵,返回值为A的特征多项式的系数向量。,22,在MATLAB 7语

12、言里,多项式由一个行向量表示,设为p,它的系数按降序排列,使用roots函数可以求出该多项式的根。其使用格式为roots(p)。 p=1 0 3 12 -7 %f(x)=x4+3x2+12x-7 p = 1 0 3 12 -7 roots(p) ans = 0.7876 + 2.4351i 0.7876 - 2.4351i -2.0872 0.5121 ,23,如果已知某个多项式的根,那么,使用poly函数,可以很轻松地产生其对应的多项式。 r=roots(1,-10,35,-50,24) c=poly(r) 使用conv函数对多项式进行乘法运算。 格式为c=conv(a,b),其中a和b为两

13、个多项式的系数向量,c为相乘所生成的多项式的系数向量。 a=1 2 3 4; b=5 6 7 8; c=conv(a,b),24,8.1.2 数值积分的实现方法 1变步长辛普生法 基于变步长辛普生法,MATLAB给出了quad函数来求定积分。该函数的调用格式为: I,n=quad(fname,a,b,tol,trace) 其中fname是被积函数名。a和b分别是定积分的下限和上限。tol用来控制积分精度,缺省时取tol=0.001。trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。返回参数I即定积分值,n为被积函数的调用次数。,25,求定积分。 (1

14、) 建立被积函数文件fesin.m。 function f=fesin(x) f=exp(-0.5*x).*sin(x+pi/6); (2) 调用数值积分函数quad求定积分。 S,n=quad(fesin,0,3*pi) %n可省略 S = 0.9008 n = 77,26,二重定积分的数值求解 使用MATLAB提供的dblquad函数可以求二重定积分的数值解。该函数的调用格式为: I=dblquad(f,a,b,c,d,tol,trace) 该函数求f(x,y)在a,bc,d区域上的二重定积分。参数tol,trace的用法与函数quad完全相同。,27,计算二重定积分 (1) 建立一个函数

15、文件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,28,常微分方程(Ordinary differential equations, ODE),初值问题-给出初始值 边值问题-给出边界条件,与初值常微分方程解算有关的指令 ode23 ode45 ode113 ode23t ode15s ode23s ode23tb,29,常用调用格式

16、:t,y=ode45(odefun,tspan,y0) 参数说明: odefun 表示f(t,y)的函数句柄或inline函数,t是标量,y是标量或向量; tspan 如果是二维向量t0,tf,表示自变量初值t0和tf;如果是高维向量t0,t1,tn,则表示输出结点列向量; y0 表示初值向量y0; t 表示结点列向量(t0,t1,tn)T; y 表示数值解矩阵,每一列对应y的一个分量; 完整调用格式: t,y=ode45(odefun,tspan,y0,options,p1,p2,) options 为计算参数设置(如精度要求等),默认表示; p1,p2, 附加传递参数,odefun表示为f(t,y,p1,p2,),30,一.解ODE的基本机理:,2. 把高阶方程转换成一阶微分方程组,1. 列出微分方程,初始条件,令,(5.2),(5.3),(5.4),31,例:著名的Van der Pol方程,令,降为一阶,初始条件,32,3. 根据式

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号