Ошибка синтаксического анализа [ошибка?] С системами нелинейных уравнений в частных производных, Mathematica 12.0.0

Aug 18 2020

Ошибка, появившаяся в 12.0 и сохраняющаяся до 12.1.1 - Исправлена ​​в версии: 12.2.

Я обнаружил следующее поведение при использовании 12.0.0. (РЕДАКТИРОВАТЬ: я попросил друга попробовать его в 12.1.1, и он нашел тот же результат.)

Вот система связанных нелинейных уравнений в частных производных, которые NDSolveне могут быть проанализированы (не беспокойтесь о самой системе, это просто самый простой пример, который я нашел, который вызывает такое поведение):

c = {{1, 0}, {0, v[x, y]}};
alpha = {0, -u[x, y]};
NDSolveValue[{-Inactive[Div][c.Inactive[Grad][u[x, y], {x, y}], {x, y}] == 0, 
     -Inactive[Div][Inactive[Times][alpha, v[x, y]], {x, y}] ==0}, {u[x, y], v[x, y]}, 
Element[{x, y}, Disk[]]]

На выходе

NDSolveValue :: femper: Ошибка анализа PDE для Div [{{1,0}, {0, v}}. Grad $ 9730]. Несогласованные размеры уравнения.

Кажется, что очень простые функции могут быть ошибкой. Может быть, мне не хватает чего-то простого. Я попытался включить обильные вызовы, Inactiveчтобы у анализатора не было проблем с определением коэффициентов, что в противном случае могло бы быть неоднозначным для нелинейных систем.

Обратите внимание, что синтаксический анализ не является проблемой с аналогичной линейной задачей:

c = {{1, 0}, {0, 1}};
alpha = {0, -1};

Также нет проблем с синтаксическим анализом при уменьшении зависимых переменных до одного измерения ( {u}вместо {u,v}), но при сохранении его нелинейности (например c1 = {{1, 0}, {0, u[x, y]}}). Таким образом, эта проблема, похоже, связана с сочетанием взаимосвязанности и нелинейности.

Также обратите внимание, что существует очевидный обходной путь, который заключается в том, чтобы пойти по маршруту "программирования FEM" и просто указать коэффициенты pde через InitializePDECoefficients. Но все же ... что здесь наверху?

Ответы

user21 Dec 17 2020 at 08:50

Это ошибка, исправленная в версии 12.2.

c = {{1, 0}, {0, v[x, y]}};
alpha = {0, -u[x, y]};
NDSolveValue[{-Inactive[Div][
     c . Inactive[Grad][u[x, y], {x, y}], {x, y}] == 
   0, -Inactive[Div][Inactive[Times][alpha, v[x, y]], {x, y}] == 
   0}, {u[x, y], v[x, y]}, Element[{x, y}, Disk[]]]

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

NamNguyen Nov 03 2020 at 18:57

У меня такая же ошибка с NDSolve. Для Mathematica 11 это работает. Но тот же блокнот работает в Mathematica 12.0, он производит:

NDSolveValue::ndnum: Encountered non-numerical value for a derivative at t == 0.`.



In[2]:= $Version

Out[2]= "12.0.0 for Microsoft Windows (64-bit) (April 6, 2019)"