匿名函数在显式表达隐函数方面的应用
隐函数一般无法在数学上显式表达。这里说的显式表达指的是构造一个MATLAB函数来表达隐函数,具体思路是对于给定的隐函数的自变量x,通过数值方法求解出因变量y,这样就相当于显式表达隐函数。
**例1**
利用匿名函数,可以在matlab中显式的写出y和x的关系如下:
y=@(x)fzero(@(y)(exp(y)+x^y)^(1/y)-x^2*y,1);
这样,对于任意的x,只需调用yx=y(x),就能得到对应的y值,如:
format long
y1=y(1)
y1 =
2.777942350124938
>>y2=y(2)
y2 =
1.105452026515033
>> y3=y(3)
y3 =
0.775941879211877
这时的y只能接受标量x输入,利用函数arrayfun,也可以令其接受向量输入:
>> format long
>> Y=@(x)arrayfun(@(xx)fzero(@(y)(exp(y)+xx^y)^(1/y)-xx^2*y,1),x);
>> Y(1:10)
ans =
1 至 2 列
2.777942350124938 1.105452026515033
3 至 4 列
0.775941879211877 0.628359329251039
5 至 6 列
0.542541817671730 0.485590680913226
7 至 8 列
0.444620168925079 0.413493851208235
9 至 10 列
0.388897398866600 0.368874717117660
其实arrayfun函数作用就是对y=@(x)fzero(@(y)(exp(y)+x^y)^(1/y)-x^2*y,1)
增加了一个循环的“外壳”,使得Y既可以接受标量x输入,还可以接受向量x的输入。
其中@(xx)fzero(@(y)(exp(y)+xx^y)^(1/y)-xx^2*y,1)
是arrayfun函数的第一个输入参数,定义了以循环变量“xx”为输入参数的匿名函数,其功能是针对每个xx,求对应的使
成立的y。xx的循环范围是Y的输入变量x,也就是上述arrayfun函数的第二个输入参数。
例2
借助匿名函数,可以写出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);
其中,fzero函数求解该隐函数的初值为随机值rand。利用上述匿名函数,可以画出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);
[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');
如图