ข้อผิดพลาดในการแยกวิเคราะห์ [bug?] กับระบบของ PDE ที่ไม่ใช่เชิงเส้น Mathematica 12.0.0

Aug 18 2020

ข้อบกพร่องที่นำมาใช้ใน 12.0 และยังคงมีอยู่จนถึง 12.1.1 - แก้ไขแล้วในเวอร์ชัน: 12.2

ฉันพบพฤติกรรมต่อไปนี้โดยใช้ 12.0.0 (แก้ไข: ฉันขอให้เพื่อนลองใช้ใน 12.1.1 และเขาก็พบผลลัพธ์เดียวกัน)

นี่คือระบบของ PDE ที่ไม่เป็นเชิงเส้นคู่ที่NDSolveไม่สามารถแยกวิเคราะห์ได้ (อย่ากังวลกับระบบเองมันเป็นเพียงตัวอย่างที่ง่ายที่สุดที่ฉันพบว่าก่อให้เกิดพฤติกรรมนี้):

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

ผลลัพธ์คือ

NDSolveValue :: femper: ข้อผิดพลาดในการแยกวิเคราะห์ PDE ของ Div [{{1,0}, {0, v}} จบ $ 9730] ขนาดของสมการไม่สอดคล้องกัน

ดูเหมือนว่าฟังก์ชันพื้นฐานอย่างยิ่งจะเป็นจุดบกพร่อง บางทีฉันอาจจะพลาดอะไรง่ายๆ ฉันพยายามรวมการเรียกจำนวนมากเพื่อInactiveให้ตัวแยกวิเคราะห์ไม่มีปัญหาในการระบุค่าสัมประสิทธิ์ซึ่งอาจมีความคลุมเครือกับระบบที่ไม่ใช่เชิงเส้น

โปรดทราบว่าการแยกวิเคราะห์ไม่มีปัญหากับปัญหาเชิงเส้นที่คล้ายกัน:

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

นอกจากนี้ยังไม่มีปัญหาในการแยกวิเคราะห์เมื่อลดตัวแปรตามเป็นมิติเดียว ( {u}แทนที่จะเป็น{u,v}) แต่ทำให้ไม่เป็นเชิงเส้น (เช่นc1 = {{1, 0}, {0, u[x, y]}}) ดังนั้นปัญหานี้น่าจะเกิดจากการรวมกันของการคู่กันและไม่ใช่เชิงเส้น

นอกจากนี้ยังทราบมีวิธีแก้ปัญหาที่ชัดเจนซึ่งก็คือการไป "FEM การเขียนโปรแกรม" เส้นทางและเพียงแค่ระบุ PDE InitializePDECoefficientsสัมประสิทธิ์ผ่าน แต่ยัง ... มีอะไรเกิดขึ้นที่นี่?

คำตอบ

user21 Dec 17 2020 at 08:50

นี่เป็นข้อบกพร่องและได้รับการแก้ไขแล้วในเวอร์ชัน 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[]]]

คุณจะได้รับคำเตือนที่คาดไว้เกี่ยวกับเงื่อนไขขอบเขตที่ขาดหายไป แต่นอกเหนือจากนั้นจะส่งคืนโซลูชัน

NamNguyen Nov 03 2020 at 18:57

ฉันมีข้อบกพร่องเดียวกันกับ NDSolve สำหรับ Mathematica 11 มันใช้งานได้ แต่โน้ตบุ๊กเครื่องเดียวกันทำงานใน Mathematica 12.0 จะสร้าง:

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