在matlab中已知散点图如何求解反函数

在matlab中已知散点图如何求解反函数,第1张

  求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是保存原来自变量的向量,并给出警告。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11676070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存