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

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

5
อะไรคือความแตกต่างที่สำคัญระหว่าง PETSc และ Trilinos?
เท่าที่ผมสามารถบอกได้ทั้งสองขนาดใหญ่ทั่วไปกระทรวงพลังงานวิทยาศาสตร์การคำนวณกรอบซอฟต์แวร์สหรัฐ PETScและTrilinos ดูเหมือนว่าพวกเขาจะคล้ายกันในครั้งแรก, เกินความแตกต่างในภาษา (C กับ C ++) อะไรคือความแตกต่างที่สำคัญระหว่างสองกรอบงานและปัจจัยใดที่ควรมีอิทธิพลต่อการเลือกหนึ่งกรอบ (ไม่สนใจอคติเชิงสถาบันและโครงสร้างพื้นฐานที่มีอยู่)

4
วิธีเพิ่มคำที่อธิบายใหญ่ ๆ ได้อย่างน่าเชื่อถือโดยไม่มีข้อผิดพลาดล้น
ปัญหาที่พบบ่อยมากในมาร์คอฟเชนมอนติคาร์โลนั้นเกี่ยวข้องกับความน่าจะเป็นในการคำนวณซึ่งเป็นผลรวมของเทอมใหญ่ ๆ อีa1+ ea2+ . . .ea1+ea2+... e^{a_1} + e^{a_2} + ... ซึ่งองค์ประกอบของได้ตั้งแต่ขนาดเล็กมากที่จะมีขนาดใหญ่มาก แนวทางของฉันคือการแยกคำที่ใหญ่ที่สุดเพื่อให้:aaaK: = สูงสุดผม( กผม)K:=maxi(ai)K := \max_{i}(a_{i}) E ' ≡ อี1 + e 2 + . .a'= K+ l o g( ea1- เค+ ea2- เค+ . . . )a′=K+log(ea1−K+ea2−K+...)a' =K + log\left( e^{a_1 - K} + e^{a_2 - …

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

4
เมื่อใดที่ฉันควรใช้เทมเพลตนิพจน์ C ++ ในวิทยาศาสตร์การคำนวณและเมื่อใดที่ฉัน * ไม่ควรใช้เทมเพลตเหล่านี้
สมมติว่าฉันกำลังทำงานกับรหัสทางวิทยาศาสตร์ใน C ++ ในการสนทนาเมื่อเร็ว ๆ นี้กับเพื่อนร่วมงานเป็นที่ถกเถียงกันอยู่ว่าเทมเพลตนิพจน์อาจเป็นสิ่งที่ไม่ดีจริงๆซึ่งอาจทำให้ซอฟต์แวร์สามารถคอมไพล์ได้ใน gcc บางรุ่นเท่านั้น สมมุติว่าปัญหานี้ส่งผลกระทบต่อรหัสทางวิทยาศาสตร์บางประการตามที่กล่าวถึงในคำบรรยายของเรื่องล้อเลียนเรื่อง Downfallการล้อเลียนของหายนะนี้(นี่เป็นเพียงตัวอย่างเดียวที่ฉันรู้ดังนั้นลิงก์) อย่างไรก็ตามคนอื่น ๆ แย้งว่าเทมเพลตการแสดงออกมีประโยชน์เพราะพวกเขาสามารถเพิ่มประสิทธิภาพการทำงานได้เช่นเดียวกับในบทความนี้ใน SIAM Journal of Scientific Computingโดยหลีกเลี่ยงการเก็บผลลัพธ์กลางในตัวแปรชั่วคราว ฉันไม่รู้อะไรมากมายเกี่ยวกับเทมเพลตการเขียนโปรแกรมใน C ++ แต่ฉันรู้ว่ามันเป็นวิธีการหนึ่งที่ใช้ในการแยกความแตกต่างโดยอัตโนมัติและในการคำนวณช่วงเวลาซึ่งเป็นวิธีที่ฉันได้เข้าร่วมการสนทนาเกี่ยวกับเทมเพลตนิพจน์ เมื่อพิจารณาทั้งข้อดีที่เป็นไปได้ของประสิทธิภาพการทำงานและข้อเสียที่อาจเกิดขึ้นในการบำรุงรักษา (หากเป็นคำที่เหมาะสม) เมื่อใดฉันจึงควรใช้เทมเพลตนิพจน์ C ++ ในวิทยาศาสตร์การคำนวณและฉันควรหลีกเลี่ยงเมื่อใด

5
เพราะเหตุใดจุดที่เว้นระยะห่างจึงมีพฤติกรรมไม่ดี
คำอธิบายการทดลอง: ในการแก้ไขลากรองจ์สมการที่แน่นอนจะถูกสุ่มตัวอย่างที่จุด (ลำดับพหุนาม ) และถูกแก้ไขที่ 101 จุด ที่นี่จะแตกต่างกันตั้งแต่ 2 ถึง 64 ในแต่ละครั้งที่ ,และแปลงข้อผิดพลาดมีการจัดทำ จะเห็นได้ว่าเมื่อฟังก์ชั่นถูกสุ่มตัวอย่างที่จุด equi-spaced ข้อผิดพลาดจะลดลงในขั้นต้น (มันเกิดขึ้นจนถึงน้อยกว่าประมาณ 15 หรือมากกว่านั้น) จากนั้นข้อผิดพลาดจะเพิ่มขึ้นในต่อไปN - 1 N L 1 L 2 L ∞ N NNNNN−1N−1N - 1NNNL1L1L_1L2L2L_2L∞L∞L_\inftyNNNNNN ในขณะที่ถ้าการสุ่มตัวอย่างเริ่มต้นทำได้ที่จุด Legendre-Gauss (LG) (รากของคำพหุนาม Legendre) หรือ Legendre-Gauss-Lobatto (LGL) คะแนน (รากของ Lobatto polynomials) ข้อผิดพลาดจะลดลงถึงระดับเครื่องและไม่เกิดขึ้น เพิ่มขึ้นเมื่อเพิ่มขึ้นอีกNNN คำถามของฉันคือ เกิดอะไรขึ้นในกรณีของจุดที่เว้นระยะเท่ากัน ทำไมการเพิ่มลำดับพหุนามทำให้เกิดข้อผิดพลาดเพิ่มขึ้นหลังจากจุดหนึ่ง …

3
หลักการที่อยู่เบื้องหลังการบรรจบกันของวิธีการสเปซย่อย Krylov สำหรับการแก้ระบบเชิงเส้นของสมการคืออะไร?
ที่ฉันเข้าใจมันมีสองประเภทหลักของวิธีการวนซ้ำสำหรับการแก้ระบบเชิงเส้นของสมการ: วิธีการหยุดนิ่ง (Jacobi, Gauss-Seidel, SOR, Multigrid) วิธีการของ Krylov Subspace (Conjugate Gradient, GMRES และอื่น ๆ ) ฉันเข้าใจว่าวิธีการที่อยู่กับที่ส่วนใหญ่ทำงานโดยการทำซ้ำไปเรื่อย ๆ (ปรับให้เรียบ) โหมดฟูริเยร์ของข้อผิดพลาด ตามที่ฉันเข้าใจแล้ววิธีการไล่ระดับสีแบบคอนจูเกต (วิธีการสเปซ Krylov) ทำงานโดย "ก้าว" ผ่านชุดทิศทางการค้นหาที่ดีที่สุดจากพลังของเมทริกซ์ที่นำไปใช้กับส่วนที่เหลือหลักการนี้เป็นเรื่องธรรมดาสำหรับวิธีการทั้งหมดของ Krylov หรือไม่? ถ้าไม่เราจะอธิบายหลักการที่อยู่เบื้องหลังการรวมตัวกันของวิธีการย่อย Krylov โดยทั่วไปได้อย่างไรnnn

5
ฉันควรมีเนื้อหาใดในบทความวารสาร (หรือโพสต์ออนไลน์) เพื่อให้การวิจัยการคำนวณของฉันทำซ้ำได้
ความสามารถในการทำซ้ำมีความสำคัญมากขึ้นเรื่อย ๆ ในการวิจัยทางวิทยาศาสตร์คอมพิวเตอร์ (ตัวอย่างเช่นดูบทความนี้โดย Roger Peng in Science ; ฉันทราบถึงบทความและเว็บไซต์อื่น ๆ ด้วยเช่นกัน) อย่างไรก็ตามไม่ชัดเจนว่าฉันควรรวมข้อมูลจำนวนเท่าใดในบทความวารสาร (หรือออนไลน์) การวิจัยการคำนวณของฉันทำซ้ำได้ (สมมติว่าไม่มีอุปสรรคอื่น ๆ เช่นข้อตกลงด้านทรัพย์สินทางปัญญา) มีแนวทางใดบ้างหรือไม่หากผู้คนสามารถแนะนำขั้นตอนที่นักวิจัยควรทำเพื่อให้การวิจัยทางวิทยาศาสตร์การคำนวณของพวกเขาสามารถทำซ้ำได้? การใช้คำตอบโดยเฉพาะจะเป็นวิธีที่เป็นไปได้ในการใช้คำแนะนำเหล่านั้น - เวิร์กโฟลว์ เวิร์กโฟลว์ที่ไม่เชื่อเรื่องระบบหรือใช้ Linux เป็นที่ต้องการ นอกจากนี้การพูดคุยเกี่ยวกับประสบการณ์ส่วนตัวที่เกี่ยวข้องที่คุณมีก็จะเป็นประโยชน์เช่นกัน ในกรณีเฉพาะของฉันฉันกำลังเขียนบทความเชิงทฤษฎีพร้อมตัวอย่างการคำนวณสองอย่างที่ง่ายพอที่จะทำได้ใน MATLAB ฉันคิดว่าในกรณีนี้รวมถึงสคริปต์ MATLAB รวมถึงการสังเกตรุ่นเฉพาะของ MATLAB บนเครื่องของฉันก็น่าจะเพียงพอที่จะรับรองการทำซ้ำ อย่างไรก็ตามฉันมั่นใจว่ามีสถานการณ์ที่ซับซ้อนกว่านั้นและคำแนะนำเกี่ยวกับวิธีการทำวิจัยที่ทำซ้ำได้จะเป็นประโยชน์อย่างมากสำหรับโครงการในอนาคต

1
มีอัลกอริทึมเชิงตัวเลขสำหรับการค้นหาความชันแบบอะซิมโทติกหรือไม่?
ฉันมีชุดของจุดข้อมูลซึ่งผมคาดว่าจะ (โดยประมาณ) เป็นไปตามฟังก์ชั่นที่ asymptotes กับเส้นที่มีขนาดใหญ่xโดยพื้นฐานแล้วเข้าหาศูนย์เมื่อและสิ่งเดียวกันอาจจะกล่าวได้ว่าอนุพันธ์ของ ,เป็นต้น แต่ฉันไม่รู้ว่ารูปแบบการทำงานของf (x)คืออะไรถ้ามันมีรูปแบบที่สามารถอธิบายได้ในแง่ของฟังก์ชันพื้นฐาน(xi,yi)(xi,yi)(x_i,y_i)Y( x )y(x)y(x)xxxฉ( x ) ≡ y( x ) - ( a x + b )f(x)≡y(x)−(ax+b)f(x) \equiv y(x) - (ax + b)x → ∞x→∞x \to \inftyf′(x)f′(x)f'(x)f ( x )f′′(x)f″(x)f''(x)f(x)f(x)f(x) เป้าหมายของผมคือการได้รับการประมาณการที่ดีที่สุดของความลาดชันเชิง วิธีหยาบอย่างเห็นได้ชัดคือการเลือกจุดข้อมูลไม่กี่ครั้งล่าสุดและทำการถดถอยเชิงเส้น แต่แน่นอนว่าสิ่งนี้จะไม่ถูกต้องหากf (x)ไม่กลายเป็น "แบนพอ" ภายในช่วงของxที่ฉันมีข้อมูล ชัดเจนน้อยกว่าวิธีหยาบคายคือการสมมติว่าf (x) \ about \ exp (-x) (หรือรูปแบบการทำงานเฉพาะอื่น …
23 algorithms 

4
วิธีการสั่งซื้อขั้นสูงมีประโยชน์เมื่อใดสำหรับการจำลองพลศาสตร์ของไหลเชิงคำนวณ
วิธีการเชิงตัวเลขจำนวนมากสำหรับ CFD สามารถขยายไปยังลำดับที่สูงได้ตามอำเภอใจ (ตัวอย่างเช่นวิธี Galerkin ที่ไม่ต่อเนื่อง, วิธี WENO, ความแตกต่างของสเปกตรัม ฯลฯ ) ฉันจะเลือกลำดับความถูกต้องที่เหมาะสมสำหรับปัญหาที่กำหนดได้อย่างไร

5
การสร้างคลัสเตอร์ในคลาวด์ราคาถูกกว่าการสร้างคลัสเตอร์ในห้องทดลองสำหรับการจำลอง MD เมื่อใด
คลัสเตอร์การคำนวณ Amazon EC2 มีค่าใช้จ่ายประมาณ$ 800 - $ 1,000 (ขึ้นอยู่กับวัฏจักรหน้าที่) ต่อคอร์ CPU จริงในระยะเวลา 3 ปี ในการซื้อฮาร์ดแวร์รอบสุดท้ายของเราห้องปฏิบัติการของฉันได้รับ 48 คอร์มูลค่าของฮาร์ดแวร์คล้ายกับคลัสเตอร์ของ Amazon ราคาประมาณ $ 300 ต่อแกน ฉันทำอะไรบางอย่างหายไปหรือเปล่า มีสถานการณ์ใดบ้างไหมที่เหมาะสมที่จะสร้างคลัสเตอร์ในคลาวด์สำหรับงานซีพียูระดับสูงเช่นการจำลองพลวัตของโมเลกุล? หรือฉันมักจะดีกว่าแค่สร้างและเลี้ยงลูกด้วยตนเองที่เครื่องแดงด้วยตัวเอง? (ฉันควรพูดถึงว่าห้องปฏิบัติการของฉันไม่ได้จ่ายค่าไฟฟ้าในห้องเซิร์ฟเวอร์ของเรา (อย่างน้อยก็ไม่ได้โดยตรง) แต่ถึงแม้จะมีประโยชน์นี้อเมซอนก็ยังมีราคาแพงมาก)

3
อะไรคือสิ่งที่ล้ำสมัยที่สุดในการคำนวณแบบอินทิกรัลแบบผันผวนสูง?
อะไรคือสิ่งที่ล้ำสมัยในการประมาณอินทิกรัลของการแกว่งสูงทั้งในมิติเดียวและมิติที่สูงกว่าเพื่อความแม่นยำตามอำเภอใจ?

12
เป็นไปได้ไหมที่จะใช้ Octave เพื่อเรียนรู้การเขียนโปรแกรม MATLAB?
คำถามนี้ถูกโยกย้ายจากการตรวจสอบข้ามเพราะมันสามารถตอบได้ในการแลกเปลี่ยนวิทยาศาสตร์กองซ้อน อพยพ 7 ปีที่ผ่านมา ฉันต้องการเรียนรู้การเขียนโปรแกรม MATLAB เพื่อให้ฉันสามารถทำการวิจัย / วิเคราะห์ได้ด้วยตัวเองและเพื่อให้ฉันสามารถศึกษา / แก้ไขสคริปต์ MATLAB ที่ฉันพบออนไลน์เป็นต้น อย่างไรก็ตามปัญหาคือฉันไม่สามารถจ่าย MATLAB ได้ GNU Octave จากสิ่งที่ฉันได้ยินมานั้นค่อนข้างเข้ากันได้กับ MATLAB ความท้าทายของ Octave คือว่าเอกสารนั้นกระจัดกระจายมาก ดังนั้น MATLAB ในด้านหนึ่งจึงมีราคาแพง (-ve) แต่มีเอกสารประกอบแบบฝึกหัดและสคริปต์ที่ดีจำนวนมากทางออนไลน์ (+) ในขณะที่ Octave ไม่มีค่าใช้จ่าย (เช่นเดียวกับเบียร์) แม้ว่าจะไม่มีเอกสารที่ครอบคลุม ฯลฯ . ฉันกำลังคิดที่จะดาวน์โหลดและติดตั้ง Octave แต่ใช้เอกสาร MATLAB (และสคริปต์) เพื่อช่วยให้ฉันดำเนินการต่อ ฉันทราบว่ามีความแตกต่างบางอย่างระหว่างอ็อกเทฟและ MATLAB - สิ่งที่ฉันพยายามทำคือความแตกต่างนั้นมีขนาดใหญ่พอที่จะขัดขวางความพยายามของฉันในการ "เรียนรู้ MATLAB โดยใช้อ็อกเทฟ" ได้อย่างมีประสิทธิภาพ …

2
ผลต่างที่แน่นอนที่ดีสำหรับสมการความต่อเนื่อง
สิ่งที่จะเป็น discretization แตกต่างแน่นอน จำกัด สำหรับสมการต่อไปนี้: ?∂ρ∂t+∇⋅(ρu)=0∂ρ∂t+∇⋅(ρu)=0\frac{\partial \rho}{\partial t} + \nabla \cdot \left(\rho u\right)=0 เราสามารถใช้กรณี 1D: ∂ρ∂t+ddx(ρu)=0∂ρ∂t+ddx(ρu)=0\frac{\partial \rho}{\partial t} + \frac{d}{dx}\left(\rho u\right)=0 ด้วยเหตุผลบางอย่างแผนการทั้งหมดที่ฉันสามารถหาได้คือการกำหนดในพิกัดลากรองจ์ ฉันมากับรูปแบบนี้ในขณะนี้ (ไม่สนใจดัชนีj ): ρn+1i,j- ρnฉัน, Jτ+ 1ชั่วโมงx( ρn + 1ฉัน+ 1 , J+ ρn + 1ฉัน, J2ยูnxฉัน+ 1 / 2 , J- ρn + 1ฉัน, J+ ρn + …

3
การใช้ภาษาการเขียนโปรแกรมที่ไม่เป็นทางการสำหรับการคำนวณทางวิทยาศาสตร์ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา หมายเหตุ: โพสต์ต่อไปนี้อาจรวมถึงความเห็นแย้งดังนั้นโปรดทราบว่าพวกเขาเป็นเพียงความคิดเห็นของฉันและไม่ได้มีเจตนาที่จะรุกรานใคร ฉันกำลังเขียนโปรแกรมในบางรูปแบบหรืออื่น ๆ ตั้งแต่ประมาณปี 1999 ตอนแรกฉันใช้ R แล้วต่อมาประมาณปี 2004 เปลี่ยนเป็น Python เป็นส่วนใหญ่ สำหรับแอปพลิเคชันทางวิทยาศาสตร์จำนวนมากเช่นการจำลองรวมถึงสิ่งต่าง ๆ เช่น MCMC ทั้ง R และ Python ช้าเกินไปและต้องเร่งความเร็ว วิธีปกติในการทำเช่นนี้คือการขยายด้วย C หรือ C ++ สำหรับทั้ง R และ Python นี่คือสิ่งที่ฉันทำโดยใช้ C API ของ R กับ C ++ และไลบรารี Boost Python …
22 languages 

10
อัลกอริทึมใดที่แม่นยำยิ่งขึ้นสำหรับการคำนวณผลรวมของอาร์เรย์ที่เรียงลำดับตัวเลข?
ป.ร. ให้ไว้เป็นลำดับ จำกัด ที่เพิ่มขึ้นของตัวเลขบวก{n} อัลกอริทึมสองข้อใดต่อไปนี้ที่ดีกว่าสำหรับการคำนวณผลรวมของตัวเลขZ1, z2,.....znZ1,Z2,.....Znz_{1} ,z_{2},.....z_{n} s=0; for \ i=1:n s=s + z_{i} ; end หรือ: s=0; for \ i=1:n s=s + z_{n-i+1} ; end ในความคิดของฉันมันจะเป็นการดีกว่าถ้าคุณเริ่มเพิ่มตัวเลขจากจำนวนมากที่สุดไปเป็นจำนวนน้อยที่สุดเพราะข้อผิดพลาดเล็กลงเรื่อย ๆ นอกจากนี้เรายังทราบว่าเมื่อเราเพิ่มจำนวนมากเป็นจำนวนน้อยมากผลลัพธ์โดยประมาณอาจเป็นจำนวนมาก ถูกต้องหรือไม่ อะไรที่สามารถพูดได้?

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