只是几个问题,我希望有人能抽出时间来回答:)。
如果我们有 COUPLED 模型示例:n 个独立变量系统 X 和 n 个非线性偏微分方程 PDEf(X,PDEf(X)) 相对于 TIME 取决于 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 中,错误是:无法展平模型:S。
- 有没有简化的方法来使用一组耦合的方程(PDE)?我知道 Modelica 中的 PDE 库,但我认为它们很复杂。我想写一个求解PDE的函数并在“主模型”中调用这些函数,这样函数的输出就是“c”的连续函数。我不知道对函数数组做什么。
- 如果我们像在 Matlab 中那样“说话”,你能给我建议如何理解 Modelica 语言吗?例如:自变量 r 的值,我们可以在 Matlab 中指定,比如 r=0:TimeStep:Rp…Modelica 中怎么做呢?请解释一下“方程”部分的工作原理,是否与 Matlab 相似,是否有必要的顺序方法?干杯:)