Modelica には、(a、b、c) に依存する変数 x があります。与えられたシミュレーション時間に対して、そのプロット (x,time) は滑らかで連続的に見えます。a、b、または c に関する偏導関数に関するエラーが発生するため、der(x) を明示的に微分する必要なく、この曲線の勾配を取得したいと考えています。これは可能ですか?言い換えれば、背後にあるものを区別することなく、最終出力の勾配が必要です。
2 に答える
Modelica.Blocks.Continuous.Derivative x_dot(start=1) これは導関数の近似を提供します。入力として x を指定し、導関数として x_dot.y を問題なく取得しました。
インテグレータや前回などにアクセスできないため、Modelica 自体でこのようなことを行うことはできません。サンプリングを使用して Modelica コードで近似値を取得できますが、これによりシミュレーション結果がわずかに変化し、パフォーマンスのボトルネックになる可能性があります。
model M
Real signal = time;
Real approx_der(start=0);
discrete Real x(start=0);
discrete Real t(start=0);
equation
when sample(0.1,0.1) then
x = signal;
t = time;
approx_der = (x-pre(x)) / (t-pre(t));
end when;
end M;
単純に後処理を使用する方が簡単です。結果ファイルをオクターブ、matlab、または同様の形式でロードし、近似導関数をプロットします。
plot(time(2:length(time)),diff(y) ./ diff(time))