刚性微分方程与非刚性的大概区分(自看,求指点)

(这里的内容是作为自己的一个粗略的总结,不确定是否正确,希望有大佬能够更明确的指出其中的错误,作出指导)

对于刚性和非刚性微分方程的区分,可以简单的转变为在将原方程转换为常微分方程组后,进行一个简单的系数判断:

例如:

y''' - 3y'' - y'y = 0, y(0) = 0, y'(0) = 0, y''(0) = -1;

在这里可以设  y1 = y, y2 = y', y3 = y'', 有

  y1' = y2,       y1(0) = 0,

  y2' = y3,       y2(0) = 1,

  y3' = 3y3 + y2y1,   y3(0) = -1,

这里可以简单判断出方程组的右侧系数矩阵值差异不大,得到的特征值差异随之也不大,可以简单判断为非刚性微分方程

MATLAB中解非刚性微分方程常用 ode45 ;

又例如:

  y'' - 1000(1 - y^2)y' + y = 0, y(0) = 2, y'(0) = 0;

在这里可以设y1 = y, y2 = y', 有

  y1' = y2,           y1(0) = 2,

  y2' = 1000(1 - y1^2)y2 - y1,  y2(0) = 0,

这里可以简单判断出方程组的右侧系数矩阵值差异较大,得到的特征值差异随之较大,可以简单判断为刚性微分方程

MATLAB中解刚性微分方程常用 ode15s , ode23s , ode23t , ode23tb ;

对于所有的初值问题解方程方法均有 solver(  'f( t, y )' , [t0 tend], y0 ) :

  --solver : 指代所有的方法调用;

  --f( t, y ) : 为M文件定义的微分方程 y' = f(x, y) 右端的函数, 即使用不到两个参数,也要保留两个参数,且返回的结果应是列向量;

  --[t0 tend] : 为参数中变量 x / t 的取值范围;

  --y0 : 为参数中 y 的初始值,要求为列向量

(0)

相关推荐