0

我正在尝试使用 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 个边界条件(两个常数 BC 和通量 BC)。我们知道参数的所有值。我不确定它是格式问题还是边界选择问题。系统给出

“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}]
4

1 回答 1

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 开始之前定义。对于您的 x 变量,NDSolve 与 Infinity 限制的合作有可能,甚至有可能。它可能有效,但我不会打赌。你可能会尝试一个更小的有限值,也许是 10^4,因为它比你的 10^3 大,如果 Infinity 不行,看看这是否可行。

目前我没有发现任何其他大问题,但是在不知道您的 ND 功能是什么的情况下,我无法开始对此进行测试,并且可能会清除下一层或两三个要查找的问题。

但如果这是您第一次尝试 Mathematica,这实际上非常好。

于 2013-10-03T06:31:57.933 回答