在 MATLAB 中计算矢量化 ODE 的雅可比行列式

Computing the Jacobian of vectorized ODEs in MATLAB

这很好用:

syms a b x
jacobian ([a*x - a*b, a*b],[a, b])

但是这个:

syms a b(i) x
i = 1:6
jacobian ([a*x - a*b(i), a*b(i)],[a, b(i)])

returns错误:

Error using sym/jacobian (line 37)
The second argument must be a vector of variables.

在我看来第二个参数一个变量向量所以我不明白这个错误。

是否可以针对 ODE 向量进行微分,例如b(i)?我该怎么做?

声明 syms b(i) 创建了 i 的符号函数 b。 因此,如果将 doubles 的向量传递给 b(i),输出将是函数值的向量:

>> syms b(i)
>> b(1:6)
ans =
[ b(1), b(2), b(3), b(4), b(5), b(6)]

>> b(i) = i^2;  % Defining the actual function will generate actual values
>> b(1:6)
ans =
[ 1, 4, 9, 16, 25, 36]

所以错误是正确的:你有一个值列表。 要创建变量向量,请使用 sym 函数

>> b = sym('b',[1,6])
b =
[ b1, b2, b3, b4, b5, b6]