Kesalahan penguraian [bug?] Dengan sistem PDE nonlinier, Mathematica 12.0.0
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 NDSolve
tidak 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 Inactive
sehingga 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
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.
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)"