求y=x+(x^2)/(18+6x-(x^2)-(x^3))的反函数,相当于把上述方程中y当成已知量来求x,那么把方程展开,得到分子是一个关于x的4次多项式:
>> syms x y
>> collect(numden(y-x+(x^2)/(18+6x-(x^2)-(x^3))),x)
ans =
-x^4+(y-1)x^3+(y+5)x^2+(-6y+18)x-18y
simple(solve(numden(y-x+(x^2)/(18+6x-(x^2)-(x^3))),x))
syms T K m p U R n0 f n;
T=(KmpU^2R((n0-n)/n0))/(2pif(R^2+((n0-n)/n0)^2));
finverse(T,n)
ans =
1/4/n/pi/f(-KmpU^2R+4npif+(K^2m^2p^2U^4R^2-16n^2pi^2f^2R^2)^(1/2))n0
%说明一下,上式相当于n=1/4/T/pi/f(-KmpU^2R+4Tpif+(K^2m^2p^2U^4R^2-16T^2pi^2f^2R^2)^(1/2))n0
如果知道函数的解析表达式,可以考虑试一试finverse,在一些简单的情况下,可能求出反函数的表达式。例如,
syms x,finverse(1/tan(x))
得到
atan(1/x)
如果使用上面的finverse求反函数失败,可以用数值方法来求反函数的值。例如,对于函数
y=x^3+sin(x)
使用finverse无法求出反函数的解析表达式,如果现在想知道y=100对应的x值,可以这样做:
y=inline('x^3+sin(x)-100');
x=fsolve(y,0,optimset('fsolve'))
求出
x=46570
如果没有函数表达式而只有x-y数据,可以使用插值的方法,例如
% 生成测试数据
x=-1:1:1;
y=x^3+sin(x);
% 插值求出y=-05和05对应的x值并绘图
y0=[-05 05];x0=interp1(y,x,y0);
plot(x,y,'-',x0,y0,'ro')
但这里需要注意反函数是否为单值函数,如果不是,应分段处理。
首先如果是一一映射,那么数学上应该相对容易算出函数的反函数来,然后把反函数表达式写入matlab中了。这应该是最简单的方法了 。
当然,也有可能是函数形式过于复杂,导致难以直接写出反函数来。 但既然你自己都算不出来,那么matlab更加不可能算出反函数来啊,它内置的函数也是有限的。
所以,如果一定要用matlab从f(x)直接求的话,估计只能你自己写个数值算法了。。比如牛顿法之类的。
补充:楼下正解,我忘了solve函数了。 不过solve解出来是符号解,还要转换成数值解。
举个例子:
m=solve('3(x+x^3)=y');
M=m(1);
for i=0:10;
y=1+01i;
x=eval(M)
end
这里得到的x就是反函数值了。 之所以加个M=m(1)是因为可能存在在实数范围内一一对应,但在复数范围内是多解的情况,所以只取第一个(一般第一个貌似是实数解,如果有的话),当然这只是一种粗浅的处理方式,具体情况楼主可以另加探索,仅作一个参考了。。
这种超越方程用solve( )函数一般不能解,因此需要用数值解法
具体解法如下:
先用ezplot做图,根据图像找出解的大概位置,再用fzero( )函数求精确解
源码如下:
ezplot('36356945((x-6)sqrt(x(12 - x))+36asin(x/6 - 1)+05pi36)'),
hold on
可以看出当y=312和362时,解x大概在1和2之间,这样就可以用fzero求解:
a1=fzero('36356945((x-6)sqrt(x(12 - x))+36asin(x/6 - 1)+05pi36)-312',2),
a2=fzero('36356945((x-6)sqrt(x(12 - x))+36asin(x/6 - 1)+05pi36)-362',2)
运行结果:
a1 =
15528
a2 =
17198
>>
MATLAB里面的函数有误差函数erf的反函数是erfinv。
>> y=erf(025)
y =
02763
>> erfinv(y)
ans =
02500
就是说_Z^2+_Z^3+3+_Z^4-x的根的意思,你可以把_Z想像成x,即x^2+x^3+3+x^4-x的根其实是根本无法解,只好用这种形式来表式一种结果,是Maple中的叫法
我理解是求反函数,就按反函数答了
默认自变量是x ,若反函数唯一,则用finverse()即可答出,若有多个自变量,反函数不唯一,则用
finverse(f,v)给出,其中v是保存原来自变量的向量,并给出警告。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)