我正在使用抛物线PDE与代数方程混合,再加上所有这些方程。 我在OM(1.9.1)(“residualFcn [some number]”)中使用了Euler方法(Dassl太慢)和大容忍(用于快速模拟)和recive错误(对于这两种类型)。问题是求解器可以解决非线性系统(数学上,系统是正确的)。 第一个问题是什么类型的方法在OM中使用欧拉方法进行积分(显式或隐式或Crank-Nicholson..or ...)?所以我试图解决它的数值(显式欧拉方法(在代码下面的“新[N]”)(也许问题可以是CFL条件),但我有问题(样本重建的具体采样时间) 所以,第二个问题是指重现特定采样时间的值?! 在下面的代码中有数组“a [3]”。 想法是针对每个“ts(采样时间)”重建3个节点中的值。 这怎么能 我怎样才能从算法部分当前值(即节点)传递到公式部分? 我有.txt文件中的所有值,我用Matlab来绘制它们,但我不知道如何通过它,即在“方程”部分或其他方式 同样的问题是“new [N]”,针对特定的采样时间,节点的绘图函数(N)如果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;
非常感谢Michael :)。 – Anel 2013-02-27 21:15:43