admin 管理员组

文章数量: 1086019


2024年3月8日发(作者:制作网页时一般不选用的图像文件格式是)

(完整版)Matlab学习系列14.匿名函数

14。 匿名函数

Matlab7。0以上版本开始引入匿名函数,它可以实现内联函数所有功能,而且代码更简捷高效。

匿名函数的主要功能:

(1)可以代替“将函数编写为单独的m—文件”;

(2)可以实现符号函数的赋值运算;

(3)很方便地对含参变量函数进行操作.

(一)基本语法

f=@(参数1, 参数2, …) 函数表达式

其中,f为函数句柄,即调用匿名函数时使用的名字。

例如,f=@(x, y) x^2+y^2;

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 101

二重匿名函数:例如,

f=@(a, b) @(x) a*x+b;

(完整版)Matlab学习系列14.匿名函数

其中,“a, b”是外层变量,“x”是内层变量。

这样理解:每个“@”符号后面括号里的变量的作用域一直到表达式的结尾。例如对于“a=2, b=3", f(2, 3)是以x为变量的匿名函数:

(f(2, 3))(x)=2*x+3

类似的可以定义多重匿名函数。

(二)应用实例

一、符号函数的赋值运算

例1 求下面函数的三阶导数在x=0.5的值,并绘制其在[0, 1]上的图像:

f(x)(xtanx)sinx

分析:先用符号运算得到三阶导数的解析表达式,再转化为匿名函数,再求值和绘图.

代码:

syms x

f=(x+tan(x))^(sin(x));

c=diff(f,3);

f3=eval(['@(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')

(完整版)Matlab学习系列14.匿名函数

运行结果:

ans = 4.3158

20000y=[x+tan(x)]^(sin(x))三阶导数图像-2000-4000y-6000-8000-1.20.4x0.60.81

二、求解方程与参数方程

Matlab中求解连续函数f(x)=0的根的命令是:

fzero(f, x0)

其中,x0为寻找根的初始值。

例2 求下面方程的根:

exx2xx100

代码:

f=@(x) exp(x) + x^2 + x^(sqrt(x))—100;

format long % 设置更高的精度

x0=fzero(f,3)

f(x0) % 验证根

运行结果:

(完整版)Matlab学习系列14.匿名函数

x0 = 4。6139

ans = 2。84217e-014

例3 若例2中的方程带有参数a,

exxaxx100

要求针对a在[0,2]上的不同取值求解方程,并绘制方程的解x与a的关系的图像。

代码:

f=@(a) @(x) exp(x)+x^a+x^(sqrt(x))-100;

% 相当于(f(a))(x)=exp(x)+x^a+x^(sqrt(x))—100

format long

fzero(f(1),4) % a=1时,求解方程的根x,初始值为4

A=0:0.01:2;

x=@(a) fzero(f(a),4); % 带着参数a求解方程的根x,得到x=x(a)

X=@(A) arrayfun(@(a) x(a),A);

% x(a)只能接受标量a,处理成能接受向量A

Y=X(A);

plot(A,Y,’*—’)

xlabel(’$a$','interpreter',’latex’,'fontsize’,15)

ylabel(’$x$','interpreter','latex’,’fontsize’,15)

title(’$mathrm{e}^{x}+x^{sqrt{x}}+x^a—100$',’interpreter','latex’,'fontsize',15)

% 用latex格式输入要显示的公式

运行结果:

(完整版)Matlab学习系列14.匿名函数

ans = 4.3397

4.44.354.34.254.24.1500.511.52

三、“显式”表示隐函数

隐函数一般无法给出显式表达式,但借助匿名函数可以实现“已知隐函数表达式,对于给定的自变量x,可以通过数值方法求出因变量y”。

例4 “显式”表示下列隐函数:

(eyx)x2y0

1yy其“显式表示"为:

y=@(x) fzero(@(y) (exp(y)+x^y)^(1/y)-x^2*y,1);

相当于求解满足“exp(y)+x^y)^(1/y)-x^2*y=0”的y=y(x), 其中1是初始值.

代码:

y=@(x) fzero(@(y) (exp(y)+x^y)^(1/y)—x^2*y,1);

% 求解满足隐函数方程的y=y(x),

由此可以计算x=某值时的y的值

(完整版)Matlab学习系列14.匿名函数

format long

y1=y(1)

y2=y(2)

y3=y(3)

Y=@(X) arrayfun(@(x) y(x),X);

% 把y=y(x)处理成可以接受向量的形式

Y(1:10)

运行结果:

y1 = 2.777942350124938

y2 = 1。133

y3 = 0。775941879211877

ans = 2.777942350124938 1。133 0.775941879211877

0.628359329251039 0.542541817671730 0。48559 0。44462 0.4235 0。388897398866600 0。368874717117660

例5 绘制下面隐函数的图像:

zz

2222zsin(zx0.5)2xyexpx0.5exp(yz))y3105分析:借助匿名函数写出z=z(x, y)的“显式”表示,再绘图。

代码:

z=@(x,y) fzero(@(z) z—sin((z*x-0。5)^2+2*x*y^2-z/10)*。。。

exp(-((x-0。5-exp(—y+z))^2+y^2-z/5+3)),rand);

(完整版)Matlab学习系列14.匿名函数

[X,Y]=meshgrid(-1:0.1:7,-2:0。1:2);

Z=arrayfun(@(x,y) z(x,y),X,Y);

surf(X,Y,Z)

xlabel(’fontsize{15} fontname{times new roman} x', 'color’, ’b’)

ylabel(’fontsize{15}fontname{times new roman}y’, ’color', ’b')

zlabel('fontsize{15}fontname{times new roman}z’, ’color', ’b')

title(’fontsize{15}fontname{隶书}z(x,y)的函数图像', ’color’, ’r')

运行结果:

z(x,y)的函数图像0.040.020-0.02-0.04210-12468zy-2-20x

四、应用到优化问题表示目标函数

例6 求下面函数的最小值:

22

f(x)3x12x1x2x2代码:

f=@(x) 3*x(1)^2+2*x(1)*x(2)+x(2)^2;

x0=[1,1]; % 开始寻找最优解的初始值

(完整版)Matlab学习系列14.匿名函数

[x,fval]=fminunc(f,x0)

运行结果:

x = 1.0e-006 * 0.2541 —0.2029

fval = 1.3173e—013

五、已知被积函数、积分值,反求积分区域

例7 要使f(x)=(sinx)/x的积分值为0。99π, 求其关于0对称的积分区域。

分析:由于被积函数是偶函数、积分区域对称,故只需计算x>0范围的积分区域,即求使0.99/2f(x)dx0的u.

0u22代码:

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数组存储下面函数:

f1(x)x2sinx, f2(x)x35, f3(x)sin(1/x)

求各个函数在x=2处的函数值。

代码:

fun=cell(3,1);

fun{1}=@(x) x^2+sin(x);

fun{2}=@(x) x^3-5;

fun{3}=@(x) sin(1/sqrt(x));

(完整版)Matlab学习系列14.匿名函数

val=cellfun(@(x) x(2),fun)

运行结果:

val = 4。9093

3.0000

0.6496

参考文献

[1] 吴鹏。 MATLAB高效编程技巧与应用:大学出版社,2010。

25个案例分析(第四章)。 北京航空航天


本文标签: 函数 匿名 学习 方程 表达式