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

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

5
วิธีจัดการกับความซับซ้อนในรหัสตัวเลขเช่นเมื่อต้องรับมือกับเมทริกซ์จาโคเบียนขนาดใหญ่?
ฉันกำลังแก้ไขระบบที่ไม่ใช่เชิงเส้นของสมการคู่และได้คำนวณจาโคเบียนของระบบที่แยกส่วน ผลลัพธ์มีความซับซ้อนมากด้านล่างคือ (เท่านั้น!) 3 คอลัมน์แรกของเมทริกซ์3 × 93×93\times 9 (ความซับซ้อนเกิดขึ้นส่วนหนึ่งเนื่องจากโครงร่างตัวเลขต้องมีการปรับแบบเอ็กซ์โปเนนเชียลเพื่อความมั่นคง) ฉันมีคำถามทั่วไปเกี่ยวกับการใช้รหัสตัวเลขโดยใช้ Jacobians ฉันสามารถไปข้างหน้าและนำเมทริกซ์นี้มาใช้ในโค้ด แต่สัญชาตญาณของฉันบอกให้ฉันคาดหวังว่าจะมีการดีบักน่าเบื่อสองสามวัน (อาจเป็นสัปดาห์!) เนื่องจากความซับซ้อนที่แท้จริงและความหลีกเลี่ยงไม่ได้ในการแนะนำข้อผิดพลาด ใครจะรับมือกับความซับซ้อนเช่นนี้ในรหัสตัวเลขดูเหมือนว่าหลีกเลี่ยงไม่ได้! คุณใช้การสร้างรหัสอัตโนมัติจากแพ็คเกจสัญลักษณ์ (จากนั้นปรับแต่งโค้ดด้วยมือ)? ก่อนอื่นฉันวางแผนที่จะดีบัก Jacobian เชิงวิเคราะห์ด้วยการประมาณความแตกต่างอัน จำกัด ฉันควรทราบถึงข้อผิดพลาดหรือไม่? คุณจัดการกับปัญหาที่คล้ายกันในรหัสของคุณได้อย่างไร ปรับปรุง ฉันกำลังเขียนโค้ดนี้ใน Python และใช้sympyเพื่อสร้าง Jacobian บางทีฉันสามารถใช้คุณสมบัติการสร้างรหัสได้หรือไม่

1
อะไรคือความแตกต่างระหว่าง Parareal, PITA และ PFASST
อัลกอริทึม Parareal, PITA และ PFASST นั้นเป็นเทคนิคข้ามโดเมนสำหรับการแก้ปัญหาแบบพึ่งพาเวลาในแบบคู่ขนาน หลักการชี้นำที่อยู่เบื้องหลังวิธีการเหล่านี้คืออะไร? อะไรคือความแตกต่างที่สำคัญระหว่างพวกเขา ฉันสามารถพูดได้หรือไม่ว่าอันนั้นอิงจากอีกอันหนึ่ง? อย่างไร? แล้วแอพพลิเคชั่นของพวกเขาคืออะไร? ฉันรู้ว่าจะไม่มีคำตอบสำหรับคำถาม "ซึ่งดีกว่า?" แต่ความเข้าใจที่ดีของพื้นที่การสมัครและเงื่อนไขการตรวจสอบของพวกเขาเป็นประโยชน์กับฉัน

4
การเขียนโปรแกรมเชิงเส้นด้วยข้อ จำกัด เมทริกซ์
ฉันมีปัญหาการเพิ่มประสิทธิภาพที่มีลักษณะดังต่อไปนี้ minJ,Bs.t.∑ij|Jij|MJ+BY=XminJ,B∑ij|Jij|s.t.MJ+BY=X \begin{array}{rl} \min_{J,B} & \sum_{ij} |J_{ij}|\\ \textrm{s.t.} & MJ + BY =X \end{array} ที่นี่ตัวแปรของฉันคือเมทริกซ์ และBแต่ปัญหาทั้งหมดยังคงเป็นโปรแกรมเชิงเส้น ตัวแปรที่เหลือถูกแก้ไขJJJBBB เมื่อฉันพยายามที่จะเข้าสู่โปรแกรมนี้ในเครื่องมือการเขียนโปรแกรมเชิงเส้นที่ชื่นชอบฉันพบปัญหาบางอย่าง คือถ้าฉันเขียนสิ่งนี้ในรูปแบบโปรแกรมเชิงเส้น "มาตรฐาน" เมทริกซ์พารามิเตอร์MMMและYYYท้ายสุดจะได้รับซ้ำหลายครั้ง (หนึ่งครั้งสำหรับแต่ละคอลัมน์ของXXX ) มีอัลกอริทึมและ / หรือแพ็คเกจที่สามารถจัดการกับการเพิ่มประสิทธิภาพของแบบฟอร์มด้านบนได้หรือไม่? ตอนนี้ฉันมีหน่วยความจำไม่เพียงพอเพราะMMMและYYYต้องถูกคัดลอกหลายครั้ง!

3
ความแตกต่างระหว่าง FEM โดยนัยและ FEM ชัดเจนคืออะไร
ความแตกต่างระหว่าง FEM อย่างชัดเจนและ FEM โดยนัยคืออะไร? จากการโพสต์ที่นี่ดูเหมือนว่าความแตกต่างเพียงอย่างเดียวคือการใช้การรวมเวลาโดยนัยหรือชัดเจน ในขณะที่ฉันจำได้จากหนังสือเล่มหนึ่งที่ฉันอ่าน FEM โดยปริยายคือที่ ๆ ไม่มีมวลก้อนปมไปยังโหนด คำจำกัดความที่แน่นอนของ FEM อย่างชัดเจนและโดยนัยคืออะไร?

4
การปรับใช้หน่วยความจำอย่างมีประสิทธิภาพของการแยกย่อยค่าเอกพจน์ (SVD) บางส่วน
สำหรับการลดแบบจำลองฉันต้องการคำนวณเวกเตอร์เอกพจน์ทางซ้ายที่เกี่ยวข้องกับ - พูด 20 - ค่าเอกพจน์ที่ใหญ่ที่สุดของเมทริกซ์โดยที่และ 3 น่าเสียดายเมทริกซ์ของฉันจะหนาแน่นโดยไม่มีโครงสร้างใด ๆ N ≈ 10 6 k ≈ 10 3 AA∈RN,kA∈RN,kA \in \mathbb R^{N,k}N≈106N≈106N\approx 10^6k≈103k≈103k\approx 10^3AAA หากฉันเพิ่งเรียกsvdรูทีนจากnumpy.linalgโมดูลใน Python สำหรับเมทริกซ์แบบสุ่มขนาดนี้ฉันพบข้อผิดพลาดของหน่วยความจำ เพราะนี่คือการจัดสรรสำหรับการสลายตัวVSU A = V S UV∈RN,NV∈RN,NV\in \mathbb R^{N,N}A=VSUA=VSUA = VSU มีอัลกอริธึมที่หลีกเลี่ยงหลุมพรางนี้ไหม เช่นโดยการตั้งค่าเฉพาะเวกเตอร์เอกพจน์ที่สัมพันธ์กับค่าเอกพจน์ที่ไม่ใช่ศูนย์ ฉันพร้อมที่จะแลกเปลี่ยนในเวลาและความแม่นยำในการคำนวณ

1
cuda และวิธีการเชิงตัวเลขที่มีการลดทอนเวลาโดยนัย
ฉันกำลังมองหาที่จะพอร์ตรหัสบางอย่างที่แก้ไขชุดของสมการเชิงอนุพันธ์บางส่วน (PDE) โดยวิธีปริมาณ จำกัด ในรูปแบบ IMPLICIT (สำหรับการแยกส่วนเวลา) ด้วยเหตุนี้จึงมีระบบสมการสามมิติในทิศทาง x, y, z ซึ่งจัดการโดยโครงการ ADI / TDMA ฉันไม่สามารถหาอะไรเกี่ยวกับการแก้ปัญหาโดยนัยของ PDEs ด้วย CUDA สามารถใช้ ADI / TDMA ใน CUDA ได้หรือไม่? มีตัวอย่างเช่นสมการการกระจายความร้อนแบบ 2D ที่มีอยู่ที่ไหนสักแห่ง? ทั้งหมดที่ฉันสามารถหาได้คือโค้ดตัวอย่าง CUDA สำหรับสมการการกระจายความร้อนแบบ 2D ในความแตกต่างอัน จำกัด แต่ในรูปแบบ EXPLICIT (University of Cambridge) คำใบ้ / การอ้างอิงใด ๆ จะได้รับการชื่นชมอย่างมาก

2
รหัส Octree ใน Fortran
ฉันยังใหม่กับการคำนวณทางวิทยาศาสตร์ ฉันกำลังมองหาการใช้ Fortran (ควรเป็น f90) ของ Octree ปัญหาของฉันต้องการ Octree ที่แบ่งโดเมนของฉันจนกว่าจะมีไม่เกิน N อนุภาคบางส่วน (หรือแหล่งที่ฉันรู้ค่าความหนาแน่นซึ่งสามารถเสียบในวิธีการสมการอินทิกรัลเพื่อแก้สมการเช่นสมการ Laplace) ในกล่องใด ๆ ทั้งหมดที่ฉันสามารถหาได้นี้ C ++ การดำเนินงาน ฉันต้องการทราบว่ามีห้องสมุด Fortran ที่มีอยู่แล้วที่ฉันสามารถใช้ได้หรือไม่ นอกจากนี้คำแนะนำกระดาษที่ดีเกี่ยวกับการใช้งาน Octree ใน Fortran ที่สามารถใช้เพื่อให้การใช้วิธีการสมการอินทิกรัลครบถ้วนในกล่องการคำนวณกลายเป็นเรื่องง่ายจะได้รับการชื่นชม!

2
Galerkin / Poisson / Fenics ไม่ต่อเนื่อง
ฉันพยายามที่จะแก้สมการปัวซอง 2D โดยใช้วิธีไม่ต่อเนื่อง Galerkin (DG) และการแยกประเภทต่อไปนี้ (ฉันมีไฟล์ png แต่ฉันไม่ได้รับอนุญาตให้อัปโหลดขออภัย): สมการ: ∇⋅(κ∇T)+f=0∇⋅(κ∇T)+f=0\nabla \cdot( \kappa \nabla T) + f = 0 สมการใหม่: q=κ∇T∇⋅q=−fq=κ∇T∇⋅q=−fq = \kappa \nabla T\\\nabla \cdot q = -f รูปแบบที่อ่อนแอพร้อมฟลักซ์ตัวเลขและ : QT^T^\hat{T}q^q^\hat{q} ∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS\int q \cdot w dV = - \int T \nabla \cdot (\kappa w) dV + \int \kappa \hat{T} …

2
หลักการสูงสุด / ต่ำสุดของสมการความร้อนได้รับการดูแลโดยการแยกส่วนของ Crank-Nicolson หรือไม่?
ฉันใช้ Crank-Nicolson ผลต่าง จำกัด เพื่อแก้สมการความร้อน 1D ฉันสงสัยว่าหลักการสูงสุด / ต่ำสุดของสมการความร้อน (เช่นว่าสูงสุด / ต่ำสุดเกิดขึ้นที่เงื่อนไขเริ่มต้นหรือในขอบเขต) ยังถือสำหรับสารละลาย discretized นี่อาจเป็นนัยโดยข้อเท็จจริงที่ว่า Crank-Nicolson เป็นรูปแบบที่มั่นคงและเป็นคอนเวอร์เจนซ์ แต่ดูเหมือนว่าคุณสามารถพิสูจน์ได้โดยตรงผ่านอาร์กิวเมนต์พีชคณิตเชิงเส้นโดยใช้เมทริกซ์ที่สร้างขึ้นจาก Crank-Nicolson stencil ฉันขอขอบคุณพอยน์เตอร์สำหรับวรรณกรรมเกี่ยวกับเรื่องนี้ ขอบคุณ

1
ผลกระทบของการย้ายความหมาย C ++ 11 ในบริบทของการคำนวณทางวิทยาศาสตร์คืออะไร?
C ++ 11 แนะนำซีแมนทิกส์การย้ายที่สามารถยกตัวอย่างเช่นปรับปรุงประสิทธิภาพของรหัสในสถานการณ์ที่ C ++ 03 จะต้องดำเนินการสร้างสำเนาหรือคัดลอกการกำหนด นี้บทความรายงานว่ารหัสต่อไปนี้ประสบการณ์ความเร็ว 5x ขึ้นเมื่อรวบรวมกับ C + 11: vector<vector<int> > V; for(int k = 0; k < 100000; ++k) { vector<int> x(1000); V.push_back(x); } ผลกระทบของการย้ายความหมาย C ++ 11 ในบริบทของการคำนวณทางวิทยาศาสตร์คืออะไร? ฉันสนใจในคำถามนี้เป็นเรื่องทั่วไป แต่โดยเฉพาะฉันยังสนใจที่จะย้ายซีแมนทิกส์สำหรับรหัสไฟไนต์อิลิเมนต์ที่เขียนโดยใช้ห้องสมุดเพิ่ม ฉันทดสอบโค้ด C ++ 03 ของตัวเองบางตัวโดยใช้บูสต์รุ่น 1.47.0 (ตั้งแต่รีลีสโน้ตที่กล่าวถึงการย้ายความหมายมีการแนะนำใน 1.48.0) และบูสต์รุ่น 1.53.0 แต่ฉันไม่ได้สังเกตเห็นการปรับปรุงมากนัก ฉันเดาว่าเงินออมใด ๆ …

4
Matlab: มีวิธีในการหยุดการเรียกใช้โค้ดอย่างปลอดภัยโดยทางโปรแกรมหรือไม่ (เช่นหยุดการทำงานของ FORTRAN)? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามดังนั้นจึงเป็นหัวข้อสำหรับการแลกเปลี่ยนวิทยาศาสตร์ซ้อนกัน ปิดให้บริการใน2 ปีที่ผ่านมา เหมือนชื่อเรื่องบอกว่าฉันต้องการที่จะสามารถหยุดรหัสในสถานที่เฉพาะและหยุดมันได้อย่างปลอดภัย ฉันไม่พบคำสั่งให้ทำเช่นใน FORTRAN มีคำสั่ง stop
10 matlab 

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

3
โซลูชันที่ผลิตขึ้นสำหรับ Navier-Stokes ที่ไม่สามารถบีบอัดได้ - วิธีหาเขตความเร็วที่ไม่แตกต่างกันอย่างไร
ในวิธีการของการแก้ปัญหาที่ผลิต (MMS) อย่างใดอย่างหนึ่ง postulates วิธีการแก้ปัญหาที่แน่นอนแทนมันในสมการและคำนวณคำแหล่งที่มาที่สอดคล้องกัน วิธีการแก้ปัญหานั้นจะใช้สำหรับการตรวจสอบรหัส สำหรับสมการเนเวียร์ - สโตกส์ที่ไม่สามารถบีบอัดได้ MMS นำไปสู่คำที่มา (ไม่เป็นศูนย์) ได้อย่างง่ายดายในสมการความต่อเนื่อง แต่ไม่ใช่รหัสทั้งหมดที่อนุญาตให้ใช้ข้อกำหนดแหล่งที่มาในสมการความต่อเนื่องดังนั้นสำหรับรหัสเหล่านี้จะมีเพียงโซลูชันที่ผลิตด้วยเขตข้อมูลความเร็วที่ไม่มีความแตกต่างเท่านั้น ฉันพบตัวอย่างนี้สำหรับโดเมน โดยทั่วไปในกรณี 3 มิติหนึ่งจะผลิตสนามความเร็วที่ไม่มีความแตกต่างได้อย่างไรคุณ1Ω = [ 0 , 1 ]2Ω=[0,1]2\Omega=[0,1]^2 ยู1ยู2= - cos( πx ) บาป( πY)= บาป( πx ) cos( πY)ยู1=-cos⁡(πx)บาป⁡(πY)ยู2=บาป⁡(πx)cos⁡(πY)\begin{align} u_1 &= -\cos(\pi x) \sin(\pi y) \\ u_2 &= \sin(\pi x) \cos(\pi y) \end{align}

5
ตัวเลือกที่ดีที่สุดของตัวแก้ปัญหาสำหรับระบบสมมาตรแบบเบาบางขนาดใหญ่ (แต่ไม่ใช่ค่าบวกแน่นอน)
ขณะนี้ฉันกำลังทำงานเพื่อแก้ไขระบบสมมาตรขนาดใหญ่มาก (แต่ไม่แน่นอนแน่นอน) ที่สร้างขึ้นโดยอัลกอริทึมบางอย่าง เมทริกซ์เหล่านี้มีบล็อกความแจ่มใสที่ดีซึ่งสามารถใช้สำหรับการแก้แบบขนาน แต่ฉันไม่สามารถตัดสินใจได้ว่าฉันควรใช้วิธีการโดยตรง (เช่น Multi-frontal) หรือวนซ้ำ (GMRES หรือ MINRES ที่กำหนดเงื่อนไขไว้ล่วงหน้า) การศึกษาทั้งหมดของฉันแสดงให้เห็นว่าตัวแก้ซ้ำ (แม้จะมีการบรรจบกันอย่างรวดเร็วของการวนซ้ำภายใน 7 ครั้ง) ล้มเหลวในการเอาชนะผู้ปฏิบัติงานโดยตรงใน MATLAB แต่ในทางทฤษฎีแล้ววิธีการโดยตรงควรจะมีราคาสูงกว่า สิ่งนี้เกิดขึ้นได้อย่างไร? มีเอกสารหรือกระดาษที่ทันสมัยสำหรับกรณีดังกล่าวหรือไม่? ฉันสามารถใช้ sparsity แบบบล็อกในระบบคู่ขนานโดยใช้วิธีโดยตรงเช่นเดียวกับตัวแก้ซ้ำแบบยืดหยุ่นอย่าง GMRES

2
การแก้ระบบเชิงเส้นด้วยเมทริกซ์อาร์กิวเมนต์
เราทุกคนคุ้นเคยกับวิธีการคำนวณมากมายเพื่อแก้ปัญหาระบบเชิงเส้นมาตรฐาน x = BAx=b. Ax=b. อย่างไรก็ตามฉันอยากรู้ว่ามีวิธีการคำนวณ "มาตรฐาน" ใด ๆ สำหรับการแก้ปัญหาระบบเชิงเส้นทั่วไป (จำกัด ขนาด) ของแบบฟอร์ม L = B ,LA=B, LA=B, ที่พูดเป็นเมทริกซ์เป็นเมทริกซ์และเป็นผู้ประกอบการเชิงเส้นการการฝึกอบรมเพื่อเมทริกซ์ซึ่งไม่ได้เกี่ยวข้องกับการ vectorizing เมทริกซ์คือการแปลงทุกอย่างให้เป็นรูปแบบมาตรฐาน m 1 × n 1 B m 2 × n 2 L m 1 × n 1 m 2 × n 2AAAม.1× n1m1×n1m_1\times n_1BBBม.2× n2m2×n2m_2\times n_2LLLม.1× n1m1×n1m_1\times n_1ม.2× n2m2×n2m_2\times …

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