【发布时间】: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=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,只有在那之后,我才担心一致性部分?
【问题讨论】:
-
它确实给出了解决方案,并且解决方案是正确的,尽管有警告。
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,它有一个完整的部分专门讨论不一致的边界条件。