常微分方程的求解
符号解
在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\]
解以下微分方程组,得到s、v与t的函数关系式。
\[\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方法:ode23,ode45,ode113,ode15s,ode23s,ode23t,ode23tb。
学习中……
发布时间:2017/3/16 上午10:24:46 阅读次数:6026