Errore di analisi [bug?] Con sistemi di PDE non lineari, Mathematica 12.0.0

Aug 18 2020

Bug introdotto nella 12.0 e persistente nella 12.1.1 - Risolto nella versione: 12.2

Trovo il seguente comportamento usando 12.0.0. (EDIT: ho chiesto a un amico di provarlo in 12.1.1 e trova lo stesso risultato.)

Ecco un sistema di PDE non lineari accoppiati che NDSolvenon può analizzare (non preoccuparti del sistema stesso, è solo l'esempio più semplice che ho trovato che produce questo comportamento):

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[]]]

L'output è

NDSolveValue :: femper: errore di analisi PDE del div [{{1,0}, {0, v}}. Grad $ 9730]. Dimensioni incoerenti dell'equazione.

Sembra che le funzionalità di base siano un bug. Forse mi manca qualcosa di semplice. Ho provato a includere numerose chiamate in Inactivemodo che il parser non avrebbe problemi a identificare i coefficienti, che altrimenti potrebbero essere ambigui con i sistemi non lineari.

Nota che l'analisi non è un problema con un problema lineare simile:

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

Inoltre, non ci sono problemi nell'analisi quando si riducono le variabili dipendenti a una dimensione ( {u}invece che {u,v}), ma mantenendole non lineari (ad esempio c1 = {{1, 0}, {0, u[x, y]}}). Quindi questo problema sembra essere dovuto alla combinazione di accoppiamento e non lineare.

Notare anche che c'è un'ovvia soluzione alternativa, che è quella di andare sul percorso "Programmazione FEM" e specificare semplicemente i coefficienti pde tramite InitializePDECoefficients. Ma comunque ... cosa c'è quassù?

Risposte

user21 Dec 17 2020 at 08:50

Questo è un bug ed è stato corretto nella versione 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[]]]

Riceverai un avviso previsto sulle condizioni al contorno mancanti, ma a parte questo restituisce una soluzione.

NamNguyen Nov 03 2020 at 18:57

Ho lo stesso bug con NDSolve. Per Mathematica 11, funziona. Ma lo stesso notebook viene eseguito in Mathematica 12.0, produce:

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)"