Я хотел сделать следующее в Modelica: в конкретной модели у меня есть несколько параметров h, и я хочу вывести из них некоторые независимые от времени значения k, решив ряд неявных уравнений между параметрами и другими значениями.Поскольку уравнения неявны по своей природе, я не могу просто назначить выражение, я скорее должен позволить решателю найти решение.
Поскольку параметры постоянны, я хочу иметь возможность решать уравнения только один раз в начале, до фактического интегрирования по времени остальной части системы (например, дифференциальное уравнение, которое содержит k в качестве коэффициента)имеет место.
Посмотрите следующий пример того, что я хотел бы иметь возможность написать:
model ConstantTest
parameter Real h = 2;
const Real k;
initial equation
k*k=h; // just an example of an implicit equation, which in this simple case could also be written explicitly
end ConstantTest;
Но это не удалось, потому что «константа» в Modelica не только постоянна в том смысле,иметь исчезающую производную по времени, но она также уже неизменна во время решения начальных уравнений.Поэтому решатель жалуется, что не может решить исходное уравнение 0 = 2, потому что он предполагает, что k неизменно равно 0.
Конечно, я могу просто сделать переменную ka, но тогда я должен сказать решателюявно, что k имеет исчезающую производную по времени (что делает его практически «постоянным» в наивном физическом смысле):
model ConstantTest
parameter Real h = 2;
Real k;
initial equation
k*k=h;
equation
der(k) = 0;
end ConstantTest;
Это работает, но это несколько странно, потому что решатель должен решить тривиальное дифференциальное уравнениена каждом временном шаге, чтобы вообще ничего не делать с k.И это было бы пустой тратой вычислительных ресурсов.
Есть ли способ решить статические неявные уравнения с Modelica, не вводя «затраты времени на эволюцию»?