1

次のように、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を見ることができると素朴に期待します。eomegae

これを達成する方法はありますか?

4

2 に答える 2

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;

于 2020-08-31T09:59:40.750 に答える