2

次の 3 つの質問は 1 つにまとめられているため、長文になることをお許しください。

Dymola 2016 を使用しています。

モデル内で置換可能な関数呼び出しを使用すると、ユーザーがドロップダウン オプションを使用できるようになります。以下の例:

model Test1
  parameter Real x = 1;
  Real y;
  replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
equation 
  y = a(x);
end Test1;

関数内で同じ置換可能な関数呼び出しを行うと、関数が呼び出された場合と同じドロップダウン機能が許可されないようです (つまり、パッケージブラウザーで関数を右クリックします。関数は通常、他の関数/モデル内で呼び出されるため、これは意図的なものだと思います。以下の例:

function Test2
  input Real x;
  output Real y;
  replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
algorithm 
  y :=a(x);
end Test2;

質問1。モデルと同じように、関数内で置換可能な関数呼び出しを使用することは可能ですか? もしそうなら、適切な構文は何ですか? 代替アプローチ?

別の方法として、モデル内で置換可能な関数呼び出しを実行し、その結果を別の関数に渡して適切な呼び出しを行うという方法もあります。以下に例を示します。

model Test3mod
  parameter Real x = 1;
  Real y;
  replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
equation 
  y = Test3func(x,a);
end Test3mod;

パラメータ x と関数ハンドル a を次のように渡します。

function Test3func
  input Real x;
  input ???? a;
  output Real y;
algorithm 
  y :=a(x);
end Test3func;

質問2。これはModelicaで許容されますか?もしそうなら、どのように? 代替アプローチ?

質問#3。文字列を定義して、それを関数の名前に変えることは可能ですか? 以下の例:

model Test4
  parameter String 'functionname';
  parameter Real x = 1;
  Real y;
equation
  y = functionname(x);
end Test4;

前もって感謝します!私は Modelica の使用を探求し続けているので、あなたのフィードバックに感謝します。

4

1 に答える 1