此问题已在答复
http://octave.1599824.n4.nabble.com/Using-Hindmarsh-s-ODE-solver-LSODE-in-OCTAVE-td4674210.html
然而,快速查看您的代码
解很可能是一个源于
pde空间离散化。,
$dx(t)/dt=f(x,t):=-K x(t)+r(t)$
其中K是平方矩阵(拉普拉斯?!)f是时间相关的
匹配维度的函数。我想你的系统很僵硬
(由于右侧的负拉普拉斯)
对10^(-4)量级的错误感到满意。因此,你应该适应
lsode的选项:
lsode_options("integration method","stiff");
lsode_options("absolute tolerance",1e-4);
lsode_options("relative tolerance",1e-4);
然后
T = 0:1e-2:1; % time vector
K = sprandsym(32,1)+eye(32); % symmetric stiffness matrix
x0 = rand(32,1); % initial values
r = @(t) rand(32,1)*sin(t); % excitation vector
f = @(x,t) (-K*x+r(t)); % right-hand-side function
x=lsode (f, x0, T); % get solution from lsode
您应该利用雅可比df/dx的任何知识,因为这将
加快计算速度。在线性ODE的情况下,这是微不足道的:
f = {@(x,t) -K*x+r(t), @(x,t) -K}; % right-hand-side function.
另一方面,如果系统具有额外的质量矩阵
百万美元dx(t)/dt=-K x(t)+r(t)$
事情可能会变得更加复杂。你可能想用另一个
时间步进器。只有M有完整的等级,你才能做到
f = @(x,t) ( M\(-K*x+r(t)) ); % right-hand-side function
这通常不是很有效。
再见Sebastian