插值与拟合实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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