Matlab笔记——匿名函数014_第1页
Matlab笔记——匿名函数014_第2页
Matlab笔记——匿名函数014_第3页
Matlab笔记——匿名函数014_第4页
Matlab笔记——匿名函数014_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、14. 匿名函数Matlab7.0以上版本开始引入匿名函数,它可以实现内联函数所有功能,而且代码更简捷高效。匿名函数的主要功能: (1)可以代替“将函数编写为单独的m-文件”;(2)可以实现符号函数的赋值运算;(3)很方便地对含参变量函数进行操作。(一)基本语法f=(参数1, 参数2, ) 函数表达式其中,f为函数句柄,即调用匿名函数时使用的名字。例如,f=(x,y)x2+y2;f(1, 2)输出结果:ans=5输入参数也可以是向量,例如,f=(x,y)x.2+y.2;a=1:1:10; b=10:-1:1;f(a,b)输出结果:ans=101 85 73 65 61 61 65 73 85

2、101二重匿名函数:例如,f=(a, b) (x) a*x+b;其中,“a, b”是外层变量,“x”是内层变量。这样理解:每个“”符号后面括号里的变量的作用域一直到表达式的结尾。例如对于“a=2, b=3”, f(2, 3)是以x为变量的匿名函数:(f(2, 3)(x)=2*x+3类似的可以定义多重匿名函数。(二)应用实例一、符号函数的赋值运算例1求下面函数的三阶导数在x=0.5的值,并绘制其在0, 1上的图像:分析:先用符号运算得到三阶导数的解析表达式,再转化为匿名函数,再求值和绘图。代码:syms xf=(x+tan(x)(sin(x);c=diff(f,3);f3=eval('(

3、x)' vectorize(c);% vectorize函数的功能是使内联函数适合数组运算的法则f3(0.5)x=linspace(0,1,100);plot(x,f3(x),'linewidth',2)title('y=x+tan(x)(sin(x)三阶导数图像')xlabel('x')ylabel('y')运行结果:ans = 4.3158二、求解方程与参数方程Matlab中求解连续函数f(x)=0的根的命令是:fzero(f, x0)其中,x0为寻找根的初始值。例2求下面方程的根:代码:f=(x) exp(x) +

4、x2 + x(sqrt(x)-100;format long % 设置更高的精度x0=fzero(f,3)f(x0) % 验证根运行结果:x0 = 4.163549956946139ans = 2.842170943040401e-014例3若例2中的方程带有参数a,要求针对a在0,2上的不同取值求解方程,并绘制方程的解x与a的关系的图像。代码:f=(a) (x) exp(x)+xa+x(sqrt(x)-100; % 相当于(f(a)(x)=exp(x)+xa+x(sqrt(x)-100format longfzero(f(1),4) % a=1时,求解方程的根x,初始值为4A=0:0.01:

5、2;x=(a) fzero(f(a),4); % 带着参数a求解方程的根x,得到x=x(a)X=(A) arrayfun(a) x(a),A); % x(a)只能接受标量a,处理成能接受向量AY=X(A);plot(A,Y,'*-')xlabel('$a$','interpreter','latex','fontsize',15)ylabel('$x$','interpreter','latex','fontsize',15)title('$m

6、athrmex+xsqrtx+xa-100$','interpreter','latex','fontsize',15)% 用latex格式输入要显示的公式运行结果:ans = 4.315274301739397三、“显式”表示隐函数隐函数一般无法给出显式表达式,但借助匿名函数可以实现“已知隐函数表达式,对于给定的自变量x,可以通过数值方法求出因变量y”。例4 “显式”表示下列隐函数:其“显式表示”为:y=(x) fzero(y) (exp(y)+xy)(1/y)-x2*y,1);相当于求解满足“exp(y)+xy)(1/y)-x2*y=

7、0”的y=y(x), 其中1是初始值。代码:y=(x) fzero(y) (exp(y)+xy)(1/y)-x2*y,1);% 求解满足隐函数方程的y=y(x),由此可以计算x=某值时的y的值format longy1=y(1)y2=y(2)y3=y(3)Y=(X) arrayfun(x) y(x),X);% 把y=y(x)处理成可以接受向量的形式Y(1:10)运行结果:y1 = 2.777942350124938y2 = 1.105452026515033y3 = 0.775941879211877ans = 2.777942350124938 1.105452026515033 0.775

8、941879211877 0.628359329251039 0.5425418176717300.485590680913226 0.444620168925079 0.413493851208235 0.388897398866600 0.368874717117660例5绘制下面隐函数的图像:分析:借助匿名函数写出z=z(x, y)的“显式”表示,再绘图。代码:z=(x,y) fzero(z) z-sin(z*x-0.5)2+2*x*y2-z/10)*.exp(-(x-0.5-exp(-y+z)2+y2-z/5+3),rand);X,Y=meshgrid(-1:0.1:7,-2:0.1:

9、2);Z=arrayfun(x,y) z(x,y),X,Y);surf(X,Y,Z)xlabel('fontsize15fontnametimesnew romanx','color','b')ylabel('fontsize15fontnametimes new romany','color','b')zlabel('fontsize15fontnametimes new romanz','color','b')title('fontsize

10、15fontname隶书z(x,y)的函数图像','color','r')运行结果:四、应用到优化问题表示目标函数例6求下面函数的最小值:代码:f=(x) 3*x(1)2+2*x(1)*x(2)+x(2)2;x0=1,1;% 开始寻找最优解的初始值x,fval=fminunc(f,x0)运行结果:x = 1.0e-006 * 0.2541 -0.2029fval = 1.3173e-013五、已知被积函数、积分值,反求积分区域例7 要使f(x)=(sin2x)/x2的积分值为0.99, 求其关于0对称的积分区域。分析:由于被积函数是偶函数、积分区域对称,故只需计算x>0范围的积分区域,即求使的u. 代码:u0=fzero(u)0.99*pi/2-quadl(x)sin(x).2./(x.2),0,u),1)运行结果:u0 = 32.3138故积分区域为-32.3138, 32.3138. 六、和cell数组合用,批量执行函数例8用cell数组存储下面函数:求各个函数在x=2处的函数值。代码:fun=cell(3,1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论