Kesalahan penguraian [bug?] Dengan sistem PDE nonlinier, Mathematica 12.0.0

Aug 18 2020

Bug diperkenalkan pada 12.0 dan bertahan hingga 12.1.1 - Diperbaiki dalam Versi: 12.2

Saya menemukan perilaku berikut menggunakan 12.0.0. (EDIT: Saya meminta seorang teman untuk mencobanya di 12.1.1 dan dia menemukan hasil yang sama.)

Berikut adalah sistem PDE nonlinier berpasangan yang NDSolvetidak dapat mengurai (jangan khawatir tentang sistem itu sendiri, ini hanya contoh paling sederhana yang saya temukan yang menghasilkan perilaku ini):

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

Outputnya adalah

NDSolveValue :: femper: kesalahan penguraian PDE Div [{{1,0}, {0, v}}. Grad $ 9730]. Dimensi persamaan tidak konsisten.

Sepertinya fungsionalitas yang sangat mendasar menjadi bug. Mungkin saya melewatkan sesuatu yang sederhana. Saya mencoba memasukkan panggilan yang berlebihan Inactivesehingga parser tidak akan kesulitan mengidentifikasi koefisien, yang mungkin akan ambigu dengan sistem nonlinier.

Perhatikan bahwa penguraian tidak masalah dengan masalah linier serupa:

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

Juga tidak ada masalah parsing saat mereduksi variabel dependen menjadi satu dimensi ( {u}bukan {u,v}), tetapi menjaganya tetap nonlinear (misalnya c1 = {{1, 0}, {0, u[x, y]}}). Jadi masalah ini sepertinya disebabkan oleh kombinasi dari penggandengan dan nonlinier.

Perhatikan juga bahwa ada solusi yang jelas, yaitu pergi ke rute "pemrograman FEM" dan cukup tentukan koefisien pde melalui InitializePDECoefficients. Tapi tetap ... ada apa disini?

Jawaban

user21 Dec 17 2020 at 08:50

Ini adalah bug dan telah diperbaiki pada versi 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[]]]

Anda akan mendapatkan peringatan yang diharapkan tentang kondisi batas yang hilang, tetapi selain itu, ia mengembalikan solusi.

NamNguyen Nov 03 2020 at 18:57

Saya memiliki bug yang sama dengan NDSolve. Untuk Mathematica 11, itu berhasil. Tapi notebook yang sama dijalankan di Mathematica 12.0, itu menghasilkan:

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