Modelica Class 方法
Modelica Class Method
我想在我的 Modelica 模型中使用 class function/method,如下所示:
optimization Moo(objective=-x(finalTime), startTime = 0, finalTime = 12)
parameter Real e = 0.05;
Real x(start=2, fixed=true, min=0, max=100);
input Real v (min=0, max=1);
function omega
input Real t;
output Real y;
algorithm
y := e;
end omega;
equation
der(x) = v*omega(time);
constraint
v<=1;
end Moo;
我希望函数 omega
中的变量 e
是一个变量,这样我可以在以后进行参数扫描时轻松地更改它的值。不幸的是,函数 omega
似乎不知道变量 e
和 JModelica 编译器 returns 错误:
Cannot find class or component declaration for e
我天真地期望因为 omega
和 e
属于同一个 class omega
能够看到 e
.
有办法实现吗?
Modelica 不支持成员函数,因此在模型内部声明的函数就像一个独立函数,无需访问周围的模型变量。
成员函数是不允许的,因为函数需要是纯函数,即它们不允许有任何副作用。这是 Modelica 中的一个基本假设,它使得工具可以应用符号转换和重新排列计算。
如果您显式地将所需的变量作为附加输入传递给函数,则可以拥有类似于成员函数的东西。看这个例子:
package MemberFunction
model A
Real x=1;
function get_x = MemberFunction.get(u=x);
end A;
function get
input Real u;
output Real y;
algorithm
y := u;
end get;
model Test
A a;
Real x;
equation
x = a.get_x();
end Test;
end MemberFunction;
我想在我的 Modelica 模型中使用 class function/method,如下所示:
optimization Moo(objective=-x(finalTime), startTime = 0, finalTime = 12)
parameter Real e = 0.05;
Real x(start=2, fixed=true, min=0, max=100);
input Real v (min=0, max=1);
function omega
input Real t;
output Real y;
algorithm
y := e;
end omega;
equation
der(x) = v*omega(time);
constraint
v<=1;
end Moo;
我希望函数 omega
中的变量 e
是一个变量,这样我可以在以后进行参数扫描时轻松地更改它的值。不幸的是,函数 omega
似乎不知道变量 e
和 JModelica 编译器 returns 错误:
Cannot find class or component declaration for e
我天真地期望因为 omega
和 e
属于同一个 class omega
能够看到 e
.
有办法实现吗?
Modelica 不支持成员函数,因此在模型内部声明的函数就像一个独立函数,无需访问周围的模型变量。 成员函数是不允许的,因为函数需要是纯函数,即它们不允许有任何副作用。这是 Modelica 中的一个基本假设,它使得工具可以应用符号转换和重新排列计算。
如果您显式地将所需的变量作为附加输入传递给函数,则可以拥有类似于成员函数的东西。看这个例子:
package MemberFunction
model A
Real x=1;
function get_x = MemberFunction.get(u=x);
end A;
function get
input Real u;
output Real y;
algorithm
y := u;
end get;
model Test
A a;
Real x;
equation
x = a.get_x();
end Test;
end MemberFunction;