190 likes | 475 Views
实验十七 微分方程和微分方程组的求解. 一、实验目的. 熟悉 MATLAB 软件中关于求解微分方程和微分方程组的各种命令,掌握利用 MATLAB 软件进行微分方程和微分方程组的求解。. 二、相关知识. 在 MATLAB 中,由函数 dsolve() 解决微分方程(组)的求解问题,其具体格式如下: X=dsolve(‘eqn1’,’eqn2’,…) 函数 dsolve 用来解符号微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。
E N D
一、实验目的 • 熟悉MATLAB软件中关于求解微分方程和微分方程组的各种命令,掌握利用MATLAB软件进行微分方程和微分方程组的求解。
二、相关知识 • 在MATLAB中,由函数dsolve()解决微分方程(组)的求解问题,其具体格式如下: • X=dsolve(‘eqn1’,’eqn2’,…) • 函数dsolve用来解符号微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。 • 例1:求解微分方程 的MATLAB程序为:dsolve('Dy=1/(x+y)','x'),注意,系统缺省的自变量为t,因此这里要把自变量写明。
二、相关知识 • 结果为:-lambertw(-C1*exp(-x-1))-x-1 • 其中:Y=lambertw(X)表示函数关系Y*exp(Y)=X。 • 例2:求解微分方程 。 • 解:先把方程改写为 • 例1:求解微分方程 的MATLAB程序为: dsolve('Dy=1/(x+y)','x'),注意,系统缺省的自变量为t,因此这里要把自变量写明。
结果为:-lambertw(-C1*exp(-x-1))-x-1 • 其中:Y=lambertw(X)表示函数关系Y*exp(Y)=X。 • 例2:求解微分方程 。 • 解:先把方程改写为 • 然后编写MATLAB程序: • Y2=dsolve('D2y-Dy^2/y=0', 'x') • 结果为: • Y2 = exp(C1*x)*C2
例3:求微分方程组 • 通解的MATLAB程序为: • [X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t') • 然后编写MATLAB程序: • Y2=dsolve('D2y-Dy^2/y=0', 'x') • 结果为: • Y2 = exp(C1*x)*C2
例3:求微分方程组 • 通解的MATLAB程序为: • [X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t') • 例4:求微分方程组 • 特解的MATLAB程序为: • [X,Y]=dsolve('Dx+2*x-Dy=10*cos(t), Dx+Dy+2*y=4*exp(-2*t)','x(0)=2','y(0)=0')
以上这些都是微分方程的精确解法,也称为微分方程的符号解。我们知道,有大量的微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为:以上这些都是微分方程的精确解法,也称为微分方程的符号解。我们知道,有大量的微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为: • 例4:求微分方程组 • 特解的MATLAB程序为: • [X,Y]=dsolve('Dx+2*x-Dy=10*cos(t), Dx+Dy+2*y=4*exp(-2*t)','x(0)=2','y(0)=0')
以上这些都是微分方程的精确解法,也称为微分方程的符号解。我们知道,有大量的微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为:以上这些都是微分方程的精确解法,也称为微分方程的符号解。我们知道,有大量的微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为: • [T,Y]=solver(odefun,tspan,y0) • 该函数表示在区间tspan=[t0,tf]上,用初始条件y0求解显式常微分方程 。 • solver为命令ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一,这些命令各有特点。我们列表说明如下:
[T,Y]=solver(odefun,tspan,y0) • 该函数表示在区间tspan=[t0,tf]上,用初始条件y0求解显式常微分方程 。 • solver为命令ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一,这些命令各有特点。我们列表说明如下:
odefun为显式常微分方程 中的 • tspan为求解区间,要获得问题在其他指定 • 点 上的解,则令 • (要求 单调), • y0初始条件。
例5:求解微分方程 , , • 的MATLAB程序如下: • fun=inline('-2*y+2*x*x+2*x');[x,y]=ode23(fun,[0,0.5],1) • 结果为: • x = 0,0.0400,0.0900,0.1400,0.1900,0.2400,0.2900,0.3400,0.3900,0.4400,0.4900,0.5000 • y = 1.0000,0.9247,0.8434,0.7754,0.7199,0.6764,0.6440,0.6222,0.6105,0.6084,0.6154,0.6179
例6:求解微分方程的 • 解,并画出解的图形。 • 分析:这是一个二阶非线性方程,用现成的方法均 • x = 0,0.0400,0.0900,0.1400,0.1900,0.2400,0.2900,0.3400,0.3900,0.4400,0.4900,0.5000 • y = 1.0000,0.9247,0.8434,0.7754,0.7199,0.6764,0.6440,0.6222,0.6105,0.6084,0.6154,0.6179
例6:求解微分方程的 • 解,并画出解的图形。 • 分析:这是一个二阶非线性方程,用现成的方法均不能求解,但我们可以通过下面的变换,将二阶方程化为一阶方程组,即可求解。 • 令: , , ,则得到:
接着,编写vdp.m如下: • function fy=vdp(t,x) • fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)]; • 再编写m文件sy7_6.m如下: • 分析:这是一个二阶非线性方程,用现成的方法均不能求解,但我们可以通过下面的变换,将二阶方程化为一阶方程组,即可求解。 • 令: , , ,则得到:
接着,编写vdp.m如下: • function fy=vdp(t,x) • fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)]; • 再编写m文件sy7_6.m如下: • y0=[1;0] • [t,x]=ode45(@vdp, • [0,40],y0); • y=x(:,1);dy=x(:,2); • plot(t,y,t,dy)
三、实验内容 • 1.利用MATLAB求常微分方程的初值问题 • , 的解。 • 2.利用MATLAB求常微分方程的初值问题 • , , 的解。 • 3.利用MATLAB求微分方程的解。 • 4.利用MATLAB求微分方程组 • 的特解。
5.求解微分方程 , , • , 的特解,并作出解函数的曲 • 线图。 • 6.完成实验报告。