คำถามติดแท็ก linear-solver

อ้างถึงวิธีการในการแก้ระบบเชิงเส้นของสมการ

17
มีตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นคุณภาพสูงสำหรับ Python หรือไม่?
ฉันมีปัญหาการเพิ่มประสิทธิภาพทั่วโลกที่ไม่ท้าทายเพื่อแก้ปัญหา ปัจจุบันผมใช้กล่องเครื่องมือเพิ่มประสิทธิภาพของ MATLAB (โดยเฉพาะfmincon()กับอัลกอริทึม = 'sqp') ซึ่งมีประสิทธิภาพมาก อย่างไรก็ตามรหัสของฉันส่วนใหญ่อยู่ใน Python และฉันก็ชอบที่จะเพิ่มประสิทธิภาพใน Python ด้วยเช่นกัน มีตัวแก้ NLP ที่มีการผูก Python ที่สามารถแข่งขันได้fmincon()หรือไม่ มันจะต้อง สามารถรับมือกับความไม่เสมอภาคและความไม่เท่าเทียมกันได้ ไม่ต้องการให้ผู้ใช้จัดหายาโคบ ไม่เป็นไรหากไม่รับประกันว่าจะมีประสิทธิภาพระดับโลก ( fmincon()ไม่) fmincon()ฉันกำลังมองหาบางสิ่งบางอย่างที่ทนทานลู่ไปยังท้องถิ่นที่เหมาะสมแม้สำหรับความท้าทายปัญหาและแม้ว่ามันจะช้ากว่าเล็กน้อย ฉันได้พยายามแก้หลายที่ให้บริการผ่าน OpenOpt และพบว่าพวกเขาจะด้อยกว่าของ fmincon/sqpMATLAB เพียงเพื่อเน้นฉันมีสูตรเวิ้งว้างและแก้ปัญหาที่ดี เป้าหมายของฉันคือการเปลี่ยนภาษาเพื่อให้เวิร์กโฟลว์มีความคล่องตัวมากขึ้น เจฟฟ์ชี้ให้เห็นว่าคุณลักษณะบางอย่างของปัญหาอาจเกี่ยวข้องกัน พวกเขาคือ: 10-400 ตัวแปรการตัดสินใจ 4-100 ข้อ จำกัด ความเท่าเทียมกันของพหุนาม (ดีกรีพหุนามมีช่วงตั้งแต่ 1 ถึงประมาณ 8) จำนวนข้อ จำกัด ของความไม่เท่าเทียมกันที่มีเหตุผลเท่ากับจำนวนตัวแปรการตัดสินใจประมาณสองเท่า ฟังก์ชั่นวัตถุประสงค์เป็นหนึ่งในตัวแปรการตัดสินใจ ชาวจาโคเบียนแห่งข้อ จำกัด ความเท่าเทียมมีความหนาแน่นสูงเช่นเดียวกับชาวจาโคเบียนแห่งข้อ จำกัด …

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

3
วิธีเลือกวิธีการแก้สมการเชิงเส้น
สำหรับความรู้ของฉันมี 4 วิธีในการแก้ระบบสมการเชิงเส้น (แก้ไขฉันหากมีมากขึ้น): หากเมทริกซ์ระบบเป็นเมทริกซ์จตุรัสแบบเต็มคุณสามารถใช้กฎของแครมเมอร์ คำนวณค่าผกผันหรือ pseudoinverse ของเมทริกซ์ระบบ ใช้วิธีการสลายตัวของเมทริกซ์ (การกำจัดเกาส์เซียนหรือจอร์แดนถือเป็นการสลายตัว LU) ใช้วิธีการวนซ้ำเช่นวิธีการไล่ระดับสีแบบคอนจูเกต ในความเป็นจริงคุณแทบไม่ต้องการแก้ไขสมการโดยใช้กฎของ Cramer หรือคำนวณค่า inverse หรือ pseudoinverse โดยเฉพาะอย่างยิ่งสำหรับเมทริกซ์มิติสูงดังนั้นคำถามแรกคือเมื่อต้องใช้วิธีการสลายตัวและวิธีวนซ้ำตามลำดับ ฉันเดาว่ามันขึ้นอยู่กับขนาดและคุณสมบัติของเมทริกซ์ของระบบ คำถามที่สองคือความรู้ของคุณวิธีการสลายตัวแบบใดหรือวิธีการวนซ้ำแบบใดที่เหมาะสมที่สุดสำหรับเมทริกซ์ของระบบในแง่ของความเสถียรเชิงตัวเลขและประสิทธิภาพ ยกตัวอย่างเช่นวิธีการไล่ระดับสีคอนจูเกตใช้เพื่อแก้สมการที่เมทริกซ์เป็นสมมาตรและบวกแน่นอนแม้ว่ามันจะสามารถนำไปใช้กับสมการเชิงเส้นใด ๆ โดยการแปลงเป็นข นอกจากนี้สำหรับเมทริกซ์แน่นอนที่เป็นบวกคุณสามารถใช้วิธีการสลายตัวของ Cholesky เพื่อค้นหาวิธีแก้ปัญหา แต่ฉันไม่รู้ว่าจะเลือกวิธี CG เมื่อใดและจะเลือกการสลายตัวของ Cholesky ได้อย่างไร ความรู้สึกของฉันคือเราควรใช้วิธี CG สำหรับเมทริกซ์ขนาดใหญ่A T A x = A T bA x = bAx=ข\mathbf{A}x=bATA x= ATขATAx=ATข\mathbf{A}^{\rm T}\mathbf{A}x=\mathbf{A}^{\rm T}b สำหรับเมทริกซ์รูปสี่เหลี่ยมผืนผ้าเราสามารถใช้ …

3
การแก้
ฉันมีการฝึกอบรมและG Aกระจัดกระจายและn × nมีnมาก (สามารถเรียงตามลำดับได้หลายล้าน) Gคือเมทริกซ์สูงn × mมีmค่อนข้างเล็ก ( 1 < m < 1,000 ) และแต่ละคอลัมน์สามารถมีเพียงหนึ่งเดียว1รายการที่มีส่วนที่เหลือเป็น0 's เช่นว่าG T G =ฉัน Aมีขนาดใหญ่มากมันจึงยากที่จะกลับด้านและฉันสามารถแก้ปัญหาระบบเชิงเส้นเช่นAAAAGGGAAAn×nn×nn\times nnnnGGGn×mn×mn\times mmmm1<m<10001<m<10001 \lt m \lt 1000111000GTG=IGTG=IG^TG = IAAAAx=bAx=bAx = bซ้ำ ๆ กันโดยใช้วิธีการ subspace ของ Krylov เช่นBiCGStab(l)BiCGStab(l)\mathrm{BiCGStab}(l)แต่ฉันไม่มีA−1A−1A^{-1}อย่างชัดเจน ฉันต้องการแก้ระบบของรูปแบบ: (GTA−1G)x=b(GTA−1G)x=b(G^TA^{-1}G)x = bโดยที่xxxและbbbเป็นเวกเตอร์ความยาวmmmวิธีหนึ่งในการทำคือใช้อัลกอริธึมการวนซ้ำภายในอัลกอริทึมการวนซ้ำเพื่อแก้ปัญหาA−1A−1A^{-1}สำหรับการวนซ้ำของอัลกอริทึมการวนซ้ำรอบนอกแต่ละครั้ง อย่างไรก็ตามการคำนวณนี้มีราคาแพงมาก ฉันสงสัยว่ามีวิธีที่ง่ายกว่าในการแก้ปัญหานี้หรือไม่

2
ห้องสมุดสำหรับการแก้ปัญหาระบบเชิงเส้นหร็อมแหร็ม
มีห้องสมุดที่แตกต่างกันจำนวนมากที่ช่วยแก้ระบบสมการเชิงเส้นหร็อมแหร็ม แต่ฉันพบว่ามันยากที่จะเข้าใจว่าความแตกต่างคืออะไร เท่าที่ผมสามารถบอกได้ว่ามีสามแพคเกจที่สำคัญ: Trilinos , PETScและIntel MKL พวกเขาสามารถแก้เมทริกซ์แบบเบาบางพวกมันทั้งหมดนั้นเร็ว (เท่าที่ฉันสามารถบอกได้ว่าฉันไม่สามารถหาเกณฑ์มาตรฐานที่แข็งแกร่งสำหรับพวกมัน) และพวกมันทั้งหมดสามารถต่อขนานกันได้ สิ่งที่ฉันไม่สามารถค้นหาได้คือความแตกต่าง ดังนั้นความแตกต่างระหว่างระบบเชิงเส้นที่กระจัดกระจายแตกต่างกันคืออะไร?

3
ปัญหาที่การไล่ระดับสีแบบคอนจูเกตนั้นดีกว่า GMRES มาก
ฉันสนใจในกรณีที่การไล่ระดับสีคอนจูเกตทำงานได้ดีกว่าวิธี GMRES โดยทั่วไป CG เป็นตัวเลือกที่ดีกว่าในหลาย ๆ กรณีของ SPD (symmetric-positive-definite) เนื่องจากมันต้องการพื้นที่จัดเก็บน้อยกว่าและต้องอาศัยทฤษฎีตามอัตราการลู่เข้าสำหรับ CG เป็นสองเท่าของ GMRES มีปัญหาใดบ้างหรือไม่ที่มีการปฏิบัติตามอัตราดังกล่าวจริง มีลักษณะของกรณีใดบ้างที่ GMRES มีประสิทธิภาพดีกว่าหรือเทียบเคียงกับ CG สำหรับจำนวน spmvs ที่เหมือนกัน (การกระจายเมทริกซ์เมทริกซ์ - เวกเตอร์)

1
มีการใช้งาน ILU หลายระดับแบบโอเพนซอร์สแบบผกผันหรือไม่?
ฉันประทับใจมากกับประสิทธิภาพของอนุกรมของILU preconditioners หลายระดับโดยเฉพาะHelmholtz ที่ต่างกันแต่ฉันประหลาดใจที่ไม่พบการใช้งานโอเพ่นซอร์สใด ๆ โดยเฉพาะอย่างยิ่งILUPACKทำให้ไบนารีพร้อมใช้งานสำหรับนักวิชาการได้อย่างอิสระ แต่ไม่ปรากฏว่าพวกเขาปล่อยซอร์สโค้ดของพวกเขา เป็นกรณีที่ไม่มีผู้ใดได้เปิดแหล่งที่มาของการใช้งานหรือไม่

3
อาการป่วยเมื่อใช้วิธีการโดยตรงคืออะไร
สมมติว่าเรามีระบบเชิงเส้นและเราไม่รู้อะไรเลยเกี่ยวกับการปรับสภาพและไม่มีข้อมูลเบื้องต้นเกี่ยวกับการแก้ปัญหา เราสุ่มสี่สุ่มห้าใช้กำจัดแบบเกาส์และได้รับการแก้ปัญหาบางxxxxเป็นไปได้หรือไม่ที่จะตัดสินว่าโซลูชันนี้เชื่อถือได้หรือไม่ (เช่นระบบมีสภาพดี) โดยไม่ต้องวิเคราะห์เมทริกซ์เบื้องต้นอย่างละเอียดหรือไม่ ขนาดของ pivots ให้ข้อมูลที่เชื่อถือได้หรือไม่? และโดยทั่วไปอะไรคือแนวทางหลักในการตรวจจับการเสียสภาพ "ในทันที"

1
Multigrid ของ Krylov เร่งความเร็วอย่างไรโดยใช้ MG เป็นตัวกระตุ้นล่วงหน้า?
Multigrid (MG) อาจใช้เพื่อแก้ระบบเชิงเส้นโดยสร้างการเดาเริ่มต้นx 0และทำซ้ำสิ่งต่อไปนี้สำหรับi = 0 , 1 ..จนกระทั่งการบรรจบกัน:A x = bAx=bAx=bx0x0x_0i = 0 , 1 ..i=0,1..i=0,1.. คำนวณส่วนที่เหลือRผม= b - A xผมri=b−Axir_i = b-Ax_i สมัครรอบ multigrid ที่จะได้รับประมาณที่อีฉัน = RฉันΔ xผม≈ eผมΔxi≈ei\Delta x_i \approx e_iอีผม= rผมAei=riAe_i = r_i อัปเดตxฉัน+ 1← xผม+ Δ xผมxi+1←xi+Δxix_{i+1} \gets x_i + \Delta x_i วงจร multigrid เป็นลำดับของเรียบแก้ไขข้อ …

3
อัลกอริทึมโทมัสเป็นวิธีที่เร็วที่สุดในการแก้ปัญหาระบบเชิงเส้นที่กระจัดกระจายในแนวทแยงมุมสมมาตร
ฉันสงสัยว่าอัลกอริธึมของ Thomas นั้นเป็นวิธีที่เร็วที่สุด (พิสูจน์ได้หรือไม่) เพื่อแก้ปัญหาระบบ tridiagonal ที่กระจัดกระจายในแนวทแยงมุมแบบสมมาตรในแง่ของความซับซ้อนของอัลกอริทึม ฉันรู้ว่าทั้งอัลกอริธึมของ Thomas และ Multigrid นั้นมีความซับซ้อนแต่ปัจจัยคงที่สำหรับ Multigrid นั้นน้อยกว่านี้หรือไม่ สำหรับฉันดูเหมือนว่า multigrid อาจไม่เร็วกว่านี้ แต่ฉันก็ไม่คิดบวกO ( n )O(n)O(n) หมายเหตุ: ฉันกำลังพิจารณากรณีที่เมทริกซ์มีขนาดใหญ่มาก ยอมรับได้ทั้งวิธีโดยตรงหรือแบบวนซ้ำ

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

2
การกำหนดเงื่อนไข krylov ด้วยวิธี krylov อื่น
ในวิธีเช่น gmres หรือ bicgstab มันน่าดึงดูดใจที่จะใช้อีกวิธี krylov เป็น preconditioner หลังจากทั้งหมดพวกเขาจะใช้งานง่ายในวิธีที่ปราศจากเมทริกซ์และในสภาพแวดล้อมแบบคู่ขนาน ตัวอย่างเช่นหนึ่ง coul ใช้การวนซ้ำสองครั้ง (สมมติว่า ~ 5) ของ bigcstab ที่ไม่มีเงื่อนไขในฐานะ precontioner สำหรับ gmres หรือการรวมกันของวิธี krylov อื่น ๆ ฉันไม่พบการอ้างอิงถึงวิธีการดังกล่าวในครอกดังนั้นฉันคาดหวังว่านี่เป็นเพราะมันไม่ได้มีประสิทธิภาพมาก ฉันต้องการที่จะเข้าใจว่าทำไมมันไม่มีประสิทธิภาพ มีกรณีที่เป็นตัวเลือกที่ดีหรือไม่? ในการวิจัยของฉันฉันสนใจเกี่ยวกับวิธีการแก้ปัญหาของรูปไข่ 3 มิติในสภาพแวดล้อมแบบขนาน (mpi)

2
แก้ปัญหา
ฉันกำลังย้ายรหัสที่มีอยู่จาก MATLAB ไปยัง C ++ และมีระบบเชิงเส้นเพื่อแก้ไข (แทนที่จะเป็นรูปแบบทั่วไปA x = b )xA=bxA=bxA=bAx=bAx=bAx=b เมทริกซ์นั้นหนาแน่นและอยู่ในรูปแบบทั่วไป แต่ไม่ใหญ่กว่า 1,000x1000 ดังนั้นใน MATLAB คำตอบคือฟังก์ชั่นหรือสัญกรณ์ไปข้างหน้าAAAmrdivide(b,A)x = b/A; ฉันจะแก้ไขปัญหานี้ในรหัส C ++ ของฉันโดยใช้รูทีน BLAS และ LAPACK ได้อย่างไร ฉันคุ้นเคยกับกิจวัตรประจำวัน LAPACK DGESVซึ่งจะช่วยแก้x = BสำหรับxAx=bAx=bAx=bxxx ดังนั้นหนึ่งคิดว่าฉันต้องทำกิจวัตรบางอย่างโดยใช้ตัวแปลงสัญญาณเมทริกซ์: (xA)T=bT(xA)T=bT(xA)^T=b^T ATxT=bTATxT=bTA^T x^T = b^T xT=(AT)−1bTxT=(AT)−1bTx^T = (A^T)^{-1} b^T แล้วแก้รูปแบบสุดท้ายใช้DGESVการดำเนินงานในการขนย้ายT (ดังนั้นค่าใช้จ่ายในการเคลื่อนย้ายAและค่าใช้จ่ายในการแก้ไขระบบ)ATATA^TAAA มีวิธีการที่มีประสิทธิภาพมากกว่าหรือดีกว่าอย่างอื่นหรือไม่? ฉันทำงานกับเมทริกซ์และคลาสเวกเตอร์รวมถึงการใช้ BLAS จากไลบรารี BOOST uBLAS …

3
ตัวแก้เชิงเส้นเบาบางสำหรับหลาย ๆ มือขวา
ฉันจำเป็นต้องแก้ปัญหาระบบเชิงเส้นแบบกระจัดกระจาย (300x300 ถึง 1,000x1000) ที่มีด้านขวามือจำนวนมาก (300 ถึง 1,000) นอกเหนือจากปัญหาแรกนี้ฉันยังต้องการที่จะแก้ปัญหาระบบที่แตกต่างกัน แต่ด้วยองค์ประกอบที่ไม่เป็นศูนย์เหมือนกัน (ค่าที่แตกต่างกัน) ซึ่งเป็นระบบที่ห่างเหินจำนวนมากที่มีรูปแบบการกระจายอย่างต่อเนื่อง เมทริกซ์ของฉันไม่มีกำหนด ประสิทธิภาพของการแยกตัวประกอบและการกำหนดค่าเริ่มต้นไม่สำคัญ แต่ประสิทธิภาพของขั้นตอนการแก้คือ ขณะนี้ฉันกำลังพิจารณา PaStiX หรือ Umfpack และฉันอาจจะเล่นกับ Petsc (ซึ่งรองรับทั้งนักแก้ปัญหา) มีห้องสมุดที่สามารถใช้ประโยชน์จากความต้องการเฉพาะของฉัน (vectorization, multi-threading) หรือฉันควรพึ่งพานักแก้ปัญหาทั่วไปและ อาจแก้ไขได้เล็กน้อยตามความต้องการของฉัน เกิดอะไรขึ้นถ้าเมทริกซ์กระจัดกระจายมีขนาดใหญ่ขึ้นถึง ?106× 106106×10610^6 \times 10^6

5
การแก้ซ้ำ ๆ ด้วย ,
ฉันกำลังใช้ MATLAB เพื่อแก้ปัญหาที่เกี่ยวข้องกับการแก้A x = bAx=b\mathbf{A} \mathbf{x}=\mathbf{b}ทุก ๆ เวลาที่ขb\mathbf{b}เปลี่ยนแปลงไปตามกาลเวลา ตอนนี้ฉันกำลังทำสิ่งนี้โดยใช้ MATLAB mldivide: x = A\b ฉันมีความยืดหยุ่นในการทำให้เป็น precomputations มากที่สุดเท่าที่จำเป็นเพื่อให้ผมสงสัยว่าถ้ามีวิธีที่เร็วขึ้นและ / mldivideหรือความถูกต้องมากกว่า โดยทั่วไปแล้วจะทำอะไรที่นี่ ขอบคุณทุกคน!

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