Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用Hindmarsh’;s ODE解算器LSODE(倍频程)_Matlab_Octave_Numerical Integration - Fatal编程技术网

Matlab 使用Hindmarsh’;s ODE解算器LSODE(倍频程)

Matlab 使用Hindmarsh’;s ODE解算器LSODE(倍频程),matlab,octave,numerical-integration,Matlab,Octave,Numerical Integration,我正在学习八度音阶,我正在尝试使用LSODE解算器来集成一个版本的。我的尝试如下所示: time = linspace(0,200,1000); u0 = rand(32,32); v0 = rand(32,32); vec_u0 = reshape(u0,[1,size(u0)(1)*size(u0)(2)]); vec_v0 = reshape(v0,[1,size(v0)(1)*size(v0)(2)]); vec_FHN0 = horzcat(vec_u0,vec_v0); FHN

我正在学习八度音阶,我正在尝试使用LSODE解算器来集成一个版本的。我的尝试如下所示:

time = linspace(0,200,1000);
u0 = rand(32,32);
v0 = rand(32,32);

vec_u0 = reshape(u0,[1,size(u0)(1)*size(u0)(2)]);
vec_v0 = reshape(v0,[1,size(v0)(1)*size(v0)(2)]);
vec_FHN0 = horzcat(vec_u0,vec_v0);

FHN = lsode("FHN_eq_vec", vec_FHN0, time);
FHN(end)
我定义的所有函数都位于我在GitHub-中设置的存储库中。我创建了一个函数,将FHN模型的两个2D字段转换为行向量(正如我从这里了解的,LSODE积分器使用行向量作为输入)。我收到了以下错误消息:

>> fhn_integrate_lsode
warning: non-integer range used as index
warning: called from
    FHN_eq_vec at line 3 column 7
    fhn_integrate_lsode at line 9 column 5
error: reshape: can't reshape 0x1 array to 1x1 array
error: called from
    FHN_eq_vec at line 4 column 3
    fhn_integrate_lsode at line 9 column 5
error: lsode: evaluation of user-supplied function failed
error: called from
    fhn_integrate_lsode at line 9 column 5
error: lsode: inconsistent sizes for state and derivative vectors
error: called from
    fhn_integrate_lsode at line 9 column 5
>>

有人知道可能是什么问题吗?

这已经在

但是,快速查看您的代码,您希望 solve可能是一个由 pde空间离散化,即

$dx(t)/dt=f(x,t):=-kx(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的任何知识,因为这将 加快计算速度。在线性常微分方程的情况下,这是微不足道的:

f = {@(x,t) -K*x+r(t), @(x,t) -K}; % right-hand-side function.
另一方面,如果系统有额外的质量矩阵

$mdx(t)/dt=-kx(t)+r(t)$

事情可能会变得更复杂。你可能想用另一个 时间步进器。只有当M有满级,你才能做到

f = @(x,t) ( M\(-K*x+r(t)) ); % right-hand-side function
这通常不是很有效

再见,塞巴斯蒂安