欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matlab 多项式拟合

程序员文章站 2022-04-01 09:55:02
...

(代码: 2\duoxiangsinihe.m)

多项式拟合sin函数,效果比较好:

x0=-pi:0.1:pi;
y0=sin(x0);     %要拟合的函数。原函数

p0=polyfit(x0,y0,4);  %最高拟合四阶的多项式 
y1=polyval(p0,x0);

plot(x0,y0,x0,y1,'r');
poly2sym(p0)  %拟合的多项式的结果
多项式拟合该函数,效果不好:
x1=-1:0.2:1;          %拟合的点不适合太多,否则很卡
y1=1./(1+25*x1.^2);   %要拟合的函数。原函数。多项式不能很好的拟合该曲线

x0=-1:0.01:1;         %绘制原图的时候可以多选些点
y0=1./(1+25*x0.^2);

p3=polyfit(x1,y1,3);    %最高拟合3阶多项式
p5=polyfit(x1,y1,5);    %最高拟合5阶多项式
p10=polyfit(x1,y1,10);  %拟合10阶多项式。多项式不能很好的拟合该曲线

y3=polyval(p3,x0);
y5=polyval(p5,x0);
y10=polyval(p10,x0);

plot(x0,y0,x0,y3,'r',x0,y5,'m',x0,y10,'k');
legend('原图','3阶','5阶','10阶');
曲线拟合上面的函数,效果会好些:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 曲线拟合
x1=-1:0.2:1;           %拟合的点不适合太多,否则很卡
y1=1./(1+25*x1.^2);    %要拟合的原函数

options=fitoptions('Method','NonlinearLeastSquares');  %拟合方法,非线性最小二乘法
options.Lower=[-Inf -Inf -Inf];  %最小值是负无穷
options.Upper=[Inf Inf Inf];     %最大值是正无穷

type=fittype('a/(b+c*x^n)','problem','n','options',options);  %n是要设置的参数
[cfun gof]=fit(x1',y1',type,'problem',2);   % x1,y1 必须使用列向量  gof表示拟合的好坏程度

h1=plot(x0,y0,'k');   %绘制原曲线
set(h1,'LineWidth',5);   %设置曲线宽度
hold on;      %绘制第二个曲线时,第一个图不消失
ynp=feval(cfun,x0);   %绘制拟合曲线
plot(x0,ynp,'r');



相关标签: matlab