Doğrusal olmayan PDE sistemlerinde ayrıştırma hatası [bug?], Mathematica 12.0.0
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 NDSolve
ayrış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. Inactive
Ayrış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
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.
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)"