ข้อผิดพลาดในการแยกวิเคราะห์ [bug?] กับระบบของ PDE ที่ไม่ใช่เชิงเส้น Mathematica 12.0.0
ข้อบกพร่องที่นำมาใช้ใน 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
สัมประสิทธิ์ผ่าน แต่ยัง ... มีอะไรเกิดขึ้นที่นี่?
คำตอบ
นี่เป็นข้อบกพร่องและได้รับการแก้ไขแล้วในเวอร์ชัน 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[]]]
คุณจะได้รับคำเตือนที่คาดไว้เกี่ยวกับเงื่อนไขขอบเขตที่ขาดหายไป แต่นอกเหนือจากนั้นจะส่งคืนโซลูชัน
ฉันมีข้อบกพร่องเดียวกันกับ 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)"