在 MATLAB 中查找雅可比模式以指定“jpattern”

Finding jacobian pattern to specify `jpattern` in MATLAB

我正在尝试了解如何在 MATLAB 的 ode 求解器的 ode 设置中指定雅可比模式。

我从一个简单的例子开始,

syms x y z;
F = [x*y, cos(x*z), log(3*x*z*y)]
v = [x y z]
J = jacobian(F,v)

给予,

J =
 
[           y,   x,           0]
[ -z*sin(x*z),   0, -x*sin(x*z)]
[         1/x, 1/y,         1/z]

我想生成雅可比模式 Jacobian sparsity pattern, specified as the comma-separated pair consisting of 'JPattern' and a sparse matrix. The sparse matrix contains 1s where there might be nonzero entries in the Jacobian 加快计算速度。

因此,我想从 J 生成 jpattern 矩阵,

jpattern = 
[ 1,   1,  0]
[ 1,   0,  1]
[ 1,   1,  1]

关于如何从 Jacobian 生成 jpattern 的建议将非常有用。

J 的可能非零条目创建所需的 sparse jpattern matrix, initialize it by the size of J and then find 索引,并将 jpattern 中的相应条目更新为 1

[jr, jc] = size(J);
jpattern = sparse(jr, jc);
jpattern(find(J~=0)) = 1;
>> full(jpattern)
ans =
     1     1     0
     1     0     1
     1     1     1