为什么这个pde给出了Boundary并且初始条件是不一致的错误? (1D热pde)

时间:2012-01-09 12:54:21

标签: wolfram-mathematica

过去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=0x=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,只有在那之后,我才担心一致性部分?

1 个答案:

答案 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消息页面。