如何得到这个简单方程的代数解和符号雅可比行列式?
How to get algebraic solution and symbolic Jacobian of this simple equation?
(Crossposted from Matlab Answers) 我试图简化这组代数方程。然后,我想让 Matlab 为我计算雅可比矩阵。但它似乎并没有像我预期的那样工作。
考虑这个简单的 MWE:
% State Variables
syms x_0 x_1 x_2 x_3
% Input Variables
syms u_1 u_2 u_3
% Constants
syms k_1 V_liq dvs
% 3 Algebraic Equations
stateEquations = [...
x_1 == (x_0*(V_liq - u_1/dvs*1e3)*1e-3 + u_1)*1e3/V_liq*exp(-k_1), ...
x_2 == (x_1*(V_liq - u_2/dvs*1e3)*1e-3 + u_2)*1e3/V_liq*exp(-k_1), ...
x_3 == (x_2*(V_liq - u_3/dvs*1e3)*1e-3 + u_3)*1e3/V_liq*exp(-k_1)];
dstate_x3 = solve(stateEquations, x_3)
dstate_du = jacobian(dstate_x3, [u_1 u_2 u_3])
由于dstate_x3
为空,雅可比矩阵也为空。但我只是想让 Matlab 替换方程式中的 x_2
。 3 在其右侧,x_1
在其右侧...
能否请您提示一下如何使用 Symbolic Math Toolbox 实现此目的? (手动推导会很费时间,尤其是x_i, i > 3
)
因为你的系统有 3 个方程,你必须 solve
它有 3 个变量,而不仅仅是变量 x_3
。因为 solve
不知道你想要哪些变量所以解决你的系统,那么它 returns 一个空的解决方案。
您想求解 x_1
、x_2
和 x_3
,因此将代码的倒数第二行替换为
dstate = solve(stateEquations, [x_1 x_2 x_3])
现在 dstate
是一个 1x1 struct
,具有 3 sym
个字段:x_1
、⟩x_2
和⟩x_3
。因此,将代码的最后一行替换为
dstate_du = jacobian(dstate.x_3, [u_1 u_2 u_3])
最后,您可能想要 simplify(dstate_du)
.
(Crossposted from Matlab Answers) 我试图简化这组代数方程。然后,我想让 Matlab 为我计算雅可比矩阵。但它似乎并没有像我预期的那样工作。
考虑这个简单的 MWE:
% State Variables
syms x_0 x_1 x_2 x_3
% Input Variables
syms u_1 u_2 u_3
% Constants
syms k_1 V_liq dvs
% 3 Algebraic Equations
stateEquations = [...
x_1 == (x_0*(V_liq - u_1/dvs*1e3)*1e-3 + u_1)*1e3/V_liq*exp(-k_1), ...
x_2 == (x_1*(V_liq - u_2/dvs*1e3)*1e-3 + u_2)*1e3/V_liq*exp(-k_1), ...
x_3 == (x_2*(V_liq - u_3/dvs*1e3)*1e-3 + u_3)*1e3/V_liq*exp(-k_1)];
dstate_x3 = solve(stateEquations, x_3)
dstate_du = jacobian(dstate_x3, [u_1 u_2 u_3])
由于dstate_x3
为空,雅可比矩阵也为空。但我只是想让 Matlab 替换方程式中的 x_2
。 3 在其右侧,x_1
在其右侧...
能否请您提示一下如何使用 Symbolic Math Toolbox 实现此目的? (手动推导会很费时间,尤其是x_i, i > 3
)
因为你的系统有 3 个方程,你必须 solve
它有 3 个变量,而不仅仅是变量 x_3
。因为 solve
不知道你想要哪些变量所以解决你的系统,那么它 returns 一个空的解决方案。
您想求解 x_1
、x_2
和 x_3
,因此将代码的倒数第二行替换为
dstate = solve(stateEquations, [x_1 x_2 x_3])
现在 dstate
是一个 1x1 struct
,具有 3 sym
个字段:x_1
、⟩x_2
和⟩x_3
。因此,将代码的最后一行替换为
dstate_du = jacobian(dstate.x_3, [u_1 u_2 u_3])
最后,您可能想要 simplify(dstate_du)
.