Matlab使用曲线拟合工具箱拟合多项式曲线

文章目录(展开/隐藏→)

展开
4.3
(3)

Matlab内置了一个曲线拟合工具箱,即Curve Fitting Toolbox。今天,我们来使用Curve Fitting Toolbox曲线拟合工具箱实现多项式的拟合,最高可以实现六次多项式拟合。可以理解为,将一组数据按照给定的多项式函数拟合,进而得出多项式的系数。

此示例说明如何使用Curve Fitting Toolbox™将最高六次的多项式拟合到某些人口普查数据。它还展示了如何拟合单项指数方程并将其与多项式模型进行比较。

Matlab使用曲线拟合工具箱拟合多项式曲线

大致的步骤如下:

  • 使用不同的库模型加载数据并创建拟合。
  • 通过比较图形拟合结果,以及通过比较包括拟合系数和拟合优度统计的数值拟合结果,搜索最佳拟合。

文中所引用的数据为Matlab内置数据,下面开始以实例来说明多项式拟合的过程。

加载和绘制数据

此示例的数据是文件census.mat

Matlab命令行窗口输入如下命令,导入数据,或者导入自己需要拟合的数据。

load census

工作区包含两个新变量:

  • cdate是一个列向量,包含 1790 年到 1990 年的 10 年增量。
  • pop是一个列向量,其中包含与cdate的年份相对应的美国人口数据。

输入如下命令,可以查看相对应的数据

whos cdate pop

得到如下输出:

  Name        Size            Bytes  Class     Attributes

  cdate      21x1               168  double              
  pop        21x1               168  double    

输入如下命令,将数据绘图:

plot(cdate,pop,'o')
Matlab使用曲线拟合工具箱拟合多项式曲线

创建并绘制二次曲线

使用该fit函数将多项式拟合到数据。使用 指定二次或二次多项式poly2。拟合的第一个输出是多项式,第二个输出gof包含拟合优度统计信息,您将在后面的步骤中进行检查。

[population2,gof] = fit(cdate,pop, 'poly2' );

要绘制拟合曲线,请使用plot函数,并在左上角添加图例,代码如下:

plot(population2,cdate,pop);
legend('Location','NorthWest');
Matlab使用曲线拟合工具箱拟合多项式曲线

创建并绘制多项式曲线

要拟合不同阶的多项式,请更改拟合类型,例如,对于三次或三次多项式,请使用poly3。输入cdate的规模相当大,因此可以通过居中和缩放数据来获得更好的结果。为此,请使用Normalize选项。

population3 = fit(cdate,pop, 'poly3' , 'Normalize' , 'on' ); 
population4 = fit(cdate,pop, 'poly4' , 'Normalize' , 'on' ); 
population5 = fit(cdate,pop, 'poly5' , 'Normalize' , 'on' ); 
population6 = fit(cdate,pop, 'poly6' , 'Normalize' , 'on' );

一个简单的人口增长模型告诉我们,指数方程应该很好地拟合这个人口普查数据。要拟合单项指数模型,请使用exp1拟合曲线。

populationExp = fit(cdate,pop, 'exp1' );

一次绘制所有拟合,并在图的左上角添加一个有意义的图例。

hold on
plot(population3,'b');
plot(population4,'g');
plot(population5,'m');
plot(population6,'b--');
plot(populationExp,'r--');
hold off
legend('cdate v pop','poly2','poly3','poly4','poly5','poly6','exp1', ...
    'Location','NorthWest');
Matlab使用曲线拟合工具箱拟合多项式曲线

绘制残差以评估拟合

要绘制残差,请在plot函数中指定residuals为绘图类型。

plot(population2,cdate,pop,'residuals');
Matlab使用曲线拟合工具箱拟合多项式曲线

多项式方程的拟合和残差都相似,因此很难选择最佳的。

如果残差显示出系统模式,则很明显表明模型对数据的拟合不佳。

plot(populationExp,cdate,pop,'residuals');
Matlab使用曲线拟合工具箱拟合多项式曲线

单项指数方程的拟合和残差表明它总体上拟合不佳。因此,这是一个糟糕的选择,您可以从候选者中移除指数拟合以获得最佳拟合。

检查超出数据范围的拟合

检查拟合到2050年的行为。拟合人口普查数据的目标是推断出最佳拟合以预测未来人口值。

默认情况下,拟合是在数据范围内绘制的。要在不同范围内绘制拟合,请在绘制拟合之前设置轴的 x 限制。例如,要查看从拟合推断的值,请将 x 上限设置为2050。

plot(cdate,pop,'o');
xlim([1900, 2050]);
hold on
plot(population6);
hold off
Matlab使用曲线拟合工具箱拟合多项式曲线

上图不难看出,六次多项式拟合超出数据范围,很明显拟合结果很糟糕,您可以拒绝这种拟合。

绘制预测区间

要绘制预测区间,请使用predobspredfun作为绘图类型。例如,要查看截至2050年的新观测值的五次多项式的预测范围:

plot(cdate,pop,'o');
xlim([1900,2050])
hold on
plot(population5,'predobs');
hold off
Matlab使用曲线拟合工具箱拟合多项式曲线

绘制截至2050年的三次多项式的预测区间:

plot(cdate,pop,'o');
xlim([1900,2050])
hold on
plot(population3,'predobs')
hold off
Matlab使用曲线拟合工具箱拟合多项式曲线

拟合优度检验

该结构gof显示拟合的拟合优度统计信息poly2。当您在前面的步骤中poly2使用函数创建拟合时,您指定了fit的输出参数。

gof

得到如下结果

gof = 

           sse: 159.0293
       rsquare: 0.9987
           dfe: 18
    adjrsquare: 0.9986
          rmse: 2.9724

检查误差平方和SSE和调整后的R平方统计数据,以帮助确定最佳拟合。SSE统计是拟合的最小二乘误差,接近零的值表示拟合更好。当向模型中添加额外系数时,调整后的R平方统计通常是拟合质量的最佳指标。

exp1的大SSE表示拟合较差,您已经通过检查拟合和残差确定了这一点。最低SSE值与poly6相关。然而,此拟合超出数据范围的行为使其成为外推的糟糕选择,因此您已经通过检查具有新轴限制的图来拒绝此拟合。

下一个最佳SSE值与五次多项式拟合poly5相关联,表明它可能是最佳拟合。然而,剩余多项式拟合的SSE和调整后的R平方值都非常接近。你应该选择哪一个?

比较系数和置信限以确定最佳拟合

通过检查其余拟合(五次多项式和二次多项式)的系数和置信界,解决最佳拟合问题。

通过显示模型、拟合系数和拟合系数的置信边界来检查population2population5

population2
population2 = 

     Linear model Poly2:
     population2(x) = p1*x^2 + p2*x + p3
     Coefficients (with 95% confidence bounds):
       p1 =    0.006541  (0.006124, 0.006958)
       p2 =      -23.51  (-25.09, -21.93)
       p3 =   2.113e+04  (1.964e+04, 2.262e+04)
population5
population5 = 

     Linear model Poly5:
     population5(x) = p1*x^5 + p2*x^4 + p3*x^3 + p4*x^2 + p5*x + p6
       where x is normalized by mean 1890 and std 62.05
     Coefficients (with 95% confidence bounds):
       p1 =      0.5877  (-2.305, 3.48)
       p2 =      0.7047  (-1.684, 3.094)
       p3 =     -0.9193  (-10.19, 8.356)
       p4 =       23.47  (17.42, 29.52)
       p5 =       74.97  (68.37, 81.57)
       p6 =       62.23  (59.51, 64.95)

您还可以使用confint获取置信区间:

ci = confint(population5)
ci =

   -2.3046   -1.6841  -10.1943   17.4213   68.3655   59.5102
    3.4801    3.0936    8.3558   29.5199   81.5696   64.9469

系数的置信边界决定了它们的精度。检查拟合方程(例如f(x)=p1x+p2x…),以查看每个系数的模型项。请注意,p2是指poly2中的p2*x项和poly5中的p2*x^4项。不要直接将归一化系数与非归一化系数进行比较。

五次多项式的p1p2p3系数的边界为零。这意味着您无法确定这些系数是否不同于零。如果高阶模型项的系数可能为零,则它们对拟合没有帮助,这表明该模型过度拟合人口普查数据。

对于每个归一化多项式方程,与常数项、线性项和二次项相关的拟合系数几乎相同。然而,随着多项式次数的增加,与高次项相关联的系数边界过零,这表明过拟合。

然而,对于二次拟合,p1p2p3的小置信限不超过零,这表明拟合系数是相当准确的。

因此,在检查了图形和数字拟合结果之后,您应该选择二次多项式population2作为推断人口普查数据的最佳拟合。

评估新查询点处的最佳拟合

现在您已经选择了最佳拟合,population2,用于外推此人口普查数据,请评估一些新查询点的拟合:

cdateFuture = (2000:10:2020).';
popFuture = population2(cdateFuture)
popFuture =

  274.6221
  301.8240
  330.3341

要计算未来人口预测的95%置信区间,请使用预测方法:

ci = predint(population2,cdateFuture,0.95,'observation')
ci =

  266.9185  282.3257
  293.5673  310.0807
  321.3979  339.2702

根据拟合和数据绘制具有置信区间的预测未来人口。

Matlab使用曲线拟合工具箱拟合多项式曲线

共计3人评分,平均4.3

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/program/matlab-curve-fitting-polynomial.html

(0)
上一篇 2022年08月29日 22:10
下一篇 2022年08月31日 20:49

相关推荐

  • Matlab双对数刻度绘图函数loglog

    文章目录(展开/隐藏→) 展开常见用法语法说明绘制一个线条绘制多个线条指定轴标签和刻度值将点绘制为不带线的标记添加图例仅指定 y 坐标指定目标坐标区绘图后更改线…

    2020年10月24日
    0123
  • Matlab使用fimplicit函数绘制隐函数

    文章目录(展开/隐藏→) 展开常见用法语法说明隐函数绘制绘图区间的指定绘图外观的修改绘图外观创建后修改样式 4.8 (10) 今天,带来Matlab中绘制隐函数图形的fimplic…

    2020年10月28日
    0302
  • Matlab水平三维条形图创建函数bar3h

    文章目录(展开/隐藏→) 展开常见用法语法说明三维水平条形图的创建三维水平条形图宽度的指定三维水平条形图的分组样式三维水平条形图的堆叠样式 4.3 (3) 今天,带来Matlab中…

    2020年12月04日
    031
  • Matlab streamtube函数创建三维流管图

    文章目录(展开/隐藏→) 展开常见用法语法说明以可视方式呈现流使用顶点数据和发散性以可视方式呈现流 4 (2) 今天,再来一篇关于Matlab 流线图系列教程。本文,我们讲解下Ma…

    2021年03月08日
    046
  • Matlab二维填充等高线图函数contourf

    文章目录(展开/隐藏→) 展开常见用法语法说明peaks 函数的等高线十个层级的等高线具有标签的特定层级的等高线一个层级的等高线虚线等高线自定义线宽不连续曲面上的等高线 4.3 (…

    2021年01月12日
    060
  • Matlab使用xlsread读取excel表格生成矩阵

    4.8 (4) 今天,帮网友解决了一个Matlab通过xlsread函数读取excel表格,并生成特定形式矩阵的问题。需要解决的具体问题为:有网友问了个关于如何使用Matlab读取…

    2021年01月22日
    0279

发表回复

登录后才能评论

评论列表(1条)

    本站APP