用matlab求一个反函数

问题描述:

用matlab求一个反函数
原函数为y=x+(x^2)/(18+6*x-(x^2)-(x^3))
用matlab求反函数
我求出的结果是
f=sym(x+(x^2)/(18+6*x-(x^2)-(x^3)));
>> finverse(f)
ans =
RootOf(z^4 - z^3*(x - 1) - z^2*(x + 7) + z*(6*x - 18) + 18*x,z)
里面那个z是什么情况?
1个回答 分类:数学 2014-10-28

问题解答:

我来补答
z就相当于你原来函数里面的x,而x相当于你原来函数的y.
 
求y=x+(x^2)/(18+6*x-(x^2)-(x^3))的反函数,相当于把上述方程中y当成已知量来求x,那么把方程展开,得到分子是一个关于x的4次多项式:
    >> syms x y
    >> collect(numden(y-x+(x^2)/(18+6*x-(x^2)-(x^3))),x)
    ans =
    -x^4+(y-1)*x^3+(y+5)*x^2+(-6*y+18)*x-18*y
4次代数方程尽管是可以求解的,但根的表达式极其繁琐,所以用RootOf的方式来表示.你可以对照一下,上面求出来的多项式是不是和你贴出来的结果刚好满足上面说的关系?
 
如果想求出反函数的确切表达式,可以用下面的命令:
    simple(solve(numden(y-x+(x^2)/(18+6*x-(x^2)-(x^3))),x))
不妨自己看一下究竟表达式有多繁琐吧.
再问: 那这两个式子为什么看着是差个负号的关系?我这里没有学好……所以想多问问~还有个问题想问一下你,如果要画出所求的的反函数图象要怎么写哦?我画出来的是条直线,我觉得不太对……
再答: 1、关于差个负号的问题,你可以这样想,f(x)=0 与 -f(x)=0 的根是不是相同的?2、关于反函数图像,先看一下原函数:    ezplot('x+(x^2)/(18+6*x-(x^2)-(x^3))')
    hold on
    plot([3 3],ylim,'--m') 很容易证明,x=3是原函数的一个间断点,而对于每个y而言,都(至少)会有两个x与之对应。这样,求反函数就需要明确:求哪个范围的反函数?对于上面所说直接用solve求出来的反函数,可以验证,对任意y,所求出来的4个根,其中总有两个为复数,而另外两个画出来,可以肯定不会是直线。至于你画出来是直线,可能是自变量范围的问题,因为上述函数图像在趋于无穷远时都有渐近线(而且,其实并不需要很大范围就会基本接近直线)。 前面已经说过,用solve求出来的结果并不实用,真正实用的,应该是在一定范围内把曲线用简单函数进行拟合,而具体用什么函数怎样拟合,那就要看你希望求反函数的范围来定了。 这个回答已被选为推荐答案,我不确定你是否还能继续追问,至少我知道,一旦提交这次补充回答之后,就不能够再修改了。如果还有问题并且能继续追问,可以继续追问,否则请另外提问之后通过私信告诉我吧。
 
 
展开全文阅读
剩余:2000