Я использую CombiTable2D для описания переменной z как функции двух переменных, x и y:
г = е (х, у)
Мне нужно получить частные производные z по x и y, чтобы использовать их в уравнениях, определяющих мою модель. Я не мог найти простой способ добиться этого.
Я попробовал использовать функцию Modelica, но не смог определить функцию, использующую CombiTable2D. Я также изучил внутренности CombiTable2D и нашел функцию getDerTable2DValue, которая, похоже, связана с производными, но я не смог определить, как использовать ее для своих целей.
В качестве обходного пути я сейчас сам вычисляю производные с помощью Excel и записываю их в две отдельные таблицы: dfdx и dfdy. Затем я сохраняю эти таблицы в файле .txt и загружаю их, используя два отдельных объекта CombiTable2D, по одному для каждой производной.
Я ожидаю найти способ, позволяющий Modelica вычислять частную производную по параметрам таблицы.





Кажется, это быстрое решение работает:
block toto
extends Modelica.Blocks.Tables.CombiTable2Ds;
Modelica.Blocks.Interfaces.RealOutput y_der1 annotation (Placement(transformation(extent = {{100,-50},{120,-30}}), iconTransformation(extent = {{100,-50},{120,-30}})));
Modelica.Blocks.Interfaces.RealOutput y_der2 annotation (Placement(transformation(extent = {{100,-90},{120,-70}}), iconTransformation(extent = {{100,-90},{120,-70}})));
equation
y_der1 = Modelica.Blocks.Tables.Internal.getDerTable2DValue(
tableID,
u1,
u2,
1,
0);
y_der2 = Modelica.Blocks.Tables.Internal.getDerTable2DValue(
tableID,
u1,
u2,
0,
1);
annotation (uses(Modelica(version = "4.0.0")));
end toto;
Полученные производные в случае линейной интерполяции кажутся производными, расположенными в правой части узла, если оценивать производные на узле. Но со сплайнами Акимы я получил стабильные результаты.
Я проводил только быстрые тесты, поэтому дайте мне знать, сработает ли это у вас.