作业帮 > 综合 > 作业

为什么用MATLAB finverse函数求反函数出现了问题

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/10 23:47:41
为什么用MATLAB finverse函数求反函数出现了问题
按理说,反函数的反函数应该等于本身,但是我求了两次finverse却发现画出来的图和原函数的图不一样,请问什么问题

为什么用MATLAB finverse函数求反函数出现了问题
数值的精度低,会有误差的.用字母的就好了.
例如下面解同样的精度数值是不一样的.对于字母的函数finverse用两次
会一样;数值的会有累计误差.
p=[1 0 -2 -5]
r=roots(p)
p =
1 0 -2 -5
r =
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i
syms x;
A=solve('x^3-2*x-5')
vpa(A)
ans =
2.0945514815423265914823865405793
1.1359398890889281862454926290294*i - 1.0472757407711632957411932702897
- 1.1359398890889281862454926290294*i- 1.0472757407711632957411932702897
再问: 问题我这个差的有点太多了吧?
再答: 其实我的意思是解释你求两次反函数与原来会有差别,是由于数值解的精度造成的。
建议使用字母表示。
你给的函数是多值函数不存在返函数,因此会出错。如下,如果用你的函数,分段运行,结果和你的一样;但是如果是正切函数,就对着的。估计是反函数不唯一造成的,至于为什么反函数会变负数,而且再反没效果就不知道了。
syms x
%y=-(2.*x+x.^2-(x.^4+4.*x.^3+7.*x.^2+6.*x).^(1/2))./(x.^2+2.*x);
y=tan(x);
x1=0.05:0.05:1;
y1=subs(y,{x},{x1});
figure(1),plot(x1,y1,'r');

hold on;
yinverse=finverse(y);
x2=x1;
y2=subs(yinverse,{x},{x2});
plot(x2,y2,'g');

yinverseinverse=finverse(yinverse);
x3=x1;
y3=subs(yinverseinverse,{x},{x3});
plot(x3,y3,'b');