У меня есть следующая простая иерархическая модель, включающая реакцию внутри камеры. Модель реакции просто устанавливает массовую скорость для массы, и она связана с камерой, которая ее окружает.
connector Conn
Real mass;
flow Real massRate;
end Conn;
model Reaction
Conn conn;
equation
conn.massRate = conn.mass;
end Reaction;
model Chamber
Real mass(start = 1);
Reaction reaction;
Conn conn;
equation
conn.mass = mass;
der(mass) = conn.massRate;
connect(reaction.conn, conn);
end Chamber;
Теперь, на мой взгляд, всего существует пять переменных: mass
, reaction.conn.mass
, reaction.conn.massRate
, conn.mass
и conn.massRate
. И есть пять уравнений: два в разделе уравнений, а именно.
conn.mass = mass
der(mass) = conn.massRate
один из реакции
reaction.conn.massRate = reaction.conn.mass
и два из уравнения соединения:
reaction.conn.mass = conn.mass
reaction.conn.massRate = conn.massRate
Итак, у нас есть пять уравнений по пяти переменным. Логика решателя может просто объединить эти уравнения следующим образом:
der(mass) = conn.massRate = reaction.conn.massRate = reaction.conn.mass
= conn.mass = mass
и поскольку массе дано начальное значение, Боб - твой дядя. mass
должно увеличиваться со временем. Но моя среда моделирования (Wolfram | One) говорит
Error: Simulation model is not globally balanced, having 1 variable and 2 equations.
Может кто-нибудь объяснить, что происходит? Обратите внимание, что если я вытащу реактор за пределы камеры (поменяв знак реакции, чтобы дать conn.massRate = -conn.mass
), он будет работать как положено.