插值与拟合实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生实验报告

了解插值与拟合的基本原理和方法;掌握用MATLAB计算插值与作最小二乘多项式拟合和曲线拟合的方法;通过范例展现求解实际问题的初步建模过程;

通过动手作实验学习如何用插值与拟合方法解决实际问题,提高探索和解决问题的能力。这对于学生深入理解数学概念,掌握数学的思维方法,熟悉处理大量的工程计算问题的方法具有十分重要的意义。

二、实验仪器、设备或软件:电脑,MATLAB软件

三、实验内容

1.编写插值方法的函数M文件;

2.用MATLAB中的函数作函数的拟合图形;

3.针对实际问题,试建立数学模型,并求解。

四、实验步骤

1.开启软件平台——MATLAB,开启MATLAB编辑窗口;

2.根据各种数值解法步骤编写M文件;

3.保存文件并运行;

4.观察运行结果(数值或图形);

5.写出实验报告,并浅谈学习心得体会。

五、实验要求与任务

根据实验内容和步骤,完成以下具体实验,要求写出实验报告(实验目的→问题→数学模型→算法与编程→计算结果→分析、检验和结论→心得体会)。

1.天文学家在1914年8月的7次观测中,测得地球与金星之间距离(单位:米),并取得常用对数值,与日期的一组历史数据如下表:

由此推断何时金星与地球的距离(米)的对数值为9.93518?

解:输入命令

days=[18 20 22 24 26 28 30];

distancelogs=[9.96177 9.95436 9.94681 9.93910 9.93122 9.92319 9.91499]; t1=interp1(distancelogs,days,9.93518) %线性插值

t2=interp1(distancelogs,days,9.93518,'nearest') %最近邻点插值

t3=interp1(distancelogs,days,9.93518,'spline') %三次样条插值

t4=interp1(distancelogs,days,9.93518,'cubic') %三次插值

计算结果:

t1 =

24.9949

t2 =

24

t3 =

25.0000

t4 =

25.0000

综上所得,可推断25日金星与地球的距离(米)的对数值为9.93518。

2.在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)×(-50,150)里的哪些地方船要避免进入。

(1)输入插值基点数据;

(2)在矩形区域(75,200)×(-50,150)作二维插值;

(3)作海底曲面图;

(4)作出水深小于5的海域范围,即z=5的等高线。

解:

程序:

%输入插值基点数据

x=[129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5];

y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];

z=[4 8 6 8 6 8 8 9 9 8 8 9 4 9];

z=-z;

%在矩形区域(75,200)×(-50,150)作二维插值

cx=75:0.5:200;

cy=-50:0.5:150;

cz=griddata(x,y,z,cx,cy','cubic');

%作海底曲面图

subplot(1,2,1),meshz(cx,cy,cz)

xlabel('x'),ylabel('y'),zlabel('z')

%作出水深小于5的海域范围,即z=5的等高线

subplot(1,2,2),[c,h]=contour(cx,cy,cz);

clabel(c,h,-5)

插值后作出的海底曲面图及等高线图如下:

若船的吃水深度为5英尺,在矩形区域(75,200)×(-50,150)里如上图等高线-5m 内的地方船要避免进入。

3.用电压V =10伏的电池给电容器充电,电容器上t 时刻的电压为

τt

e V V V t v -

--=)()(0,其中V 0是电容器的初始电压,τ是充电常数。试由下面一组(t ,v )数据确定V 0和 τ。

解一:

(1)用命令lsqcurvefit。

1)编写M文件curvefun1.m

function f=curvefun1(x,tdata)

f=10-(10-x(1))*exp(-tdata/x(2));

2)主程序xitithree1.m如下

tdata=[0.5 1 2 3 4 5 7 9];

cdata=[6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63];

x0=[0.4316,1];

x=lsqcurvefit('curvefun1',x0,tdata,cdata)

f=curvefun1(x,tdata)

3)运行主程序,得结果为

x =

5.5577 3.5002

f =

6.1490 6.6616

7.4913

8.1147 8.5832 8.9353

9.3987 9.6604

即拟合得V0=5.5577, =3.5002。

(2)用命令lsqnonlin。

1)编写M文件curvefun2.m

function f=curvefun2(x)

tdata=[0.5 1 2 3 4 5 7 9];

cdata=[6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63];

f=cdata-10+(10-x(1))*exp(-tdata/x(2));

2)主程序xitithree2.m如下

x0=[0.4316,1];

x=lsqnonlin('curvefun2',x0)

f=curvefun2(x)

3)运行主程序,得结果为

x =

5.5577 3.5002

相关文档
最新文档