Doğrusal olmayan PDE sistemlerinde ayrıştırma hatası [bug?], Mathematica 12.0.0

Aug 18 2020

12.0'da tanıtılan ve 12.1.1'e kadar devam eden hata - Sürüm: 12.2'de düzeltildi

12.0.0 kullanarak aşağıdaki davranışı buluyorum. (DÜZENLEME: Bir arkadaşımdan 12.1.1'de denemesini istedim ve o da aynı sonucu buldu.)

Burada NDSolveayrıştırılamayan birleştirilmiş doğrusal olmayan PDE'ler sistemi ( sistemin kendisi için endişelenmeyin, bu davranışı üreten bulduğum en basit örnek):

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

Çıktı

NDSolveValue :: femper: Div'in PDE ayrıştırma hatası [{{1,0}, {0, v}}. Grad $ 9730]. Tutarsız denklem boyutları.

Hata olması son derece basit bir işlevsellik gibi görünüyor. Belki de basit bir şeyi kaçırıyorum. InactiveAyrıştırıcının katsayıları tanımlamada sorun yaşamaması için çok sayıda çağrı eklemeyi denedim , aksi takdirde doğrusal olmayan sistemlerde belirsiz olabilir.

Ayrıştırmanın benzer bir doğrusal problemle sorun olmadığını unutmayın:

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

Bağımlı değişkenleri tek bir boyuta indirgemek ( {u}yerine {u,v}), ancak doğrusal olmayan tutmak (örneğin c1 = {{1, 0}, {0, u[x, y]}}) sırasında da ayrıştırmada sorun yoktur . Öyleyse bu sorun, bağlı ve doğrusal olmayış kombinasyonundan kaynaklanıyor gibi görünüyor.

Ayrıca, "FEM programlama" yoluna gitmek ve sadece pde katsayılarını belirtmek olan bariz bir çözüm olduğunu unutmayın InitializePDECoefficients. Ama yine de ... burada ne var?

Yanıtlar

user21 Dec 17 2020 at 08:50

Bu bir hatadır ve 12.2 sürümünde düzeltilmiştir.

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

Eksik sınır koşulları hakkında beklenen bir uyarı alırsınız, ancak bunun dışında bir çözüm döndürür.

NamNguyen Nov 03 2020 at 18:57

NDSolve ile aynı hataya sahibim. Mathematica 11 için işe yarıyor. Ancak aynı dizüstü bilgisayar Mathematica 12.0'da çalıştırılır ve şunu üretir:

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