วิทยาศาสตร์การคำนวณ

ถามตอบสำหรับนักวิทยาศาสตร์ที่ใช้คอมพิวเตอร์เพื่อแก้ปัญหาทางวิทยาศาสตร์

1
แทนที่การรวม QuasiMonteCarlo ของ Mathematica ใน C ++
ฉันมีโปรแกรม Mathematica ซึ่งทำหน้าที่อินทิกรัลบางตัวใน 3 หรือ 4 มิติโดยใช้QuasiMonteCarloวิธีการ ปัญหาคือใช้เวลานานในการรันจนถึงจุดที่การคำนวณบางอย่างไม่สามารถดำเนินการได้ในเวลางานสูงสุดที่มีอยู่ในคลัสเตอร์ HPC ของเรา ดังนั้นฉันกำลังพิจารณาที่จะเขียนโปรแกรมใหม่ใน C ++ ซึ่งฉันสงสัยว่าจะเร่งความเร็วขึ้นด้วยปัจจัยใหญ่ ฉันดูเอกสาร GSL และในขณะที่มีส่วนในลำดับ quasirandomและการรวม MC ปกติฉันไม่เห็นอะไรเลยที่นำมารวมกัน นอกจากนี้การค้นหาของ Google หรือสองรายการก็ไม่ทำให้เกิดสิ่งใด ๆ ที่ดูเหมือนจะเป็นการติดตั้งที่เชื่อถือได้ ตัวเลือกของฉันสำหรับการติดตั้ง QMC ใน C ++ มีการทดสอบอย่างดีมีอะไรบ้าง เพื่อประโยชน์ของความมั่นคงฉันต้องการใช้บางสิ่งบางอย่างใกล้เคียงกับวิธี Halton-Hammersley-Wozniakowski ที่ Mathematica ดำเนินการหากเป็นตัวเลือก

4
ความยืดหยุ่นของการแปลงฟูริเยร์อย่างรวดเร็ว (FFT)
ในการใช้ Fast Fourier Transform (FFT) กับข้อมูลตัวอย่างที่สม่ำเสมอเช่นในการเชื่อมต่อกับตัวแก้ PDE เป็นที่ทราบกันดีว่า FFT เป็นอัลกอริทึม ) จะทำอย่างไรดีขนาด FFT เมื่อการประมวลผลแบบขนานสำหรับn →การ∞ (คือมีขนาดใหญ่มาก)?O (nบันทึก( n )O(nlog⁡(n)\mathcal{O}(n\log(n)n → ∞n→∞n\to\infty

1
โซลูชันที่มีประสิทธิภาพของโปรแกรมเชิงเส้นจำนวนเต็มแบบผสม
ปัญหาที่สำคัญจำนวนมากสามารถแสดงเป็นโปรแกรมเชิงเส้นจำนวนเต็มผสม น่าเสียดายที่การคำนวณวิธีแก้ปัญหาที่เหมาะสมที่สุดสำหรับปัญหานี้คือ NP-Complete โชคดีที่มีอัลกอริทึมการประมาณที่บางครั้งสามารถให้โซลูชันที่มีคุณภาพด้วยการคำนวณในระดับปานกลางเท่านั้น ฉันจะวิเคราะห์โปรแกรม linear จำนวนเต็มแบบผสมเพื่อดูว่ามันยืมตัวเองไปยังหนึ่งในอัลกอริทึมการประมาณเหล่านี้ได้อย่างไร อะไรคือคุณสมบัติหรือคุณสมบัติที่เกี่ยวข้องเช่นโปรแกรมอาจมี? มีการใช้อัลกอริธึมที่เกี่ยวข้องอะไรบ้างในวันนี้และคุณภาพเหล่านี้ทำแผนที่อย่างไรกับอัลกอริธึมเหล่านี้ ฉันควรใช้แพ็คเกจซอฟต์แวร์ใดในการทดสอบ

3
ระเบียบวิธีไฟไนต์วอลลุ่ม: ตาข่ายแบบไม่มีโครงสร้างเทียบกับการปรับตัวแปดครั้ง + การตัดเซลล์
ฉันกำลังทำงานกับห้องสมุด OpenFOAM C ++ Computational Continuum Mechanics (มันสามารถจัดการกับการปฏิสัมพันธ์ที่เป็นของแข็งและเป็นของเหลว, กระแส MHD ... ) ซึ่งใช้ตาข่ายที่ไม่มีโครงสร้างโดยพลการ นี่คือแรงผลักดันจากความคิดที่จะใช้ประโยชน์จากการสร้างแบบเร็ว (โดยอัตโนมัติ) ของตาข่ายที่ไม่มีโครงสร้างเพื่อจำลองปัญหาในรูปทรงเรขาคณิตที่ซับซ้อน อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันได้พบวิธีการอื่น: ตาข่ายคาร์เพเทียนแบบปรับตัวแปดที่มีเซลล์ "ตัด" ซึ่งการปรับแต่งตาข่าย agressive ใช้เพื่ออธิบายรูปทรงเรขาคณิตที่ซับซ้อน จากมุมมองของตัวเลขตาข่ายของ Carthesian นั้นมีความแม่นยำมากขึ้นดังนั้นคำถามของฉันคือ: มีใครเคยมีประสบการณ์ในการใช้ / นำวิธีการหนึ่งหรือทั้งสองมาใช้ไหม? พวกเขาจะเปรียบเทียบกันได้อย่างไร ฉันกำลังพัฒนารหัสสำหรับการไหลของของไหลสองเฟสและฉันสังเกตเห็นว่าการสร้างการไล่ระดับสีของฟิลด์ใหม่สามารถทำได้อย่างแม่นยำมากขึ้นบนตาข่ายของ Carthesian ในขณะที่ตาข่ายที่ไม่มีโครงสร้างต้องใช้การถดถอยเชิงเส้นสำหรับการเปลี่ยนแปลงแบบฉับพลันในสนาม ...

3
แอปพลิเคชันกรณีใดบ้างที่มีเงื่อนไขการเสริมล่วงหน้าที่ดีกว่าตัวคูณ
ทั้งในการสลายตัวของโดเมน (DD) และ multigrid (MG) วิธีหนึ่งอาจเขียนแอพลิเคชันของการปรับปรุงบล็อกหรือแก้ไขหยาบเป็นทั้งสารเติมแต่งหรือคูณ สำหรับนักแก้จุดบกพร่องนี่คือความแตกต่างระหว่างการทำซ้ำ Jacobi และ Gauss-Seidel เรียบคูณสำหรับx = Bทำหน้าที่เป็นS ( x o L d , B ) = x n E Wจะถูกใช้เป็นAx=bAx=bAx = bS(xold,b)=xnewS(xold,b)=xnewS(x^{old}, b) = x^{new} xi+1=Sn(Sn−1(...,S1(xi,b)...,b),b)xi+1=Sn(Sn−1(...,S1(xi,b)...,b),b) x_{i+1} = S_n(S_{n-1}( ..., S_1(x_i, b) ..., b), b) และสารเติมแต่งเรียบเนียนถูกนำไปใช้เป็น xi+1=xi+∑ℓ=0nλℓ(Sℓ(xi,b)−xi)xi+1=xi+∑ℓ=0nλℓ(Sℓ(xi,b)−xi) x_{i+1} = x_{i} + \displaystyle\sum_{\ell = 0}^{n}\lambda_\ell(S_\ell(x_i, …

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

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

2
เมื่อความแตกต่างอัตโนมัติราคาถูก?
การสร้างความแตกต่างโดยอัตโนมัติช่วยให้เราสามารถประเมินผลอนุพันธ์ของโปรแกรมในอินพุตเฉพาะ มีทฤษฎีบทที่การคำนวณนี้สามารถทำได้ในราคาที่น้อยกว่าห้าเท่าของค่าใช้จ่ายในการเรียกใช้โปรแกรมต้นฉบับ ปัจจัยห้านี้เป็นขอบเขตบน ค่าใช้จ่ายนี้สามารถลดลงได้ในสถานการณ์ใดบ้าง รหัสอนุพันธ์ในสนามจำนวนมากทำงานที่ความเร็วใกล้เคียงกับโปรแกรมต้นฉบับ จะทำอย่างไรเพื่อให้ได้ความเร็วนี้ อะไรคือลักษณะของโปรแกรมต้นฉบับที่สามารถนำไปใช้ประโยชน์เพื่อเพิ่มความเร็วในการคำนวณ? เทคนิควิศวกรรมซอฟต์แวร์ใดที่สามารถนำมาใช้เพื่อเพิ่มความเร็วในการคำนวณ

1
discretizations เชิงพื้นที่อะไรสำหรับการไหลที่ไม่สามารถบีบอัดได้ด้วยตาข่ายขอบเขตแบบแอนไอโซโทรปิก
การไหลจำนวนสูงของ Reynolds ทำให้เกิดเลเยอร์ขอบเขตที่บางมาก ถ้าความละเอียดผนังจะใช้ในการวนจำลองขนาดใหญ่อัตราส่วนอาจจะอยู่ในคำสั่งของ 6 หลายวิธีไม่เสถียรในระบอบการปกครองนี้เนื่องจากค่าคงที่ inf-sup ลดลงเป็นรากที่สองของอัตราส่วนกว้างยาวหรือแย่ลง ค่าคงที่ inf-sup มีความสำคัญเนื่องจากมันจะส่งผลกระทบต่อจำนวนเงื่อนไขของระบบเชิงเส้นและคุณสมบัติการประมาณค่าของสารละลายที่ไม่ต่อเนื่อง โดยเฉพาะอย่างยิ่งต่อไปนี้ขอบเขตเบื้องต้นเกี่ยวกับข้อผิดพลาดที่ไม่ต่อเนื่องถือ (Brezzi และ Fortin 1991)10610610^6 μ ∥ ยู - ยูชั่วโมง∥H1≤ C[ μβINFv ∈ V∥ u - v ∥H1+ infQ∈ Q∥ p - q∥L2]∥ p - pชั่วโมง∥L2≤ Cβ[ μβINFv ∈ V∥ u - v ∥H1+ infQ∈ Q∥ p - q∥L2]μ‖u−uh‖H1≤C[μβinfv∈V‖u−v‖H1+infq∈Q‖p−q‖L2]‖p−ph‖L2≤Cβ[μβinfv∈V‖u−v‖H1+infq∈Q‖p−q‖L2]\begin{split} …

2
มีชุดโอเพ่นซอร์สของตัวแก้ ODE สำหรับ C ที่ใช้ชนิด C99 ดั้งเดิมหรือไม่
ฉันใช้GSLเป็นพื้นฐานของการจำลองหลายอย่าง แต่มันค่อนข้างเกินความจริงสำหรับวัตถุประสงค์ของฉันและมันกำหนดประเภทที่ซับซ้อนของตัวเองด้วยเหตุผลดั้งเดิม แทนที่จะเขียนรหัสตัวแก้ Runge-Kutta ODE ของตัวเองซึ่งอาจจะไม่ได้ผลมากนักมีนักแก้ปัญหาโอเพนซอร์ซโอเพนซอร์สที่ใช้ C99 complex ประเภทดั้งเดิมหรือไม่?
12 c  ode 

3
การทดสอบว่าเมทริกซ์เป็นค่ากึ่งบวกแน่นอนหรือไม่
ฉันมีรายการของเมทริกซ์สมมาตรที่ฉันต้องการตรวจสอบความแน่นอนกึ่งบวก (นั่นคือค่าลักษณะเฉพาะของพวกเขาไม่ใช่ค่าลบ)LL{\cal L} ความคิดเห็นข้างต้นบอกเป็นนัยว่าเราสามารถทำได้โดยการคำนวณค่าลักษณะเฉพาะและตรวจสอบว่าไม่ใช่ค่าลบ (อาจต้องดูแลข้อผิดพลาดในการปัดเศษ) การคำนวณค่าลักษณะเฉพาะนั้นค่อนข้างแพงในสถานการณ์ของฉัน แต่ฉันสังเกตว่าห้องสมุดที่ฉันใช้นั้นมีการทดสอบที่รวดเร็วสำหรับความชัดเจนเชิงบวก (นั่นคือถ้าค่าลักษณะเฉพาะของเมทริกซ์เป็นบวกอย่างเคร่งครัด) ดังนั้นความคิดจะเป็นที่ได้รับเมทริกซ์หนึ่งการทดสอบถ้าB + ϵ ฉันเป็นบวกแน่นอน ถ้าไม่ใช่Bจะไม่เป็นกึ่งบวกแน่นอนมิฉะนั้นเราสามารถคำนวณค่าลักษณะเฉพาะของBเพื่อให้แน่ใจว่าเป็นบวกกึ่งแน่นอนแน่นอนB ∈ LB∈LB \in {\cal L}B + ϵ ฉันB+ϵIB + \epsilon IBBBBBB คำถามของฉันตอนนี้คือ: มีวิธีการทดสอบที่ตรงและมีประสิทธิภาพมากขึ้นหรือไม่ว่าเมทริกซ์นั้นเป็นกึ่งบวกแน่นอนหรือไม่โดยมีเงื่อนไขว่าการทดสอบที่มีประสิทธิภาพสำหรับความแน่นอนเชิงบวกจะได้รับหรือไม่?

5
การเพิ่มวัตถุประสงค์ระดับโลกให้มีค่าใช้จ่ายสูง
ฉันสนใจที่จะเพิ่มฟังก์ชั่นของพารามิเตอร์จริงจำนวนมาก ( ) ทั่วโลก(ผลจากการจำลองที่ซับซ้อน) อย่างไรก็ตามฟังก์ชันที่เป็นปัญหานั้นค่อนข้างแพงในการประเมินซึ่งต้องใช้เวลาประมาณ 2 วันสำหรับชุดพารามิเตอร์แต่ละชุด ฉันกำลังเปรียบเทียบตัวเลือกต่าง ๆ และสงสัยว่าใครมีคำแนะนำบ้าง≈ 30≈30\approx 30 ฉันรู้ว่ามีชุดวิธีการสำหรับกระบวนการประเภทนี้ที่เกี่ยวข้องกับการพัฒนาฟังก์ชั่นโดยประมาณและจากนั้นก็เพิ่มประสิทธิภาพให้สูงสุด (เช่นJones et al. "การเพิ่มประสิทธิภาพระดับโลกอย่างมีประสิทธิภาพของฟังก์ชั่นกล่องดำแพง" ) อย่างไรก็ตามดูเหมือนว่าจะเกี่ยวข้องกับรหัส ฉันมีความสามารถในการเรียกใช้การจำลองเป็นจำนวนมากแบบขนาน (50+) สิ่งนี้ดูเหมือนจะแนะนำให้ใช้บางอย่างเช่นอัลกอริธึมทางพันธุกรรมในการเพิ่มประสิทธิภาพนี้ - เนื่องจากฉันสามารถสร้างประชากรของคำตอบผู้สมัครได้อย่างรวดเร็วที่สุดเท่าที่จะทำได้ นี่คือคำถามของฉัน: 1) ไม่มีใครมีประสบการณ์กับการใช้งานที่เป็นอิสระของตัวแก้ / คำแนะนำทั่วโลกประเภทนี้หรือไม่? 2) มีเหตุผลที่จะชอบหรือหลีกเลี่ยงอัลกอริทึมทางพันธุกรรมที่นี่หรือไม่? นี่เป็นปัญหาทางกายภาพและการทดลองในช่วงต้นของฉันได้แสดงให้เห็นว่าการทำบุญนั้นค่อนข้างราบรื่นเมื่อฉันเปลี่ยนพารามิเตอร์ UPDATE: ขอขอบคุณสำหรับความช่วยเหลือ! รายละเอียดเพิ่มเติมเล็กน้อย: ฉันไม่ต้องการข้อมูลใด ๆ นอกเหนือจากตำแหน่งสูงสุด การจำลองเป็นการกำหนดขึ้นไม่ใช่ Monte Carlo ดังนั้นความซับซ้อนนั้นไม่ใช่เรื่องใหญ่ ไม่มีขอบเขตหรือข้อ จำกัด ที่ชัดเจนเกี่ยวกับพารามิเตอร์ ข้อมูลอีกชิ้นหนึ่งที่ฉันมี (และไม่ได้พูดถึงมาก่อน) คือความรู้สึกถึงขนาดของขนาดสูงสุดที่ต้องการ ในขณะที่ฉันกำลังมองหาระดับสูงสุดของโลกฉันก็จะมีความสุขกับสิ่งใดในระดับนี้หรือใหญ่กว่า - …

4
วิธีการแก้ไขที่มีประสิทธิภาพสำหรับกริดที่ไม่มีโครงสร้าง?
ฉันต้องการทราบวิธีการที่ดีสำหรับการแก้ไขข้อมูลระหว่างกริดที่ไม่มีโครงสร้างสองตารางโดยที่หนึ่งตารางเป็นเวอร์ชันที่หยาบกว่าอีกอันหนึ่ง ประสิทธิภาพเป็นสิ่งสำคัญมากสำหรับฉันเนื่องจากฉันแก้ปัญหา PDE ชั่วคราวที่ฉันต้องการถ่ายโอนข้อมูลระหว่างกริดในทุกขั้นตอนของการแก้ปัญหา ฉันคิดเกี่ยวกับการใช้ kd-tree เพื่อค้นหาโหนดที่ใกล้ที่สุดของจุดที่กำหนดจากนั้นฉันจะใช้ฟังก์ชั่นรูปร่างขององค์ประกอบนั้น (การจำลองแบบ FEM) เพื่อแก้ไขข้อมูล นี่เป็นทางออกที่ดีใช่ไหม มีคนที่ดีกว่านี้ไหม คุณรู้หรือไม่ว่าห้องสมุดที่มีประสิทธิภาพและเชื่อถือได้ใน C / C ++ สำหรับงานนี้หรือไม่? * ฉันรู้ว่ามีคำถามที่คล้ายกัน แต่มันขอวิธีที่แม่นยำที่สุดในตารางที่มีโครงสร้าง

4
การแก้ ODE คู่กับข้อ จำกัด ค่าเริ่มต้นและค่าสุดท้าย
สาระสำคัญของคำถามของฉันมีดังต่อไปนี้: ฉันมีระบบ ODE สองระบบ หนึ่งมีข้อ จำกัด ค่าเริ่มต้นและอื่น ๆ มีข้อ จำกัด ค่าสุดท้าย สิ่งนี้สามารถคิดได้ว่าเป็นระบบเดียวที่มีข้อ จำกัด ค่าเริ่มต้นในตัวแปรบางตัวและข้อ จำกัด ค่าสุดท้ายของตัวแปรอื่น ๆ นี่คือรายละเอียด: ฉันกำลังพยายามใช้คอนโทรลเลอร์ LQR ของขอบเขตเวลาต่อเนื่องเพื่อขับเคลื่อนระบบไดนามิคเชิงเส้น ฉันต้องการใช้ระบบนิเวศของงูหลามต่อไป ระบบอยู่ในรูปแบบ , ขึ้นอยู่กับx(0)=x0x˙(t)=Ax(t)+Bu(t)x˙(t)=Ax(t)+Bu(t)\dot{x}(t) = Ax(t) + Bu(t)x(0)=x0x(0)=x0x(0)=x_0 วิธีการแก้ปัญหา LQR สร้างเมทริกซ์เช่นที่อินพุตควบคุมที่เหมาะสม U (t) เส้นตรงเป็น(t)x ( t ) u ( t ) = K ( t ) x ( t …

1
ปัญหา SVD ถ่วงน้ำหนักหรือไม่
AAABBBxxxyyymin∑ij(Aij−xiyjBij)2.min∑ij(Aij−xiyjBij)2. \min \sum_{ij} (A_{ij} - x_i y_j B_{ij})^2. A−diag(x)⋅B⋅diag(y)=A−B∘(xy⊤)A−diag(x)⋅B⋅diag(y)=A−B∘(xy⊤)A - \mbox{diag}(x) \cdot B \cdot \mbox{diag}(y) = A - B \circ (x y^\top) โดยทั่วไปฉันต้องการค้นหาเวกเตอร์หลายหน่วยและyในรูปแบบ \ min \ sum_ {ij} (A_ {ij} - \ sum_ {k = 1} ^ n s_i x_i ^ {(k)} y_j ^ {(k)} B_ {ij}) ^ 2 โดยที่s_iมีค่าสัมประสิทธิ์แท้จริงเป็นบวกxxxyyymin∑ij(Aij−∑k=1nsix(k)iy(k)jBij)2.min∑ij(Aij−∑k=1nsixi(k)yj(k)Bij)2. …

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