过去20分钟我一直盯着这个简单的pde而且无法找到我收到此错误的原因
Boundary and initial conditions are inconsistent
这是标准的1D热方程
eq = Derivative[2, 0][u][x, t] == Derivative[0, 1][u][x, t]
和边界条件是(注意它们都是空间导数)
u'(0,t)=0 (derivative here w.r.t. x )
u'(Pi,t)=0 (derivative here w.r.t. x )
并且初始条件是
u(x,0) = cos(2 x)
因此,在初始条件下u'(x,0) = -2 sin(2 x)
,x=0
和x=Pi
均为零。
所以在我看来,这与边界条件一致,对吧?或者我错过了什么?
以下是Mathematica的实际代码:
ClearAll[u, x, t]
eq = Derivative[2, 0][u][x, t] == Derivative[0, 1][u][x, t]
sol = NDSolve[{eq,
Derivative[1, 0][u][0, t] == 0,
Derivative[1, 0][u][Pi, t] == 0,
u[x, 0] == Cos[2 x]},
u, {t, 0, 12}, {x, 0, Pi}
]
我有一种感觉,因为它是一个数值求解器,使用上面的Pi,变为Real Pi = 3.1415 ......所以在这个值的初始和边界条件不匹配? (在某处浮点比较?)
我知道从帮助ref/message/NDSolve/ibcinc
解决这样一个错误的诀窍,但我的问题是为什么我首先得到这个错误,因为从表面看来,它们是一致的。如果是由于Pi的浮点问题,那么如何解决这个问题呢?我试图使用帮助中显示的技巧(即使用exp(-1000 t)但没有帮助消除此错误。
问题:为什么我收到此错误消息?
版本8.04,在Windows上。
实际上我一直试图在这里显示这个解决方案(也使用Mathematica)
http://en.wikipedia.org/wiki/File:Heatequation_exampleB.gif
但是上面例子中显示的BC和IC也给了我这个错误,所以我在BC做了改变,希望它们现在变得一致。
感谢。
修改(1)
以下是我用于绘制解决方案图的命令,看起来没问题
eq = Derivative[2, 0][u][x, t] == Derivative[0, 1][u][x, t]
sol = u /.
First@NDSolve[{eq, Derivative[1, 0][u][0, t] == 0,
Derivative[1, 0][u][Pi, t] == 0, u[x, 0] == Cos[2 x]},
u, {t, 0, 1.5}, {x, 0, Pi}]
Animate[Plot[sol[x, t], {x, 0, Pi},
PlotRange -> {{0, Pi}, {-1, 1}}], {t, 0, 1.5}]
修改(3)
我仍然有点困惑(也没有咖啡,这没有帮助)。
我改变了IC,使其不再是衍生物,因此IC(非衍生物)现在与BC的同意(但这些是作为衍生物保存)。但我仍然得到同样的错误:
eq = Derivative[2, 0][u][x, t] == Derivative[0, 1][u][x, t]
sol = u /.
First@NDSolve[{eq,
Derivative[1, 0][u][0, t] == 0,
Derivative[1, 0][u][Pi, t] == 0,
u[x, 0] == Sin[2 x]},
u, {t, 0, 1.5}, {x, 0, Pi}
]
NDSolve::ibcinc: Warning: Boundary and initial conditions are inconsistent. >>
绘制
时,解决方案也显示正常Animate[Plot[sol[x, t], {x, 0, Pi},
PlotRange -> {{0, Pi}, {-1, 1}}], {t, 0, 1.5}]
这个问题需要什么IC来消除这个问题,或者是否必须使用必要的BC?并且还使用了非衍生IC,只有在那之后,我才担心一致性部分?
答案 0 :(得分:4)
Szabolcs给出了正确的提示(参见http://reference.wolfram.com/mathematica/tutorial/NDSolvePDE.html中的不一致边界条件部分)
eq = Derivative[2, 0][u][x, t] == Derivative[0, 1][u][x, t]
sol = u /.
First@NDSolve[{eq, Derivative[1, 0][u][0, t] == 0,
Derivative[1, 0][u][Pi, t] == 0, u[x, 0] == Cos[2 x]},
u, {t, 0, 1.5}, {x, 0, Pi},
Method -> {"MethodOfLines",
"SpatialDiscretization" -> {"TensorProductGrid",
"MinPoints" -> 100}}]
我已提出建议,将教程的链接添加到NDSolve :: ibcinc消息页面。