函数逼近与曲线拟合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 函数逼近与曲线拟合报告
一、问题提出
从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。
在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间t 的拟合曲线。
t(分) 0 5 10 15 20 25 30 35 40 45 50 55
4(10)y -⨯
0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64
二、要求
1、用最小二乘法进行曲线拟合;
2、近似解析表达式为23123()t a t a t a t ϕ=++;
3、打印出拟合函数()t ϕ,并打印出()j t ϕ与()j y t 的误差,1,2,,12j = ;
4、另外选取一个近似表达式,尝试拟合效果的比较;
5、* 绘制出曲线拟合图。
三、目的和意义
1、掌握曲线拟合的最小二乘法;
2、最小二乘法亦可用于解超定线代数方程组;
3、探索拟合函数的选择与拟合精度间的关系。
四、实验学时:2学时
五、实验步骤:
1.进入C 或matlab 开发环境;
2.根据实验内容和要求编写程序;
3.调试程序;
4.运行程序;
5.撰写报告,讨论分析实验结果.
解:
实验步骤
(一)算法流程
构造a1、a2、a3的线性方程组------构造误差平方和------对a1、a2、a3求偏导数------令偏导为零求得a1、a2、a3的值。
(二)编程步骤与分析
1. 绘制数据点(t,yi)的散点图
输入程序为:
t=[0 5 10 15 20 25 30 35 40 45 50 55];
y=[0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64].*1e-4 plot(t,y,'r*'),
legend('实验数据(t,yi)')
xlabel('x'), ylabel('y'),
title('数据点(t,yi)的散点图'),显示结果为:
2.求参数a1、a2、a3的解析表达式
计算)(x f 在),(i i y x 处的函数值,即输入程序
syms a1 a2 a3
t=[0 5 10 15 20 25 30 35 40 45 50 55];
fi=a1.*t+ a2.*t.^2+ a3.*t.^3
运行后屏幕显示关于a1,a2, a3的线性方程组:
fi = [ 0, 5*a1 + 25*a2 + 125*a3, 10*a1 + 100*a2 + 1000*a3, 15*a1 + 225*a2 + 3375*a3, 20*a1 + 400*a2 + 8000*a3, 25*a1 + 625*a2 + 15625*a3, 30*a1 + 900*a2 + 27000*a3, 35*a1 + 1225*a2 + 42875*a3, 40*a1 + 1600*a2 + 64000*a3, 45*a1 + 2025*a2 + 91125*a3, 50*a1 + 2500*a2 + 125000*a3, 55*a1 + 3025*a2 + 166375*a3]
构造误差平方和:
y=[0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64].*1e-4;
fy=fi-y; fy2=fy.^2; J=sum(fy.^2);
运行后屏幕显示误差平方和如下:
J=12650*a1^2+1089000*a1*a2+49967500*a1*a3- (7819978335372091569501*a1)/28823037615171174400000 + 24983750*a2^2 +2386725000*a2*a3-(31331074233255294718193*a2)/2882303761517117440000 +58593218750*a3^2-(274377591928296252150123*a3)/576460752303423488000 +520374483464852566590953249225508026224249/3323069989462289682259517 65070086144000000000000
为求a1,a2, a3使J达到最小,只需利用极值的必要条件
=
∂
∂
k
a
J
(k=1,2,3),
得到关于a1,a2, a3的线性方程组,这可以由下面的MATLAB程序完成,即输入程序
Ja1=diff(J,a1); Ja2=diff(J,a2); Ja3=diff(J,a3);
Ja11=simple(Ja1), Ja21=simple(Ja2), Ja31=simple(Ja3),
运行后屏幕显示J分别对a1, a2 ,a3的偏导数如下
Ja11 =25300*a1 + 1089000*a2 + 49967500*a3 - 27131/100000
Ja21 =1089000*a1 + 49967500*a2 + 2386725000*a3 - 217403/20000
Ja31 =49967500*a1 + 2386725000*a2 + 117186437500*a3 - 1903877/4000解线性方程组Ja11 =0,Ja21 =0,Ja31 =0,Ja41 =0,输入下列程序A=[25300, 1089000, 49967500; 1089000, 49967500, 2386725000; 49967500, 2386725000, 117186437500];
B=[27131/100000, 217403/20000, 1903877/4000];
C=B/A
运行后求得系数C如下:
C =
2.6569e-005 -5.2948e-007
3.5168e-009
故所求的拟合曲线为
f(x)=2.6569×10-5t-5.2948×10-7t2+3.5168×10-9t3
3.估计其误差,并作出拟合曲线和数据的图形
输入程序: