matlab中使用dsolve函数求一常微分方程解析解

dsolve函数是matlab中自带的可以用来解决部分常微分方程的函数(方法),下面以物理学中的热传导问题为例展示如何使用这个函数。

热力学模型假设物体和恒温的环境接触,温度随时间的变化率和温差成正比,我们假设环境温度为m=20,物体的初始温度为100(刚好假设这个物体是烧开的沸水),比例系数k为-0.05,由此我们可以得到以下常微分方程:
y’ = k(y-m)
y0=100
k=-0.05

我们就可以把以上数学公式转换成matlab代码如下:

syms y(t)
eqn = diff(y,t) == -0.05*(y-20);
con = y(0) == 100;
yS = dsolve(eqn,con)

我们注意到,这里用eqn存储了微分方程的表达式,用cond存储了变量y的初始值。方程式用==表示等号,用diff(y,t)表示y关于t的一阶导数;初始条件表达式 用y(0)表示了y的初始值,并且将它与100用两个=连起来,并且把这个等式赋值给con这个变量。eqn和con正式dsolve函数所需要的两个变量。也就是我们常说的给定了方程和初始条件,就可以得到这个方程的解,我们运行之后,可以得到一下解析解:

yS =
 
80*exp(-t/20) + 20

非常漂亮,我们还可以把代码稍微修改一下,用字符串的形式来存储方程式和初始变量等式,用Dy来表示y’,此时我们可以改写matlab代码如下:

equa = 'Dy = -0.05*(y-20)';
cond = 'y(0) = 100';
ys = dsolve(equa,cond,'t')

注意到这个时候,dsovle函数增加了一个参数’t’,用来表示Dy是y对t的求导,我们同样可以得到运行结果如下:

ys =
 
80*exp(-t/20) + 20
 

可以看到,两种方法得到的结果是一样的,这样我们就完成了最简单的一个常微分方程解析解的求解。不过我们要注意的是,高等数学告诉我们只有特定形式的方程才具有解析解,因此使用dsolve方法有以下局限性:

仅有特定形式的微分方程(组) ,才有解析解;在没有解析解的微分方程(组)的时候dsolve 无能为力

你可能感兴趣的:(matlab)