Как получить алгебраическое решение c и символику c Якобиана этого простого уравнения? - PullRequest
1 голос
/ 29 января 2020

( Crossposted из ответов Matlab) Я пытаюсь упростить этот набор алгебраических c уравнений. Затем я хотел бы, чтобы Матлаб вычислил для меня якобиан. Но, похоже, это не работает так, как я ожидаю.

Рассмотрим этот простой 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 справа ...

Не могли бы вы подсказать, как этого добиться с помощью Symboli c Math Toolbox? (Получение его вручную будет очень трудоемким, особенно с x_i, i > 3)

1 Ответ

1 голос
/ 24 февраля 2020

Поскольку ваша система имеет 3 уравнения, вы должны solve это для 3 переменных, а не только для переменной x_3. * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * *}}}}}} 100% * *1004*

* *1005* * *1005* * *1005* *. предпоследняя строка вашего кода:

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

...