数模培训MATLAB基础.docx

上传人:b****5 文档编号:5143538 上传时间:2022-12-13 格式:DOCX 页数:19 大小:138.43KB
下载 相关 举报
数模培训MATLAB基础.docx_第1页
第1页 / 共19页
数模培训MATLAB基础.docx_第2页
第2页 / 共19页
数模培训MATLAB基础.docx_第3页
第3页 / 共19页
数模培训MATLAB基础.docx_第4页
第4页 / 共19页
数模培训MATLAB基础.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数模培训MATLAB基础.docx

《数模培训MATLAB基础.docx》由会员分享,可在线阅读,更多相关《数模培训MATLAB基础.docx(19页珍藏版)》请在冰豆网上搜索。

数模培训MATLAB基础.docx

数模培训MATLAB基础

数模培训

一、曲线插值与拟合

二、数值微分与积分

三、微分方程数值解

四、优化问题

五、回归分析

1.一维插值

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

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

例1:

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

x

0

3

5

7

9

11

12

13

14

15

y

0

1.2

1.7

2.0

2.1

2.0

1.8

1.2

1.0

1.6

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

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')

练习:

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

深度

446

714

950

1422

1634

水温

7.04

4.28

3.40

2.54

2.13

求深度为500、1000、1500米处的水温。

解:

输入程序:

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个点的温度值,试求出此薄片的温度分布,并绘出等温线图。

(数据如下表)

y

x

1

2

3

4

5

1

82

81

80

82

84

2

79

63

61

65

87

3

84

84

82

85

86

程序:

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在一定的范围内服从虎克定律。

试根据下列数据确定弹性系数k,并给出不服从虎克定律时的近似公式。

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

解题思路:

可以用一阶多项式拟合求出k,以及近似公式。

在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轴上的区间划取足够多的分点xi,在每个分点处可测出南北边界点的对应坐标y1,y2。

用这样的方法得到下表

x

7.0

10.5

13.0

17.5

34.0

40.5

44.5

48.0

56.0

y1

44

45

47

50

50

38

30

30

34

y2

44

59

70

72

93

100

110

110

110

x

61.0

68.5

76.5

80.5

91.0

96.0

101.0

104.0

106.5

y1

36

34

41

45

46

43

37

33

28

y2

117

118

116

118

118

121

124

121

121

x

111.5

118.0

123.5

136.5

142.0

146.0

150.0

157.0

158.0

y1

32

65

55

54

52

50

66

66

68

y2

121

122

116

83

81

82

86

85

68

根据地图比例知18mm相当于40km,试由上表计算瑞士国土的近似面积。

(精确值为41288km2)。

解题思路:

数据实际上表示了两条曲线,实际上我们要求由两曲线所围成的图形的面积。

解此问题的方法是数值积分的方法。

具体解时我们遇到两个问题:

1。

数据如何输入;2。

没有现成的命令可用。

解:

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

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

键入

loadmianji.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没有相应的命令。

想得到更理想的结果,我们可以自己设计解决问题的方法。

(可以编写辛普森数值计算公式的程序,或用拟合的方法求出被积函数,再利用MATLAB的命令quad,quad8)

5.数值微分

实际的例:

已知20世纪美国人口统计数据如下,根据数据计算人口增长率。

(其实还可以对于后十年人口进行预测)

年份

1900

1910

1920

1930

1940

1950

1960

1970

1980

1990

人口×106

76.0

92.0

106.5

123.2

131.7

150.7

179.3

204.0

226.5

251.4

解题思路:

设人口是时间的函数x(t).于是人口的增长率就是x(t)对t的导数.如果计算出人口的相关变化率

那么人口增长满足

,它在初始条件x(0)=x0下的解为

.(用以检查计算结果的正确性)

解:

此问题的特点是以离散变量给出函数x(t),所以就要用差分来表示函数x(t)的导数.

常用后一个公式。

(因为,它实际上是用二次插值函数来代替曲线x(t))即常用三点公式来代替函数在各分点的导数值:

MATLAB用命令diff按两点公式计算差分;此题自编程序用三点公式计算相关变化率.编程如下:

fori=1:

length(x)

ifi==1

r

(1)=(-3*x

(1)+4*x(1+1)-x(1+2))/(20*x

(1));

elseifi~=length(x)

r(i)=(x(i+1)-x(i-1))/(20*x(i));

else

r(length(x))=(x(length(x)-2)-4*x(length(x)-1)+3*x(length(x)))/(20*x(length(x)));

end

end

r=r;

保存为diff3.m文件听候调用.再在命令窗内键入

X=[1900,1910,1920,1930,1940,1950,1960,1970,1980,1990];

x=[76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4];

diff3;

由于r以离散数据给出,所以要用数值积分计算.键入

x(1,1)*exp(trapz(X(1,1:

9),r(1:

9)))

数值积分命令:

trapz(x),trapz(x,y),quad(‘fun’,a,b)等.

6:

微分方程数值解(单摆问题)

单摆问题的数学模型是

在初始角度不大时,问题可以得到很好地解决,但如果初始角较大,此方程无法求出解析解.现问题是当初始角为100和300时,求出其解,画出解的图形进行比较。

解:

若θ0较小,则原方程可用

来近似.其解析解为θ(t)=θ0cosωt,

.

若不用线性方程来近似,那么有两个模型:

取g=9.8,l=25,100=0.1745,300=0.5236.用MATLAB求这两个模型的数值解,先要作如下的处理:

令x1=θ,x2=θ’,则模型变为

再编函数文件

functionxdot=danbai(t,x)

xdot=zeros(2,1);

xdot

(1)=x

(2);xdot

(2)=-9.8/25*sin(x

(1));

在命令窗口键入

[t,x]=ode45(‘danbai’,[0:

0.1:

20],[0.1745,0]);

[t,y]=ode45(‘danbai’,[0:

0.1:

20],[0.5236,0]);

plot(t,x(:

1),’r’,t,y(:

1),’k’);

参考书:

数学实验,高等教育出版社

7.解优化问题

线性规划有约束极小问题

模型

用命令

[x,fval]=linprog(f,A,b,A1,b1,lb,ub)

例1:

Findxthatminimizes

f(x)=-5x1-4x2-6x3

subjectto

x1-x2+x3≦20

3x1+2x2+4x3≦42

3x1+2x2≦30

0≦x1,0≦x2,0≦x3

First,enterthecoefficients:

f=[-5;-4;-6]

A=[1-11

324

320];

b=[20;42;30];

lb=zeros(3,1);

Next,callalinearprogrammingroutine:

[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);

Enteringx,fval,lambda.ineqlin,andlambda.lowergets

x=

0.0000

15.0000

3.0000

fval=

-78.0000

和其它信息。

例2:

解问题

把问题极小化并将约束标准化

键入c=[-2,-3,5];a=[-2,5,-1];b=-10;a1=[1,1,1];b1=7;LB=[0,0,0];

[x,y]=linprog(c,a,b,a1,b1,LB)得当X=(6.4286,0.5714,0.0000)时,z=-14.5714最大.

例3:

解问题

解:

键入

c=[-2,-1,1];a=[1,4,-1;2,-2,1];b=[4;12];a1=[1,1,2];b1=6;lb=[0;0;-inf];ub=[inf;inf;5];

[x,z]=linprog(c,a,b,a1,b1,lb,ub)得当X=(4.6667,0.0000,0.6667)时,z=-8.6667最小.

非线性规划有约束极小问题

模型1

用命令x=constr('f',x0)。

Examples

Findvaluesofxthatminimizef(x)=-x1x2x3,startingatthepointx=[10;10;10]andsubjecttotheconstraints0≤x1+2x2+2x3≤72.

-x1-2x2-2x3≤0,x1+2x2+2x3≤72,

第一步:

编写M文件

function[f,g]=myfun(x)

f=-x

(1)*x

(2)*x(3);

g

(1)=-x

(1)-2*x

(2)-2*x(3);

g

(2)=x

(1)+2*x

(2)+2*x(3)-72;

第二步:

求解

在MATLAB工作窗中键入

x0=[10,10,10];

x=constr('myfun',x0)即可

模型2:

MATLAB求解此问题的命令是:

[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(‘fun’,x0,A,b,A1,b1,LB,UB,’nonlcon’,

options,p1,p2,…)

fun是目标函数的m_文件名.nonlcon是约束函数C(x)和C1(x)的m_文件名.文件输出为[C,C1].

例:

求解最优化问题

第1步:

建立目标函数和非线性约束的m_文件.

Functiony=e1511(x)%目标函数的m_文件

Y=exp(x

(1))*(4*x

(1)^2+2*x

(2)^2+4*x

(1)*x

(2)+2*x

(2)+1);

Function[c1,c2]=e1511b(x)%非线性约束的m_文件

C1=[1.5+x

(1)*x

(2)-x

(1)-x

(2);-x

(1)*x

(2)-10];

C2=0;

第2步:

运行程序.键入

x0=[-1,1];a1=[1,1];b1=0;

[x,f,exitflab,output]=fmincon(‘e1511’,x0,[],[],a1,b1,[],[],’e1511b’)

得结果.

输出结果的意义:

经过4次迭代(iterations:

4)收敛到了(exitfag=1)最优解x

(1)=-1.2247,x

(2)=1.2247,目标函数最优值为1.8951.

非线性无约束极小问题

用命令x=fmin('f',x0)。

或用命令x=fminu('f',x0),或用命令x=fmins('f',x0)。

非线性最小二乘问题

用命令x=leastsq('f',x0),或用命令x=curvefit('f',x0)。

二次规划

用命令x=qp(H,c,A,b)。

关于这些命令的详细使用规则和例子,用借助help进行查阅。

参考书:

科学计算技术与MATLAB,科学出版社

8.回归分析

前面我们曾学过拟合。

但从统计的观点看,对拟合问题还需作回归分析。

例如:

有描述问题甲和问题乙的两组数据(x,y)和(x,z)。

设x=[1,2,3,4];y=[1.0,1.3,1.5,2.02.3];z=[0.6,1.95,0.9,2.85,1.8]。

如果在平面上画出散点图,那么问题甲的四个点基本在一条直线上而问题乙的四个点却很散乱。

如果都用命令polyfit(x,y,1),polyfit(x,z,1)来拟合,将得到同一条直线。

自然对问题甲的信任程度会高于对问题乙的信任程度。

所以有必要对所得结果作科学的评价分析。

回归分析就是解决这种问题的科学方法。

下面结合三个具体的例子介绍MATLAB实现回归分析的命令。

1.合金强度y与其中含碳量x有密切关系,如下表

x

0.10

0.11

0.12

0.13

0.14

0.15

0.16

0.17

0.18

0.20

0.21

0.23

y

42.0

41.5

45.0

45.5

45.0

47.5

49.0

55.0

50.0

55.0

55.5

60.5

根据此表建立y(x)。

并对结果作可信度进行检验、判断x对y影响是否显著、检查数据中有无异常点、由x的取值对y作出预测。

2.将17至29岁的运动员每两岁一组分为7组,每组两人测量其旋转定向能力,以考察年龄(x)对这种运动能力(y)的影响。

现得到一组数据如下表

年龄

17

19

21

23

25

27

29

第一人

20.48

25.13

26.15

30.0

26.1

20.3

19.35

第二人

24.35

28.11

26.3

31.4

26.92

25.7

21.3

试建立关系y(x),并作必要的统计分析。

3.某厂生产的某产品的销售量与竞争对手的价格x1和本厂的价格x2有关。

下表是该产品在10个城市的销售记录。

x1

120

140

190

130

155

175

125

145

180

150

x2

100

110

90

150

210

150

250

270

300

250

y(个)

102

100

120

77

46

93

26

69

65

85

试建立关系y(x1,x2),对结果进行检验。

若某城市本厂产品售价160(元),对手售价170(元),预测此产品在该城市的销售量。

解1:

在x-y平面上画散点图,直观地知道y与x大致为线性关系。

用命令polyfit(x,y,1)可得y=140.6194x+27.0269。

作回归分析用命令

[b,bint,r,rint,ststs]=regress(y,x,alpha)可用help查阅此命令的具体用法

残差及置信区间可以用rcoplot(r,rint)画图

设回归模型为y=β0+β1x,

在MATLAB命令窗口中键入下列命令进行回归分析

x=0.1:

0.01:

0.18;x=[x,0.2,0.21,0.23]';

y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]';

X=[ones(12,1),x];

[b,bint,r,rint,stats]=regress(y,X,0.05);

b,bint,stats,rcoplot(r,rint)

得结果和图

b=

27.0269

140.6194

bint=

22.322631.7313

111.7842169.4546

stats=

0.9219118.06700.0000

结果含义为

β0=27.0269β1=140.6194

β0的置信区间是[22.3226,31.7313]

β1的置信区间是[111.7842,169.4546]

R2=0.9219F=118.0670,p<10-4.

R是衡量y与x的相关程度的指标,称为相关系数。

R越大,x与y关系越密切。

通常R大于0.9才认为相关关系成立。

F是一统计指标

p是与F对应的概率,当p<0.05时,回归模型成立。

此例中p=0<10-4<0.05,所以,所得回归模型成立。

观察所得残差分布图,看到第8个数据的残差置信区间不含零点,此点视为异常点,剔除后重新计算。

此时键入:

X(8,:

)=[];

y(8)=[];

[b,bint,r,rint,stats]=regress(y,X);

b,bint,stats,rcoplot(r,rint)

得:

b=

27.0992

137.8085

bint=

23.856330.3421

117.8534157.7636

stats=

0.9644244.05710.0000

可以看到:

置信区间缩小;R2、F变大,所以应采用修改后的结果。

解2:

在x-y平面上画散点图,直观地知道y与x大致为二次函数关系。

设模型为y=a1x2+a2x+a3

此问题可以利用命令polyfit(x,y,2)来解,也可以像上题一样求解。

下面介绍用命令polytool来解。

首先在命令窗口键入

x=17:

2:

29;x=[x,x];

y=[20.48,25.13,26.1530,26.1,20.3,19.35,24.35,28.11,26.3,31.4,26.92,25.7,21.3];

polytool(x,y,2)

得到一个交互式窗口

窗口中绿线为拟合曲线、红线为y的置信区间、可通过移动鼠标的十字线或通过在窗口下方输入来设定x值,窗口左边则输出与x对应的y值及y的置信区间。

通过左下方的Export下拉菜单可输出回归系数等。

更详细的解释可通过help查阅。

解3.这是一个多元回归问题。

若设回归模型是线性的,即设y=β0+β1x1+β2x2

那么依然用regress(y,x,alpha)求回归系数。

键入

x1=[120,140,190,130,155,175,125,145,180,150];

x2=[100,110,90,150,210,150,250,270,300,250];

y=[102,100,120,77,46,93,26,6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1