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求符号函数数组或函数矩阵的导数实例教程
-
matlab中分号、冒号、逗号等常用标点符号的功能和用法总结
-
如何用matlab求解常微分方程?matlab解常微分方程之符号解法介绍
-
如何用matlab求解线性方程组的符号解?用matlab解符号方程组方法介绍
-
如何用matlab进行级数或数列的符号求和?matlab符号求和指令分享
-
matlab中如何应用regress()函数进行线性回归分析?
-
matlab如何实现曲线拟合? matlab做曲线拟合的教程
-
matlab打不开怎么办(matlab卡在启动界面)
-
【OpenCV】【python】车道线定位及拟合(np.ployfit,cv2.fillPoly)
-
数据算法(拟合函数未知数个数与用于拟合的序列点数的关系)