数学建模之拟合与插值

  • 拟合算法

  • 曲线拟合的最小二乘法

求一条曲线,使样本点均在此曲线的上下的不远处,所求的曲线叫为拟合曲线,它可以反映样本的总体分布,不至于出现局部较大的波动(龙格现象),能更好地反映出逼近函数的特性,在对给出的实验数据作曲线拟合时,使求得的逼近函数和已知函数之间的偏差的平方和达到最小,这就是最小二乘法的原理

  1. 直线拟合

    1. 设样本点 (xi,yi)i=1,2,...,m分布为一条拟合曲线。

      表达式:y(x)=a0+a1x 其中,a0a1为系数,表示截距和斜率。

      偏差平方和:,(a0,a1)=i=1nyi-a0-a1xi2最小。

2、多项式拟合

所给样本点的分布不能近似地呈一条直线,可用多项式拟合求寻求次数不多于m的表达式:y=a0+a1x+a2x2+...+anxm

偏差平方和:F(a0,a1)=i=1nyi-a0-a1xi-a2x22 最小。

例1:(预测人口)

x

2013

2014

2015

2016

2017

2018

2019

2020

y

9.6

12.9

17.1

23.2

31.4

38.6

50.2

63.0

Matlab代码:

x=2013:1:2020;
y=[9.6,12.9,17.1,23.2,31.4,38.6, 50.2,63.0];
subplot(1,2,1);
plot(x,y,'*');
title('人口散点图');
xlabel('年份');ylabel('人口');
p = polyfit(x,y,4);
yc=polyval(p,2021)
subplot(1,2,2);
plot(x,y,'*',x,polyval(p,x));
title('人口预测拟合模型图');
xlabel('年份');ylabel('人口');
legend('散点线','拟合曲线');

由计算可知预测2021年人口的人数为:79.8606(人)。

 注释:

[P,E]=polyfit(x,y,n);返回同上的多项式P和误差值E。多项式系数在向量P中,E用在polyval函数中来计算误差(可省略)。xy为对应的自变量,m为需要拟合的最高次幂。

yc=polyval(p,x)

其中p为多项式的系数,x为自变量,此函数的意义是计算以p为系数的多项式在各个自变量处的值,yc返回的就是计算出的值。

下面是运用 cftool运行的结果为:

 在cftool工具箱多次修改参数值与函数类型,结果如下图所示:

函数类型

Degree

SSE

R-square

Polynomial

1

104.6

0.9580

Polynomial

2

2.165

0.9991

Polynomial

3

1.602

0.9994

Polynomial

4

1.36

0.9995

Exponential

6.826

0.9973

Fourier

2.165

0.9991

Gaussian

1.629

0.9993

Interpolant

0

1

SSE是误差平方和。SSE越小,拟合的程度越好。

R—squre是拟合优度。这个参数越接近1,说明误差平方和越接近0,拟合程度越好。

故多项式中Degree为4的拟合效果最佳。

注意:两个参数都能评判拟合程度的好坏。

R—squre只能用于拟合函数是线性函数(相对于参数而言而不是变量)时,而SSE适用于所有情形。

当拟合函数不是线性函数时,用SSE评价就好了。

具体步骤:

1.在界面左侧这里输入x和y。

2.如果要设置其他拟合方式可以在界面右侧的这里进行选择。

3.在界面右侧会生成这样一个图像。

4.然后所求的结果这里就可以直接算出来。

曲线拟合的三种功能:

1.估算数据

2.预测趋势

3.总结规律

  • 插值算法

  1. 基础概念

已知样本点在区间(域)内若干点处的值,求样本点在该区间(域)内其他点处的值。

高次插值的Runge现象。

插值多项式的次数超过7次时,多项式会出现严重的外沿振荡现象。

例2:一天中24小时温度的变化

x

0

2

4

6

8

10

12

14

16

18

20

22

24

y

12

9

9

10

18

24

28

27

25

20

18

15

13

Matlab代码:

x=[0 2 4 6 8 10 12 14 16 18 20 22 24];		
y=[12 9 9 10 18 24 28 27 25 20 18 15 13];
x_1=13;
y_1=interp1(x,y,x_1,'spline') % y_1 = 27.8725
x_f=0:0.1:24;
y_f=interp1(x,y,x_f,'spline');
plot(x,y,'*',x_f,y_f,'r-');

 例3:Plane下轮廓线数据

x

0

3

5

7

9

11

12

13

14

15

y

0

1.2

1.7

2.0

2.1

2.0

1.8

1.2

1.0

1.6

Matlab代码:

x0=[0 3 5 7 9 11 12 13 14 15];
y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];
x_2=0:0.1:15;
y_f1=Lagrange(x0,y0,x_2);
y_f2=interp1(x0,y0,x_2);
y_f3=interp1(x0,y0,x_2,'spline');
subplot(3,1,1);
plot(x0,y0,'*',x_2,y_f1,'-');
grid;
title('拉格朗日插值');
subplot(3,1,2);
plot(x0,y0,'*',x_2,y_f2,'-');
grid; 
title('线性插值');
subplot(3,1,3);
plot(x0,y0,'*',x_2,y_f3,'-');
title('三次样条插值');

    1. 小结:

.程序采用了Lagrange、分段线性和三次样条插值方法进行了计算,其中,Lagrange高次插值明显出现了Runge现象;因为Matlab没有Lagrange函数,所以程序写了高次插值函数Lageance,然后调用。

2.由图可知,三次样条插值曲线更光滑,效果最好。

例4:二维插值实例

测得平板表面3*5网格点处的温度分别为:82 81 80 82 84 79 63 61 65 81 84 84 82 85 86

试作出平板表面的温度分布曲面z=f(x,y)的图形。

Matlab代码:

x=1:5;
y=1:3;
z=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
figure(1);
mesh(x,y,z);
title('二维图');
x_1=1:0.1:5;
y_1=1:0.1:3;
z_1=interp2(x,y,z,x_1,y_1','cubic');% 注意y_1'是转置(列向量)
figure(2);
mesh(x_1,y_1,z_1);
title('插值后的二维图');
figure(3);
contour(x_1,y_1,z_1,10,'p');
title('插值后的等高线图');

  • 拟合和插值的区别与联系

1.对给定任意样本点,刻画样本点反映的一般规律(给出曲线或者曲面函数)。

2.若要求所求曲线(面)通过所给所有样本点,就是插值问题。

3.若不要求曲线(面)通过所有样本点,而是要求它反映对象整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合。

4.求解问题具有确定的规律时(精确经过每个已知数据点),采用插值方法。

5.求解问题具有随机性、不确定性的特点时,采用拟合方法。

备注:

1.一维函数使用样条插值,二维优先使用立方插值。

2.非线性拟合参数的计算则要应用高斯—牛顿迭代法。

3.当实验数据精度较高且数量较少是可以优先考虑插值,而实验数据精度较低且数目较多,而数据整体上呈现一定的趋势时可以考虑拟合。

4.离散数据求近似函数关系的问题为曲线拟合 。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王的傲骨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值