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

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

3
สิ่งที่จำเป็นต้องมีก่อนล่วงหน้าสำหรับการปรับค่าความถี่สูง Helmholtz
Multigrid มาตรฐานและวิธีการแยกส่วนโดเมนไม่ทำงาน แต่ฉันมีปัญหา 3D ขนาดใหญ่และตัวแก้ปัญหาโดยตรงไม่ใช่ตัวเลือก ฉันควรลองวิธีการแบบใด ตัวเลือกของฉันได้รับผลกระทบจากข้อควรพิจารณาต่อไปนี้อย่างไร ค่าสัมประสิทธิ์แปรผันตามขนาดของคำสั่งต่าง ๆ หรือ ใช้ระเบียบวิธีไฟไนต์อิลิเมนต์กับวิธีที่แตกต่างกัน
15 pde 

3
B3LYP ถูกนำไปใช้ใน Gaussin 0 *, GAMESS-US, Molpro, … ฯลฯ อย่างไร
โดยเฉพาะฉันต้องการขยายงานที่เกี่ยวข้องกับ B3LYP ที่เริ่มต้นด้วย Gaussian 03 แต่ดำเนินการต่อด้วย GAMESS-US พลังงานที่มีให้โดยวิธี B3LYP เริ่มต้นไม่เหมือนกัน มีการอภิปรายเกี่ยวกับเรื่องนี้ในคู่มือ GAMESS-US (ส่วนข้อมูลเพิ่มเติม): โปรดทราบว่า B3LYP ใน GAMESS นั้นมีพื้นฐานมาจากฟังก์ชันความสัมพันธ์ของแก๊สอิเล็กตรอน VWN5 เนื่องจากมีห้าสูตรด้วยสองพารามิเตอร์ที่เป็นไปได้ที่กล่าวถึงในกระดาษ VWN เกี่ยวกับความสัมพันธ์ในพื้นที่โปรแกรมอื่นอาจใช้ตัวเลือกอื่น ๆ และดังนั้นจึงสร้างพลังงาน B3LYP ที่แตกต่างกัน ตัวอย่างเช่นคู่มือของ NWChem กล่าวว่าใช้ฟังก์ชัน "VWN 1 กับพารามิเตอร์ RPA ซึ่งตรงข้ามกับพารามิเตอร์ Monte Carlo ที่กำหนด" เป็นค่าเริ่มต้น หากคุณต้องการใช้สูตร VWN1 นี้ในไฮบริด B3LYP เพียงเลือก "DFTTYP = B3LYP1" มีข้อความระบุว่าค่าเริ่มต้นจะแตกต่างกันระหว่าง GAMESS และ NWCHEM …

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

1
เหตุใด SciPy eigsh () จึงสร้างค่าลักษณะเฉพาะที่ผิดพลาดในกรณีของ oscillator ที่มีค่าฮาร์มอนิก
ฉันกำลังพัฒนาโค้ดขนาดใหญ่ขึ้นเพื่อทำการคำนวณค่าไอคิวของเมทริกซ์กระจัดกระจายขนาดใหญ่ในบริบทของฟิสิกส์การคำนวณ ฉันทดสอบกิจวัตรของฉันกับออสซิลลาสฮาร์มอนิกง่ายๆในมิติเดียวเนื่องจากค่าลักษณะเฉพาะนั้นเป็นที่รู้จักกันดีในเชิงวิเคราะห์ การทำเช่นนั้นและเปรียบเทียบกิจวัตรของฉันเองกับนักแก้ปัญหา inbuilt ของ SciPy ฉันได้พบกับสิ่งแปลกประหลาดที่แสดงในพล็อตด้านล่าง ที่นี่คุณสามารถดูค่าลักษณะเฉพาะที่คำนวณตัวเลข 100 ตัวแรกและค่าลักษณะเฉพาะเชิงวิเคราะห์λn ยูมλnยูม.\lambda_{num}λnλana\lambda_{ana} ประมาณค่าลักษณะเฉพาะจำนวน 40 ผลลัพธ์เชิงตัวเลขเริ่มเบี่ยงเบนจากผลการวิเคราะห์ สิ่งนี้ไม่ทำให้ฉันประหลาดใจ (ฉันจะไม่อธิบายสาเหตุที่นี่เว้นแต่จะเกิดขึ้นในการสนทนา) อย่างไรก็ตามสิ่งที่น่าแปลกใจสำหรับฉันคือeigsh ()สร้างค่าลักษณะเฉพาะที่เสื่อมโทรม (ประมาณค่าลักษณะเฉพาะจำนวน 80) เหตุใด eigsh () จึงทำตัวเช่นนั้นแม้ค่าลักษณะเฉพาะจำนวนน้อยเช่นนั้น import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = …

3
Fortran: วิธีที่ดีที่สุดในการตั้งเวลาส่วนรหัสของคุณ?
บางครั้งในขณะที่การปรับรหัสให้เหมาะสมต้องใช้เวลาบางส่วนของรหัสฉันใช้สิ่งต่อไปนี้มาหลายปีแล้ว แต่สงสัยว่ามีวิธีที่ง่ายกว่าหรือดีกว่าในการทำ? call system_clock(count_rate=clock_rate) !Find the time rate call system_clock(count=clock_start) !Start Timer call do_something_subroutine !This is what gets timed call system_clock(count=clock_stop) ! Stop Timer e_time = real(clock_stop-clock_start)/real(clock_rate)

1
การแปลง
ฉันได้ยินมาโดยบังเอิญว่าเมื่อมีคนพยายามทำตัวเลขที่เป็นส่วนหนึ่งของแบบฟอร์ม ∫∞0f(x)J0(x)dx∫0∞f(x)J0(x)dx\int_0^\infty f(x) J_0(x)\,\mathrm{d}x ด้วยf(x)f(x)f(x)ราบรื่นและมีความประพฤติดี (เช่นตัวเองไม่ได้มีความผันผวนสูง, ไม่มีความผิด, ฯลฯ ) จากนั้นมันจะช่วยให้ความแม่นยำในการเขียนใหม่เป็น 1π∫π0∫∞0f(x)cos(xsinθ)dxdθ1π∫0π∫0∞f(x)cos⁡(xsin⁡θ)dxdθ\frac{1}{\pi}\int_0^\pi \int_0^\infty f(x) \cos(x\sin\theta) \,\mathrm{d}x\,\mathrm{d}\theta และดำเนินการอินทิกรัลภายในเป็นตัวเลขก่อน ฉันไม่เห็นเหตุผลที่ฉันควรคาดหวังว่าสิ่งนี้จะทำงานได้ แต่แล้วความแม่นยำของวิธีการเชิงตัวเลขก็ไม่ค่อยชัดเจน แน่นอนฉันรู้ว่าวิธีที่ดีที่สุดที่จะทำคือการใช้วิธีการที่เหมาะสำหรับอินทิกรัลสโคปแบบนี้ แต่เพื่อความอยากรู้อยากเห็น ใครสามารถยืนยันหรือลบล้างการเปลี่ยนแปลงนี้มีแนวโน้มที่จะปรับปรุงความถูกต้องของอินทิกรัล? และ / หรือชี้ให้ฉันไปยังแหล่งที่มาอธิบายหรือไม่

5
ลดผลรวมของส่วนเบี่ยงเบนสัมบูรณ์ ( ระยะทาง
ฉันมีชุดข้อมูลx1,x2,…,xkx1,x2,…,xkx_{1}, x_{2}, \ldots, x_{k}และต้องการค้นหาพารามิเตอร์mmmเพื่อลดผลรวม∑i=1k∣∣m−xi∣∣.∑i=1k|m−xi|.\sum_{i=1}^{k}\big|m-x_i\big|. นั่นคือ minm∑i=1k∣∣m−xi∣∣.minm∑i=1k|m−xi|.\min_{m}\sum_{i=1}^{k}\big|m-x_i\big|.


4
ฉันจะคำนวณความแตกต่างที่เป็นตัวเลขระหว่างสองฟิลด์ที่จัดเก็บในไฟล์ VTK ที่ต่างกันสองไฟล์ด้วยโครงสร้างเดียวกันได้อย่างไร
สมมติว่าฉันมีไฟล์ VTK สองไฟล์ทั้งในรูปแบบกริดที่มีโครงสร้าง กริดที่มีโครงสร้างเหมือนกัน (มีรายการจุดเหมือนกันตามลำดับเดียวกัน) และมีฟิลด์เรียกว่า "พี" ในแต่ละไฟล์ VTK ฉันต้องการสร้างไฟล์ VTK ที่สามอีกครั้งด้วยกริดที่มีโครงสร้างเดียวกันและพล็อตฟิลด์ที่แตกต่างระหว่างพีในไฟล์ VTK แรกและพีในไฟล์ VTK ที่สอง ฉันรู้วิธีการทำสิ่งนี้ด้วยตนเอง; ฉันสามารถแยกวิเคราะห์ข้อความดิบในไฟล์ VTK สองไฟล์คัดลอกข้อมูลลงในอาร์เรย์ลบหนึ่งอาเรย์ออกจากที่อื่นแล้วถ่ายโอนข้อมูลในรูปแบบที่ถูกต้องลงในไฟล์ใหม่ มีวิธีที่ดีกว่าในการคำนวณความแตกต่างนี้และส่งออกไปยัง VTK หรือไม่ โซลูชันใน Python หรือซอฟต์แวร์สร้างภาพข้อมูลเช่น VisIt หรือ Paraview ควรใช้ภาษาที่คอมไพล์เช่น C ++ จุดประสงค์ของการคำนวณความแตกต่างนี้คือการเปรียบเทียบวิธีการเชิงตัวเลขที่แตกต่างกันสำหรับการคำนวณการแก้ปัญหาของ PDE; เนื่องจากฉันใช้ซอฟต์แวร์เดียวกันเพื่อสร้างโซลูชันฉันสามารถรับประกันได้ว่าข้อมูลทั้งหมด แต่ฟิลด์พีจะเหมือนกันในแต่ละไฟล์ที่ฉันสร้าง

2
คุณภาพของเครื่องกำเนิดไฟฟ้าเชิงเส้นเชิงเส้นสำหรับตัวเลขสุ่ม
ฉันกำลังจำลองสถานการณ์ของสมการ Langevin สำหรับกองกำลังภายนอกต่างๆ ด้วยการบอกว่า C rand()จากstdlib.hสามารถนำความลำเอียงในผลลัพธ์ของฉันฉันใช้ Mersenne Twister อย่างไรก็ตามฉันอยากจะรู้ (และดู) ว่าข้อผิดพลาดชนิดใดที่เครื่องกำเนิดไฟฟ้าเชิงเส้นเชิงเส้นสามารถแนะนำในการจำลองของฉัน นี่คือสิ่งที่ฉันได้ลอง: สร้าง tuples 3 มิติของ randoms เพื่อลองดูไฮเปอร์เพลน ฉันไม่เห็นอะไรเลย ทำ FFT ของเวกเตอร์ขนาดใหญ่ที่มีตัวเลขสุ่ม มันเกือบจะเหมือนกันสำหรับทั้ง Mersenne Twister rand()และ ตรวจสอบหลักการของควอเตชันสำหรับการเคลื่อนที่แบบบราวเนียน ผู้รวมระบบทั้งสองตกลงในค่าที่คาดหวังของมีตัวเลขนัยสำคัญเท่ากัน⟨KE⟩=12kBT⟨KE⟩=12kBT\langle \text{KE}\rangle=\frac{1}{2}k_BT มาดูกันว่าถังขยะในถังขยะจำนวนหนึ่งนั้นมีกำลังดีแค่ไหน ทั้งสองให้ผลลัพธ์เชิงคุณภาพเดียวกันไม่มีใครดีกว่า มองไปที่เส้นทาง Brownian ที่จะเห็นความแตกต่างที่ชัดเจนจาก 0 ไม่มีโชคอีกแล้ว⟨x⟩=0⟨x⟩=0\langle x\rangle = 0 การกระจายของคะแนนเป็นวงกลม เต็มและเฉพาะในปริมณฑล ระหว่างพวกเขาทั้งหมดและระหว่างเพื่อนบ้านที่ใกล้ที่สุด (คำตอบของ Shor ด้านล่างในความคิดเห็น) มีอยู่ในส่วนสำคัญนี้เพียงแค่เรียกใช้กับ Julia 0.5.0 หลังจากติดตั้งไลบรารีที่จำเป็น (ดูส่วนสำคัญสำหรับคำแนะนำ) …

1
ประโยชน์ที่ได้รับจากการใช้ Adams-Moulton บนอัลกอริทึม Adams-Bashforth มีอะไรบ้าง
ฉันกำลังแก้ไขระบบของสอง PDE คู่กันในมิติเชิงพื้นที่และในเวลาที่คำนวณ เนื่องจากการประเมินฟังก์ชั่นมีราคาแพงฉันต้องการใช้วิธีการหลายขั้นตอน (เริ่มต้นด้วยการใช้ Runge-Kutta 4-5) วิธี Adams-Bashforth ที่ใช้การประเมินฟังก์ชั่นห้าครั้งก่อนหน้ามีข้อผิดพลาดระดับโลกของ (นี่คือกรณีที่s = 5ในบทความ Wikipedia ที่อ้างถึงด้านล่าง) และต้องการการประเมินฟังก์ชั่นเดียว (ต่อ PDE) ต่อขั้นตอนO(h5)O(h5)O(h^5)s=5s=5s=5 ในขณะที่วิธี Adams-Moulton นั้นต้องการการประเมินสองฟังก์ชันต่อหนึ่งขั้นตอน: หนึ่งขั้นตอนในการทำนายและอีกวิธีหนึ่งสำหรับขั้นตอนการแก้ไข อีกครั้งถ้าห้าการประเมินผลการทำงานที่มีการใช้ข้อผิดพลาดระดับโลกคือ ) ( s = 4ในบทความ Wikipedia)O(h5)O(h5)O(h^5)s=4s=4s=4 อะไรคือเหตุผลเบื้องหลังที่ใช้ Adams-Moulton เหนือ Adams-Bashforth มันมีข้อผิดพลาดในลำดับเดียวกันสำหรับสองเท่าของการประเมินฟังก์ชั่น โดยสัญชาตญาณมันทำให้รู้สึกว่าวิธีการพยากรณ์ - Corrector ควรจะดี แต่ใครบางคนสามารถอธิบายเรื่องนี้ในเชิงปริมาณ? การอ้างอิง: http://en.wikipedia.org/wiki/Linear_multistep_method#Adams.E2.80.93Bashforth_methods

1
วิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่แชร์เช่น OpenMP
ฉันกำลังโค้ดแบบขนานเพื่อแก้ตัวเลขแบบจำลองสมดุลประชากร 5 มิติ ขณะนี้ฉันมีรหัส MPICH2 ที่ดีมากใน FORTRAN แต่เมื่อเราเพิ่มค่าพารามิเตอร์อาร์เรย์จะใหญ่เกินไปที่จะทำงานในโหมดหน่วยความจำแบบกระจาย ฉันสามารถเข้าถึงคลัสเตอร์ที่มี 15 โหนดโดยที่แต่ละโหนดมี CPU หลัก 8 ตัวและ RAM ขนาด 128GB ฉันต้องการเขียนเรียกใช้โปรแกรมด้วย MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเพื่อให้แต่ละกระบวนการไม่สร้างสำเนาของแต่ละอาร์เรย์ขึ้นมาเอง ก่อนที่ฉันจะรันอะไรก็ได้ในคลัสเตอร์ฉันต้องทดสอบบนเดสก์ท็อปที่ใช้ Ubuntu มันคือเบลดหนึ่งคลัสเตอร์ที่มี CPU 8 คอร์สองตัวและ RAM ขนาด 128 GB ฉันจะเขียนและทดสอบรหัสของฉันบนมันดังนั้นโปรดส่งคำตอบของคุณไปยังโปรแกรมที่ทำงานบนคอมพิวเตอร์ Ubuntu ฉันได้อ่านแล้วว่ามีวิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเช่น OpenMP แทนที่จะเป็นโหมดหน่วยความจำเริ่มต้นแบบกระจาย คำถาม: ฉันจะเปลี่ยนรหัสได้อย่างไร ฉันต้องเพิ่มการเรียกไปยังฟังก์ชั่น MPI อื่นMPI_WIN_ALLOCATEหรือไม่? ฉันจะรวบรวมรหัสของฉันเพื่อเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันได้อย่างไร สิ่งนี้จะแตกต่างกันหรือไม่หากมีหลายโหนด โปรดให้สคริปต์การรวบรวมตัวอย่างถ้าคุณทำได้ ฉันมีคอมไพเลอร์ GNU …

3
การอ้างอิงที่น่าเชื่อถือสำหรับแนวทางปฏิบัติที่ดีที่สุดของซอฟต์แวร์
ฉันกำลังเขียนวิทยานิพนธ์ปริญญาเอกของฉัน ฉันใช้เวลาส่วนหนึ่งของปริญญาเอกในการทำความสะอาดและขยายรหัสทางวิทยาศาสตร์ที่มีอยู่การใช้แนวปฏิบัติที่ดีที่สุดด้านวิศวกรรมซอฟต์แวร์ซึ่งก่อนหน้านี้ไม่ได้ใช้และต้องการที่จะเขียนเกี่ยวกับสิ่งนี้ในวิทยานิพนธ์ของฉัน แทนที่จะพูดว่า "ฉันเพิ่มการทดสอบหน่วย" ฉันต้องการที่จะสามารถเขียนสิ่งนี้: เจ Doe คิดค้นทดสอบหน่วยในปี 1975 [ 23 ] การศึกษาล่าสุดโดย Bloggs et al [ 24 ]แสดงให้เห็นว่าการทดสอบหน่วยลดการเกิดข้อผิดพลาดของซอฟต์แวร์ 73% ... 234 การทดสอบแยกหน่วยถูกเพิ่มเข้าไปในฐานรหัสจัดการโดยกรอบ xUnit ที่สร้างโดย Timpkins et al[ 23 ][23]^{[23]}[ 24 ][24]^{[24]}[ 25 ][25]^{[25]} ฉันกำลังมองหาข้อมูลอ้างอิงทางวิชาการที่อ้างอิงได้ (บทความที่น่าสนใจในวารสารที่มีการตรวจสอบแบบ peer-reviewed ซึ่งฉันสามารถรับ DOIs, BibTeX และอื่น ๆ ) ไปยังแนวปฏิบัติที่ดีที่สุดสำหรับวิศวกรรมซอฟต์แวร์ที่ได้รับการยอมรับโดยเฉพาะ: การทดสอบหน่วย การควบคุมเวอร์ชัน การแยกส่วน / แยกความกังวล การทำโปรไฟล์ประสิทธิภาพ …

3
การเปรียบเทียบวิธีการวนซ้ำ: จำนวนการวนซ้ำเทียบกับเวลาของ cpu
ฉันกำลังเปรียบเทียบวิธีการวนซ้ำสองวิธีสำหรับการย้อนกลับเมทริกซ์เมทริกแบบสุ่ม เนื่องจากเมทริกซ์เป็นแบบสุ่มทุกกรณีทดสอบต้องใช้ทั้งการวนซ้ำและเวลาที่ต่างกัน คำถามของฉันอยู่ด้านบนของเวลา CPU เฉลี่ยเป็นค่าเฉลี่ยของการทำซ้ำโดยทั้งสองวิธีข้อมูลที่เป็นประโยชน์สำหรับการเปรียบเทียบวิธี

1
การคำนวณทางวิทยาศาสตร์ด้วย Python พร้อม GPU ที่ทันสมัยพร้อมความแม่นยำสองเท่า
มีใครบ้างที่นี่ใช้การคำนวณทางวิทยาศาสตร์ที่มีความแม่นยำสองเท่ากับ GPU รุ่นใหม่ (เช่น K20) ผ่าน Python หรือไม่? ฉันรู้ว่าเทคโนโลยีนี้กำลังพัฒนาอย่างรวดเร็ว แต่วิธีที่ดีที่สุดในการทำสิ่งนี้ในปัจจุบันคืออะไร? GPU อยู่นอกขอบเขตสำหรับห้องสมุด Python ทางวิทยาศาสตร์ที่ได้รับความนิยมจำนวนมากและ scipy และฉันต้องการใช้ theano แต่ดูเหมือนว่าจะใช้ความแม่นยำ float32 เท่านั้นสำหรับ GPU ฉันรู้ว่า Google สามารถให้ผลลัพธ์การค้นหาสำหรับ python gpu ได้ แต่ฉันหวังว่าจะได้ข้อมูลเชิงลึกมากกว่ารายการโครงการที่อาจจะใช่หรือไม่ใช่ในการพบปะกับผู้สร้าง
14 python  gpu  precision 

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