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



我正在尝试理解如何在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]

我想生成雅可比矩阵雅可比稀疏模式,指定为由'JPattern'和稀疏矩阵组成的逗号分隔对。稀疏矩阵包含1,其中雅可比矩阵中可能存在非零项,以加快计算速度。

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

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

关于如何从Jacobian生成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

最新更新