在modelica中使用偏微分方程耦合系统
就几个问题,我希望有人能抽出时间回答:) 如果我们有耦合模型例子:n个独立变量X和n个非线性偏微分方程PDEf(X,PDEf(X))的系统,关于依赖于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中表示相同的语法(我使用积分器,但不起作用) 下面是一个代码(不起作用):在modelica中使用偏微分方程耦合系统,modelica,Modelica,就几个问题,我希望有人能抽出时间回答:) 如果我们有耦合模型例子:n个独立变量X和n个非线性偏微分方程PDEf(X,PDEf(X))的系统,关于依赖于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中表示相同的语法(我使用积分器,但不起作用)
型号PDEtest
/*边界条件
1.δ(c)/δ(r)=0表示r=0
2.δ(c)/δ(r)=-j*d表示r=Rp*/
参数Real Rp=88*1e-3;//长度
参数Real initialConc=1000;
参数实际Dp=1e-14;
参数整数np=10;//点数
实际cp[np](开始=填充(初始浓度,np));
Modelica.Blocks.Continuous.Integrator r(k=1);//独立x1
Real j;
受保护的
参数Real dr=Rp/np;
参数实数ts=0.01;//用于使用when循环(样本(0,ts))
算法
j:=sin(时间);//这应该是独立变量,如x2
r、 u:=dr;
当r.y=0时,则为initialConc,否则为initialConc;
结束时;
注释(使用(Modelica(version=“3.2”));
结束PDEtest;
以下是更多的问题:
很难回答您的问题,因为您假设Modelica~Matlab,但事实并非如此。所以我不会评论你的代码,因为它确实错了。让我给你一个模型的例子。也许你可以把它作为起点
model burgereqn
Real u[N+2](start=u0);
parameter Real h = 1/(N+1);
parameter Integer N = 10;
parameter Real v = 234;
parameter Real Pi = 3.14159265358979;
parameter Real u0[N+2]={((sin(2*Pi*x[i]))+0.5*sin(Pi*x[i])) for i in 1:N+2};
parameter Real x[N+2] = { h*i for i in 1:N+2};
equation
der(u[1]) = 0;
for i in 2:N+1 loop
der(u[i]) = - ((u[i+1]^2-u[i-1]^2)/(4*(x[i+1]-x[i-1])))
+ (v/(x[i+1]-x[i-1])^2)*(u[i+1]-2*u[i]+u[i+1]);
end for;
der(u[N+2]) = 0;
end burgereqn;
你的进一步问题:
谢谢,示例很有帮助,您用示例回答了我的问题5:)。在解决Modelica中的偏微分方程时,库在这里是一个很重要的问题,因为既然MaMICA没有“基函数”的概念,那么在工具能够真正处理您的问题之前,您必须首先将问题离散成一组ODE(威利的答案提供了一个很好的例子)。因此,Modelica解决方案中不存在解决方案的空间可变性。换句话说,您的解决方案在时间上是连续的,但在空间上是离散的。通过重构基础基函数,您始终可以从离散值重构空间连续解。关于#3,重要的是要理解Modelica是一种声明性语言,而不是命令式语言。你的目标是用数学(而不是算法)来描述这个问题。我认为这是“讲MATLAB”与“讲Modelica”这两个问题的核心所在。一旦你习惯了它,这实际上是一个相当自由的变化。关于#4,我的经验是,对于椭圆和抛物线偏微分方程,在Modelica中通常不会有很多问题。然而,对于双曲型PDEs,由于CFL条件,您可能会遇到麻烦。最后,对于第5类,您可能会考虑购买一个副本(包括PDES、BTW的讨论)。我还计划在我的文章中讨论这个主题。StackOverflow不支持MathJax-like MathExchange,这让我非常难过。
model burgereqn
Real u[N+2](start=u0);
parameter Real h = 1/(N+1);
parameter Integer N = 10;
parameter Real v = 234;
parameter Real Pi = 3.14159265358979;
parameter Real u0[N+2]={((sin(2*Pi*x[i]))+0.5*sin(Pi*x[i])) for i in 1:N+2};
parameter Real x[N+2] = { h*i for i in 1:N+2};
equation
der(u[1]) = 0;
for i in 2:N+1 loop
der(u[i]) = - ((u[i+1]^2-u[i-1]^2)/(4*(x[i+1]-x[i-1])))
+ (v/(x[i+1]-x[i-1])^2)*(u[i+1]-2*u[i]+u[i+1]);
end for;
der(u[N+2]) = 0;
end burgereqn;