Wolfram mathematica 为什么偏微分方程给出的边界和初始条件是不一致的?(1D加热pde)

Wolfram mathematica 为什么偏微分方程给出的边界和初始条件是不一致的?(1D加热pde),wolfram-mathematica,Wolfram Mathematica,在过去的20分钟里,我一直盯着这个简单的pde,不知道为什么会出现这个错误 Boundary and initial conditions are inconsistent 这是标准的一维热方程 eq = Derivative[2, 0][u][x, t] == Derivative[0, 1][u][x, t] 边界条件是(注意它们都是空间导数) 初始条件是 u(x,0) = cos(2 x) 所以在初始条件下,u'(x,0)=-2sin(2x),在x=0和x=Pi处都为零 在我看来

在过去的20分钟里,我一直盯着这个简单的pde,不知道为什么会出现这个错误

Boundary and initial conditions are inconsistent
这是标准的一维热方程

 eq = Derivative[2, 0][u][x, t] == Derivative[0, 1][u][x, t]
边界条件是(注意它们都是空间导数)

初始条件是

u(x,0) = cos(2 x) 
所以在初始条件下,
u'(x,0)=-2sin(2x)
,在
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,变成真实的Pi=3.1415。。。所以在这个值上,初始条件和边界条件不匹配?(某个地方的浮点比较?)

我从help
ref/message/NDSolve/ibcinc
中了解解决此类错误的技巧,但我的问题是,为什么我会首先遇到此错误,因为从表面上看,它们是一致的。如果是由于Pi的浮点问题,那么如何解决?我尝试使用帮助中显示的技巧(即使用exp(-1000 t),但没有帮助消除此错误

问题:为什么我会收到此错误消息?

版本8.04,在windows上

事实上,我一直在试图得到这个解决方案显示在这里(也使用Mathematica)

但是上面例子中显示的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来消除这个erorr,或者只有必要的BC才能使用?也可以使用非导数IC,只有在这之后,我才担心一致性部分?

Szabolcs给出了正确的提示(参见中的不一致边界条件部分)


我提出了一个建议,将教程的链接添加到NDSolve::ibcinc消息页面。

它确实给出了一个解决方案,而且解决方案是正确的,尽管有警告。
Animate[Plot[u[x,t]/.First[sol],{x,0,\[Pi]},PlotRange->{-1,1},{t,0,1}]
我同意这个警告令人困惑和担忧(可能出了什么问题?)谢谢,是的,我确实绘制了解决方案,它看起来还不错,因此我提出了问题。请参阅编辑以获取用动画绘制的命令。感谢您的确认。在您的情况下,BCs与ICs的导数一致,但消息是关于BCs与ICs不一致。NDSolve不会集成ICs和BCs来找出我的问题如果是这样。@ruebenko,很抱歉,我之所以这么做,不仅仅是因为我将IC更改为
Sin[2x]
,它现在在
x=0
处为零,在
x=Pi
处也为零(请注意,IC不是它的导数,现在与BC一致,正如您建议的那样),因此它应该与BC一致,对吗?但NDSolve仍然给了我相同的错误。请参见编辑(2).那么,我应该在我的例子中给出什么样的IC,这样我就不会出现这个错误?我没有改变BC,保持它们的原样。或者你是说BC必须是基本的,而不是派生的?谢谢!我现在没有时间去钻研它,但我想在数值PDE求解中指出这一点,它有一个完整的章节专门讨论inconsistent boundary conditions。感谢您和Szabolcs。我使用crank-nicolson方法为此编写了一个解算器,并希望使用NDSolve来验证我的解。因此这很有帮助。下面是相同问题的另一个示例:(另一个用于将该链接添加到消息页的参数)。
Animate[Plot[sol[x, t], {x, 0, Pi}, 
  PlotRange -> {{0, Pi}, {-1, 1}}], {t, 0, 1.5}]
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}}]