常微分方程的求解

符号解

在MATLAB中,由函数dsolve()解决常微分方程(组)的求解问题,其具体格式如下:

r = dsolve('eq1,eq2,…’,'cond1,cond2,…','v')

对给定的常微分方程(组)eq1,eq2,…中指定的符号自变量v,与给定的边界条件和初始条件cond1,cond2,…求符号解(即解析解)r。若没有指定变量v,则缺省变量为t

在微分方程(组)的表达式eq中,大写字母D表示对自变量(设为x)的微分算子:D=d/dx,D2=d2/dx2,…。微分算子D后面的字母则表示为因变量,即待求解的未知函数。初始和边界条件由字符串表示:y(a)=b,Dy(c)=d,D2y(e)=f,等等。

【例1】解运动学方程\(\frac{{dv}}{{dt}} = a\),即解出匀变速直线运动的末速度v与时间t的关系。缺省变量为t,不设置初始值。

dsolve('Dv=a')
ans =
C2 + a*t

【例2】解二阶运动学方程\(\frac{{{d^2}s}}{{d{t^2}}} = a\),即解出匀变速直线运动的位移s与时间t的关系。s的初始值为s0,\(\frac{{ds}}{{dt}}\)(即v)的初始值为v0

dsolve('D2s=a','s(0)=s0','Ds(0)=v0')
ans =
(a*t^2)/2 + v0*t + s0

【例3】解运动学方程\(\frac{{ds}}{{dv}} = \frac{v}{{kv + b}}\),此式表示的是一个变加速直线运动,加速度a随速度v成线性关系,得到的是位移s随速度v变化的关系式。初始条件设置为当s=0时v=0,变量设置为v而不是默认的t

dsolve('Ds=v/(k*v+b)','s(0)=0','v')
ans =
(b*log(b))/k^2 - (b*log(b + k*v) - k*v)/k^2

【例4】“另类匀变速直线运动”的加速度定义为\({a_s} = \frac{{{v_t} - {v_0}}}{s}\),即\({a_s} = \frac{{\Delta v}}{{\Delta s}}\),变形得:

\[\frac{{\Delta v}}{{\Delta t}} = {a_s}\frac{{\Delta s}}{{\Delta t}}\]

\[{a_t} = {a_s}v\]

解以下微分方程组,得到svt的函数关系式。

\[\left\{ {\begin{array}{*{20}{c}}{\frac{{ds}}{{dt}} = v}\\{\frac{{dv}}{{dt}} = av}\end{array}} \right.\]

[s,v]=dsolve('Ds=v','Dv=a*v','s(0)=0','v(0)=v0')
s =
-(v0 - v0*exp(a*t))/a
v =
v0*exp(a*t)

即:\(s = \frac{{{v_0}}}{a}({e^{at}} - 1)\),\(v = {v_0}{e^{at}}\)

数值解

由于一些数学方程,如果用符号表示很复杂或者根本用现有的数学符号无法给出解析解。而且人们往往关心的只是某些具体值的解,于是数值解应运而生。

Matlab专门用于求解常微分方程的函数,主要采用Runge-Kutta方法:ode23ode45,ode113ode15sode23sode23tode23tb

学习中……


发布时间:2017/3/16 10:24:46  阅读次数:4001

2006 - 2023,推荐分辨率1024*768以上,推荐浏览器Chrome、Edge等现代浏览器,截止2021年12月5日的访问次数:1872万9823 站长邮箱

沪ICP备18037240号-1

沪公网安备 31011002002865号