数学建模实验.docx
《数学建模实验.docx》由会员分享,可在线阅读,更多相关《数学建模实验.docx(38页珍藏版)》请在冰豆网上搜索。
![数学建模实验.docx](https://file1.bdocx.com/fileroot1/2022-11/25/0ed6446d-a776-4504-9e3d-c271219230ba/0ed6446d-a776-4504-9e3d-c271219230ba1.gif)
数学建模实验
数学建模实验
本书中的实验均采用Mathematica软件,当你输入命令后,按下Shift+Enter键就可执行你的命令.
实验一
1.使用绘图命令Plot画出各种函数的图形,使用绘图命令ParametricPlot画出各种参数方程的图形.你可以修改其中的参数,以便掌握其使用方法(后面的实验也如此).
(1)Plot[Sin[Sqrt[1+Cos[2x]]],{x,-2Pi,2Pi}]
(2)Plot[Tan[x],{x,-10,10},PlotRange->{-5,5}]
(3)Plot[{ArcSin[x],ArcCos[x]},{x,-1,1},PlotStyle->
{{RGBColor[0,0,1],Thickness[0.01]},{RGBColor[1,0,0],
Dashing[{0.05,0.05}]}}]
(4)a1=Plot[x,{x,-5,5},PlotStyle->{RGBColor[0,0,1]}]
a2=Plot[Sin[x],{x,-5,5},PlotStyle->{RGBColor[0,1,0]}]
a3=Plot[x+Sin[x],{x,-5,5},PlotStyle->{RGBColor[1,0,0]}]
Show[a1,a2,a3]
(5)Plot[Sin[x^2],{x,0,3},AxesLabel->{"xvalue","sin(x^2)"}]
(6)Plot[Sin[x^2],{x,0,3},Axes->None,PlotLabel->{"sin(x^2)"}]
(7)ParametricPlot[{Sin[t],Cos[t]},{t,0,2Pi}]
Show[%,AspectRatio->Automatic]
(8)r[t_]=2Cos[3t]
ParametricPlot[{r[t]Cos[t],r[t]Sin[t]},{t,0,2Pi},
AspectRatio->Automatic]
(9)sgn[x_]:
=-1/;x<0;sgn[x_]:
=0/;x=0;sgn[x_]:
=1/;x>0
Plot[sgn[x],{x,-7,7}]
(10)f[x_]:
=x^2Sin[1/x]/;x!
=0;f[x_]:
=0/;x=0
Plot[f[x],{x,-1,1}]
2.观察数列xn=(1+1/n)n的变化趋势.
(1)For[i=1,i<10,i++,Xn=N[(1+1/i)^i,8];Print[i,"",Xn]]
(2)For[i=10,i<=1000000,i*=10,Xn=N[(1+1/i)^i,10];Print[i,"",Xn]]
(3)Xn=Table[(1+1/n)^n,{n,1,1000}];ListPlot[Xn]
3.用Limit命令求极限.
(1)Limit[(Tan[x]-Sin[x])/x^3,x->0]
(2)Limit[x*(Sqrt[1+x^2]-x),x->+Infinity]
实验二
1.用D[f[x],{x,n}]命令求函数f对x的n阶微商.
(1)D[Sin[3x],x]
(2)D[x*E^x,{x,5}]
(3)f[x_]=Exp[7x];f'[a]
2.用Dt[f]命令求函数f的微分.
(1)Dt[Sin[x]^n]
(2)SetAttributes[n,Constant];Dt[Sin[x]^n]
3.隐函数与参数方程确定的函数的微商.
(1)y=f[x];D[x*y-E^x+E^y==0,x]
Solve[%,f'[x]]
(2)D[Sin[t],t]/D[Cos[t],t]
4.求方程x3–3x–1=0的根.
(1)FindRoot[x^3-3x-1==0,{x,2}]
(2)Solve[x^3-3x-1==0,x]
(3)NSolve[x^3-3x-1==0,x]
(4)Plot[x^3-3x-1,{x,-3,3}]
实验三
1.用FindMinimum[f[x],{x,x0,x1}]命令求函数f在x0,x1附近的极小值.
FindMinimum[2x^3-6x^2-18x+7,{x,0}]
FindMinimum[-2x^3+6x^2+18x-7,{x,0}]
2.根据二阶微商检验法编制Mathematica程序求出f(x)=2x3–6x2–18x+7所有的驻点,再求出极小值(点)、极大值(点).
Clear[f];f[x_]:
=2x^3-6x^2-18x+7;
root=Solve[f'[x]==0,x];
maxpoint={};
minpoint={};
noanswer={};
delta=D[f[x],{x,2}]/.root;
For[i=1,i<=Length[delta],i++,
If[delta[[i]]<0,
maxpoint=Append[maxpoint,{x/.root[[i]],f[x]/.root[[i]]}],
If[delta[[i]]>0,
minpoint=Append[minpoint,{x/.root[[i]],f[x]/.root[[i]]}],
nopoint=Append[nopoint,{x/.root[[i]],f[x]/.root[[i]]}]]]];
Print["max_point=",maxpoint];
Print["min_point=",minpoint];
Print["Idon'tknow=",nopoint]
实验四
1.编制Mathematica程序观察曲边梯形y=x2,0≤x≤1.5的面积.
Clear[f];Clear[x];
f[x_]=x^2;a=0;b=N[1.5];m=0;
g=Plot[f[x],{x,a,b},PlotStyle->{RGBColor[1,0,0]},
DisplayFunction->Identity];
For[j=3,j<=10,j++,m=j;tt1={};tt2={};
For[i=0,itt1=Append[tt1,Graphics[{RGBColor[0,1,0],
Rectangle[{x1,0},{x2,f[x2]}]}]];
tt2=Append[tt2,Graphics[{RGBColor[0,0,1],
Rectangle[{x1,f[x1]},{x2,0}]}]]];
Print[""];
Show[tt1,tt2,g,DisplayFunction->$DisplayFunction,
PlotLabel->m"个分割点的图示"]]
2.用Integrate[f[x],x]]命令求原函数,用NIntegrate[f[x],{x,a,b}]命令求定积分的近似值.
(1)F[x_]=Integrate[Tan[x]^2,x]
F[Pi/6]-F[0]
(2)NIntegrate[Tan[x]^2,{x,0,Pi/6}]
(3)F[x_]=Integrate[1/(x*Sqrt[x^2-1]),x]
(4)NIntegrate[1/(x*Sqrt[x^2-1]),{x,1,+Infinity}]
(5)F[x_]=Integrate[1/Cos[x]^3,x]
F[Pi/3]-F[0]
(6)NIntegrate[Sin[x]^2/(1+E^x),{x,-Pi/4,Pi/4}]
3.用Integrate命令计算二次积分.
求
dy:
Integrate[2x*y,{x,0,1/2},{y,x,1-x}]
实验五
1.求微分方程y'+ysinx=sin3x的通解:
DSolve[y'[x]+y[x]Sin[x]==Sin[x]^3,y[x],x]
2.求微分方程的y'-ytanx=secx,y(0)=0的特解:
DSolve[{y'[x]-y[x]Tan[x]==Sec[x],y[0]==0},y[x],x]
3.求微分方程y"+6y'+9y=10sinx,y(0)=0,y'(0)=0的特解:
DSolve[{D[y[x],{x,2}]+6y'[x]+9y[x]==10Sin[x],y[0]==0,
y'[0]==0},y[x],x]
实验六
1.用Plot3D等命令绘制曲面的图形.
(1)马鞍面:
Plot3D[x^2/4-y^2/9,{x,-8,8},{y,-15,15},
PlotPoints->60,BoxRatios->{1,1,1},PlotRange->{-5,5}]
(2)椭圆抛物面:
Plot3D[x^2/4-y^2/9,{x,-8,8},{y,-15,15},
PlotPoints->20,BoxRatios->{1,1,1},PlotRange->{0,15}]
(3)球面与柱面:
t1=ParametricPlot3D[{Cos[u]Sin[v],Sin[u]Sin[v],Cos[v]},{u,0,2Pi},{v,0,Pi},PlotPoints->50]
t2=ParametricPlot3D[{(1+Cos[u])/2,Sin[u]/2,v},{u,0,2Pi},{v,0,1},
PlotPoints->50]
Show[t1,t2]
(4)单叶双曲面:
ParametricPlot3D[{Sec[u]Sin[v],2Sec[u]Cos[v],3Tan[u]},
{u,-Pi/4,Pi/4},{v,0,2Pi},PlotPoints->80]
(5)双叶双曲面:
t1=ParametricPlot3D[{Tan[u]Sin[v],2Tan[u]Cos[v],2Sec[u]},
{u,-Pi/3,Pi/3},{v,0,2Pi},PlotRange->{-4,4},BoxRatios->{1,1,3}]
t2=ParametricPlot3D[{Tan[u]Sin[v],2Tan[u]Cos[v],-2Sec[u]},
{u,-Pi/3,Pi/3},{v,0,2Pi},PlotRange->{-4,4},BoxRatios->{1,1,3}]
Show[t1,t2]
(6)墨西哥帽:
Plot3D[Cos[Sqrt[x^2+y^2]],{x,-10,10},{y,-10,10},PlotPoints->30,Lighting->True]
(7)石子垂直落入水中形成的水纹面:
Clear[f];
f[x_,y_]:
=If[x^2+y^2!
=0,Sin[Sqrt[x^2+y^2]]/Sqrt[x^2+y^2],1]
Plot3D[f[x,y],{x,-6Pi,6Pi},{y,-6Pi,6Pi},Ticks->None,Boxed->False,Axes->False,Mesh->False,PlotPoints->80,BoxRatios->{8,8,1},PlotRange->{-1,1}]
函数
,为使显示效果比较好,将x、y、z轴方向的显示比例为8:
8:
1(BoxRatios->{8,8,1}),并且不显示坐标轴(Axes->False)、数值标记(Ticks->None)、立体框线(Boxed->False)以及网格线(Mesh->False).
2.用ContourPlot命令绘制函数的等高线.
ContourPlot[x^2-y^2,{x,-6,6},{y,-6,6},Contours->20,PlotPoint->50,ContourShading->False]
Contours->20表示绘制20条等高线,PlotPoint->50表示采样点数为50,ContourShading->False表示去掉阴影部分.
3.求多元函数的偏微商.
(1)D[3x*y^2-2y+5x^2*y^2,x]
(2)D[3x*y^2-2y+5x^2*y^2,y]
(3)D[3x*y^2-2y+5x^2*y^2,{x,2}]
(4)D[3x*y^2-2y+5x^2*y^2,{y,2}]
(5)D[3x*y^2-2y+5x^2*y^2,x,y]
(6)D[3x*y^2-2y+5x^2*y^2,x,y]/.{x->-1,y->2}
实验七
利用根的存在定理求方程的根
实验目的:
1.掌握根的存在定理;
2.会用根的存在定理求方程的近似根;
3.具有初级编程能力;
4.学会使用Mathematica软件求方程的根.
实验原理:
根的存在定理:
若函数f(x)在闭区间[a,b]上连续,且f(a)f(b)<0,则在(a,b)内至少有一点,使f()=0.
根据上述定理,可在(a,b)内任取一点c,当f(c)≠0时,f(a)f(c)<0和f(c)f(b)<0中有且只有一个成立,这样可缩小根的存在区间长度.依次进行下去,直到区间长度小于给定精度>0为止.
给定>0,0<<1,求方程近似根的迭代步骤:
①赋初值x0=a,x1=b,n=2,转向②;
②计算xn=
(1)xn2+xn1,转向③;
③当f(xn)f(xn2)<0时,xn1=xn2,转向④;当f(xn)f(xn2)=0时,取=xn停;
④当|xnxn1|<时,取=
(1)xn1+xn停;否则,令n=n+1,转向②.
实验内容:
1.按下列方法分别求出方程sinxx=1在(2,2)内的近似根,比较跌代次数
.
⑴编程求解.取=0.5,①=0.001,②=0.0001;
⑵编程求解.取=0.618,①=0.001,②=0.0001;
⑶使用Mathematica软件,格式如下:
FindRoot[Sin[x]-x==1,{x,-1}]
按Shift+Enter键得到结果.
2.将上述方程换成其他形式.
实验八
定积分的近似计算
实验目的:
1.利用梯形法近似计算定积分的值;
2.利用抛物线法近似计算定积分的值;
3.具有初级编程能力;
4.学会使用Mathematica软件计算定积分的值.
实验原理:
利用定积分的定义近似计算定积分的值.
1.梯形法:
设分点a=x0<x1<x2<…<xn1<xn=b将区间[a,b]分成n等分,记yk=f(xk),k=0,1,2,…,n.则
f(x)dx=[(y0+yn)/2+y1+y2+…+yn1](ba)/n.
2.抛物线法:
设分点a=x0<x1<x2<…<x2n1<x2n=b将区间[a,b]分成2n等分,记yk=f(xk),k=0,1,2,…,2n.则
f(x)dx=[(y0+y2n)+2(y2+y4+…+y2n2)+4(y1+y3+…+y2n1)](ba)/6n.
实验内容:
1.利用梯形法和抛物线法近似计算定积分
dx的值(取n=10,精确到0.0001).
2.用Mathematica软件计算定积分
dx的值.格式如下:
NIntegrate[Exp[-x^2],{x,0,1}]
3.给出正态分布函数表.[
]
实验九
捕食--被捕食模型
实验目的:
1.了解连续捕食--被捕食模型;
2.了解离散捕食--被捕食模型;
3.了解常微分方程初值问题的数值解法原理;
4.能够独立编程解初值问题的微(差)分方程(组);
5.学会使用Mathematica软件解微分方程(组).
实验原理:
捕食--被捕食模型参考教材《大学数学》P236—237,P251--252(略).
常微分方程初值问题的数值解法原理:
一阶常微分方程的一般形式
y
(x)=f(x,y)
一阶常微分方程组的一般形式
y1
(x)=f(x,y1,y2,…,yn),
y2
(x)=f(x,y1,y2,…,yn),
…………
向量形式
Y
(x)=F(x,Y)
柯西初值问题(Cauchy问题)
Y
(x)=F(x,Y),Y(x0)=Y0.
主要算法
⑴显式欧拉(Euler)方法
yk+1=yk+f(xk,yk)h+O(h2),xk+1=xk+h,k=0,1,2,….
⑵隐式欧拉(Euler)方法
yk+1=yk+f(xk+1,yk+1)h+O(h2),xk+1=xk+h,k=0,1,2,….
⑶龙格-库塔(Runge-Kutta)方法
①二阶龙格-库塔法K1=f(xk,yk),K2=f(xk+h/2,yk+K1h/2),yk+1=yk+K2h.
②四阶龙格-库塔法
K1=f(xk,yk),
K2=f(xk+h/2,yk+K1h/2),
K3=f(xk+h/2,yk+K2h/2),
K2=f(xk+h,yk+K3),
yk+1=yk+(K1+2K2+2K3+K4)h/6.
实验内容:
1.使用Mathematica软件解下列微分方程(组):
⑴y
+ysinx=sin3x,格式如下:
DSolve[y’[x]+y[x]Sin[x]==Sin[x]^3,y[x],x]
⑵y
-ytanx=secx,y(0)=0,格式如下:
DSolve[{y’[x]-y[x]Tan[x]==Sec[x],y[0]==0},y[x],x]
⑶
格式如下:
DSolve[{x’[t]==2x[t]-0.25x[t]y[t],y’[t]==-y[t]+0.01x[t]y[t]},{y[t],x[t]},t]
2.独立编程,使用显式欧拉方法解下列微分方程(组),并画出其图形:
⑴y
-ytanx=secx,y(0)=0.
⑵
x(0)=100,y(0)=8.
3.独立编程解差分方程(组):
⑴yn+2yn+13yn=0,y0=1,y1=2.求y20,y21,y22.
⑵
xn+1=1.003xn0.0001xnyn,
yn+1=0.91yn+0.0002xnyn,
xn=400,yn=10,
这里的xn与yn都取近似正整数值,求当n为多少时,xn≈400,yn≈10?
何时xn最大?
最小?
yn最大?
最小?
实验十
解矩阵方程及线性方程组
实验目的:
1.掌握初等行变换化矩阵为行阶梯形和行最简形的方法;
2.掌握解矩阵方程的方法;
3.掌握解线性方程组的方法;
4.具有初级编程能力;
5.学会使用Mathematica软件解矩阵方程及线性方程组.
实验原理:
将矩阵A=(aij)m×n化为行阶梯形的方法:
设r=1,c=1,执行①.
①是否有aic≠0(r≤i≤m),若是转到②,否则转到③;
②将第i行与第r行互换,再将第i(i=r+1,r+2,…,m)行各元素减去第r行的aic/arc倍,记r+1为r,转到③;
③记c+1为c,若r=m或c=n终止,否则转到①.
将矩阵化为行最简形的方法类似,是从右下向左上,且将行首非零元变为1.
用初等行变换求逆矩阵:
将(AI)化为行最简形即可.
解线性方程组的方法:
将增广矩阵化为行最简形即可.
实验内容:
2
2
2
7
7
7
6
4
2
4
5
7
4
0
1
2
8
9
4
9
3
3
4
1
3
2
6
8
8
8
5
8
9
5
3
8
5
5
2
6
1.按下列要求解矩阵方程:
X=
⑴自编程序;
⑵用Mathematica软件,格式如下:
A={{2,8,9,4,9},{3,3,4,1,3},{2,6,8,8,8},{5,8,9,5,3},{8,5,5,2,6}}
B={{2,2,2},{7,7,7},{6,4,2},{4,5,7},{4,0,1}}
Inverse[A].B
5x1+5x2+3x3+3x4+8x5=3,
2x1+3x2+2x3+5x4+8x5=9,
7x1+x2+9x3+9x4+2x5=7.
2.按下列要求解线性方程组:
⑴自编程序;
⑵用Mathematica软件,格式如下:
Solve[{5x1+5x2+3x3+3x4+8x5==3,2x1+3x2+2x3+5x4+8x5==9,7x1+x2+9x3+9x4+2x5==7}]
实验十一
最小二乘预测
实验目的:
1.掌握最小二乘法原理;
2.会用线性模型预测;
3.会用平方模型预测;
4.具有初级编程能力.
实验原理:
设两个变量之间对应关系如下:
(x1,y1),(x2,y2),…,(xn,yn),建立两个变量之间的函数关系(数学模型)y=f(x),使得误差平方和
n
k=1
S=∑[f(xi)yi]2
最小.
线性模型y=ax+b,
,
.
平方模型y=ax2+bx+c,误差平方和
n
k=1
S=∑[(a
+bxi+c)yi]2
其驻点满足线性方程组
实验内容:
表1给出了奥林匹克运动(1956~1984)100m自由泳男女获胜者成绩(时间).
表1
年份
获胜者(男)
国家
时间(秒)
获胜者(女)
国家
时间(秒)
1956
Hendricks
(Aus.)
55.4
Fraser
(Aus.)
62.0
1960
Devitt
(Aus.)
55.2
Fraser
(Aus.)
61.2
1964
Schollander
(U.S.)
53.4
Fraser
(Aus.)
59.5
1968
Wenden
(Aus.)
52.2
Henne
(U.S.)
60.0
1972
Spitz
(U.S.)
51.22
Neilsen
(U.S.)
58.59
1976
Montgomery
(U.S.)
49.99
Ender
(G.D.R.)
55.65
1980
Wothe
(G.D.R.)
50.40
Krauss
(G.D.R.)
54.79
1984
Gaines
(U.S.)
49.80
Steinseifer
(U.S.)
55.92