いくつか質問がありますが、誰かが答える時間を見つけてくれることを願っています:)。
COUPLED モデルの例があるとしたらどうなるでしょうか: n 個の独立変数 X と n 個の非線形偏微分方程式の系 PDEf(X,PDEf(X)) X に依存する時間に関する PDEf(X,PDEf(X)) (変数 X に依存する偏微分方程式) )。アドバイスをいただけますか?以下に一例を示します。
c が出力、または目的の変数であるとしましょう。r が独立変数であるとしましょう。偏微分方程式は次のようになります。
∂c/∂t=D*1/r+∂c/∂r+2(D* (∂^2 c)/(∂r^2 )) D=定数 r=0:0.1:Rp- Matlab の構文は、どのようにModelicaで同じことを表すには(インテグレーターを使用していますが、機能しませんでした)?
ここにコードがあります(動作しません):
model PDEtest
/* Boundary conditions
1. delta(c)/delta(r)=0 for r=0
2. delta(c)/delta(r)=-j*d for r=Rp*/
parameter Real Rp=88*1e-3; // length
parameter Real initialConc=1000;
parameter Real Dp=1e-14;
parameter Integer np=10; // num. of points
Real cp[np](start=fill(initialConc,np));
Modelica.Blocks.Continuous.Integrator r(k=1); // independent x1
Real j;
protected
parameter Real dr=Rp/np;
parameter Real ts= 0.01; // for using when loop (sample(0,ts) )
algorithm
j:=sin(time); // this should be indepedent variable like x2
r.u:=dr;
while r.y<=Rp loop
for i in 2:np-1 loop
der(cp[i]):=2*Dp/r.y+(cp[i]-cp[i-1])/dr+2*(Dp*(cp[i+1]-2*cp[i]+cp[i-1])/dr^2);
end for;
if r.y==Rp then
cp[np]:=-j*Dp;
end if;
cp[1]:=if time >=0 then initialConc else initialConc;
end while;
annotation (uses(Modelica(version="3.2")));
end PDEtest;
さらに質問があります:
- このコードは OpenModelica 1.8.1 では機能せず、Dymola 2013demo でも機能しません。関数の配列ではなく、変数 c の連続関数をどのように持つことができますか?
- 配列 cp の値をcombiTableに入れることはできますか? そしてどうやって?
- 代わりに「アルゴリズム」が「方程式」のままである場合、コードは正常にチェックされません。なぜですか? OpenModelica では、エラーは :could not flattening model :S です。
- 結合された一連の方程式 (PDE) を使用する簡単な方法はありますか? Modelica の PDE ライブラリについては知っていますが、複雑だと思います。偏微分方程式を解くための関数を書き、その関数を「メイン モデル」で呼び出して、関数の出力が「c」の連続関数になるようにしたいのですが、関数の配列をどうするかわかりません。
- Matlab のように「話す」場合、Modelica 言語を理解する方法についてアドバイスをいただけますか? 例: 独立変数 r の値は、r=0:TimeStep:Rp のように Matlab で指定できます。Modelica で同じことを行うには? また、セクション「方程式」がどのように機能するか、Matlab との類似性はありますか、必要な順次アプローチはありますか? 乾杯 :)