Я смотрю на этот простой pde в течение последних 20 минут и не могу понять, почему я получаю эту ошибку
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=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
, но мой вопрос действительно, почему я получаю эту ошибку, во-первых, так как она кажется на первый взглядиз этого они последовательны.Если это связано с проблемой с плавающей точкой с Пи, то как решить эту проблему?Я попытался использовать трюк, показанный в справке по этому (то есть использование опыта (-1000 т), но не помог в устранении этой ошибки.
вопрос: Почему я получаю это сообщение об ошибке?
версия 8.04, для Windows.
На самом деле я пытался показать это решение здесь (также с помощью Mathematica)
http://en.wikipedia.org/wiki/File:Heatequation_exampleB.gif
, но BC и IC, показанные в приведенном выше примере, также дали мне эту ошибку, поэтому я внес изменения в BC в надежде, что они станут согласованными.
спасибо.
edit (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}]
edit (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. >>
Также решениеn отображается нормально при построении графика
Animate[Plot[sol[x, t], {x, 0, Pi},
PlotRange -> {{0, Pi}, {-1, 1}}], {t, 0, 1.5}]
Какая микросхема необходима для решения этой проблемы, чтобы устранить эту ошибку, или в таком случае следует использовать только основные BC?а также непроизводные микросхемы, и только после этого я беспокоюсь о согласованности?