⽤matlab⾃动dsolve函数求原函数,matlab中使⽤dsolve函数求
⼀常微分⽅程解析
dsolve函数是matlab中⾃带的可以⽤来解决部分常微分⽅程的函数(⽅法),下⾯以物理学中的热传导问题为例展⽰如何使⽤这个函数。
热⼒学模型假设物体和恒温的环境接触,温度随时间的变化率和温差成正⽐,我们假设环境温度为m=20,物体的初始温度为100(刚好假设这个物体是烧开的沸⽔),⽐例系数k为-0.05,由此我们可以得到以下常微分⽅程:
y’ = k(y-m)
y0=100
k=-0.05
matlab求导我们就可以把以上数学公式转换成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 ⽆能为⼒