Erreur d'analyse [bug?] Avec les systèmes de PDE non linéaires, Mathematica 12.0.0
Bug introduit dans 12.0 et persistant jusqu'à 12.1.1 - Corrigé dans la version: 12.2
Je trouve le comportement suivant en utilisant 12.0.0. (EDIT: j'ai demandé à un ami de l'essayer en 12.1.1 et il trouve le même résultat.)
Voici un système de PDE non linéaires couplés qui NDSolve
ne peuvent pas analyser (ne vous inquiétez pas pour le système lui-même, c'est juste l'exemple le plus simple que j'ai trouvé qui produit ce comportement):
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[]]]
La sortie est
NDSolveValue :: femper: erreur d'analyse PDE de Div [{{1,0}, {0, v}}. Grad $ 9730]. Dimensions d'équation incohérentes.
Il semble que la fonctionnalité extrêmement basique soit un bogue. Il me manque peut-être quelque chose de simple. J'ai essayé d'inclure de nombreux appels à Inactive
pour que l'analyseur n'ait aucun problème à identifier les coefficients, qui pourraient autrement être ambigus avec des systèmes non linéaires.
Notez que l'analyse n'est pas un problème avec un problème linéaire similaire:
c = {{1, 0}, {0, 1}};
alpha = {0, -1};
Il n'y a également aucun problème d'analyse lors de la réduction des variables dépendantes à une dimension ( {u}
au lieu de {u,v}
), mais en la gardant non linéaire (par exemple c1 = {{1, 0}, {0, u[x, y]}}
). Donc, ce problème semble être dû à la combinaison d'être couplé et non linéaire.
Notez également qu'il existe une solution de contournement évidente, qui consiste à suivre la voie "programmation FEM" et à spécifier simplement les coefficients pde via InitializePDECoefficients
. Mais encore ... qu'y a-t-il ici?
Réponses
Ceci est un bogue et a été corrigé dans la version 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[]]]
Vous obtiendrez un avertissement attendu concernant les conditions aux limites manquantes, mais à part cela, il renvoie une solution.
J'ai le même bug avec NDSolve. Pour Mathematica 11, cela fonctionne. Mais le même notebook est exécuté dans Mathematica 12.0, il produit:
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)"