数值计算课程设计拟合方法与拟合函数的选取讲解Word文档格式.docx
《数值计算课程设计拟合方法与拟合函数的选取讲解Word文档格式.docx》由会员分享,可在线阅读,更多相关《数值计算课程设计拟合方法与拟合函数的选取讲解Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
曲线拟合在实际中有着很广泛的实用价值。
因为我们所获取的实验数据本身往往带有测量误差,难免会出现个别数据误差过大的现象。
相比于插值法,曲线拟合时,不要求曲线严格地经过每一个数据点,这样就能有效降低个别数据对整体数据规律的干扰作用;
另外,实验数据往往很多,插值法会比较繁杂,拟合方法则更实际更高效。
2、拟合准则
在曲线拟合中,有几种不同的误差准则:
1.最大误差:
2.
平均误差
3.均方根误差
4.
误差平方和
通过求误差的最小值,可得该准则下的最佳拟合曲线。
由于误差平方和容易进行最小化计算,故而我们通常采用该标准,称之为最小二乘准则。
以下课程实验都是在最小二乘准则下实现的。
三、拟合函数的选取
曲线拟合时,首要也最关键的一步就是选取恰当的拟合函数。
对于一组给定的数据,我们可以先做出其散点图,判断应该采用什么样的曲线来作拟合,然后在直观判断的基础上,选取多组曲线分别作拟合,然后比较,看哪条曲线的最小二乘指标最小,也即拟合的最好。
一般来说,选取多项式作为拟合曲线,是简单且常用的。
MATLAB中有现成的多项式拟合程序,调用格式为f=polyfit(x,y,n),其中输入参数x,y为要拟合的数据,n为拟合多项式的系数,输出参数f为拟合多项式的系数向量。
对于稍微复杂一点的拟合曲线,我们可以先通过线性变换将之转换成简单的线性函数,接着再用多项式拟合的命令f=polyfit(x,y,n)来实现函数的拟合。
下面表格列举两个线性变换的例子:
原函数y
化为线性函数Y=AX+B型
变量与常量的变化
4、函数拟合实例
4.1多项式拟合
例1.给定一组数据点如下表:
-1.5
-0.7
0.5
1.9
2.2
2.9
3.8
4.2
7.52
3.98
2.99
3.57
10.18
12.73
19.81
31.90
38.24
首先,我们在MATLAB中输入程序
>
x=[-1.5-0.700.51.92.22.93.84.2];
y=[7.523.982.993.5710.1812.7319.8131.9038.24];
plot(x,y,'
b*'
),xlabel('
x'
),ylabel('
y'
)
title('
表中数据点(xi,yi)的散点图'
运行后得表中数据的散点图如下(图中*表示数据点的坐标):
因为数据散点图的变化趋势与二次多项式很接近,所以可选用二次多项式作为拟合曲线,设f(x)=ax^2+bx+c。
编程:
f=polyfit(x,y,2);
a=f
(1),b=f
(2),c=f(3)
X=-1.5:
0.01:
4.2;
Y=polyval(f,X);
f=polyval(f,x);
fy=abs(f-y);
E=sum((fy.^2))
r*'
X,Y,'
b-'
拟合直线与数据点结合图'
运行后得:
a=1.9974;
b=0.0021;
c=3.0188;
E=0.0097
生成如下图形:
即拟合多项式为:
f=1.9974x^2+0.0021x+3.0188;
误差很小,只有0.0097.
4.2指数与复合函数拟合
例2.给出实验数据点如下表:
xi
2.7
0.1
2.3
1.6
0.7
1.4
0.3
yi
2.64
11.04
3.21
4.03
7.10
4.58
9.37
在MATLAB中输入程序:
x=[2.70.12.31.60.71.40.3];
y=[2.6411.043.214.037.104.589.37];
plot(x,y,'
),axis([0,3,0,12])
得散点图:
据图,我们取两种拟合函数分别为
和
:
(1)设,在MATLAB中输入程序
Y=log(y);
f=polyfit(x,Y,1);
A=f
(2);
B=f
(1);
a=exp(A),b=-B
X=0:
3;
Y=a*exp(-b.*X);
f=a*exp(-b.*x);
legend('
数据点(xi,yi)'
'
拟合曲线Y=f(x)'
数据点(xi,yi)和拟合曲线Y=f(x)的图形'
E1=sum((fy.^2))
得:
a=10.7441;
b=0.5460;
E1=1.3072.
(2)设,在MATLAB中输入程序
x=[2.70.12.31.60.71.40.3];
Y=1./y;
a=f
(1),b=f
(2)
Y=1./(a.*X+b);
f=1./(a.*x+b);
Legend('
数据点(xi,yi)'
Title('
Fy=abs(f-y);
E2=sum((fy.^2))
a=0.1089;
b=0.0720;
E2=0.0097.
因为E1〉E2,显然第二种拟合曲线的误差较小,拟合效果更佳。
4.3分段拟合
实际中的很多科学实验数据,其拟合函数都比较稍显复杂,下面我们来列举一例。
例3.革螨在不同浓度的甲酚皂液的平均致死时间如下表显示:
X甲酚皂液的浓度(%)
Y革螨的平均死亡时间(min)
0.100
50.4
0.150
41.2
0.175
33.6
0.200
19.0
0.300
11.6
0.400
10.6
0.500
8.4
0.600
6.8
0.700
6.2
1.000
4.8
5.000
10.000
1.2
用MATLAB作散点图:
分析上图可知,曲线的两端都含有渐近线,故全段拟合曲线中一定含有指数项。
x=[0.1000.1500.1750.2000.3000.4000.5000.6000.7001.0005.00010.000];
y=[50.441.233.619.011.610.68.46.86.24.82.21.2];
10;
得:
a=15.6609;
b=0.2978;
E1=2.4705e+003
即拟合函数为:
显然,拟合效果不佳。
进一步分析可以看出,前9个点有一条渐近线,而后3个点有一条渐近线。
可将要拟合的曲线分为二段,前9个点为前段,后3个点为后段。
我们可以分别对前9个点和后3个点进行直线化。
以x为横坐标,lny为纵坐标,做散点图plot(x,log(y),'
)得
可以看出后三个点明显呈直线趋势,我们先对后三个点进行直线化。
拟合的方法和前面相同,在MATLAB中输入
x=[1.0005.00010.000];
y=[4.82.21.2];
a=5.2635;
b=0.1527;
即
从图3发现前9个点仍呈曲线趋势,需要进一步线性化。
具体步骤如下:
利用(4)求得前9个点处的函数值y’,再把实际数据中的前9个值减去y’。
即得y”=y-y’,然后取其对数值ln(y”),用MATLAB作出这些点图象,在MATLAB下不需要一个个去求,只要在命令窗口输入如下命令:
x=[0.1000.1500.1750.2000.3000.4000.5000.6000.700];
y=[50.441.233.619.011.610.68.46.86.2];
plot(x,log(y-(5.2635.*exp(-0.1527*x)),'
可以发现这9个点成一定的曲线趋势,利用x和y的值可建立起直线回归方程。
只要在MATLAB下用同样的方法再次求指数拟合
Y=log(y-(5.2635.*exp(-0.1527.*x)));
得a=62.55659;
b=5.7270;
由于前段各点在后段直线的上方,故最终的拟合函数应为y=(4)+(5),
在MATLAB中做出散点和拟合曲线
y