# 基于MATLAB的多项式数据拟合方法研究-毕业论文

Research on polynomial data fitting method based on MATLAB

Abstract

This paper first introduces the background of polynomial data fitting and gives a complete understanding of the whole subject. Then, the fitting model and the mathematical principle of polynomial are explained in detail, and a systematic understanding of the principle is gained through the reading of literature and the accumulation of knowledge. Introduce the basic theory of polynomial curve fitting of polynomial data fitting principle for all aspects of the theory, but also elaborated the basic principle of curve fitting and polynomial curve fitting model. Specific records the specific steps polynomial curve fitting, on the basis of the established theory of polynomial curve method of MATLAB to realize the study, using MATLAB R2016a platform on the measured data of polynomial fitting data, the special structure of MATLAB is introduced and the curve fitting tool. Finally is plotfit function in MATLAB to polynomial fitting of measured data, graphics and polynomial curve fitting is given, and summarizes the results of the test, the optimum fitting of polynomial curve fitting method.

Keywordspolynomial，Curve fitting，MATLAB，The measurement data

1.1  多项式数据拟合研究背景及目的............................... 1

1.2  国内多项式数据拟合发展方向................................. 1

1.3  本课题研究的内容........................................... 2

2.1  拟合模型................................................... 3

2.2  多项式曲线拟合原理......................................... 3

2.3  polyfit、polyval、plot函数................................ 4

3.1  MATLAB概述............................................... 10

3.2  MATLAB的优点............................................. 10

3.3  MATLAB运行简介........................................... 11

3.4  MATLAB曲线拟合工具箱简介................................. 12

3.5 多项式数据拟合的MATLAB实现................................ 16

4.1  获取数据.................................................. 19

4.2  使用数据拟合工具箱获取数据模型............................ 19

4.3  进行多项式曲线拟合........................................ 20

# 第一章  绪论

## 1.3  本课题研究的内容

(1)首先阐述了多项式数据拟合的研究背景以及它的目的。然后讨论了多项式曲线拟合在国内的应用和它以后的发展方向。

(2)讨论了数据曲线拟合的原理。首先提出了拟合模型的概念，它的内容就是在未进行数据拟合之前先进行数学的估算先找出大体的适合该组数据的拟合函数，这里我是通过MATLAB内置的cftool函数来拟合出多项式曲线，来观察为以后的精确数据拟合做下好好的准备。接下来时介绍了多项式曲线拟合的原理，这里讲解了多项式的组成，以及它在数学上的原理。与此同时也提出了polyfit、polyval的概念。最后就是对MATLAB内置的拟合函数poly进行了介绍，这部分比较重要，它是拟合出曲线的关键，它的用法也很多，在相关章节有详细的讲解。

(3)第三章是对MATLAB软件应用的介绍。这个部分是在MATLAB中进行数据拟合的基础，如果连这部分都没搞的很清楚，那么后面的拟合也会非常的艰难，所以此部分是非常重要的。首先对MATLAB做了一个简要的概述，介绍一下MATLAB的用途，以及它的发展。后面介绍了MATLAB的优点，介绍了它在数据处理以及在工程上、科学研究上的优势，对比了一下发现MATLAB是非常强大，而且对于使用者是非常方便的，同时它也是非常利于操作者去使用它完成目的的。接下来就是介绍怎么去使用MATLAB，有非常多的细节值得我们去学习，在此次毕业论文中使用最多，也是最基础的就是矩阵了。它贯穿在整个论文的使用，书写中，所有的数据操作都是基于此。当然也有一些其他的操作，在本地方就不做详细的阐述了，在相关的章节都有详细的讲解。最后就是举了一个简单的例子，来说明曲线拟合在MATLAB中的应用，以及它在数据拟合工具箱中拟合出的图形。

(4)最后是使用MATLAB做了一个实际的应用。由于要有数据去实验，所以我这里是从国家数据统计网上摘取了国民收入近10年来的数据，这里摘取的数据不是很多，但是已经够我在本次论文中的应用了。通过对这组数据进行多项式数据拟合，找出最适合的多项式函数，可以预测未来几年的数据变化，也可以分析这10年来数据的变化，从而得出一个相对比较和的分析。

# 第二章  数据曲线拟合

## 2.2  多项式曲线拟合原理

>> A=[1,6,0,0,-8];       %4次多项式系数

>> x=1.1;            %取自变量为一数值

>> y1=polyval(A,x)

y1 =

1.4501

>> x=[1,1.2,-1;2,-1.8,1.4]         %给出一个矩阵x

x =

1.0000    1.2000   -1.0000

2.0000   -1.8000    1.4000

>> y2=polyval(A,x)       %分别计算矩阵x中各元素为自变量的多项式之值

y2 =

-1.0000    4.4416  -13.0000

56.0000  -32.4944   12.3056

## 2.3  polyfit、polyval、plot函数

使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的，并且方差为常数。则Y DELTA将至少包含50%的预测值。有如下数据：

 T 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 Y 76 92 106 123 132 151 179 203 227 250 281

y与t的经验公式为 ，代码如下：

clear;

clf;                                                   %清除当前窗口

clc;

t = 1900:10:2000;                                         %时间t

y = [76 92 106 123 132 151 179 203 227 250 281];          %人口y

plot(t,y,'k*');

hold on;

% figure;       　　　　　　　　　　　　　　　　　　　　%重新开一个图

p1 = polyfit(t,y,2);

plot(t, polyval(p1, t));

axis([1900 2000 0 300]);                                %图像xy轴范围

disp(char(['y=',poly2str(p1,'t')],['a=',num2str(p1(1)),'b=',num2str(p1(2)),'   c=',num2str(p1(3))]));

y=   0.0094289 t^2 - 34.7482 t + 32061.5711

a=0.0094289   b=-34.7482   c=32061.5711

y与t的经验公式为 ，演示代码如下：

clear;

clf;                                                    %清除当前窗口

clc;

t = 1900:10:2000;                                         %时间t

y = [76 92 106 123 132 151 179 203 227 250 281];          %人口y

yy = log(y);                                 %指数基尼必需的线性化变形

p2 = polyfit(t,yy,1);

b = p2(1);

a = exp(p2(2));

y2 = a * exp(b*t);                                     %指数拟合函数式

plot(t,y,'rp',t,y2,'k-');

grid off;

xlabel('时间t');

ylabel('人口数(百万)');

title('人口数据');

plot(Y)
plot(X1,Y1,)
plot(X1,Y1,LineSpec,)
plot(’PropertyName’,PropertyValue,…)
plot(axes_handle,)

plot(X1,Y1,LineSpec1)

hlod all

plot(X2,Y2,LineSpec2)

MATLAB中提供的线型属性有：

“PrimeType”，PrimeType设置由情节创建的所有曲线句柄对象的属性。附录中显示了行对象属性和属性值。有关具体设置，请参考以下示例。当然，SET/GET也可以用于设置。

MarkerEdgeColor——指定标识符的边缘颜色。

MarkerFaceColor——用指定的标识符填充颜色

# 第三章  MATLAB

## 3.2  MATLAB的优点

MATLAB重要的组件同时也是最方便使用的是它的工具箱其中大多数都具有图形界面。人电脑交互操作，容易学习无障碍，它还包括一个具有相对完整的调优的在线查询和帮助系统尝试系统，可以直接运行而不编译，尤其可以提供及时的误差和误差原因析取,方便简洁。MATLAB是一种用于控制语句、关系函数、数据结构、输入输出和面向对象编程的矩阵/数组语言。员工可以同时在命令窗口中声明语句。输入并执行命令。您还可以运行预编程的M文件。MATLAB具有多种数学运算功能，几乎涉及到所有的工程问题。它可以通过实时的优化和容错来调整，而不是底层的编程语言，这样可以大大减少编程工作量。它有一个非常方便的可视化函数，它可以用图形来表示向量和矩阵。它包括二维和三维可视化、图像处理、动画和渲染。将灯光添加到图形中，颜色和四维数据等。对于有图形处理需求的用户，您可以得到最多伟大的满意度。已经为大多数用户可以访问的领域开发了一组强大的模块和工具包下次使用时，不需要用户自己编写代码，特别适合初学者。除了日常工作此外，熟练还可以实现系统仿真，图形缺失部分的修复工作。它有一个程序扩展系统和特殊的应用程序子例程，这两个子例程都专门用于某种学科并提出了神经网络建模、模糊逻辑分析、信号降噪处理、模糊控

## 3.3  MATLAB运行简介

>> x=[1,2;3,4]

x =

1     2

3     4

>> x=[1,2;3,4];

>> x=1:5

x =

1     2     3     4     5

>> x=1:0.5:5

x =

1.0000    1.5000    2.0000    2.5000    3.0000    3.5000    4.0000    4.5000    5.0000

## 3.4  MATLAB曲线拟合工具箱简介

MATLAB 软件自带了一个功能很强大的拟合工具箱cftool，它的使用非常的方便而且实现很多类型的线性、非线性曲线拟合。我是在MATLAB R2016a中来演示这工具箱的使用，为后面的仿真做好准备。首先介绍一下，我在MATLAB中调用曲线拟合用的方式是直接在命令行中输入cftool，当然也有其他的方法，这里就不讨论了。下面通过一个实例来加深对此的了解。

Custom Equations 用户自定义函数
Expotential e指数函数
Fourier 傅立叶函数，含有三角函数
Gaussian 正态分布函数，高斯函数
Interpolant 插值函数，含有线性函数，移动平均等类型的拟合
Polynomial 多项式函数
Power 幂函数
Rational 有理函数
Smooth Spline （光滑插值或者光滑拟合，不太清楚）
Sum of sin functions 正弦函数类
Weibull 威布尔函数

RMSE:(标准偏差)

Linear model Poly4:

Coefficients (with 95% confidence bounds):
p1 = -0.26  (-8.731, 8.211)
p2 = 1.704  (-57.78, 61.19)
p3 = -3.168  (-146.7, 140.4)
p4 = 3.943  (-133.2, 141)
p5 = 0.35  (-41.52, 42.22)
Goodness of fit:
SSE: 0.1429
R-square: 0.9959
RMSE: 0.378

legend('ydata','fit');

## 3.5 多项式数据拟合的MATLAB实现

 X 1 2 3 4 5 6 7 8 9 Y 9.4 4.3 1.1 0.6 0.07 0.3 0.5 1.6 3.4

>> x=1:9;

>> y=[9.4,4.3,1.1,0.6,0.07,0.3,0.5,1.6,3.4];

>> p2=polyfit(x,y,2);

>> p3=polyfit(x,y,3);

>> p4=polyfit(x,y,4);

>> x1=1:0.5:9;

>> y2=polyval(p2,x1);

>> y3=polyval(p3,x1);

>> y4=polyval(p4,x1);

>> plot(x,y,'rp',x1,y2,'--'.x1,y3,'k-.',x1,y4)

4次拟合是最逼近原数据点的。这样的分析为以后的应用提供了理论基础，更加利于后面的实验的进行，同时也积累了很多的拟合经验。

# 第四章  多项式数据拟合的应用

## 4.1  获取数据

 X 7 8 9 10 11 12 13 14 15 16 Y 114.7 110.1 108.5 110.3 109 108.6 107.1 108.3 106.4 106.7

## 4.2  使用数据拟合工具箱获取数据模型

>> x=[7,8,9,10,11,12,13,14,15,16];

>> y=[114.7,110.1,108.5,110.3,109.0,108.6,107.1,108.3,106.4,106.7];

>> cftool

cftool使用多项式曲线拟合出的图形如下：

## 4.3  进行多项式曲线拟合

>> x=[7,8,9,10,11,12,13,14,15,16];     %年份的矩阵数据，7代表的是2017年，其他以此类推

>> y=[114.7,110.1,108.5,110.3,109.0,108.6,107.1,108.3,106.4,106.7];

>> p7=polyfit(x,y,7);

>> p8=polyfit(x,y,8);

>> p9=polyfit(x,y,9);

>> x1=7:0.5:16;

>> y7=polyval(p7,x1);

>> y8=polyval(p8,x1);

>> y9=polyval(p9,x1);

>>plot(x,y,'rp',x1,y7,'k--',x1,y8,'c*-',x1,y9)

从上图中的结果可以看出9次拟合的震荡太大了，没有在数据附近拟合出曲线，很显然它是不适合这组数据的拟合的。而7、8次拟合曲线从上图上看是差不多的，为了计算的方便我们就选择7次拟合是对这组数据最好的拟合。从上面的这图中，也可以看出多项式曲线拟合的基本规律，那就是阶次越高它的拟合曲线震荡就越大，而曲线也不是拟合曲线经过所有数据点就可以的，也要分析这组数据的分布情况，然后结合图形和数据点的分布，找出最好的拟合阶次，找到最佳的拟合曲线。

# 参考文献

[1]彭芳麟,梁颖,刘振兴.在计算物理基础课中用MATLAB培养学生的编程能力[J].大学物理.2013(09)

[2]唐冲,惠辉辉.基于Matlab的高斯曲线拟合求解[J].计算机与数字工程.2013(08)

[3]江海东,费岳军,应岳.使用MATLAB拟合工具箱进行潮汐调和分析[J].海洋技术.2012(03)

[4]赵宝贵. Matlab在数据拟合中的应用[J].科技广场, 2007, 1:145-146.

[5]宋晓霞.基于MATLAB的通用数据拟合方法[J]. 山西大同大学学报（自然科学版），2014，30(4):1-6．

[6]常锦才等.基于正交多项式的数据拟合方法[J].河北理工大学学报（自然科 学   版）, 2011, 33(4): 80-84.

[7]白晓煊.基于Matlab的雷达试验数据拟合[J].信息技术.2011(11)

[8]王海鹏,赵莉,王殿生,潘圆圆,孟祥鹏.基于MATLAB的均匀设计实验数据多元非线性最小二乘拟合[J].化学工程与装备. 2010(09)

[9]欧阳明松,徐连民.基于MATLAB的试验数据拟合[J].南昌工程学院学报.2010(04)

[10]胡庆婉.使用MATLAB曲线拟合工具箱做曲线拟合[J].电脑知识与技术.2010(21)

[11]丁士海,韩之俊.基于数据拟合的非线性方法及Matlab解决方案[J].统计与决策.2009(08)

[12]周后卿,徐幼专.MATLAB在《复变函数与积分变换》中的应用[J].电脑知识与技术. 2018(04)

[13]欧阳明松,徐连民.基于MATLAB的试验数据拟合[J].南昌工程学院学报. 2010(04)

[14]CRafael,RG Woods,《Digital Image Using MATLAB》[J]2004,21(84):197-199

[15]RC Gonzalez,RE Woods,SL Eddins,[J]Prentice Hall press,2007

[16]K.C.Toh,M.J.Todd,R.H.TutuncuOptimizationMethodsandSoftware,1999,11(1-4):545-581

[17]J Lofberg,IEEE International Symposium,2005,41(3):284-289

[18]KC Toh,Mj Todd,R H T,Optimization Methods softwares,1999,11(1-4)

posted @ 2018-06-25 18:47  潇潇、寒  阅读(1738)  评论(0编辑  收藏  举报