函数逼近与曲线拟合

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.估计其误差,并作出拟合曲线和数据的图形

输入程序:

相关文档
最新文档