关于NDsolve PDE集的Mathematica

时间:2013-10-03 05:32:59

标签: wolfram-mathematica pde

我正在尝试使用NDsolve函数来解决PDE集。

我对mathematica很新,这是我输入的代码。

NDSolve[{D[Cm[t, x], t] == Dm*D[Cm[t, x], x, x] + Kg*Cs[t, x] - Ka*Cm[t, x],
    D[Cs[t, x], t] == Ds*D[Cs[t, x], x, x] + Ka*Cm[t, x] - Kg*Cs[t, x],
    Cm[0, x] == Cm0,
    Cs[0, x] == Cs0,
    Dm*ND[Cm[t, 0]] == 0.5*FT,
    Ds*ND[Cs[t, 0]] == 0.5*FT,
    Cm[t, Infinity] == Cm0,
    Cs[t, Infinity] == Cs0}
   {Cm[t, x], Cs[t, x]}, {t, 0, 1000}, {x, 0, Infinity}];
plot3D[Cs, {t, 0, 1000}, {x, 0, 10000}]

Dm = 9 e - 8;
Ds = 5 e - 9;
Cm0 = 1.276 e + 15;
Cs0 = 1.276 e + 20;
Ka = 1;
Kg = 1 e - 5;
FT = 1 e + 11;

因此,基本上,我们有两个偏微分方程,2个初始条件和4个边界条件(两个常数B.C.两个通量B.C.)。我们知道参数的所有值。我不确定它是格式问题还是边界选择问题。系统给出了

“Thread :: tdlen:长度不等的对象” “NDSolve :: argmu:NDSolve使用1个参数调用;预计会有3个或更多个参数。”

有人可以提出一些有价值的建议吗?

谢谢


更新

Dm = 9*10^-8;
Ds = 5*10^-9;
Cm0 = 1.276*10^+15;
Cs0 = 1.276*10^+20;
Ka = 1;
Kg = 1*10^-5;
FT = 1*10^+11;
NDSolve[{D[Cm[t, x], t] == 
    Dm*D[Cm[t, x], x, x] + Kg*Cs[t, x] - Ka*Cm[t, x],
   D[Cs[t, x], t] == Ds*D[Cs[t, x], x, x] + Ka*Cm[t, x] - Kg*Cs[t, x],
   Cm[0, x] == Cm0,
   Cs[0, x] == Cs0,
   Dm*(D[Cm[t, x], x] /. x -> 0) == 0.7*FT,
   Ds*(D[Cs[t, x], x] /. x -> 0) == 0.3*FT,
   Cs[t, 10000] == Cs0,
   Cm[t, 10000] == Cm0},
  {Cm[t, x], Cs[t, x]}, {t, 0, 1000}, {x, 0, 10001}, 
  PrecisionGoal -> 2];
Animate[Plot[Cs[t, x], {x, 0, 10000}, 
  PlotRange -> {{0, 1000}, {0, 5*10^20}}], {t, 0, 1000}]

1 个答案:

答案 0 :(得分:0)

“不相等”错误是因为您在第8行和第9行错过了}和{之间的逗号。

但这不是你唯一的问题。这解决了其他一些问题,但不是所有问题。

Dm = 9*10^-8;
Ds = 5 *10^-9;
Cm0 = 1.276*10^+15;
Cs0 = 1.276*10^+20;
Ka = 1;
Kg = 1*10^-5;
FT = 1*10^+11;
NDSolve[{D[Cm[t, x], t] == Dm*D[Cm[t, x], x, x] + Kg*Cs[t, x] - Ka*Cm[t, x], 
D[Cs[t, x], t] == Ds*D[Cs[t, x], x, x] + Ka*Cm[t, x] - Kg*Cs[t, x],
Cm[0, x] == Cm0, Cs[0, x] == Cs0, Dm*ND[Cm[t, 0]] == 0.5*FT, 
Ds*ND[Cs[t, 0]] == 0.5*FT, Cm[t, Infinity] == Cm0, 
Cs[t, Infinity] == Cs0}, {Cm[t, x], Cs[t, x]}, {t, 0, 1000}, {x, 0, Infinity}];
plot3D[Cs, {t, 0, 1000}, {x, 0, 10000}]

在启动NDSolve之前,必须将NDSolve内的所有内容(除了您要解决的函数和自变量除外)初始化为数值,因此我将您的分配向上移动。 Mathematica有自己的写作方式。

现在是更大的问题。 您有一个尚未定义的ND功能。这必须在NDSolve开始之前定义。 有可能甚至可能NDSolve与x变量的无限极限合作。它可能会奏效,但我不会打赌。您可以尝试使用较小的有限值,可能是10 ^ 4,因为它大于您的10 ^ 3,并且看看如果Infinity没有,那将是否有效。

我目前没有发现任何其他大问题,但不知道你的ND功能是什么,我无法开始测试这个问题,也许会清除下一层或两三个问题。< / p>

但如果这是你在Mathematica的第一次尝试,这实际上是相当不错的。