Почему это pde дает границы и начальные условия являются непоследовательной ошибкой? (1D тепло пде) - PullRequest
4 голосов
/ 09 января 2012

Я смотрю на этот простой 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?а также непроизводные микросхемы, и только после этого я беспокоюсь о согласованности?

1 Ответ

4 голосов
/ 10 января 2012

Сабольч дал правильный совет (см. Раздел «Непоследовательные граничные условия» в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...