คำถามติดแท็ก algorithms

คำอธิบายของขั้นตอนเฉพาะที่จำเป็นในการแก้ปัญหาเฉพาะในรูปแบบที่ชัดเจนซึ่งแสดงในรูปแบบนามธรรม

2
(วิธี) เขียนการจำลองที่ทำงานเร็วขึ้น?
ฉันได้เริ่มใช้ python เป็นภาษาการเขียนโปรแกรมสำหรับทำงานที่ได้รับมอบหมายทั้งหมดใน CFD ฉันมีประสบการณ์การเขียนโปรแกรมน้อยมาก ฉันมาจากภูมิหลังทางวิศวกรรมเครื่องกลและกำลังศึกษาต่อระดับสูงกว่าในสาขาวิศวกรรมการบินและอวกาศ บางครั้งด้านการคำนวณของ CFD นั้นน่าเบื่อกว่าจัดการสมการหรือทำคณิตศาสตร์ แนวทางทั่วไปที่ทำให้โปรแกรมของเราทำงานเร็วขึ้นคืออะไร ลูกเล่นอะไรที่ต้องทำสิ่งต่าง ๆ อย่างขนานกัน? จะเขียนรหัสที่ทำงานได้เร็วขึ้นได้อย่างไร ฉันจะหาแหล่งข้อมูลได้ที่ไหน (เข้าใจได้ง่ายสำหรับคนธรรมดาอย่างฉัน) ที่ตอบคำถามข้างต้น

1
มีการใช้งาน ILU หลายระดับแบบโอเพนซอร์สแบบผกผันหรือไม่?
ฉันประทับใจมากกับประสิทธิภาพของอนุกรมของILU preconditioners หลายระดับโดยเฉพาะHelmholtz ที่ต่างกันแต่ฉันประหลาดใจที่ไม่พบการใช้งานโอเพ่นซอร์สใด ๆ โดยเฉพาะอย่างยิ่งILUPACKทำให้ไบนารีพร้อมใช้งานสำหรับนักวิชาการได้อย่างอิสระ แต่ไม่ปรากฏว่าพวกเขาปล่อยซอร์สโค้ดของพวกเขา เป็นกรณีที่ไม่มีผู้ใดได้เปิดแหล่งที่มาของการใช้งานหรือไม่

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

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

2
วิธีการคำนวณมุมที่มีเสถียรภาพของตัวเลขระหว่างเวกเตอร์
เมื่อใช้สูตรคลาสสิกสำหรับมุมระหว่างสองเวกเตอร์: α=arccosv1⋅v2∥v1∥∥v2∥α=arccos⁡v1⋅v2‖v1‖‖v2‖\alpha = \arccos \frac{\mathbf{v_1} \cdot \mathbf{v_2}}{\|\mathbf{v_1}\| \|\mathbf{v_2}\|} หนึ่งพบว่าสำหรับมุมเล็ก / เฉียบพลันมากมีการสูญเสียความแม่นยำและผลลัพธ์ไม่ถูกต้อง ดังที่อธิบายไว้ในคำตอบของ Stack Overflow คำตอบเดียวคือใช้อาร์กแทนเจนต์แทน: α=arctan2(∥v1×v2∥,v1⋅v2)α=arctan⁡2(‖v1×v2‖,v1⋅v2)\alpha = \arctan2 \left(\|\mathbf{v_1} \times \mathbf{v_2}\|, \mathbf{v_1} \cdot \mathbf{v_2} \right) และสิ่งนี้ย่อมให้ผลลัพธ์ที่ดีกว่า อย่างไรก็ตามฉันสงสัยว่าสิ่งนี้จะให้ผลที่ไม่ดีกับมุมที่อยู่ใกล้กับπ/2π/2\pi / 2หรือไม่ เป็นอย่างนั้นเหรอ? ถ้าเป็นเช่นนั้นมีสูตรใดที่จะคำนวณมุมอย่างแม่นยำโดยไม่ตรวจสอบความอดทนภายในifสาขาหรือไม่?

5
ข้อดีและข้อเสียของการใช้คลาสเพื่อห่อหุ้มอัลกอริธึมเชิงตัวเลขคืออะไร
อัลกอริธึมจำนวนมากที่ใช้ในการคำนวณทางวิทยาศาสตร์มีโครงสร้างที่แตกต่างจากอัลกอริทึมซึ่งโดยทั่วไปจะพิจารณาในรูปแบบคณิตศาสตร์ที่เข้มข้นน้อยกว่าของวิศวกรรมซอฟต์แวร์ โดยเฉพาะอย่างยิ่งอัลกอริธึมทางคณิตศาสตร์ของแต่ละคนมักจะมีความซับซ้อนสูงซึ่งมักจะเกี่ยวข้องกับโค้ดหลายร้อยหรือหลายพันบรรทัด แต่อย่างไรก็ตามก็ไม่เกี่ยวข้องกับสถานะ (เช่นไม่ได้ทำหน้าที่ในโครงสร้างข้อมูลที่ซับซ้อน) อินเตอร์เฟซ - เป็นฟังก์ชั่นเดียวที่ทำหน้าที่ในอาร์เรย์ (หรือสอง) สิ่งนี้ชี้ให้เห็นว่าฟังก์ชั่นและไม่ใช่คลาสเป็นอินเทอร์เฟซธรรมชาติสำหรับอัลกอริธึมส่วนใหญ่ที่พบในการคำนวณทางวิทยาศาสตร์ แต่ข้อโต้แย้งนี้ให้ข้อมูลเชิงลึกเพียงเล็กน้อยเกี่ยวกับวิธีการจัดการอัลกอริทึมที่ซับซ้อนและหลายส่วน ในขณะที่วิธีการดั้งเดิมคือการมีฟังก์ชั่นหนึ่งที่เรียกใช้ฟังก์ชั่นอื่น ๆ จำนวนมากผ่านการขัดแย้งที่เกี่ยวข้องไปพร้อมกัน OOP นำเสนอวิธีการที่แตกต่างกัน เพื่อความชัดเจนโดยการห่อหุ้มอัลกอริทึมในคลาสฉันหมายถึงการสร้างคลาสที่อินพุตอัลกอริทึมถูกป้อนเข้าไปในตัวสร้างคลาสแล้ววิธีการสาธารณะเรียกว่าอัลกอริทึมจริงเรียก การใช้งาน multigrid ใน C ++ psuedocode อาจมีลักษณะเช่นนี้: class multigrid { private: x_, b_ [grid structure] restrict(...) interpolate(...) relax(...) public: multigrid(x,b) : x_(x), b_(b) { } run() } multigrid::run() { [call restrict, interpolate, relax, etc.] …
13 algorithms 

1
อัลกอริทึมสำหรับเมทริกซ์จำนวนเต็มกระจัดกระจาย
ฉันกำลังมองหาห้องสมุดที่ดำเนินการเมทริกซ์ในเมทริกซ์กระจัดกระจายขนาดใหญ่ที่ไม่มีความเสถียรเชิงตัวเลข เมทริกซ์จะเป็น 1,000+ โดย 1000+ และค่าของเมทริกซ์จะอยู่ระหว่าง 0 ถึง 1,000 ฉันจะทำการอัลกอริทึมแคลคูลัสดัชนีดังนั้นฉันจะสร้างเวกเตอร์แถว (กระจัดกระจาย) ของเมทริกซ์ตามลำดับ เมื่อฉันพัฒนาแต่ละแถวฉันจะต้องทดสอบความเป็นอิสระเชิงเส้น เมื่อฉันกรอกเมทริกซ์ของฉันด้วยจำนวนเวกเตอร์อิสระเชิงเส้นที่ต้องการฉันจะต้องเปลี่ยนเมทริกซ์ให้อยู่ในรูปแบบแถวระดับลดลง ปัญหาตอนนี้คือการใช้งานของฉันใช้การกำจัดแบบเกาส์เซียนเพื่อกำหนดความเป็นอิสระเชิงเส้น อย่างไรก็ตามด้วยความหนาแน่นและขนาดของเมทริกซ์นี่หมายความว่ารายการในแต่ละแถวใหม่มีขนาดใหญ่ขึ้นเรื่อย ๆ เมื่อเวลาผ่านไปเนื่องจากต้องพบ lcm ของรายการนำหน้าเพื่อดำเนินการยกเลิก การค้นหารูปแบบที่ลดลงของเมทริกซ์ยิ่งทำให้ปัญหารุนแรงขึ้นอีก ดังนั้นคำถามของฉันคือมีอัลกอริทึมหรือยังดีกว่าการใช้งานที่สามารถทดสอบความเป็นอิสระเชิงเส้นและแก้รูปแบบแถวระดับลดลงในขณะที่รักษารายการที่มีขนาดเล็กที่สุดเท่าที่จะทำได้? การทดสอบที่มีประสิทธิภาพสำหรับความเป็นอิสระเชิงเส้นมีความสำคัญอย่างยิ่งเนื่องจากในอัลกอริทึมแคลคูลัสดัชนีจะดำเนินการมากที่สุด

1
การนับกราฟที่มาจากการทดสอบแบบ Delaunay ในแบบ 3 มิติ
มีอัลกอริทึมที่แจกแจงกราฟที่สอดคล้องกับจุดแบ่งย่อย Delaunay ของจุดในแบบ 3 มิติหรือไม่? ถ้าเป็นเช่นนั้นจะมีพารามิเตอร์ที่มีประสิทธิภาพของรูปทรงเรขาคณิตที่สอดคล้องกับ "กราฟ Delaunay" ใด ๆ ? ฉันกำลังมองหาที่จะระบุรูปทรงเรขาคณิตที่มีเสถียรภาพทั้งหมดของโมเลกุลขององค์ประกอบที่ระบุโดยไม่ต้องมีความรู้เบื้องต้นของพันธะ ฯลฯ แก้ไข: ให้เป็นชุดของกราฟที่มีจุดยอดปล่อยเป็นแผนที่ของจุดในไปยังกราฟที่สอดคล้องกับ Delessunay tessellation ของจุดที่กล่าวไว้ในแบบ 3 มิติGNGNG_NNNND:R3N→GND:R3N→GND: \mathbb{R}^{3N} \to G_NNNNR3R3\mathbb{R}^3 ฉันจะระบุอย่างมีประสิทธิภาพได้อย่างไรD(R3N)D(R3N)D(\mathbb{R}^{3N}) ยิ่งกว่านั้นเมื่อได้รับกราฟฉันจะกำหนดพารามิเตอร์ (อย่างมีประสิทธิภาพ) ได้อย่างไรg∈Gng∈Gng\in G_nD−1(g)D−1(g)D^{-1}(g) แก้ไข: ตัวอย่างใน 2D: สำหรับ 4 คะแนนมี 2 กราฟ Delaunay 1−╲2|4−╱3 and 1|3−×−2|41−2−3╲|╱4 and 1−2|×|3−4 \begin{matrix} 1 & - & 2 & - …

1
วิธีการเชิงตัวเลขสำหรับการแปลงอินทิกรัลอินทิกรัลเปลี่ยน?
ฉันพยายามแปลงการแปลงอินทิกรัลให้เป็นตัวเลข F(y)=∫∞0yexp[−12(y2+x2)]I0(xy)f(x)dxF(y)=∫0∞yexp⁡[−12(y2+x2)]I0(xy)f(x)dxF(y) = \int_{0}^{\infty} y\exp{\left[-\frac{1}{2}(y^2 + x^2)\right]} I_0\left(xy\right)f(x)\;\mathrm{d}x ดังนั้นสำหรับฉันต้องประมาณf ( x ) โดยที่:F(y)F(y)F(y)f(x)f(x)f(x) และ F ( y )เป็นจริงและเป็นบวกf(x)f(x)f(x)F(y)F(y)F(y)(คือการแจกแจงความน่าจะเป็นแบบต่อเนื่อง) เป็นจริงและเป็นบวกx , yx,yx,y(เป็นขนาด) ฉันมีวิธีการบังคับยุ่งและดุร้ายมากสำหรับการทำสิ่งนี้ในนาที: ฉันกำหนดและเส้นโค้งมากกว่าชุดของจุดค่าของจุดขบที่มี 'เดา' จากการสุ่มแบบซึ่งอัตราผลตอบแทนที่คาดการณ์F ( Y ) อัลกอริทึมทางพันธุกรรมพื้นฐานที่ฉันเขียนช่วยลดความแตกต่างระหว่างอาร์เรย์F ( y )ที่คาดการณ์และวัดได้ จากนั้นฉันใช้f ( x )ซึ่งอัลกอริทึมมาบรรจบกันเป็นคำตอบสำหรับการผกผันฉ( x )f(x)f(x)F( y)F(y)F(y)F( y)F(y)F(y)ฉ( x )f(x)f(x) วิธีการนี้ใช้งานได้ดีสำหรับกรณีง่าย ๆ บางอย่าง แต่มันก็ทำให้ฉันรู้สึกยุ่งและไม่แข็งแรงเป็นพิเศษ ใครสามารถให้แนวทางแก่ฉันในการแก้ไขปัญหานี้ได้ดีขึ้น? ขอบคุณสำหรับเวลาและความช่วยเหลือของคุณ! [x โพสต์ที่วิทยาการคอมพิวเตอร์]

2
การคำนวณปัจจัย Cholesky
ดังนั้นทฤษฎีบทการสลายตัวของโคลเลสกี้ระบุว่าเมทริกซ์บวกแน่นอนที่แน่นอนใด ๆมีการสลายตัวของ Cholesky M = L L ⊤โดยที่Lเป็นเมทริกซ์สามเหลี่ยมล่างMMMM= L L⊤M=LL⊤M= LL^\topLLL ได้รับเรารู้อยู่แล้วว่ามีขั้นตอนวิธีการอย่างรวดเร็วในการคำนวณปัจจัย Cholesky ของLMMMLLL ทีนี้สมมติว่าฉันได้รับเมทริกซ์A ขนาดและฉันรู้ว่าA ⊤ Aนั้นเป็นค่าบวกแน่นอน มีวิธีคำนวณ Cholesky factor LของA ⊤ Aโดยไม่ต้องคำนวณA ⊤ Aอย่างชัดเจนแล้วใช้อัลกอริธึมการแยกตัวประกอบของ Cholesky หรือไม่?m × nม.×nm\times nAAAA⊤AA⊤AA^\top ALLLA⊤AA⊤AA^\top AA⊤AA⊤AA^\top A ถ้าเป็นเมทริกซ์รูปสี่เหลี่ยมผืนผ้าขนาดใหญ่มากที่ดำเนินการA ⊤ Aดูเหมือนว่าจะมีราคาแพงและคำถามนี้AAAA⊤AA⊤AA^\top A

3
ฉันกำลังมองหาไลบรารีกราฟแบบไดนามิกแบบขนานใน C ++
สวัสดีชุมชน Scicomp ฉันทำงานในส่วนของอัลกอริธึมกราฟโดยใช้เฟรมเวิร์กเช่นNetworkX (Python), JUNGและYFiles (Java) ตอนนี้ฉันกำลังเข้าสู่การคำนวณแบบขนานและประสิทธิภาพสูง สำหรับโครงการใหม่ฉันกำลังมองหาไลบรารีกราฟ C ++ ที่มีคุณสมบัติดังต่อไปนี้: มีอินเทอร์เฟซที่ใช้งานง่ายที่ช่วยให้การพัฒนาอัลกอริทึม รองรับการทำงานแบบไดนามิก: เช่นการแทรกและการลบโหนด / ขอบโดยพลการ รองรับการขนาน: เช่นป้องกันโปรแกรมเมอร์จากปัญหาที่เกิดขึ้นกับมัลติเธรด มีค่าใช้จ่ายหน่วยความจำต่ำและเหมาะสำหรับการคำนวณประสิทธิภาพสูง โปรดแนะนำห้องสมุดบางแห่งและหารือเกี่ยวกับเกณฑ์เหล่านี้รวมถึงข้อดีข้อเสีย

3
อัลกอริทึมแบบขนานสำหรับระบบ eigensystem ของเมทริกซ์สามเหลี่ยม
ฉันกำลังทำเส้นทแยงมุม Lanczos ของเมทริกซ์กระจัดกระจายขนาดใหญ่ (ประมาณ 2 ล้านองค์ประกอบ) เกือบทุกขั้นตอนในอัลกอริธึม Lanzcos ทำขนานกับ GPU ยกเว้น diagonalizing Lanczos matrix เพื่อตรวจสอบลู่เข้า เพื่อที่ฉันได้ใช้อัลกอริทึม TQLI จากสูตรตัวเลข มีวิธีในการค้นหาระบบ eigensystem ของเมทริกซ์ tridiagonal ที่ขนานหรือขนานได้ง่ายหรือไม่? TQLI รุ่นขนานมีอยู่จริงหรือไม่?

3
วิธีการใช้ฟังก์ชั่นการจัดทำดัชนีที่มีประสิทธิภาพสำหรับการรวมสองอนุภาค <ij | kl>
นี่เป็นปัญหาการแจงนับสมมาตรอย่างง่าย ฉันให้พื้นฐานเต็มรูปแบบที่นี่ แต่ไม่จำเป็นต้องมีความรู้เกี่ยวกับเคมีควอนตัม อินทิกรัลสองอนุภาค⟨ i j | k l ⟩⟨ผมJ|kล.⟩\langle ij|kl\rangleคือ: ⟨ i j | k l ⟩ = ∫ψ* * * *ผม( x ) ψ* * * *J( x') ψk( x ) ψล.( x')| x - x'|d3xd3x'⟨ผมJ|kล.⟩=∫ψผม* * * *(x)ψJ* * * *(x')ψk(x)ψล.(x')|x-x'|d3xd3x' \langle ij|kl\rangle = \int {\psi_i^*({\bf x})\psi_j^*({\bf …

2
ต้นทุนการคำนวณของการดำเนินงาน mpi_allgather เปรียบเทียบกับการดำเนินการรวบรวม / กระจายอย่างไร
ฉันกำลังทำงานกับปัญหาที่สามารถทำให้ขนานได้โดยใช้การดำเนินงาน mpi_allgather เดียวหรือหนึ่ง mpi_scatter และหนึ่งการดำเนินงาน mpi_gather การดำเนินการเหล่านี้จะถูกเรียกภายในวงขณะที่ดังนั้นพวกเขาอาจจะเรียกหลายครั้ง ในการนำไปใช้กับรูปแบบ MPI_allgather ฉันกำลังรวบรวมเวกเตอร์แบบกระจายสู่กระบวนการทั้งหมดสำหรับการแก้เมทริกซ์ที่ซ้ำกัน ในการใช้งานอื่น ๆ ฉันรวบรวมเวกเตอร์ที่กระจายไปยังโปรเซสเซอร์เดียว (โหนดรูท) แก้ไขระบบเชิงเส้นบนโปรเซสเซอร์นี้จากนั้นกระจายเวกเตอร์โซลูชันกลับสู่กระบวนการทั้งหมด ฉันอยากรู้ว่าค่าใช้จ่ายในการดำเนินการของตัวรวบรวมทั้งหมดมากกว่าการกระจายและรวมการปฏิบัติการเข้าด้วยกันอย่างมีนัยสำคัญหรือไม่ ความยาวของข้อความมีบทบาทสำคัญในความซับซ้อนหรือไม่ มันแตกต่างกันระหว่างการใช้งานของ MPI หรือไม่ แก้ไข:

1
เรียงลำดับเมฆตามจุดที่เกี่ยวกับตาข่ายที่ไม่มีโครงสร้างของเซลล์ hexahedral
คำถาม คุณจะจัดเรียงคะแนนเมฆอย่างไรเทียบกับตาข่ายที่ไม่มีโครงสร้างของเซลล์รูปหกเหลี่ยม? แต่ละเซลล์มีศูนย์กลางและป้ายกำกับที่ไม่ซ้ำกันเพื่อเป็นตัวแทน มีจุดเมฆสองจุดโดยทั่วไป (จุดเมฆดั้งเดิมและจุดเมฆของศูนย์เซลล์) แต่ข้อมูลเรขาคณิตของเซลล์ (กล่องขอบเขต) อาจใช้งานได้ฉันไม่แน่ใจ ผล ฉันได้ถามไปแล้วและค้นหาจากวรรณกรรม: ถ้าตาข่ายเป็นรูปหกเหลี่ยมและไม่มีโครงสร้างปัญหาจะลดลงเป็นการค้นหาช่วงมุมฉาก เพื่อจุดประสงค์นี้ต้นไม้ kd มักจะใช้ หากมีการปรับปรุงตาข่ายตามโครงสร้างข้อมูลแปดตัวอัลกอริทึมการค้นหาช่วงสามารถสร้างขึ้นรอบ ๆ มัน เป้าหมายคือเพื่อหลีกเลี่ยงการจัดการกับเรขาคณิตตาข่ายโดยตรงและมุ่งเน้นไปที่จุดเมฆความสัมพันธ์เมฆ A - จุด B. เมฆจุด A: จุดสอบถามเมฆจุด B: ศูนย์เซลล์ตาข่าย

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