Wolfram mathematica 关于求解偏微分方程组的Mathematica

Wolfram mathematica 关于求解偏微分方程组的Mathematica,wolfram-mathematica,pde,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

我正在尝试使用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;
所以,基本上,我们有两个偏微分方程,两个初始条件和四个边界条件(两个常数B.C.两个通量B.C.)。我们知道所有参数的值。我不确定这是格式问题还是边界选择问题。系统给出

“线程::tdlen:中长度不等的对象” “NDSolve::argmu:NDSolve使用1个参数调用;需要3个或更多参数。”

有人能提出一些有价值的建议吗

谢谢


更新 “不等”错误是因为在第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大,看看如果无穷大不起作用,它是否有效

目前我没有发现任何其他大问题,但在不知道ND函数是什么的情况下,我无法开始测试它,也许可以找出下一层或两三个问题


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

嗨,比尔,谢谢你的评论。我打算使用ND作为函数对x的一阶导数。使用代码中的示例,我想表示x=0,Ds*(dCm/dx)=0.5*FT。那么,如何在mathematica中定义一阶导数呢?也许这就是你想要实现的。Ds*(D[Cm[t,x],x]/.x->0)==0.5*FTI更新了上面的代码并尝试了一段时间。它不断给出“NDSolve::bcedge:边界条件Cs[t,10000]==1.276*10^20未在计算域边界的单条边上指定。”
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}]