- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章Matlab程序设计概要
* 一、匿名函数应用实例 【例4.5-1序】对于 ,求下列方程相应的 值,并画出 和相应的 的图像。 求解代码如下: f = @(a) @(x) exp(x)+x^a+x^(sqrt(x))-100;%构造函数句柄 format long aa = 0:0.01:2; plot(aa,arrayfun(@(a) fzero(f(a),4),aa),*-)%利用arrayfun求解不同的a对应的x xlabel($a$,interpreter,latex,fontsize,15)%标注x、y坐标轴,按照latex语法 ylabel($x$,interpreter,latex,fontsize,15) title($\mathrm{e}^{x} + x^{\sqrt{x}} + x^a - 100$,interpreter,latex,... fontsize,15) * 【例4.5-1序】得到的图形 * 一、匿名函数应用实例 2. 匿名函数在显式表示隐函数方面的应用 隐函数一般无法在数学上显式的表达。这里说的显式表示指的是构造一个MATLAB函数来表达隐函数,具体思路是对于给定的隐函数的自变量x,通过数值方法求解出因变量y,这样就相当于显式表达隐函数。请看下面的例子 : 【例4.5-2】显式表示下列y关于x的隐函数: 利用匿名函数,我们可以在MATLAB中显式得写出y和x的关系式如下: y = @(x) fzero(@(y) (exp(y)+x^y)^(1/y)-x^2*y,1 ); * 一、匿名函数应用实例 【例4.5-3】显式表示下列z关于x,y的隐函数: z = @(x,y) fzero(@(z) z-sin((z*x-0.5)^2 + x*2*y^2-z/10)*... exp(-((x-0.5-exp(-y+z))^2 + y^2-z/5+3)),rand); z(1,2) ans = 7.369600885222808e-004 z(0,0.5) ans = 0.002807507334292 * 一、匿名函数应用实例 3. 匿名函数在求积分区域方面的应用 有的时候,我们需要根据已知的积分值和被积函数求对应的积分区域,当被积函数表达式不是很复杂的时候,用匿名函数比较适合。请看下例: 【例4.5-4】要使sin(x)^2./(x^2)这个式子的积分值为0.99*pi,求其关于0对称的积分区域。 u0 = fzero(@(u) 0.99*pi/2 - quadl(@(x) sin(x).^2./(x.^2),0,u), 1) u0 = 32.313810358217410 * 一、匿名函数应用实例 4. 匿名函数和符号计算的结合 【例4.5-5】求下面函数三阶导数在[0,1]区间的图像: 本例如果用手算的话,比较繁琐。如果用符号运算得到三阶导数的解析表达式,然后再转化成匿名函数,则比较方便。本例展示了符号计算和数值计算结算结合的一种途径。代码如下: syms x f = (x+tan(x))^(sin(x)); c = diff(f,3); f3 = eval([@(x) vectorize(c)]); x = linspace(0,1,100); plot(x,f3(x)) title((x+tan(x))\^(sin(x))三阶导数图像) * * 一、匿名函数应用实例 5. 匿名函数在优化中的应用 匿名函数在优化中的应用主要是以表示目标函数的形式出现的。 【例4.5-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.2029 fval = 1.3173e-013 * 二、子函数和嵌套函数应用实例 在求解积分上限中的应用 【例4.5-7】如下述积分表达式,如何已知 和 ,求得 ? * function sol = exampleIntLimit1(a,e,l) %用嵌套函数表示被积表达式 function f = fun1(beta) f = a.*(1-e.^2)./(1-e.^2.*sin(beta).^2).^(3/2); end %调用fzero求满足条件的beta0值 sol = fzero(@(beta0)fun2(beta0,l,@
文档评论(0)