用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.
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 09:14:30
用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.
用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.
用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菜单)来对多种阶次的拟合结果进行比较.