【问题标题】:Why does this pde give Boundary and initial conditions are inconsistent error? (1D heat pde)为什么这个 pde 会给出边界和初始条件不一致的错误? (一维热 pde)
【发布时间】:2012-01-09 12:54:20
【问题描述】:

过去 20 分钟我一直盯着这个简单的 pde,但找不到为什么会出现此错误

Boundary and initial conditions are inconsistent

就是标准的一维热方程

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

【问题讨论】:

  • 它确实给出了解决方案,并且解决方案是正确的,尽管有警告。 Animate[Plot[u[x, t] /. First[sol], {x, 0, \[Pi]}, PlotRange -> {-1, 1}], {t, 0, 1}]我同意警告令人困惑和担忧(可能出了什么问题?)
  • 谢谢,是的,我确实绘制了解决方案,它看起来不错,因此我提出了问题。请参阅编辑以绘制动画命令。并感谢您的确认。
  • 在您的情况下,BC 与 IC 的衍生物一致,但消息是关于 BC 与 IC 不一致。 NDSolve 不会集成 IC 和 BC 来确定是否是这种情况。
  • @ruebenko,对不起,我不关注只是因为我将 IC 更改为 Sin[2x],现在 x=0 为零,x=Pi 也为零(注意 IC不是它的派生词现在与 BC 一致,正如你建议我应该做的那样),所以它应该与 BC 一致,对吧?但是 NDSolve 仍然给了我同样的错误。请参阅编辑(2)。那么,我应该在我的示例中给出什么 IC,以免出现此错误?我没有改变 BC,保持原样。或者你是说BC必须是必需品而不是衍生品?谢谢!
  • 我现在没有时间深入研究它,但我想指出这个关于数值 PDE 求解的 very detailed tutorial,它有一个完整的部分专门讨论不一致的边界条件。

标签: wolfram-mathematica


【解决方案1】:

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

【讨论】:

  • 感谢您和 Szabolcs。我使用曲柄 nicolson 方法为此编写了一个求解器,并希望使用 NDSolve 来验证我的解决方案。所以这有帮助。
  • 这是同一问题的另一个示例:mathematica.stackexchange.com/q/20729/12(将链接添加到消息页面的另一个参数)。
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2013-11-14
  • 1970-01-01
  • 2012-10-24
相关资源
最近更新 更多