การแก้ปัญหาเชิงสัญลักษณ์ของระบบสมการไม่เชิงเส้น 7 ตัว


9

ฉันมีระบบของสมการเชิงอนุพันธ์สามัญ - 7 สมการและพารามิเตอร์ ~ 30 ที่ควบคุมพฤติกรรมของพวกเขาเป็นส่วนหนึ่งของแบบจำลองทางคณิตศาสตร์ของการแพร่กระจายของโรค ฉันชอบที่จะหารัฐที่มั่นคงสำหรับสมการเหล่านั้นเปลี่ยนdx/dt = rest of the equationไป0 = equationสำหรับแต่ละสมการทำให้มันเป็นปัญหาพีชคณิตตรงไปตรงมา สิ่งนี้สามารถทำได้ด้วยมือ แต่ฉันไม่ดีที่การคำนวณแบบนั้น

ฉันได้ลองใช้ Mathematica ซึ่งสามารถจัดการกับปัญหานี้ในรุ่นที่เล็กกว่า ( ดูที่นี่ ) แต่ Mathematica กำลังจะหยุดปัญหานี้ มีวิธีที่มีประสิทธิภาพ / ประสิทธิผลมากกว่าในการเข้าถึงสิ่งนี้ ระบบคณิตศาสตร์เชิงสัญลักษณ์ที่มีประสิทธิภาพมากขึ้น? ข้อเสนอแนะอื่น ๆ ?

อัพเดตเล็กน้อย (21 มีนาคม):

  • เป้าหมายคือการแก้ปัญหาเชิงสัญลักษณ์ - คำตอบเชิงตัวเลขนั้นดีแต่ในตอนนี้เป้าหมายสุดท้ายคือรุ่นสัญลักษณ์
  • มีอย่างน้อยหนึ่งดุลยภาพ ฉันยังไม่ได้นั่งลงและพิสูจน์สิ่งนี้ แต่จากการออกแบบมันควรมีอย่างน้อยหนึ่งเรื่องที่ไม่มีใครติดเชื้อในตอนเริ่มต้น อาจไม่มีอะไรเลยนอกเหนือจากนั้น แต่นั่นจะทำให้ฉันเป็นเนื้อหาเป็นอย่างอื่น
  • ด้านล่างคือชุดของสมการที่แท้จริงที่ถูกพูดถึง

ป้อนคำอธิบายรูปภาพที่นี่

โดยสรุปฉันกำลังมองหานิพจน์สัญลักษณ์สำหรับการแก้ปัญหาของระบบของ 7 สมการกำลังสองใน 7 ตัวแปร


คุณเขียนสมการลงได้ไหม การแก้ระบบสมการไม่เชิงเส้นขนาดใหญ่มักใช้วิธีของนิวตันหรือหนึ่งในตัวแปร ตัวเลือกที่นี่จะขึ้นอยู่กับจำนวนข้อมูลที่คุณมีเกี่ยวกับระบบสมการดั้งเดิม - ที่สำคัญที่สุดคือ Jacobian ของระบบสมการที่มีอยู่คำนวณได้หรือประมาณได้อย่างง่ายดายหรือไม่?
Aron Ahmadia

อ่า! ฉันเห็นว่าสมการของคุณมีรายละเอียดในเว็บไซต์ Mathematica คุณสนใจพาพวกเขามาที่นี่หรือไม่? (นี่ไม่ใช่การโพสต์ข้ามโดยเฉพาะอย่างยิ่งถ้าเราจะแนะนำวิธีแก้ปัญหาเชิงตัวเลขสำหรับคุณเกินขอบเขตของ Mathematica ที่สามารถทำได้)
Aron Ahmadia

ฉันจะนำสมการมาจาก Mathematica ในวันนี้ - หลังจากขับรถ 5 ชั่วโมงฉันต้องออกไปให้พ้นทาง
Fomite

1
ไม่ใช่ dUsdt=dHdt. ดูเหมือนว่าจะเป็นเช่นนั้นจากสมการข้างต้น ฉันพลาดอะไรไปรึเปล่า?
ja72

1
@GeoffOxberry: ดังนั้นเมื่ออนุพันธ์มีค่าเท่ากับศูนย์ทั้งสองสมการ # 1 และ # 2 จะเหมือนกันและหนึ่งสามารถ ommited
ja72

คำตอบ:


13

ดูเหมือนว่าสมการที่คุณกำลังทำอยู่นั้นคือพหุนามหลังจากล้างตัวส่วน นั่นเป็นสิ่งที่ดี (ฟังก์ชันยอดเยี่ยมมักจะยากที่จะจัดการกับพีชคณิตเล็กน้อย) อย่างไรก็ตามมันไม่ได้รับประกันว่าสมการของคุณมีวิธีแก้ปัญหาแบบปิด นี่เป็นประเด็นสำคัญที่หลายคนไม่ได้ "รับ" จริง ๆ แม้ว่าพวกเขาจะรู้ในทางทฤษฎีแล้วมันก็กลับมามีระบบที่ค่อนข้างเรียบง่ายของสมการพหุนามซึ่งไม่มีวิธีให้วิธีแก้ปัญหาในแง่ของ (nth) รูตเป็นต้นตัวอย่างที่มีชื่อเสียง (ในตัวแปรเดียว) คือ x5x+1=0. ดูเพิ่มเติมหน้าวิกิพีเดียนี้

ต้องบอกว่าแน่นอนว่ายังมีระบบสมการที่สามารถแก้ไขได้และมันก็คุ้มค่าที่จะตรวจสอบว่าระบบของคุณเป็นหนึ่งในนั้นหรือไม่ และแม้ว่าระบบของคุณจะไม่สามารถแก้ไขได้ แต่ก็อาจเป็นไปได้ที่จะหาแบบฟอร์มสำหรับระบบสมการของคุณที่เรียบง่ายขึ้นในบางแง่มุม ตัวอย่างเช่นค้นหาหนึ่งสมการที่เกี่ยวข้องกับตัวแปรแรกเท่านั้น (แม้ว่าจะไม่สามารถแก้ไขพีชคณิตได้) จากนั้นสมการที่สองที่เกี่ยวข้องกับตัวแปรแรกและตัวที่สองเท่านั้นเป็นต้นมีทฤษฎีการแข่งขันสองสามวิธีที่จะหา "รูปแบบปกติ" ดังกล่าว ของระบบพหุนาม ที่รู้จักกันดีคือทฤษฎีพื้นฐานของ Groebner และอีกทฤษฎีหนึ่งคือทฤษฎีของเครือข่ายปกติ

ในระบบพีชคณิตของคอมพิวเตอร์ Maple (การเปิดเผยอย่างเต็มรูปแบบ: ฉันทำงานเพื่อพวกเขา) ทั้งสองอย่างนั้นถูกนำไปใช้งาน โดยsolveปกติแล้วคำสั่งจะเรียกวิธีการพื้นฐานของ Groebner ซึ่งฉันเชื่อว่าและจะหยุดลงบนแล็ปท็อปของฉันได้อย่างรวดเร็ว ฉันลองใช้การคำนวณเชนแบบปกติและใช้เวลานานกว่าที่ฉันจะมีความอดทน แต่ดูเหมือนว่าจะไม่ได้รับความทรงจำที่แย่ ในกรณีที่คุณสนใจหน้าความช่วยเหลือสำหรับคำสั่งที่ฉันใช้อยู่ที่นี่และนี่คือรหัสที่ฉันใช้:

restart;
sys, vars := {theta*H - rho_p*sigma_p*
       Cp*(Us/N) - rho_d*sigma_d*D*(Us/N)*rho_a*sigma_a*
       Ca*(Us/N) = 0, 
         rho_p*sigma_p*Cp*(Us/N) + rho_d*sigma_d*
       D*(Us/N)*rho_a*sigma_a*Ca*(Us/N) + theta*H = 0, 
         (1/omega)*Ua - alpha*Up - rho_p*psi_p*
       Up*(H/N) - Mu_p*sigma_p*Up*(Cp/N) - 
             Mu_a*sigma_a*Up*(Ca/N) - Theta_p*
       Up + Nu_up*(Theta_*M + Zeta_*D) = 0, 
         alpha*Up - (1/omega)*Ua - rho_a*psi_a*
       Ua*(H/N) - Mu_p*sigma_p*Ua*(Cp/N) - 
             Mu_a*sigma_a*Ua*(Ca/N) - Theta_a*
       Ua + Nu_ua*(Theta_*M + Zeta_*D) = 0, 
         (1/omega)*Ca + Gamma_*Phi_*D + rho_p*psi_p*
       Up*(H/N) + Mu_p*sigma_p*Up*(Cp/N) + 
             Mu_a*sigma_a*Up*(Ca/N) - alpha*Cp - Kappa_*
       Cp - Theta_p*Cp + Nu_cp*(Theta_*M + Zeta_*D) = 0, 
         alpha*Cp + Gamma_*(1 - Phi_)*D + rho_a*psi_a*
       Ua*(H/N) + Mu_p*sigma_p*Ua*(Cp/N) + 
             Mu_a*sigma_a*Ua*(Ca/N) - (1/omega)*
       Ca - Kappa_*Tau_*Ca - Theta_a*Ca + 
             Nu_ca*(Theta_*M + Zeta_*D) = 
     0, Kappa_*Cp + Kappa_*Tau_*Ca - Gamma_*Phi_*
       D - Gamma_*(1 - Phi_)*D - 
             Zeta_*D + Nu_d*(Theta_*M + Zeta_*D) = 0, 
    Us + H + Up + Ua + Cp + Ca + D = 0, 
         Up + Ua + Cp + Ca + D = 0}, {Us, H, Up, Ua, Cp, Ca, D, N, 
    M}:

sys := subs(D = DD, sys):
vars := subs(D = DD, vars):
params := indets(sys, name) minus vars:
ineqs := [theta > 0 , rho_p > 0 , sigma_p > 
       0 , rho_d > 0 , sigma_d > 0 , 
            rho_a > 0 , sigma_a > 0 , 
      omega > 0 , alpha > 0 , psi_p > 0 , Mu_p > 0 , 
            Mu_a > 0 , Theta_p > 0 , Nu_up > 0 , Theta_ > 
       0 , Zeta_ > 0 , psi_a > 0 , 
            Theta_a > 0 , Nu_ua > 0 , Gamma_ > 0 , Phi_ > 
       0 , Kappa_ > 0 , Nu_cp > 0 , 
            Tau_ > 0 , Nu_ca > 0]:
with(RegularChains):
R := PolynomialRing([vars[], params[]]):
sys2 := map(numer, map(lhs - rhs, normal([sys[]]))):
sol := LazyRealTriangularize(sys2,[],map(rhs, ineqs),[],R);

7

วิธีที่เป็นมืออาชีพคือการเขียนสมการของคุณในภาษาการสร้างแบบจำลองเช่น AMPL หรือ GAMS และแก้ปัญหาด้วยตัวแก้ปัญหาเช่น IPOPT

AMPL เป็นระบบเชิงพาณิชย์ แต่ AMPL รุ่นนักเรียนฟรีสามารถสร้างปัญหาด้วยสมการและตัวแปรมากถึง 300 รายการ

หากคุณต้องการแก้ปัญหาหนึ่งหรือสองสามข้อคุณสามารถแก้ไขได้อย่างอิสระออนไลน์โดยใช้เซิร์ฟเวอร์ NEOS สำหรับการเพิ่มประสิทธิภาพเพียงแค่ส่งคำอธิบาย AMPL และรอคำตอบที่จะส่งคืนให้คุณ

หากคุณต้องการแก้ปัญหาระบบดังกล่าวซ้ำ ๆ ซึ่งเป็นส่วนหนึ่งของการศึกษาที่ยิ่งใหญ่ขึ้น (เช่นการเปลี่ยนแปลงพารามิเตอร์) คุณควรดาวน์โหลด IPOPT (ซึ่งเป็นซอฟต์แวร์ภายใต้ลิขสิทธิ์แบบเสรีมาก)

แก้ไข: โปรดทราบว่าการแก้ปัญหาเชิงสัญลักษณ์ที่สามารถเข้าใจได้นั้นมักจะถูก จำกัด ให้เกิดปัญหาเล็ก ๆ น้อย ๆ - โดยทั่วไปแล้วขนาดของ Groebner Basis จะเพิ่มขึ้นอย่างมากด้วยจำนวนของตัวแปรหรือระดับของพหุนามและเวลาในการประมวลผลมากขึ้น ดังนั้นเวลารออย่างน้อยหนึ่งชั่วโมงกับ Mathematica จึงเป็นสัญญาณ (แม้ว่าจะไม่ใช่ข้อพิสูจน์) ว่าการแก้ปัญหาเชิงสัญลักษณ์ของคุณจะไม่สามารถเข้าใจได้อย่างสมบูรณ์ ยิ่งกว่านั้นการประเมินนิพจน์ที่มีความยาวนั้นน่าจะเป็นตัวเลขที่ไม่เสถียรดังนั้นคุณต้องมีความแม่นยำสูงในการประเมินเพื่อให้ได้ผลลัพธ์ที่มีความหมาย


6

ในการเขียนทางออกทั้งหมดเป็นไปไม่ได้ด้วยเหตุผล แต่นี่คือสมการบางส่วนเพื่อลดระบบลงเล็กน้อย:

US ไม่ปรากฏในสมการอื่นนอกเหนือจากสมการที่ 1 และ 2 นอกจากนี้สมการเหล่านี้เป็นเซตที่ขึ้นต่อกัน (สมการ 1 คือ -1 คูณสมการ 2) ดังนั้นสมการที่ 1 สามารถแก้ไขได้สำหรับ US ในแง่ของตัวแปรอื่น ๆ และสมการที่ 2 สามารถยกเลิกได้

US=HNθ(γ+ζ)CAKA+Cp+KD
ที่ไหน KA=γρAσA+κρDσDτ+ρAσAζ และ KD=γρpσp+κρDσD+ρpσpζ

สมการที่ 7 เป็นเส้นตรงในตัวแปรทั้งหมดและสามารถจัดเรียงใหม่เพื่อแก้ปัญหา D:

D=κ(CAτ+Cp)γ+ζ.

การแสดงออกที่เกิดขึ้นแสดงให้เห็นว่าเราควรพยายามที่จะแก้ปัญหาสำหรับตัวแปรที่เหลืออยู่ในแง่ของ CA และ CP; เนื่องจากเรามีสมการอิสระ 6 ตัวที่ดีที่สุดที่เราสามารถทำได้คือลดระบบให้เป็นหนึ่งสมการในสองตัวแปร

โชคดีที่การเพิ่มสมการ 3 และ 5 เข้าด้วยกันทำให้ได้สมการที่เป็นเส้นตรงในตัวแปรทั้งหมดและสามารถแก้ไขได้ UA หรือ UP. การเพิ่มสมการ 4 และ 6 เข้าด้วยกันยังให้สมการที่เป็นเส้นตรงในตัวแปรทั้งหมดและสามารถแก้ไขได้UA หรือ UP (ไม่ว่าจะแก้ปัญหาอะไรเมื่อเพิ่มสมการ 3 และ 5 เข้าด้วยกัน)

ณ จุดนี้เราควรมีการแสดงออก UA และ UP ในแง่ของ H, CAและ CP (เพราะคุณสามารถกำจัด Dใช้นิพจน์ด้านบน) เราใช้สมการ 1, 2, 5, 6 และ 7; เราจะรักษาสมการ 3 และ 4 เพราะมันง่ายกว่า

เราสามารถใช้สมการ 3 หรือ 4 เพื่อแก้หา H ในแง่ของ CA และ CP. จากนั้นทำให้การทดแทนที่จำเป็นทั้งหมดสมการที่เหลือควรอยู่ในรูปของCA และ CP. รากของสมการนี้จะเป็นตัวกำหนดสถานะคงที่ของระบบ อาจเป็นไปได้หรือไม่อาจหารากเหล่านี้ได้ในเชิงสัญลักษณ์

โชคดี!


USไม่ปรากฏในสมการอื่นนอกเหนือจากสมการ 1 & 2 ฉันถือว่าคุณกำจัดสมการ 1, 2 และ 7 (นี่คือวิธีแก้ปัญหาที่ง่ายที่สุด) การเพิ่มสมการที่ 3 และ 5 ให้สมการที่เป็นเชิงเส้นในตัวแปรทั้งหมด และง่ายต่อการแก้ไข ในทำนองเดียวกันการเพิ่มสมการ 4 และ 6 ให้สมการที่เป็นเชิงเส้นในตัวแปรทั้งหมดและทำให้ง่ายต่อการแก้ นั่นก็คือการดูแล 4 ตัวแปรของ 7 (D, UA, UPและ US) เพื่อให้ทุกอย่างในแง่ของ H, CAและ CP.
Geoff Oxberry

ดังนั้น ณ จุดนี้เรามีสมการเหลือ 3 และ 4 (สมการที่ 5 และ 6 มีเงื่อนไขมากขึ้นดังนั้นลองโยนออกไป) คุณสามารถใช้หนึ่งในนั้นเพื่อแก้หาH ในแง่ของ CA และ CPและ ณ จุดนั้นมีสมการเดียวในแง่ของตัวแปรสองตัว: CA และ CPในกรณีนี้มันอาจจะง่ายกว่าที่จะหาวิธีแก้ปัญหาเชิงสัญลักษณ์ ... ยกเว้นว่าฉันได้อ่านสมการผิดไปหมด
Geoff Oxberry

ถูกต้อง @GeoffOxberry ฉันคิดว่าคุณควรเพิ่มความคิดเห็นของคุณโดยตรงในคำตอบของ ja72
David Ketcheson

@DavidKetcheson: เสร็จสิ้น; ฉันไม่ได้กังวลเกี่ยวกับ wikifying เพราะตัวแทนไม่สำคัญ ฉันยังไม่ได้กลับไปกรอกข้อมูลในการดัดแปลงเชิงสัญลักษณ์เลย
Geoff Oxberry

3

มันขึ้นอยู่กับโครงสร้างของสมการของคุณ

หากคุณกำลังมองหาสถานะคงที่ทั้งหมดของชุดสมการของคุณและคุณสามารถจัดเรียงใหม่ตามที่ ErikP บอกไว้ในชื่อพหุนามคุณสามารถใช้วิธีจากเรขาคณิตเชิงพีชคณิตจริงเพื่อคำนวณวิธีแก้ปัญหาเชิงตัวเลขทั้งหมดไปยังความแม่นยำสูง Bertiniเป็นแพ็คเกจหนึ่งที่ฉันรู้ แต่มีอีกหลายแพ็คเกจ ฉันไปที่การประชุมที่ Notre Dame เมื่อไม่กี่ปีที่แล้วที่ Bertini คุ้นเคยกับการค้นหาสถานะของ ODE ที่คงที่จากจลนพลศาสตร์เคมี Bertini ได้รับการพัฒนาที่ Notre Dame

ความเป็นไปได้อีกอย่างคือการใช้วิธีการที่เสนอใน"การทดสอบการแยกแบบไม่เชิงสำหรับการหาคำตอบของสมการไม่เชิงเส้น" โดย MD Stuber, V. Kumar และ PI Barton, BIT ตัวเลขคณิตศาสตร์ 50 (4), 885-917, DOI: 10.1007 / s10543-010-0280-6 ; วิธีการเหล่านี้ไม่ต้องการให้ระบบสมการเป็นพหุนาม Paul Barton เป็นที่ปรึกษาของฉันและ Matt Stuber เป็นเพื่อนร่วมงานของฉัน ถ้าคุณชอบฉันสามารถขอซอฟต์แวร์จากเขาและส่งให้คุณ กระดาษใช้วิธีการจากการเพิ่มประสิทธิภาพทั่วโลกและการคำนวณช่วงเวลา (มันอ้างถึงหนังสือของ ArnoldNeumaier) เช่นเดียวกับวิธีการของนิวตัน ข้อดีของวิธีนี้คือควรหาวิธีแก้ปัญหาทั้งหมด ข้อเสียคือมันซับซ้อน

ในกรณีที่ยังไม่ชัดเจน ArnoldNeumaier แนะนำว่าแทนที่จะแก้ไข F(x)=0 ใช้บางอย่างเช่นวิธีของนิวตันโดยตรง (ซึ่งโดยทั่วไปจะใช้งานได้หากคุณคาดเดาเริ่มต้นได้ดีพอใกล้กับโซลูชัน) คุณแก้ปัญหา

minxSF(x),

ที่ไหน Sเป็นชุดที่เป็นไปได้ที่กำหนดโดยข้อ จำกัด ในปัญหาของคุณแทนที่จะพยายามแก้ไข ในระดับที่หยาบมากการใช้ตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นเป็นวิธีการที่ใช้วิธีของนิวตันพร้อมกับความซับซ้อนของอัลกอริธึมเพิ่มเติมสำหรับความทนทานและประสิทธิภาพ IPOPTเป็นซอฟต์แวร์ที่ดีมากสำหรับจุดประสงค์นี้ มีบทสวดของนักแก้ปัญหาคนอื่น ๆ อยู่ที่นั่น (ดูที่รายการนักแก้ปัญหาที่มีอยู่สำหรับGAMS , AMPLหรือNEOSหากคุณเลือกวิธีการเช่นนี้ให้ระวังสักสองสามประการ:

  • จะค้นหาได้ครั้งละหนึ่งโซลูชันเท่านั้น ในการค้นหาโซลูชันเพิ่มเติมคุณต้องเพิ่มข้อ จำกัด ที่ไม่รวมโซลูชันก่อนหน้าทั้งหมดที่คุณพบ
  • หากมีปัญหาการเพิ่มประสิทธิภาพของคุณ nonconvex การใช้ IPOPT หรือแก้ที่คล้ายกันคุณอาจจะต้องเดาเริ่มต้นที่ดีใกล้กับวิธีการแก้ปัญหาของสมการของคุณ (หลักการพื้นฐานเดียวกับวิธีการของนิวตัน) หรือแก้เพิ่มประสิทธิภาพ nonconvex เช่นบารอน , Couenne , Bonminเป็นต้นคุณควรลองใช้ตัวแก้ปัญหาทุกตัวที่คุณได้รับเนื่องจากประสิทธิภาพของตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นแต่ละตัวนั้นขึ้นอยู่กับปัญหา

1

ฉันขอแนะนำให้ดูวิธีการ homotopy แม้ว่ามันจะไม่ใช่เชิงสัญลักษณ์ แต่มันจะสร้างทางออกทั้งหมดสำหรับปัญหาของคุณ สำหรับห้องสมุดที่ง่ายต่อการตรวจสอบ:

http://homepages.math.uic.edu/~jan/PHCpack/phcpack.html


ใช่ วิธีการต่อเนื่องของ Homotopy นั้นยากอย่างมาก (คุณจะต้องพิจารณา2nเงื่อนไขเริ่มต้น 'เริ่มต้น') แต่สำหรับปัญหาเล็ก ๆ นี้มันจะสามารถคำนวณได้ง่ายและคุณสามารถรับประกันการมองโลกในแง่ดีที่สุดของปัญหาการย่อเล็กสุด
Aron Ahmadia

ดร. อะห์มาเดียคุณเห็นได้ชัดว่าไม่ได้ติดตามวรรณกรรมเกี่ยวกับวิธีการ homotopy โปรดไปอ่านสิ่งพิมพ์ของ ม.ค. และแก้ไขหมายเลขนี้
aterrel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.