在MATLAB中寻找雅可比模式指定'jpattern'

在MATLAB中寻找雅可比模式指定'jpattern',matlab,ode,differential-equations,numerical-integration,Matlab,Ode,Differential Equations,Numerical Integration,我试图理解如何在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] 我想生成雅可比模式 加快计算速度

我试图理解如何在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]
我想生成雅可比模式 加快计算速度

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

jpattern = 
[ 1,   1,  0]
[ 1,   0,  1]
[ 1,   1,  1]
关于如何从雅可比矩阵生成
jpattern
的建议将非常有用。

要创建所需的
jpattern
矩阵,通过对
J
进行初始化,然后对
J
的可能非零项进行索引,并将
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