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

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

5
ฉันควรใช้ภาษาอะไรเมื่อสอนหลักสูตรระดับปริญญาตรีในการเขียนโปรแกรมคอมพิวเตอร์
จะสอนนักเรียนในระดับปริญญาตรีหลักสูตรที่ชื่อว่าการเขียนโปรแกรมคอมพิวเตอร์เบื้องต้น ฉันสับสนเล็กน้อย ในวิทยาศาสตร์ฟิสิกส์เชิงคำนวณใช้ C / C ++ หรือ Python หรือ Fortran, CUDA ฯลฯ ..... นี่คือเวลาที่จะสร้างฐานของพวกเขา ฉันควรใช้อะไร ฉันรู้ว่าคุณสามารถเรียนรู้ภาษาการเขียนโปรแกรมใหม่ได้ตลอดเวลาในชีวิตของคุณ แต่เป็นทางเลือกที่ฉลาดกว่าสำหรับฉันในการอธิบายแนวคิดการเขียนโปรแกรมพื้นฐานทั้งหมดและแนวคิด OOP ในภายหลัง

4
การเปลี่ยนแปลงมุมฉากดีกว่าการกำจัดแบบเกาส์เซียนเมื่อไหร่?
ดังที่เราทราบวิธีการเปลี่ยนมุมฉาก (การหมุนของ Givens และการสะท้อนกลับของเจ้าของ) สำหรับระบบของสมการเชิงเส้นนั้นมีราคาแพงกว่าการกำจัดแบบเกาส์เซียน แต่ในทางทฤษฎีมีคุณสมบัติเสถียรภาพที่ดีกว่าในแง่ที่ว่าพวกเขาไม่ได้เปลี่ยน แม้ว่าฉันจะรู้เพียงตัวอย่างทางวิชาการของเมทริกซ์ที่ถูกทำลายโดยการกำจัดแบบเกาส์ด้วยการหมุนบางส่วน และมีความเห็นทั่วไปว่าเป็นไปได้ยากที่จะพบกับพฤติกรรมแบบนี้ในทางปฏิบัติ (ดูบันทึกการบรรยายนี้ [pdf] ) ดังนั้นเราจะหาคำตอบของหัวข้อได้จากที่ไหน? การใช้งานแบบขนาน? ปรับปรุง? ..

1
ทำไมวิธีการของนิวตันจึงไม่มาบรรจบกัน?
ฉันกำลังใช้แพ็คเกจตัวแก้ปัญหาแบบไม่เชิงเส้นของPETSc SNESเพื่อแก้ระบบสมการไม่เชิงเส้นที่ได้จากการแยกส่วนสมการเชิงอนุพันธ์บางส่วนออก ฉันจะทราบได้อย่างไรว่าเหตุใดตัวแก้ปัญหาจึงไม่มาบรรจบกันและฉันจะทำอย่างไรเพื่อแก้สมการของฉันให้สำเร็จ

6
อนาคตของ OpenCL
กระบวนทัศน์การเขียนโปรแกรม OpenCL สัญญาว่าจะปลอดค่าลิขสิทธิ์เปิดมาตรฐานสำหรับการคำนวณที่แตกต่างกัน เราควรลงทุนเวลาในการพัฒนาซอฟต์แวร์โดยใช้ OpenCL หรือไม่ ข้อเสียข้อดี?

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
มีวิธีการอะไรง่าย ๆ สำหรับการสุ่มตัวอย่างแบบ 2D ฟังก์ชั่น
ฉันมีฟังก์ชั่นสองมิติ ซึ่งมีค่าที่ฉันต้องการตัวอย่าง ฟังก์ชั่นนั้นมีราคาแพงมากในการคำนวณและมันมีรูปร่างที่ซับซ้อนดังนั้นฉันต้องหาวิธีที่จะได้รับข้อมูลมากที่สุดเกี่ยวกับรูปร่างของมันโดยใช้จำนวนจุดตัวอย่างน้อยที่สุดฉ( x , y)ฉ(x,Y)f(x,y) มีวิธีการอะไรที่ดีในการทำสิ่งนี้? สิ่งที่ฉันมีจนถึงตอนนี้ ฉันเริ่มต้นจากชุดของจุดที่มีอยู่ซึ่งฉันได้คำนวณค่าฟังก์ชันแล้ว (ซึ่งอาจเป็นจุดที่เป็นรูปสี่เหลี่ยมจัตุรัสหรืออย่างอื่น) จากนั้นฉันคำนวณ Delaunay Triangulation ของจุดเหล่านี้ ถ้าสองจุดที่อยู่ใกล้เคียงในการหาสมการ Delaunay อยู่ไกลพอ ( ) และค่าฟังก์ชันแตกต่างกันพอสมควร ( ) จากนั้นฉันก็แทรกจุดใหม่ที่อยู่ตรงกลางระหว่างพวกเขา ฉันทำสิ่งนี้สำหรับแต่ละจุดที่อยู่ใกล้เคียง> Δ X>ΔX > \Delta X> Δ f>Δฉ> \Delta f เกิดอะไรขึ้นกับวิธีนี้? มันใช้งานได้ค่อนข้างดี แต่ในฟังก์ชั่นที่คล้ายกับอันนี้มันไม่เหมาะเพราะจุดตัวอย่างมีแนวโน้มที่จะ "กระโดดข้าม" สันเขาและไม่สังเกตว่ามันอยู่ที่นั่น มันสร้างผลลัพธ์เช่นนี้ (หากความละเอียดของตารางจุดเริ่มต้นหยาบพอสมควร): พล็อตด้านบนนี้แสดงจุดที่คำนวณค่าฟังก์ชัน (จริง ๆ แล้วเซลล์ Voronoi รอบตัวพวกเขา) พล็อตด้านบนนี้แสดงการประมาณค่าเชิงเส้นที่สร้างจากจุดเดียวกันและเปรียบเทียบกับวิธีการสุ่มตัวอย่างแบบบิวท์อินของ Mathematica (สำหรับความละเอียดเริ่มต้นเดียวกัน) จะปรับปรุงได้อย่างไร? …

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

1
อะไรคือวิธีที่ต้องการและมีประสิทธิภาพสำหรับการแก้ไขข้อมูลหลายมิติ?
อะไรคือวิธีที่ต้องการและมีประสิทธิภาพสำหรับการแก้ไขข้อมูลหลายมิติ? สิ่งที่ฉันกังวลเกี่ยวกับ: ประสิทธิภาพและหน่วยความจำสำหรับการสร้างการประเมินผลเดี่ยว / ชุด การจัดการมิติตั้งแต่ 1 ถึง 6 เชิงเส้นหรือสูงกว่าคำสั่ง ความสามารถในการรับการไล่ระดับสี (ถ้าไม่ใช่เชิงเส้น) กริดปกติกับกระจัดกระจาย ใช้เป็นฟังก์ชัน Interpolating เช่นค้นหารากหรือย่อขนาด ความสามารถในการอนุมาน มีการใช้งานโอเพนซอร์ซที่มีประสิทธิภาพหรือไม่ ฉันมีโชคบางส่วนกับ scipy.interpolate และความสนใจจาก scikit เรียนรู้ ฉันไม่ได้ลอง splines, Chebyshev polynomials เป็นต้น นี่คือสิ่งที่ฉันพบจนถึงในหัวข้อนี้: Python 4D การประมาณเชิงเส้นในตารางสี่เหลี่ยม การแก้ไขที่รวดเร็วของข้อมูล 3D ตัวอย่างเป็นระยะด้วยช่วงเวลาที่แตกต่างกันใน x, y และ z การแก้ไขข้อมูลกริดแบบปกติอย่างรวดเร็ว วิธีการแก้ไขแบบกระจายหลายตัวแปรที่ดีที่สุดสำหรับการใช้งานจริงคืออะไร?

3
Intel Fortran Compiler: เคล็ดลับในการเพิ่มประสิทธิภาพที่รวบรวม
ฉันจะเริ่มต้นด้วยประสบการณ์ส่วนตัวในห้องแล็บของเรา ย้อนกลับไปใน ifort 9 และ 10 วันเราเคยก้าวร้าวมากกับการปรับให้เหมาะสมรวบรวมด้วยแฟล็ก -O3 และตัวประมวลผลเฉพาะ (-xW -xSSE4.2 เป็นต้น) แต่เริ่มต้นด้วย ifort 11 เราเริ่มสังเกตเห็น: 1. ความไม่สอดคล้องกันบางอย่างในผลลัพธ์ (เพราะซีแมนทิกส์ไม่ได้รับการเก็บรักษาไว้) 2. กำไรเล็กลงเมื่อเทียบกับ -O2 ดังนั้นในปัจจุบันเรามักจะคอมไพล์ด้วย -O2 และ -xhost คุณมีคำแนะนำที่ดีกว่าสำหรับ ifort 11 หรือไม่ การเปลี่ยนแปลงนี้จะเกิดขึ้นอีกครั้งเมื่อเราเปลี่ยนเป็น ifort 12 หรือไม่ ขอบคุณล่วงหน้า.

1
ประสิทธิภาพของการดำเนินการของอาร์เรย์ Python / Numpy มีขนาดเพิ่มขึ้นอย่างไร
Python / Numpy arrays ปรับขนาดอย่างไรเมื่อเพิ่มขนาดอาเรย์ สิ่งนี้ขึ้นอยู่กับพฤติกรรมบางอย่างที่ฉันสังเกตเห็นในขณะทำการเปรียบเทียบรหัส Python สำหรับคำถามนี้: วิธีแสดงนิพจน์ที่ซับซ้อนนี้โดยใช้ชิ้นส่วนที่เป็นก้อน ปัญหาส่วนใหญ่เกี่ยวข้องกับการทำดัชนีเพื่อเติมอาเรย์ ฉันพบว่าข้อดีของการใช้ Cython และ Numpy (ไม่ดีมาก) กับ Python loop แตกต่างกันไปขึ้นอยู่กับขนาดของอาร์เรย์ที่เกี่ยวข้อง ทั้ง Numpy และ Cython มีความได้เปรียบด้านประสิทธิภาพที่เพิ่มขึ้นจนถึงจุดหนึ่ง (บางแห่งมีขนาดประมาณสำหรับ Cython และN = 2000สำหรับ Numpy บนแล็ปท็อปของฉัน) หลังจากนั้นข้อดีของมันก็ลดลง (ฟังก์ชัน Cython ยังคงเร็วที่สุด)ยังไม่มีข้อความ= 500N=500N=500ยังไม่มีข้อความ= 2000N=2000N=2000 ฮาร์ดแวร์นี้ถูกกำหนดหรือไม่? ในแง่ของการทำงานกับอาร์เรย์ขนาดใหญ่แนวทางปฏิบัติที่ดีที่สุดที่ควรปฏิบัติตามสำหรับรหัสที่ประสิทธิภาพนั้นได้รับการชื่นชมคืออะไร คำถามนี้ ( เพราะเหตุใดการปรับขนาดการคูณเมทริกซ์ - เวกเตอร์ของฉันไม่ได้ ) อาจเกี่ยวข้องกัน แต่ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการที่แตกต่างกันของวิธีการรักษาอาร์เรย์ในระดับไพ ธ อนเมื่อเทียบกัน

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

5
ฉันจะแยกความแตกต่างของฟังก์ชันที่สุ่มตัวอย่างแบบตัวเลขได้อย่างไร
มาตรฐานสูตรต่าง จำกัดมีการใช้งานในการคำนวณตัวเลขที่มาภายใต้ความคาดหวังว่าคุณมีค่าฟังก์ชั่นที่จุดเว้นระยะเท่ากันเพื่อให้ชั่วโมง≡ x k + 1 - x kเป็นค่าคงที่ ถ้าฉันมีจุดเว้นระยะห่างไม่สม่ำเสมอดังนั้นตอนนี้hแตกต่างกันไปจากจุดคู่ที่อยู่ติดกันถึงจุดถัดไป เห็นได้ชัดว่าฉันยังสามารถคำนวณอนุพันธ์อันดับแรกได้เช่นf ′ ( x ) ≈ 1ฉ( xk)f(xk)f(x_k)h ≡ xk + 1- xkh≡xk+1−xkh \equiv x_{k+1} - x_kชั่วโมงhhแต่มีสูตรความแตกต่างเชิงตัวเลขที่คำสั่งซื้อและความแม่นยำสูงกว่าที่สามารถปรับให้เข้ากับการเปลี่ยนแปลงของขนาดกริดได้หรือไม่ฉ'( x ) ≈ 1ชั่วโมงk[ f( xk + 1) - f( xk) ]f′(x)≈1hk[f(xk+1)−f(xk)]f'(x) \approx \frac{1}{h_k}[f(x_{k+1}) - f(x_k)]

4
อัลกอริทึมสำหรับการปรับฟังก์ชั่นการปรับตัว
ฉันกำลังมองหาอัลกอริทึมเพื่อวาดกราฟ 2d แบบมาตรฐานสำหรับฟังก์ชั่นที่อาจจะใช่หรือไม่มีเอกพจน์ จุดประสงค์คือการเขียน "Mini-CAS" ดังนั้นฉันไม่มีความรู้เบื้องต้นเกี่ยวกับประเภทของฟังก์ชั่นที่ผู้ใช้ต้องการสร้างกราฟ ปัญหานี้เก่ามากดังนั้นฉันจินตนาการว่าต้องมีอัลกอริธึมมาตรฐานบางอย่างในวรรณกรรม สำหรับเมื่อฉันไม่ได้ประสบความสำเร็จมากในการหาการอ้างอิงผ่าน Google ฉันพบหนึ่งอัลกอริทึมที่น่าสนใจคืออันนี้จาก "YACAS - หนังสือของอัลกอริทึม"ชื่อ "การปรับฟังก์ชั่น Adaptive" ดังนั้นในระยะสั้น: มีอัลกอริธึมมาตรฐานหรือไม่? มีชุดทดสอบสำหรับฟังก์ชั่นที่ยากต่อการพล็อตหรือไม่? เอกสารที่น่าสนใจที่ควรอ่านมีอะไรบ้าง

8
แพคเกจซอฟต์แวร์สำหรับการเพิ่มประสิทธิภาพที่ จำกัด ?
ฉันกำลังมองหาที่จะแก้ปัญหาการเพิ่มประสิทธิภาพข้อ จำกัด ที่ฉันรู้ขอบเขตของตัวแปรบางตัว (โดยเฉพาะข้อ จำกัด แบบกล่อง) argminuf(u,x)arg⁡minuf(u,x) \arg \min_u f(u,x) ภายใต้ a ≤ d ( u , x ) ≤ bc(u,x)=0c(u,x)=0 c(u,x) = 0 a≤d(u,x)≤ba≤d(u,x)≤b a \le d(u,x) \le b โดยที่ยูuuคือเวกเตอร์ของตัวแปรการออกแบบxxxเป็นเวกเตอร์ของตัวแปรสถานะและc ( u , x )c(u,x)c(u,x)เป็นข้อ จำกัด ด้านความเท่าเทียมกัน (โดยทั่วไปคือ PDE) ข้อ จำกัด ด้านล่างและด้านบนaaaและขbbอาจเป็นตัวแปรเชิงพื้นที่ แพคเกจใดสามารถจัดการระบบของฟอร์มนี้

3
ระบบเส้นตรงแบบสมมาตรและคงที่สามารถแก้ไขได้ในเวลาสมการกำลังสองหลังจากการคำนวณล่วงหน้าหรือไม่
คือมีO(n3+n2k)O(n3+n2k)O(n^3+n^2 k)วิธีการที่จะแก้ปัญหาkkkเชิงเส้นระบบของฟอร์ม(Di+A)xi=bi(Di+A)xi=bi(D_i + A) x_i = b_iที่เป็นเมทริกซ์เมจิคงที่และD ฉันเป็นเมทริกซ์ทแยงมุมบวก?AAADiDiD_i ตัวอย่างเช่นถ้าแต่ละDiDiD_iเป็นสเกลาร์ก็พอเพียงที่จะคำนวณ SVD ของ อย่างไรก็ตามการแบ่งนี้สำหรับDทั่วไปเนื่องจากการขาดการสับเปลี่ยนAAADDD อัปเดต : คำตอบคือ "ไม่" ไม่มีใครมีสัญชาตญาณที่น่าสนใจว่าทำไม? ไม่มีคำตอบหมายความว่าไม่มีวิธีที่ไม่จำเป็นในการบีบอัดข้อมูลระหว่างผู้ให้บริการที่ไม่เปิดใช้งานสองคน มันไม่ได้เป็นเรื่องที่น่าประหลาดใจนัก แต่มันเป็นการดีที่จะเข้าใจมันมากขึ้น

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