Wolfram mathematica 关于求解偏微分方程组的Mathematica
我正在尝试使用NDsolve函数来求解PDE集 我对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[{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}]