解决刚性问题需要有专门方法。非刚性算法可以求解刚性问
题,只不过需要很长的计算时间。
举个例子
假如点燃一个火柴,火焰球迅速增大直至某个临界体积,然后,维持这一体积不变,原因是火焰球内部燃烧耗费的氧气和从球表面所获氧气达到平衡。其简化模型如下:
其中,y(t)代表火焰球半径,初始半径是λ,它很小。分析λ的大小对方程求解过程的影响。
这里列出两个方法,通过对比时间长短体会刚性问题的特殊解法。
lamada较大采用非刚性解法 lamda=0.01;%lamada较大 f=@(t,y) y^2-y^3; tic;%记录开始时间 [t,y]=ode45(f,[0,2/lamda],lamda);%非刚性解法 toc;%记录结束时间 disp(['ode45计算的点数'num2str(length(t))]); 结果: 时间已过0.061455 秒。%时间较短,说明此时没有较明显的刚性 ode45计算的点数157lamada较小,两种方法对比 非刚性解法: lamda=1e-5;%lamda特别小 f=@(t,y) y^2-y^3; tic;[t,y]=ode45(f,[0,2/lamda],lamda); toc;disp(['ode45计算的点数'num2str(length(t))]); 结果: 时间已过0.230707 秒。 ode45计算的点数120565%时间长,点数多表明明显的钢性特征 刚性解法: lamda=1e-5; f=@(t,y) y^2-y^3; tic;[t,y]=ode15s(f,[0,2/lamda],lamda); toc disp(['ode15s计算的点数'num2str(length(t))]) 结果: 时间已过0.044472 秒。 ode15s计算的点数98
分段函数或含绝对值符号型自由项非齐次线性微分方程求解思路@(微积分)总体思路是:分段分别求解,再根据连续性确定待定系数。比如:求解微分方程y″+4y=3|sinx|在[−π,π]y''+4y = 3|sinx|在[-\pi,\pi]上的通解。...
微分方程与差分方程 详细内容可以参见 Github 博客 当我们需要对象的某些特性随时间演变的过程,分析其本质规律并预测他的未来性态、研究他的控制手段时,通常要建立对象的动态模型。 所以