最小二乘法曲线拟合的大作业.docx
- 文档编号:27104729
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:8
- 大小:211.10KB
最小二乘法曲线拟合的大作业.docx
《最小二乘法曲线拟合的大作业.docx》由会员分享,可在线阅读,更多相关《最小二乘法曲线拟合的大作业.docx(8页珍藏版)》请在冰豆网上搜索。
最小二乘法曲线拟合的大作业
曲线拟合的MATLAB实现
一、提出问题
在实际的工程应用领域和经济应用领域中,人们往往只能测得一些分散的数据点,为了从这些分散的数据点中找到其内在的规律性,就需要利用这些分散的数据点,运用最小二乘法、多项式或其他的已知函数等方法来生成一个新的多项式或是新的函数来逼近这些已知点。
由于Matlab语言强大的计算功能和绘图功能,使得我们可以很方便的进行曲线拟合并绘制出曲线拟合图,从而很方便的找到分散数据的内在规律性。
本文介绍最小二乘曲线拟合法的基本原理,就其Matlab的实现方法进行研究,给出曲线拟合Matlab实现的源程序,对测试误差进行分析。
本文试通过一个具体例子,介绍用Matlab软件进行曲线拟合的方法。
某类疾病发病率为y‰和年龄段x(每五年为一段,例如0~5岁为第一段,6~10岁为第二段)之间有如下的关系,观测得到的数据表如下:
x
1
2
3
4
5
6
7
8
9
10
y
0.898
2.38
3.07
1.84
2.02
1.94
2.22
2.77
4.02
4.76
x
11
12
13
14
15
16
17
18
19
y
5.46
6.53
10.9
16.5
22.5
35.7
50.6
61.6
81.8
表1某类疾病发病率与年龄段的关系
二、分析问题
先根据上述资料,建立以x为横坐标,y为纵坐标的坐标系,用Matlab软件把各x,y的值作为坐标点,画出这些点,得图1。
x=[12345678910111213141516171819];
y=[0.8982.383.071.842.021.942.222.774.024.765.466.5310.916.522.535.750.661.681.8];
plot(x,y,'*r')
图1原始数据关系图
从图上可以看出,在全段19个点的始末两端各有一条渐近线,根据指数函数的性质,可知描写全段曲线的函数一定含有指数项。
不妨先设指数曲线为:
(1)
两边同时取对数对其进行线性化得到如下线性方程:
,其中
,A=b,B=lna,可根据已知的x,y用最小二乘法求得A,B。
具体求法是,在Matlab下定义一个函数pline(x,y),其程序如下:
Functionyy=pline(x,y)
nx=length(x); ny=length(y);%分别求向量x,y的长度
n=min(nx,ny);%求出长度的最小值
x=reshape(x,n,1);%生成列向量
y=reshape(y,n,1);
M=[xones(n,1)];%连接矩阵M
B=y;
N=M'*M;
B=M'*B;
yy=N\B;%得到拟合系数
yy=yy';%变成行向量
在Matlab命令窗口中输入命令:
x=[12345678910111213141516171819];
y=[0.8982.383.071.842.021.942.222.774.024.765.466.5310.916.522.535.750.661.681.8];
pline(x,log(y))
求得A=0.2306,B=?
0.3837,从而可知a=e=0.6813,b=A=0.2306,代入
(1)得拟合函数
(2)
作出其函数图象如图2。
x=[12345678910111213141516171819];
y=[0.8982.383.071.842.021.942.222.774.024.765.466.5310.916.522.535.750.661.681.8];
y1=[000000000000000000];
fori=1:
19
y1(i)=0.6813*exp(0.2306*x(i));
end
plot(x,y,'*r',x,y1)
图2拟合函数图象与原始数据比较图
通过图象和原始数据进行比较,不难看出此曲线与实际数据有一定的差距,因而不能以此曲线作为19个点的数学模型,需进行曲线的分段拟合。
三、解决问题
3.1曲线的分段直线化
对图1进一步分析可以看出,前11个点有一条渐近线,后8个点有一条渐近线,可将要拟合的曲线分为两段,前11个点为前段,后8个点为后段。
我们可以分别对前11个点和后8个点进行直线化。
以x为横坐标,lny为纵坐标,在Matlab中作出这些点,得图3:
x=[12345678910111213141516171819];
y=[0.8982.383.071.842.021.942.222.774.024.765.466.5310.916.522.535.750.661.681.8];
plot(x,log(y),'*r')
图3取对数后的函数关系图象
从图3可以看出后8个点明显呈直线趋势,可以先对后8个点进行直线化。
3.11后段曲线的直线化
拟合的方法和前面相同,设所求的曲线为:
(3)
进行线性化得
,其中
,A=b,B=lna,在Matlab命令窗口中
调输入:
x=[12,13,14,15,16,17,18,19],y=[6.53,10.9,16.5,22.5,35.7,50.6,61.6,81.8],
用函数pline(x,log(y)),求得A=0.3593,B=?
2.2928,a=e=0.1010,b=A=0.3593,
B
代入(3)得直线回归方程:
(4)
3.12前段曲线得直线化
从图3发现前11个点仍呈曲线趋势,需要进一步线性化。
具体步骤如下:
利用(4)求得前11点处的函数值y',再把实际数据中的前11个值减去y',即得y2=y?
y,然后取其对数值ln(y2),用Matlab作出这些点图象,在Matlab下不需要一个个去求,只要在命令窗口输
入如下命令:
x=[1234567891011];
y=[0.8982.383.071.842.021.942.222.774.024.765.46];
plot(x,log(y-0.1010*exp(0.3593*x)),'m*')
即得如下图4:
图4进一步线性化函数图象
可以发现这11个点成一定的曲线趋势,利用x和y2的值可建立起直线回归方程。
只要在Matlab下再次调用函数pline(x,log(y-0.1010*exp(0.3593*x)))可求得A=?
0.1124,B=0.7734,a=eB=2.1671,b=A=?
0.1124,求得相应的直线回归方程为:
(5)
3.2曲线回归方程的建立
根据资料所给的19个点,我们分别进行了后段和前段的直线化并建立了其直线回归方程,可以根据直线的回归方程建立曲线的回归方程。
若前段各点在后段各点回归直线的上方,可得描述全段曲线的数学模型为:
y=(4)+(5),反之若前段各点在后段各点回归直线的下方,则数学模型为:
y=(4)?
(5)。
由于本资料所给出的19个点,前段11个点都在后段回归直线的下方,因而这19个点所得的数学模型为:
(6)
根据原始资料,在Matlab下作出(6)的函数图象,如下图5。
具体做法是在Matlab命令
x=[12345678910111213141516171819];
y=[0.8982.383.071.842.021.942.222.774.024.765.466.5310.916.522.535.750.661.681.8];
plot(x,y,'*r',x,(0.1010*exp(0.3593*x)-2.1671*exp(-0.1124*x)))
图5中的曲线为拟合曲线,“*”为原始资料的点,从图5中可看出此曲线拟合较好。
四、结语
通过论文的实验可以看出,用Matlab做曲线拟合的精度较高,尤其是分段拟合曲线的方法,可以使分散的数据点得到较好的拟合曲线。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最小二乘法 曲线拟合 作业