我正在尝试使用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}]
答案 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的第一次尝试,这实际上是相当不错的。