用matlab求反函数

k=1000;
h=0.20;
l=0.125;
x=-0.15:0.001:0.15;
e=k.*h./(h.^2+(x+l).^2)-k.*h./(h.^2+(x-l).^2);
plot(x,e);
求e关于x的反函数,求成成幂级数也行-0.15<x<0.15.

求反函数,设变量为y,则展开之后为关于x的四次方程,可以求出解析解。

 

代码如下:

syms x
k=sym(1000);
h=sym(0.20);
l=sym(0.125);
e=k.*h./(h.^2+(x+l).^2)-k.*h./(h.^2+(x-l).^2);
syms y
x=solve(e-y,x)
color='rgbm';
for i=1:length(x)
    h=ezplot(x(i),[-3200 3200]);
    set(h,'color',color(i))
    hold on
end
axis([-3500 3500 -0.8 0.8])
title('')
lstr=arrayfun(@(i){sprintf('x(%i)',i)},1:4);
legend(lstr{:})

 

可以求出x关于y的表达式。上述代码绘制出来的图形:

由图可见,x(2)、x(3)是所需的反函数(按不同区间取不同的表达式)。由于x的表达式过于复杂,这里不列出。

 

上面说到求解析解的方法,得到的表达式过于复杂而不方便直接应用。更实用的方法是采用多项式拟合(也就是你所说的幂级数)。

多项式拟合的参考代码如下:

n = 7;

p = polyfit(e,x,n);
x1 = polyval(p,e);
plot(e,x,e,x1,'r--')
axis tight
legend('原始数据','拟合函数')

 

其中n为拟合多项式的阶次,可根据需要选择。p为拟合多项式的系数。取n=7时的效果如下图:

当然,也可以利用MATLAB绘图窗口中的Basic Fitting(位于Tools菜单)来对多种阶次的拟合结果进行比较。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-06
你是要解析解吗?
但是你这个函数显然不是单调的,按照定义不能找到其反函数啊
第2个回答  2014-01-06
后诶都航空哈萨克一样苦
相似回答