Wolfram mathematica 为什么偏微分方程给出的边界和初始条件是不一致的?(1D加热pde)
在过去的20分钟里,我一直盯着这个简单的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处都为零 在我看来
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。。。所以在这个值上,初始条件和边界条件不匹配?(某个地方的浮点比较?)
我从helpref/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}}]