数学建模线性拟合与非线性拟合

  • 格式:doc
  • 大小:492.70 KB
  • 文档页数:26

数学实验与数学建模

实验报告

学 院: 南通大学理学院

班 级: 信计111

学 号:

姓 名:

实验名称: 线性拟合与非线性拟合

指导教师:

填写日期: 2013年11月5日

实验五 线性拟合与非线性拟合

一、 实验指导解读

本实验的主要目的是了解迭代法,研究迭代数列的收敛性,学习线性方程组的求解以学习非线性方程组的求解。

本次实验是通过两个变量的多组记录数据利用最小二乘法寻求两个变量之间的函数关系。

两个变量之间的函数关系主要有两种:一是线性关系(一次函数);二是非线性关系(非一次的其它一元函数)。因此本实验做两件事:一是线性拟合(习题1);二是非线性拟合(习题2)。习题2是用多项式函数、指数函数、双曲函数等初等函数以及分段函数拟合。

二、 实验基本方法与理论:

(习题1)线性拟合

修改、补充程序

要说明拟合效果,主要从形(大多数散点是否在拟合曲线上或附近)与量(残差是否小)!

计算残差的程序:

假设对两个变量的多组记录数据已有程序

biao={{x1,y1},{x2,y2},…,{xn,yn}}

并且通过Fit得到线性拟合函数y=ax+b

我们可以先定义函数(程序)

f[x_]:=a*x+b

再给出计算残差的程序

dareta=Sum[(biao[[i ,2]]-f[biao[[i ,1]]])^2,{i ,1, n}]

程序说明:

biao[[i]]是提取表biao的第i行,即{xi,yi}

biao[[i ,1]] 是提取表biao的第i行的第一个数, 即xi

biao[[i ,2]] 是提取表biao的第i行的第一个数, 即yi

biao[[i ,2]]-f[biao[[i ,1]]] 即yi-(a*xi+b)

(习题2)非线性拟合

修改、补充程序

要说明拟合效果,主要从形(大多数散点是否在拟合曲线上或附近)与量(残差是否小)!

计算残差的程序:

假设对两个变量的多组记录数据已有程序

biao={{x1,y1},{x2,y2},…,{xn,yn}} 并且通过Fit得到非线性拟合函数y=f(x)

我们可以先定义函数(程序)

f[x_]:=

再给出计算残差的程序

dareta=Sum[(biao[[i ,2]]-f[biao[[i ,1]]])^2,{i ,1, n}]

程序说明:

biao[[i]]是提取表biao的第i行,即{xi,yi}

biao[[i ,1]] 是提取表biao的第i行的第一个数, 即xi

biao[[i ,2]] 是提取表biao的第i行的第一个数, 即yi

biao[[i ,2]]-f[biao[[i ,1]]] 即yi-f(xi)

三、实验的整体思路

(1)对数据线性拟合

1、先对习题1的十组数据线性拟合,并从形与量看拟合效果;

2、对习题1的十组数据中的9组数据线性拟合,并从形与量看拟合效果;

3、对习题1的十组数据中的6组数据线性拟合,并从形与量看拟合效果。

4、对习题1的十组数据增加数据线性拟合,并从形与量看拟合效果。

(2)非线性拟合

1、先对习题2的数据用二次、三次、…、十五次多项式函数分别非线性拟合,并从形与量看拟合效果;思考用多项式函数非线性拟合的优点与缺点。考虑对习题2的数据增加或减少

2、先对习题2的数据用指数函数、双曲函数等初等函数分别非线性拟合,并从形与量看拟合效果;思考用初等函数非线性拟合的优点与缺点,同时思考有没有其它更好的非线性拟合。考虑对习题2的数据增加或减少

3、先对习题2的数据用分段函数(非初等函数)非线性拟合,并从形与量看拟合效果;思考用分段函数非线性拟合的优点与缺点,同时思考有没有其它更好的非线性拟合。

四、实验过程

(一)线性拟合

1、首先求出线性拟合函数f[x_]=a*x+b;中a 、b的值,程序如下:

lianxi1biao={{100,45},{110,51},{120,54},{130,61},{140,66},{150,70},{160,74},{170,78},

{180,85},{190,89}}

ft1=Fit[lianxi1biao,{1,x},x]

gp=Plot[ft1,{x,100,190},PlotStyle->{RGBColor[1,0,0]}]

fp=ListPlot[lianxi1biao,PlotStyle->{PointSize[0.05],RGBColor[0,0,1]}]

Show[fp,gp]

所以 a= 0.48303030303030314` ;b= -2.73939393939394` ;

将a、b代入函数f[x_]=a*x+b中,算出残差,程序如下:

a= 0.48303030303030314` ;b= -2.73939393939394` ;

f[x_]=a*x+b;

dareta=Sum[(lianxi1biao[[i,2]]-f[lianxi1biao[[i,1]]])^2,{i,1,10}]

得出残差

图形如下:

2、对习题1的十组数据中的九组数据线性拟合,首先求出线性拟合函数f[x_]=a*x+b;中a 、b的值,程序如下:

Clear[gp,fp];

lianxi1biao={{100,45},{110,51},{120,54},{130,61},{140,66},{150,70},{160,74},{170,78},

{180,85},{190,89}}

lianxi1biao101={{110,51},{120,54},{130,61},{140,66},{150,70},{160,74},{170,78},

{180,85},{190,89}}

ft1=Fit[lianxi1biao101,{1,x},x]

gp=Plot[ft1,{x,100,190},PlotStyle->{RGBColor[1,0,0]}]

fp=ListPlot[lianxi1biao101,PlotStyle->{PointSize[0.05],RGBColor[0,0,1]} ]

Show[fp,gp]

所以 a= 0.4783333333333335`;b=-1.9722222222222325`

将a、b代入函数f[x_]=a*x+b中,算出残差,程序如下:

a= 0.4783333333333335`;b=-1.9722222222222325` ;

f[x_]=a*x+b;

dareta101=Sum[(lianxi1biao[[i,2]]-f[lianxi1biao[[i,1]]])^2,{i,1,10}]

得出残差

图形如下:

3、对习题1的十组数据中的六组数据线性拟合,首先求出线性拟合函数f[x_]=a*x+b;中a 、b的值,程序如下:

Clear[gp,fp];

lianxi1biao={{100,45},{110,51},{120,54},{130,61},{140,66},{150,70},{160,74},{170,78},

{180,85},{190,89}}

lianxi1biao101={{140,66},{150,70},{160,74},{170,78}, {180,85},{190,89}}

ft1=Fit[lianxi1biao101,{1,x},x]

gp=Plot[ft1,{x,100,190},PlotStyle->{RGBColor[1,0,0]}]

fp=ListPlot[lianxi1biao101,PlotStyle->{PointSize[0.05],RGBColor[0,0,1]}]

Show[fp,gp]

得 -0.314286+0.468571 x

所以 a= 0.46428571428571414` ;b=0.42857142857145963` ;

将a、b代入函数f[x_]=a*x+b中,算出残差,程序如下:

a= 0.46428571428571414` ;b=0.42857142857145963` ;

f[x_]=a*x+b;

dareta101=Sum[(lianxi1biao[[i,2]]-f[lianxi1biao[[i,1]]])^2,{i,1,10}]

得出残差

图形如下:

4、对习题1的十组数据增加数据线性拟合,首先求出线性拟合函数f[x_]=a*x+b;中a 、b的值,程序如下:

Clear[gp,fp];

lianxi1biao={{100,45},{110,51},{120,54},{130,61},{140,66},{150,70},{160,74},{170,78},

{180,85},{190,89}}

lianxi1biao101={{90,39},{100,45},{110,51},{120,54},{130,61},{140,66},{150,70},{160,74},{170,78},

{180,85},{190,89}}

ft1=Fit[lianxi1biao101,{1,x},x]

gp=Plot[ft1,{x,100,190},PlotStyle->{RGBColor[1,0,0]}]

fp=ListPlot[lianxi1biao101,PlotStyle->{PointSize[0.05],RGBColor[0,0,1]}]

Show[fp,gp]

所以 a= 0.46428571428571414` ;b=-3.999999999999992`` ;

将a、b代入函数f[x_]=a*x+b中,算出残差,程序如下:

a= 0.4909090909090908` ;b=-3.999999999999992`` ;

f[x_]=a*x+b;

dareta101=Sum[(lianxi1biao[[i,2]]-f[lianxi1biao[[i,1]]])^2,{i,1,10}]

得出残差

图形如下: