如何获得这个简单方程的代数解和符号雅可比行列?

问题描述 投票:0回答:1

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时)

matlab symbolic-math
1个回答
0
投票

由于系统具有3个方程,因此您必须solve 3个变量,而不仅仅是x_3变量。因为solve不知道您想要哪个变量,所以可以为系统求解,因此它返回一个空解决方案。

您要求解x_1x_2x_3,因此将代码的倒数第二行替换为

dstate   = solve(stateEquations, [x_1 x_2 x_3])

现在dstate是具有3个struct字段的1x1 symx_1,[x_2x_3。因此,将您的代码的最后一行替换为

dstate_du   = jacobian(dstate.x_3, [u_1 u_2 u_3])

最终,您可能想要simplify(dstate_du)

© www.soinside.com 2019 - 2024. All rights reserved.