用MATLAB求解微分方程
- 格式:ppt
- 大小:406.00 KB
- 文档页数:13


使用Matlab符号数学工具箱求解微分方程
Matlab符号数学工具箱(Symbolic Math Toolbox)中函数dsolve用于计算常系数微分方程(ordinary differential equations)的符号解(Symbolic solution),此处的符号解即解析解。
注意:不是所有的微分方程都能用dsolve函数求出解析解。
1 调用形式
dsolve函数调用形式有如下两种:
r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')
r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
2 函数描述
dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')用于计算常系数微分方程(或常系数微分方程组)的符号解,其中参数'eq1,eq2,...'指定微分方程(组),参数'v'指定微分方程(组)中的自变量,参数'cond1,cond2,...'指定微分方程(组)的边界条件及(或)初始条件。
不指定参数'v'时,默认的自变量为t。
输入的方程中使用大写字母D代表微分算符,如单个字母D表示ddt。大写字母D后跟数字表示多次微分运算。比如,D2表示22ddt 。紧跟在微分算符后的字符表示因变量。例如,D3y表示对因变量y的三次微分,其中y是x或t的函数。
初始条件或边界条件由形如y(a) = b或Dy(a) = b的方程给出,其中,y是因变量,b是常量。如果给出的初始条件的个数小于因变量的个数,则dsolve函数计算的符号解中包含任意常量C1, C2,....。
形式dsolve('eq1','eq2',...,'cond1','cond2',...,'v'),表示微分方程和(或)初始条件可以独立的符号方程作为函数的参数,函数dsolve最多可以输入12个参数。
概述
在工程和科学领域中,常微分方程是一种常见的数学建模工具。其中,带积分的常微分方程更是一种需要特殊解法的方程形式。MATLAB是一种功能强大的数学工具软件,而ode45是MATLAB中用于求解常微分方程的函数之一。本文将详细介绍如何使用MATLAB中的ode45函数来求解带积分的常微分方程。
一、带积分的常微分方程简介
带积分的常微分方程是指在微分方程中出现积分形式的项,通常表现为对某个函数进行积分。这种形式的微分方程在工程和科学领域中有着广泛的应用,例如在电路分析、控制系统、生物学模型等领域中都能见到。典型的带积分的常微分方程形式如下所示:
y' = f(t,y) + ∫g(t,y)dt
其中,y'表示y对自变量t的导数,f(t,y)为已知的函数,g(t,y)为未知的函数需要求解。这种形式的微分方程要比普通的常微分方程更复杂,需要使用特定的求解方法来得到解析解或数值解。
二、MATLAB中的ode45函数介绍
MATLAB是一种被广泛应用于科学计算和工程领域的数学软件工具,其中有丰富的数值计算函数库。其中,用于求解常微分方程的ode45函数是应用较为广泛的函数之一。ode45函数可以通过数值计算的方法来求解常微分方程的数值解,其基本调用格式如下:
[t,y] = ode45(odefun,tspan,y0)
其中,odefun是定义了微分方程的函数句柄,tspan是求解的时间范围,y0是初始条件。ode45函数会返回微分方程在tspan范围内的数值解t和对应的y值。
三、使用MATLAB求解带积分的常微分方程
对于带积分的常微分方程,我们需要将其转化为标准形式,然后利用MATLAB的ode45函数进行求解。假设我们有如下形式的带积分的常微分方程:
y' = f(t,y) + ∫g(t,y)dt
我们将其转化为等价的无積分項的方程形式,例如
∂F/∂t = f(t,y) + ∫g(t,y)dt
matlab如何解一阶微分方程
在MATLAB中,可以使用dsolve函数来求解一阶微分方程。dsolve函数是MATLAB的符号计算工具箱提供的方程求解器,可用于求解微分方程的解析解。
下面是使用dsolve函数求解一阶微分方程的基本步骤:
1. 定义微分方程:首先,需要定义微分方程,使用syms函数声明符号变量,并使用符号变量编写微分方程。例如,定义一个一阶线性常微分方程 dy/dt = -2*y + 3:
syms t y(t)
eqn = diff(y(t), t) == -2*y(t) + 3;
2. 求解微分方程:调用dsolve函数,将微分方程作为参数传递给它:
sol = dsolve(eqn);
3. 显示结果:通过使用disp函数或直接调用解sol来显示求得的微分方程的解析解。例如,使用disp函数来显示解析解: disp(sol);
完整的示例代码如下:
syms t y(t)
eqn = diff(y(t), t) == -2*y(t) + 3;
sol = dsolve(eqn);
disp(sol);
上述代码将输出微分方程的解析解。
值得注意的是,dsolve函数可以处理各种类型的微分方程,但并不是所有微分方程都存在解析解。对于某些复杂的微分方程,可能需要使用数值方法进行求解或者求得近似解。对于需要数值求解的情况,可以使用ode45等数值求解器函数,如前面提到的方法。
用MATLAB编程
1..求解微分方程的解,22xdyxyxedx并加以验证。
clear all
clc
syms x y
y=dsolve('Dy+2*x*y=x*exp(-x*x)','x');
diff(y,x)+2*x*y-x*exp(-x*x);
b=simplify(diff(y,x)+2*x*y-x*exp(-x*x))
2..求微分方程'0xxyye在初始条件下的特解,并画出函数图形
clear all
clc
syms x y
y=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x')
ezplot(y)
结果
y =
(exp(x)+exp(1))/x
-6-4-20246-30-20-1001020304050x(exp(x)+exp(1))/x
3..求微分方程组530tdxxyedtdyxydt在初始条件0,0xtxy下的特解,并画出解函数的图形
clear all
clc
syms x y t
[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=1','t')
x=simple(x);
y=simple(y);
ezplot(x,y,[0,1.3])
axis auto
结果
x =
-4*exp((-1+15^(1/2))*t)*(19/110*15^(1/2)+6/11)+exp((-1+15^(1/2))*t)*(19/110*15^(1/
y =
exp((-1+15^(1/2))*t)*(19/110*15^(1/2)+6/11)+exp(-(1+15^(1/2))*t)*(-19/110*15^(1/2)-30-20-10010205101520253035404550xyx = -8/55 exp(-t+t 151/2) 151/2+...+2/11 exp(t), y = exp((-1+151/2) t) (19/110 151/2+6/11)+...-1/11 exp(t)