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