数模培训(MATLAB基础)

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

数模培训

一、曲线插值与拟合

二、数值微分与积分

三、微分方程数值解

四、优化问题

五、回归分析

1.一维插值

对表格给出的函数,求出没有给出的函数值。

在实际工作中,经常会遇到插值问题。

例1:表1是待加工零件下轮廓线的一组数据,现需要得到x坐标每改变0.1时所对应的y的坐标.

下面是关于插值的两条命令(专门用来解决这类问题):

y=interp1(x0,y0,x) 分段线性插值

y=spline(x0,y0,x) 三次样条插值

其中x0,y0是已知的节点坐标,是同维向量。y对应于x处的插值。y与x是同维向量。解决上述问题,我们可分两步:

一用原始数据绘图作为选用插值方法的参考.

二确定插值方法进行插值计算

对于上述问题,可键入以下的命令:

x0=[0,3,5,7,9,11,12,13,14,15]';

y0=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6]'

plot(x0,y0) %完成第一步工作

x=0:0.1:15;

y=interp1(x0,y0,x'); %用分段线性插值完成第二步工作

plot(x,y)

y=spline(x0,y0,x');

plot(x,y) %用三次样条插值完成第二步工作

练习:对y=1/(1+x2),-5≤x≤5,用n(=11)个节点(等分)作上述两种插值,用m(=21)个插值点(等分)作图,比较结果。

解:键入并运行如下命令

n=11;m=21;x=-5:10/(m-1):5;y=1./(1+x.^2);

xo=-5:10/(n-1):5;yo=1./(1+xo.^2);

y1=interp1(xo,yo,x);

y2=spline(xo,yo,x);

plot(x,y,'r',x,y1,'b',x,y2,'k')

练习:在某处测得海洋不同深度处水温如下:

解:输入程序:

D=[446,714,950,1422,1634];

T=[7.04,4.28,3.40,2.54,2.13];

Di=[500,1000,1500];

Ti=interp1(D,T,Di)

MATLAB的命令interp1(X,Y,Xi,’method’)用于一元插值.其中Method可选’nearest’(最近邻插值),’linear’(线性插值),’spline’(三次样条插值),’cubic’(三次多项式插值)

2.二维插值

MATLAB中二维插值的命令是:

z=interp2(x0,y0,z0,x,y,'meth')

例2:在一个长为5个单位,宽为3个单位的金属薄片上测得15个点的温度值,试求出此薄片的温度分布,并绘出等温线图。(数据如下表)

程序:temps=[82,81,80,82,84;79,63,61,65,87;84,84,82,85,86];

mesh(temps) %根据原始数据绘出温度分布图,可看到此图的粗造度。

%下面开始进行二维函数的三阶插值。

width=1:5; depth=1:3; di=1:0.2:3; wi=1:0.2:5;

[WI,DI]=meshgrid(wi,di);%增加了节点数目

ZI=interp2(width,depth,temps,WI,DI,'cubic');% 对数据(width,depth,temps)进 % 行三阶插值拟合。

surfc(WI,DI,ZI)

contour(WI,DI,ZI)

3.曲线拟合

假设一函数g(x)是以表格形式给出的,现要求一函数f(x),使f(x)在某一准则下与表格函数(数据)最为接近。

由于与插值的提法不同,所以在数学上理论根据不同,解决问题的方法也不同。

此处,我们总假设f(x)是多项式。

例3:弹簧在力F的作用下伸长x厘米。F和x在一定的范围内服从虎克定律。试根据下

在MATLAB中,用以下命令拟合多项式。

polyfit(x0,y0,n)

一般,也需先观察原始数据的图像,然后再确定拟和成什么曲线。

对于上述问题,可键入以下的命令:

x=[1,2,4,7,9,12,13,15,17]';

F=[1.5,3.9,6.6,11.7,15.6,18.8,19.6,20.6,21.1]';

plot(x,F,'.')

从图像上我们发现:前5个数据应与直线拟合,后5个数据应与二次曲线拟合。于是键入a=polyfit(x(1:5),F(1:5),1); a=polyfit(x(5:9),F(5:9),2)

注意:有时,面对一个实际问题,究竟是用插值还是用拟合不好确定,还需大家在实际中仔细区分。同时,大家(包括学过计算方法的同学)注意去掌握相应的理论知识。

4.数值积分

先看一个例子:

例4.现要根据瑞士地图计算其国土面积。于是对地图作如下的测量:以西东方向为横轴,以南北方向为纵轴。(选适当的点为原点)将国土最西到最东边界在x轴上的区间划取足够多的分点x i,在每个分点处可测出南北边界点的对应坐标y1,y2。用这样的方

根据地图比例知18mm相当于40km,试由上表计算瑞士国土的近似面积。(精确值为41288km2)。

解题思路:数据实际上表示了两条曲线,实际上我们要求由两曲线所围成的图形的面积。解此问题的方法是数值积分的方法。具体解时我们遇到两个问题:1。数据如何输入;2。没有现成的命令可用。

解:对于第一个问题,我们可把数据考备成M文件(或纯文本文件)。

然后,利用数据绘制平面图形。键入

load mianji.txt

A=mianji';

plot(A(:,1),A(:,2),'r',A(:,1),A(:,3),'g')

接下来可以计算面积。键入:

a1=trapz(A(:,1)*40/18,A(:,2)*40/18);

a2=trapz(A(:,1)*40/18,A(:,3)*40/18);

d=a2-a1

d = 4.2414e+004

至此,问题可以说得到了解决。之所以说还有问题,是我们觉得误差较大。但计算方法的理论给了我们更精确计算方法。只是MATLAB没有相应的命令。想得到更理想的结果,我们可以自己设计解决问题的方法。(可以编写辛普森数值计算公式的程序,或用拟合的方法求出被积函数,再利用MA TLAB的命令quad,quad8)

相关文档
最新文档