项目四 无穷级数与微分方程实验2 微分方程(基本实验) 实验目的 理解常微分方程解的概念以及积分曲线和方向场的概念,掌握运用Mathematica求微分方程及方程组解的常用命令和措施. 基本命令 1. 求微分方程的解的命令DSolve对于可以用积分措施求解的微分方程和微分方程组,可用Dsolve命令来求其通解或特解.例如,求方程的通解, 输入 DSolve[y ''[x]+3y '[x]+2y[x]==0,y[x],x]则输出具有两个任意常数C[1]和C[2]的通解: 注:在上述命令中,一阶导数符号 ' 是通过键盘上的单引号 ' 输入的,二阶导数符号 '' 要输入两个单引号,而不能输入一种双引号.又如,求解微分方程的初值问题: 输入Dsolve[{y''[x]+4 y'[x]+3y[x]==0,y[0]==6, y'[0]==10},y[x],x] (*大括号把方程和初始条件放在一起*)则输出 2. 求微分方程的数值解的命令NDSolve对于不可以用积分措施求解的微分方程初值问题,可以用NDSolve命令来求其特解.例如规定方程的近似解, 输入 NDSolve[{y'[x]==y[x]^2+x^3,y[0]==0.5},y[x],{x,0,1.5}] (*命令中的{x,0,1.5}表达相应的区间*)则输出 {{y->InterpolatingFunction[{{0.,1.5}},< >]}}注:由于NDSolve命令得到的输出是解的近似值. 一方面在区间[0,1.5]内插入一系列点, 计算出在这些点上函数的近似值, 再通过插值措施得到在区间上的近似解.3. 一阶微分方程的方向场一般地,我们可把一阶微分方程写为的形式,其中是已知函数. 上述微分方程表白:未知函数在点处的斜率等于函数在点处的函数值. 因此,可在平面上的每一点, 作出过该点的以为斜率的一条很短的直线(即是未知函数的切线). 这样得到的一种图形就是微分方程的方向场. 为了便于观测, 事实上只要在平面上取合适多的点,作出在这些点的函数的切线. 顺着斜率的走向画出符合初始条件的解,就可以得到方程的近似的积分曲线. 例如, 画出的方向场.输入<True,ScaleFunction->(1&),ScaleFactor->0.16,HeadLength->0.01,PlotPoints->{20,25}];则输出方向场的图形(图2.1), 从图中可以观测到, 当时始条件为时, 这个微分方程的解介于和1之间, 且当x趋向于或时, 分别趋向于与1. 图2.1 图2.2 下面求解这个微分方程, 并在同一坐标系中画出方程的解与方向场的图解. 输入sol=DSolve[{y'[x]==1-y[x]^2,y[0]==0},y[x],x];g2=Plot[sol[[1,1,2]],{x,-3,3},PlotStyle->{Hue[0.1],Thickness[0.005]}];Show[g2,g1,Axes->None,Frame->True];则输出微分方程的解,以及解曲线与方向场的图形(图2.2). 从图中可以看到, 微分方程的解与方向场的箭头方向相吻合.实验内容 用Dsolve命令求解微分方程例2.1 (教材 例2.1) 求微分方程 的通解. 输入Clear[x,y];DSolve[y '[x]+2x*y[x]==x*Exp[-x^2],y[x],x]或 DSolve[D[y[x],x]+2x*y[x]==x*Exp[-x^2],y[x],x]则输出微分方程的通解: 其中C[1]是任意常数. 例2.2 (教材 例2.2) 求微分方程在初始条件下的特解. 输入Clear[x,y];DSolve[{x*y ' [x]+y[x]-Exp[x]==0,y[1]==2 E},y[x],x]则输出所求特解: 例2.3 (教材 例2.3) 求微分方程的通解. 输入DSolve[y ''[x]-2y '[x]+5y[x]==Exp[x]*Cos[2 x],y[x],x]//Simplify则输出所求通解: 例2.4 (教材 例2.4) 求解微分方程, 并作出其积分曲线.输入g1=Table[Plot[E^x+x^3/3+c1+x*c2,{x,-5,5},DisplayFunction->Identity],{c1,-10,10,5},{c2,-5,5,5}];Show[g1,DisplayFunction->$DisplayFunction];则输出积分曲线的图形(图2.3).图2.3例2.5 (教材 例2.5) 求微分方程组在初始条件下的特解. 输入Clear[x,y,t];DSolve[{x' [t]+x[t]+2 y[t]==Exp[t], y'[t] -x[t]- y[t]==0,x[0]==1,y[0]==0},{x[t],y[t]},t]则输出所求特解: 例2.6 验证是微分方程的通解.输入命令<n},{n,-3,3}],{x,-3,3}];g2=PlotVectorField[{1,x^2/(y^4-2)},{x,-3,3},{y,-3,3},Frame->True,ScaleFunction->(1&),ScaleFactor->0.16,HeadLength->0.01,PlotPoints->{20,25}];g=Show[g2,g1,Axes->None,Frame->True];Show[GraphicsArray[{g1,g2,g}]];则分别输出积分曲线如图2.4(a), 微分方程的方向场如图2.4(b). 以及在同一坐标系中画出积分曲线和方向场的图形如下图2.4 (c).(a) (b) (c)图2.4从图2.4(c)中可以看出微分方程的积分曲线与方向场的箭头方向吻合, 且当时, 无论初始条件是什么, 所有的解都趋向于一条直线方程.例2.7 (教材 例2.6) 求解微分方程并作出积分曲线.输入<{{-1,1},{-2,2}},PlotStyle->RGBColor[1,0,0],DisplayFunction->Identity];g2=PlotVectorField[{1,-2y/(x+1)+(x+1)^(5/2)},{x,-0.999,1},{y,-4,4},Frame->True,ScaleFunction->(1&), ScaleFactor->0.16,HeadLength->0.01, PlotPoints->{20,25},DisplayFunction->Identity];Show[g1,g2,Axes->None,Frame->True,DisplayFunction->$DisplayFunction];则输出积分曲线的图形(图2.5).图2.5例2.8 求解微分方程并作出其积分曲线.输入命令<{{-3,3},{-3,3}},PlotStyle->RGBColor[1,0,0],DisplayFunction->Identity];gg2=Plot[Evaluate[t2],{x,-3,3},PlotRange->{{-3,3},{-3,3}},PlotStyle->RGBColor[1,0,0],DisplayFunction->Identity];g1=ContourPlot[y-x^3/3-x*(-2+y^2),{x,-3,3},{y,-3,3},PlotRange->{-3,3},Contours->7,ContourShading->False,PlotPoints->50,DisplayFunction->Identity];g2=PlotVectorField[{1,(x^2+y^2-2)/(1-2*x*y)},{x,-3,3},{y,-3,3},Frame->True,ScaleFunction->(1&),ScaleFactor->0.16,HeadLength->0.01,PlotPoints->{20,25},DisplayFunction->Identity];Show[g1,g2,Axes->None,Frame->True,DisplayFunction->$DisplayFunction];Show[gg1,gg2,g2,Axes->None,Frame->True,DisplayFunction->$DisplayFunction];则输出微分方程的向量场与积分曲线, 并输出等值线的图2.6. 图2.6用NDSolve命令求微积分方程的近似解 例2.9 (教材 例2.7) 求初值问题:在区间[1.2,4]上的近似解并作图. 输入fl=NDSolve[{(1+x*y[x])*y[x]+(1-x*y[x])*y'[x]==0,y[1.2]==1},y,{x,1.2,4}]则输出为数值近似解(插值函数)的形式: {{y->InterpolatingFunction[{{1.2,4.}},< >]}}用Plot命令可以把它的图形画出来.但是还需要先使用强制求值命。