我想在我的Modelica模型中使用类函数/方法,如下所示:
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;
我希望函数e
中的变量omega
是一个变量,这样我可以在稍后进行参数扫描时轻松更改其值。不幸的是,函数omega
似乎不知道变量e
,而JModelica编译器返回错误:
无法找到e
的类或组件声明
我会天真地期望,由于omega
和e
属于同一个班级omega
,因此可以看到e
。
有没有办法实现这个目标?
答案 0 :(得分:1)
Modelica不支持成员函数,因此在模型中声明的函数就像独立函数一样,无法访问周围的模型变量。 由于功能需要纯粹,因此不允许使用成员函数,即不允许它们产生任何副作用。这是Modelica中的一个基本假设,它使工具可以应用符号转换和重新排列计算。
答案 1 :(得分:1)
如果将所需的变量作为函数的附加输入显式传递,则可以具有类似于成员函数的内容。参见以下示例:
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;