MATLAB 代码逐行分析:曲线拟合示例
MATLAB 代码逐行分析:曲线拟合示例
本文将对两个 MATLAB 代码示例进行逐行分析,并解释代码的功能。这些代码展示了如何使用 polyfit 和 polyval 函数进行曲线拟合,并通过图形展示拟合结果。
第1题:
clear;
clc;
clf;
x = -1:0.01:1;
xf = -1:0.2:1;
y = 1./(1+25*x.^2);
yf = 1./(1+25*xf.^2);
y1 = polyfit(xf,yf,3);
Y =polyval(y1,x);
y2 =polyval(y1,xf);
plot(x,y,x,Y,'m', xf,yf,'or',xf,y2,'*b');% 输出原函数曲线以及拟合多项式曲线.
f = poly2str(y1,'x')% 将三次多项式拟合后得到的多项式的系数向量表示成对应的多项式的习惯表达式.
title('Curve Fitting with d=3','FontName','New Times Roman','FontSize',12);
xlabel('x-axis','FontName','New Times Roman','FontSize',12);
ylabel('y-axis','FontName','New Times Roman','FontSize',12);
legend('Given curve','Fitting curve')
分析:
clear;: 清空工作空间变量。clc;: 清空命令窗口。clf;: 清空图形窗口。x = -1:0.01:1;: 定义变量x为从 -1 到 1,步长为 0.01 的等差数列。xf = -1:0.2:1;: 定义变量xf为从 -1 到 1,步长为 0.2 的等差数列。y = 1./(1+25*x.^2);: 定义变量y为函数 1/(1+25*x^2) 在x上的取值。yf = 1./(1+25*xf.^2);: 定义变量yf为函数 1/(1+25*xf^2) 在xf上的取值。y1 = polyfit(xf,yf,3);: 使用polyfit函数对xf和yf进行三次多项式拟合,得到系数向量y1。Y =polyval(y1,x);: 使用polyval函数根据y1和x求出拟合后的函数值Y。y2 =polyval(y1,xf);: 使用polyval函数根据y1和xf求出拟合后的y2。plot(x,y,x,Y,'m', xf,yf,'or',xf,y2,'*b');: 绘制原函数曲线和拟合多项式曲线,其中原函数曲线为黑色圆点,拟合多项式曲线为紫色线和蓝色星号。f = poly2str(y1,'x'): 使用poly2str函数将y1表示成对应的多项式的习惯表达式。title('Curve Fitting with d=3','FontName','New Times Roman','FontSize',12);: 设定图形标题。xlabel('x-axis','FontName','New Times Roman','FontSize',12);: 设定 x 轴标签。ylabel('y-axis','FontName','New Times Roman','FontSize',12);: 设定 y 轴标签。legend('Given curve','Fitting curve'): 添加图例。
第2题:
clear;
clf;
clc;
x=[0 0.1 0.2 0.3 0.5 0.8 1];
y=[1 0.41 0.5 0.61 0.91 2.02 2.46];
p1=polyfit(x,y,3);
p2=polyfit(x,y,4);
X = 0:0.01:1;
y1=polyval(p1,X);
y2=polyval(p2,X);
poly2str(p1,'x')
poly2str(p2,'x')
plot(x,y,'ko',X,y1,'b-',X,y2,'r-')
hold on
p3=polyfit(x,y,2);%观察图形与抛物线接近,故采用2次曲线拟合
y3=polyval(p3,X);
poly2str(p3,'x')
plot(X,y3,'m-')
title('Curve Fitting with different degree','FontName','New Times Roman','FontSize',12);
xlabel('x-axis','FontName','New Times Roman','FontSize',12);
ylabel('y-axis','FontName','New Times Roman','FontSize',12);
legend('Fitted pts', 'd=3','d=4','d=2')
hold off
分析:
clear;: 清空工作空间变量。clf;: 清空图形窗口。clc;: 清空命令窗口。x=[0 0.1 0.2 0.3 0.5 0.8 1];: 定义变量x为一组数据点。y=[1 0.41 0.5 0.61 0.91 2.02 2.46];: 定义变量y为与x对应的另一组数据点。p1=polyfit(x,y,3);: 使用polyfit函数对x和y进行三次多项式拟合,得到系数向量p1。p2=polyfit(x,y,4);: 使用polyfit函数对x和y进行四次多项式拟合,得到系数向量p2。X = 0:0.01:1;: 定义变量X为从 0 到 1,步长为 0.01 的等差数列。y1=polyval(p1,X);: 使用polyval函数根据p1和X求出三次多项式拟合后的函数值y1。y2=polyval(p2,X);: 使用polyval函数根据p2和X求出四次多项式拟合后的函数值y2。poly2str(p1,'x'): 使用poly2str函数将p1表示成对应的多项式的习惯表达式。poly2str(p2,'x'): 使用poly2str函数将p2表示成对应的多项式的习惯表达式。plot(x,y,'ko',X,y1,'b-',X,y2,'r-'): 绘制拟合点为黑色圆点,三次多项式拟合曲线为蓝色实线,四次多项式拟合曲线为红色实线。hold on: 保持当前图形,以便在同一图形上绘制更多内容。p3=polyfit(x,y,2);%观察图形与抛物线接近,故采用2次曲线拟合: 使用polyfit函数对x和y进行二次多项式拟合,得到系数向量p3。y3=polyval(p3,X);: 使用polyval函数根据p3和X求出二次多项式拟合后的函数值y3。poly2str(p3,'x'): 使用poly2str函数将p3表示成对应的多项式的习惯表达式。plot(X,y3,'m-'): 绘制二次多项式拟合曲线为紫色实线。title('Curve Fitting with different degree','FontName','New Times Roman','FontSize',12);: 设定图形标题。xlabel('x-axis','FontName','New Times Roman','FontSize',12);: 设定 x 轴标签。ylabel('y-axis','FontName','New Times Roman','FontSize',12);: 设定 y 轴标签。legend('Fitted pts', 'd=3','d=4','d=2'): 添加图例。hold off: 关闭保持图形状态,以便后续绘制新的图形时不会叠加到当前图形上。
总结:
这两个代码示例展示了使用 polyfit 和 polyval 函数进行曲线拟合的基本步骤,并通过图形直观地展示了拟合结果。通过调整拟合多项式的阶数,可以获得不同的拟合效果,从而更好地描述数据点的趋势。
原文地址: https://www.cveoy.top/t/topic/n1KG 著作权归作者所有。请勿转载和采集!