在 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]
这很好用:
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]