私は代数方程式と混合された放物線偏微分方程式を扱っており、さらにこれらすべての方程式が結合されています。オイラー法 (Dassl は遅すぎる) と大きな許容誤差 (高速シミュレーション用) を使用し、OM(1.9.1)("residualFcn[some number]") でエラーを受け取ります (両方のタイプに対して)。問題は、ソルバーが「 t 非線形システムを解きます (数学的に、システムは正しいです)。最初の質問は、OM でオイラー積分法を使用する方法の種類 (明示的または暗黙的またはクランク-ニコルソン..または...) です。だから私はそれを数値的に解決しようとしました(明示的なオイラー法(「new [N]」の下のコード内)(おそらく問題はCFL条件である可能性があります))が、問題があります(特定のサンプル時間のサンプル再構成)。質問は、特定のサンプル時間の値を再現することを指しています?! 以下のコードには、配列 "a[3]" があります。
もう 1 つ、delta(t)/(delta(x))^2 >= 0.5 (delta(t) がユーザーを定義し、方程式セクションを参照する場合、delta(x) は以下のコードのようになり、空間離散化が使用されます。方程式のセクション (古典的なフィードフォワード法) で)、数値安定性は満たされていますか? 同じ例ですが、アルゴリズムセクションですか? よろしく
コードは次のとおりです。
model Euler1D
import Modelica.Utilities.*;
parameter Integer N=10; //50
parameter Real Lp=1e-6;
parameter Real deltax=1/(N-1)*Lp;
Real a[3];
Real old[N];
Real new[N];
Real b;
equation
a[1]=if
(time>5) then 0 else time+5;
a[2]=time;
a[3]=2;
when
(sample(0,1)) then
d=b;
end when;
algorithm
// IN t=ts;
when (sample(0,1)) then
for i in 1:2 loop
b:=a[i];
Streams.print(String(time)+" "+String(a[i])+ " "+String(b), "C:/Some_Path/text.txt");
end for;
end when;
// Another problem
old[1]:=10;
old [N]:=0;
new[1]:=10;
new [N]:=0;
// Boundary
for i in 2:N-1 loop
old [i]:=10;
new[i]:=10;
end for;
for dx in deltax:deltax:Lp-deltax loop // spatial discretization
for i in 2:N-1 loop
(new[i]):=(old[i]+0.5*(old[i + 1] +old[i-1]- 2*old[i]));
//def:=def+abs(new[i]-old[i]);
end for;
for i in 2:N-1 loop
old[i]:=new[i]; // switch the values
end for;
for i in 1:N loop
Streams.print(String(time)+" "+ String(new[2]), "C:/Some_Path/Anel_Nodes.txt");
end for;
annotation (uses(Modelica(version="3.2")));
end Euler1D;