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

ภาษาโปรแกรมเชิงวัตถุที่ทรงพลัง

2
แก้ปัญหา
ฉันกำลังย้ายรหัสที่มีอยู่จาก MATLAB ไปยัง C ++ และมีระบบเชิงเส้นเพื่อแก้ไข (แทนที่จะเป็นรูปแบบทั่วไปA x = b )xA=bxA=bxA=bAx=bAx=bAx=b เมทริกซ์นั้นหนาแน่นและอยู่ในรูปแบบทั่วไป แต่ไม่ใหญ่กว่า 1,000x1000 ดังนั้นใน MATLAB คำตอบคือฟังก์ชั่นหรือสัญกรณ์ไปข้างหน้าAAAmrdivide(b,A)x = b/A; ฉันจะแก้ไขปัญหานี้ในรหัส C ++ ของฉันโดยใช้รูทีน BLAS และ LAPACK ได้อย่างไร ฉันคุ้นเคยกับกิจวัตรประจำวัน LAPACK DGESVซึ่งจะช่วยแก้x = BสำหรับxAx=bAx=bAx=bxxx ดังนั้นหนึ่งคิดว่าฉันต้องทำกิจวัตรบางอย่างโดยใช้ตัวแปลงสัญญาณเมทริกซ์: (xA)T=bT(xA)T=bT(xA)^T=b^T ATxT=bTATxT=bTA^T x^T = b^T xT=(AT)−1bTxT=(AT)−1bTx^T = (A^T)^{-1} b^T แล้วแก้รูปแบบสุดท้ายใช้DGESVการดำเนินงานในการขนย้ายT (ดังนั้นค่าใช้จ่ายในการเคลื่อนย้ายAและค่าใช้จ่ายในการแก้ไขระบบ)ATATA^TAAA มีวิธีการที่มีประสิทธิภาพมากกว่าหรือดีกว่าอย่างอื่นหรือไม่? ฉันทำงานกับเมทริกซ์และคลาสเวกเตอร์รวมถึงการใช้ BLAS จากไลบรารี BOOST uBLAS …

3
Blaze ห้องสมุดพีชคณิตเชิงเส้น?
กระดาษ "Expression Templates Revisited: การวิเคราะห์ประสิทธิภาพของระเบียบวิธีปัจจุบัน" ใน SIAM Journal of Scientific Computing อ้างถึงห้องสมุดพีชคณิตเชิงเส้น "Blaze" ฉันไม่เคยได้ยินมาก่อนและดูเหมือนไม่สามารถหาข้อมูลอ้างอิงออนไลน์ได้ (การค้นหา google ที่เห็นได้ชัดกำลังให้กระดาษด้านบนคืน) แล้วห้องสมุดนี้คืออะไรและฉันจะเรียนรู้เพิ่มเติมได้ที่ไหน

1
แทนที่การรวม QuasiMonteCarlo ของ Mathematica ใน C ++
ฉันมีโปรแกรม Mathematica ซึ่งทำหน้าที่อินทิกรัลบางตัวใน 3 หรือ 4 มิติโดยใช้QuasiMonteCarloวิธีการ ปัญหาคือใช้เวลานานในการรันจนถึงจุดที่การคำนวณบางอย่างไม่สามารถดำเนินการได้ในเวลางานสูงสุดที่มีอยู่ในคลัสเตอร์ HPC ของเรา ดังนั้นฉันกำลังพิจารณาที่จะเขียนโปรแกรมใหม่ใน C ++ ซึ่งฉันสงสัยว่าจะเร่งความเร็วขึ้นด้วยปัจจัยใหญ่ ฉันดูเอกสาร GSL และในขณะที่มีส่วนในลำดับ quasirandomและการรวม MC ปกติฉันไม่เห็นอะไรเลยที่นำมารวมกัน นอกจากนี้การค้นหาของ Google หรือสองรายการก็ไม่ทำให้เกิดสิ่งใด ๆ ที่ดูเหมือนจะเป็นการติดตั้งที่เชื่อถือได้ ตัวเลือกของฉันสำหรับการติดตั้ง QMC ใน C ++ มีการทดสอบอย่างดีมีอะไรบ้าง เพื่อประโยชน์ของความมั่นคงฉันต้องการใช้บางสิ่งบางอย่างใกล้เคียงกับวิธี Halton-Hammersley-Wozniakowski ที่ Mathematica ดำเนินการหากเป็นตัวเลือก

3
การใช้อัลกอริทึมเมทริกซ์ tridiagonal ที่มีประสิทธิภาพ
ฉันกำลังแก้ปัญหาทางกายภาพโดยใช้ชุดตัวเลขโดยปริยาย สิ่งนี้ทำให้ฉันแก้สมการเชิงเส้นด้วยเมทริกซ์สามเหลี่ยม ฉันเขียนรหัสอัลกอริทึมนี้จาก Wikipedia ฉันสงสัยว่ามีห้องสมุดที่มีประสิทธิภาพที่ช่วยให้แก้สมการประเภทนี้ด้วยวิธีที่เหมาะสมหรือไม่ สิ่งสำคัญคือเมทริกซ์นั้นจะเปลี่ยนแปลงตัวเองเฉพาะเมื่อพารามิเตอร์ของระบบมีการเปลี่ยนแปลงดังนั้นฉันจึงมีโอกาสในการคำนวณขั้นตอนวิธีอัลกอริทึมใหม่สำหรับโบนัสรอบการแสดงที่ดี ฉันใช้ C ++

1
การใช้วิธี Runge-Kutta กับลำดับที่สองของ ODE
ฉันจะเปลี่ยนวิธีการของออยเลอร์โดยลำดับที่ 4 ของ Runge-Kutta เพื่อตัดสินว่าการเคลื่อนที่ของฤดูใบไม้ร่วงฟรีนั้นมีขนาดไม่คงที่ (เช่นการลดลงอิสระจาก 10,000 กม. เหนือพื้นดิน) อย่างไร จนถึงตอนนี้ฉันเขียนการรวมอย่างง่ายโดยวิธีออยเลอร์: while() { v += getMagnitude(x) * dt; x += v * dt; time += dt; } ตัวแปร x หมายถึงตำแหน่งปัจจุบัน, v หมายถึงความเร็ว, getMagnitude (x) จะส่งกลับค่าความเร่งบนตำแหน่ง x ฉันพยายามใช้ RK4: while() { v += rk4(x, dt) * dt; // rk4() instead of …

3
การทดสอบว่าเมทริกซ์ 12x12 สองตัวมีค่าเดียวกัน
12×1212×1212 \times 12QQQdet(Q)=det(12I−Q−J)(1)det(Q)=det(12I−Q−J)(1)\det(Q) = \det(12I-Q-J) \; \; (1)JJJ ฉันกำลังทำสิ่งนี้กับห้องสมุดตัวนิ่มแต่มันกลับช้าไปหน่อย สิ่งที่ฉันต้องทำคือทำล้านล้านเมทริกซ์และปรากฎว่าการคำนวณสองปัจจัยคือคอขวดของโปรแกรมของฉัน ดังนั้นฉันมีสองคำถาม มีเคล็ดลับใดบ้างที่ฉันสามารถใช้เพื่อคำนวณดีเทอร์แนนต์ได้เร็วขึ้นเมื่อฉันรู้ขนาดของมัน? อาจเป็นการขยายตัวที่ยุ่งเหยิงสำหรับเมทริกซ์12×1212×1212 \times12ที่สามารถทำงานได้ในกรณีนี้? มีวิธีอื่นที่มีประสิทธิภาพในการทดสอบความเท่าเทียมกันหรือไม่(1)(1)(1) แก้ไข เพื่อตอบความคิดเห็น ฉันจำเป็นต้องคำนวณกราฟที่ไม่เกี่ยวข้องกับตัวเองที่เชื่อมต่อทั้งหมดGGGของคำสั่ง131313เช่นGGGและG¯¯¯¯G¯\overline{G}มีจำนวนของต้นไม้ทอด แรงจูงใจสำหรับสิ่งนี้สามารถพบได้ในโพสต์mathoverflowนี้ สำหรับเครื่องฉันใช้งานเครื่อง 8 คอร์ 3.4GHh พร้อมกัน แก้ไข ฉันสามารถลดเวลาทำงานที่คาดไว้ได้ถึง 50% โดยการทำโปรแกรม C เพื่อคำนวณปัจจัยเฉพาะของ12×1212×1212 \times 12เมทริกซ์ ข้อเสนอแนะยังคงยินดีต้อนรับ

5
ไลบรารี C ++ สำหรับการรวมตัวเลข (การสร้างพื้นที่สี่เหลี่ยมจัตุรัส)
ฉันมีรูทีนย่อยเล็ก ๆ ของตัวเองสำหรับการรวมเชิงตัวเลข (การสร้างพื้นที่สี่เหลี่ยมจัตุรัส) ซึ่งเป็นการดัดแปลง C ++ ของโปรแกรม ALGOL ที่เผยแพร่โดย Bulirsch & Stoer ในปี 1967 (Numerische Mathematik, 9, 271-278) ฉันต้องการอัปเกรดเป็นอัลกอริทึม (ปรับตัว) ที่ทันสมัยกว่าและสงสัยว่ามีไลบรารี่ C ++ ใด ๆ ที่ให้บริการดังกล่าวหรือไม่ ฉันดูเป็น GSL (ซึ่งเป็น C) แต่นั่นมาพร้อมกับ API ที่น่ากลัว (แม้ว่าตัวเลขอาจจะดี) มีอะไรอีกไหม? API ที่มีประโยชน์จะมีลักษณะดังนี้: double quadrature(double lower_integration_limit, double upper_integration_limit, std::function<double(double)> const&func, double desired_error_bound_relative=1.e-12, double desired_error_bound_absolute=0, double*error_estimate=nullptr);
10 c++  quadrature 

4
กำลังมองหาลำดับที่ 8 ของ Runge-Kutta ใน C / C ++
ฉันต้องการใช้วิธีการสั่งซื้อลำดับที่ 8 ของ Runge-Kutta (89) ในแอปพลิเคชันกลศาสตร์ท้องฟ้า / แอสโตรไดนามิคส์ที่เขียนด้วยภาษา C ++ โดยใช้เครื่อง Windows ดังนั้นฉันจึงสงสัยว่าใครจะรู้ว่ามีไลบรารี / การนำไปใช้ที่ดีซึ่งจัดทำเอกสารและใช้งานได้ฟรี? มันก็โอเคถ้ามันเขียนใน C ตราบใดที่ไม่มีปัญหาในการคอมไพล์ จนถึงตอนนี้ฉันได้พบห้องสมุดนี้ (mymathlib)แล้ว รหัสดูเหมือนว่าใช้ได้ แต่ฉันไม่พบข้อมูลเกี่ยวกับสิทธิ์ใช้งาน คุณสามารถช่วยฉันด้วยการเปิดเผยตัวเลือกที่คุณอาจรู้จักและเหมาะสมกับปัญหาของฉัน แก้ไข: ฉันเห็นว่าไม่มีรหัสแหล่ง C / C ++ มากมายตามที่คาดไว้ ดังนั้นเวอร์ชัน Matlab / Octave ก็ใช้ได้เช่นกัน (ยังต้องใช้งานได้ฟรี)

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 แต่ฉันไม่ได้สังเกตเห็นการปรับปรุงมากนัก ฉันเดาว่าเงินออมใด ๆ …

3
วิธีสร้างฟังก์ชันเส้นโค้งแบบเรียกซ้ำใน C ++
ในขณะนี้ฉันกำลังทำงานกับวิธีการแก้สมการเชิงอนุพันธ์ที่เรียกว่าการจัดระเบียบแบบพื้นฐาน -line สิ่งที่ฉันมีปัญหาคือการสร้างวิธีการสร้างคำสั่งโค้งอิสระโดยมีความสัมพันธ์ ด้วย เงื่อนไขเริ่มต้น และฉันมีปัญหาแม้จะเริ่มต้นด้วยปัญหานี้เนื่องจากการเรียกซ้ำอาจเริ่มจากทั้ง "top" หรือ "bottom" และฉันทำงานเป็นประเภทบล็อกของนักเขียนทั่วไป สิ่งที่ฉันไม่สามารถรับรอบสิ่งที่ฉันต้องทำB 1 i (x)={ 1Bk + 1ผม( x ) = x - xผมxk + i- xผมBkผม+ xk + i + 1- xxk + i + 1- xฉัน+ 1Bkฉัน+ 1( x )Bผมk+1(x)=x-xผมxk+ผม-xผมBผมk+xk+ผม+1-xxk+ผม+1-xผม+1Bผม+1k(x) B^{k+1}_{i}(x)= \frac{x-x_i}{x_{k+i}-x_i}B^k_i + \frac{x_{k+i+1}-x}{x_{k+i+1}-x_{i+1}}B^k_{i+1}(x) B1ผม( x ) = { …
10 c++  b-spline 

3
มีแพ็คเกจ FEM“ น้ำหนักเบา” หรือไม่?
โดยทั่วไปแล้ว FEM ดูเหมือนจะเป็นปัญหาที่ "แก้ไข" ได้ค่อนข้างมาก มีเฟรมเวิร์กที่ทรงพลังมากมายเช่น Trilinos, PETSc, FEniCS, Libmesh หรือ MOOSE สิ่งหนึ่งที่พวกเขามีเหมือนกัน: พวกเขาเป็น "น้ำหนักมาก" ก่อนอื่นการติดตั้งปกติจะเจ็บปวดสุด ๆ ประการที่สองอินเทอร์เฟซ / API หนาและหนา - คุณต้องแปลความคิดทั้งหมดของคุณให้เป็นความคิดของห้องสมุดที่เกี่ยวข้อง นั่นหมายความว่าการทำงานร่วมกันและการขยายสำหรับข้อกำหนดพิเศษหรือรหัสที่มีอยู่เป็นเรื่องยาก โครงการอื่น ๆ เช่น (ตัวอย่างแบบสุ่ม) Boost, LibIGL, Aztec (ตัวแก้ปัญหาเชิงเส้น), Eigen หรือ CGAL แสดงให้เห็นว่าเป็นไปได้อย่างแน่นอนที่จะเขียนไลบรารีที่ทรงพลังที่รวมเข้ากับโค้ด C ++ หรือ Python ได้อย่างราบรื่นโดยไม่ต้องติดตั้ง ของกรอบหนักสุด มีแพ็คเกจที่เบามากสำหรับ FEM หรือไม่? ฉันไม่ได้มองหาวิธีแก้ปัญหาที่ง่ายและเป็นระบบอัตโนมัติ - ฉันกำลังมองหาห้องสมุดที่มีฟังก์ชั่นที่ทรงพลังในขณะที่รักษาอินเตอร์เฟสแบบลีนความสามารถในการทำงานร่วมกันกับโครงสร้างข้อมูลทั่วไป (เช่น C …

1
การใช้วิธี Jacobi-Davidson สำหรับปัญหาลูกบาศก์ค่าลักษณะเฉพาะ
ฉันมีปัญหาค่า eigenvalue ขนาดใหญ่: (A0+ λA1+λ2A2+λ3A3) x =0(A0+λA1+λ2A2+λ3A3)x=0.\left(\mathbf{A}_0 + \lambda\mathbf{A}_1 + \lambda^2\mathbf{A}_2 + \lambda^3\mathbf{A}_3\right)\mathbf{x} = 0. ฉันสามารถแก้ปัญหานี้ได้โดยการแปลงเป็นปัญหาค่าลักษณะเชิงเส้น แต่มันจะส่งผลให้ระบบ 32323^2 มีขนาดใหญ่: ⎡⎣⎢-A0000ผม000ผม⎤⎦⎥⎡⎣⎢xYZ⎤⎦⎥= λ⎡⎣⎢A1ผม0A20ผมA300⎤⎦⎥⎡⎣⎢xYZ⎤⎦⎥,[−A0000I000I][xyz]=λ[A1A2A3I000I0][xyz],\begin{bmatrix} -\mathbf{A}_0 & 0 & 0 \\ 0 & \mathbf{I} & 0 \\ 0 & 0 & \mathbf{I} \end{bmatrix} \begin{bmatrix} \mathbf{x} \\ \mathbf{y} \\ \mathbf{z} \end{bmatrix} = \lambda \begin{bmatrix} \mathbf{A}_1 …

10
เป็นไปได้หรือไม่ที่จะปรับแต่งรหัสการรวมเพื่อให้ทำงานได้เร็วขึ้น?
double trap(double func(double), double b, double a, double N) { double j; double s; double h = (b-a)/(N-1.0); //Width of trapezia double func1 = func(a); double func2; for (s=0,j=a;j<b;j+=h){ func2 = func(j+h); s = s + 0.5*(func1+func2)*h; func1 = func2; } return s; } ด้านบนคือรหัส C ++ ของฉันสำหรับการรวมตัวเลข 1D (โดยใช้กฎสี่เหลี่ยมคางหมูแบบขยาย) …

2
ไลบรารี C ++ สำหรับการลดข้อ จำกัด แบบไม่เชิงเส้น
ขณะนี้ฉันกำลังพยายามแก้ไขปัญหาการลดข้อ จำกัด แบบไม่เชิงเส้นเนื่องจากมีการใช้งานในฟังก์ชัน "fmincon" ของ matlab ความคาดหวังของฉันคือลด (fun1, x0, uB, lB, fun2) โดยที่ x0 เป็นสถานะเริ่มต้น fun1 คือฟังก์ชั่นที่ต้องลดให้น้อยที่สุด uB เป็นขอบเขตด้านบน lB เป็นขอบเขตล่างและ fun2 เป็นฟังก์ชันที่ให้เวกเตอร์ / inequalities ตามที่อธิบายไว้ในhttp://www.mathworks.com/help/optim/ug/fmincon.htmlเป็นฟังก์ชั่น nonlcon เวกเตอร์เหล่านี้มีการเปลี่ยนแปลงผ่านการวนซ้ำเช่นกัน (พวกมันไม่ใช่เชิงเส้นขึ้นอยู่กับ x_n, การวนซ้ำ n-th ของเวกเตอร์การแก้ปัญหา) ในการนำ MATLAB มาใช้จะอยู่ในรูปแบบ c (x) <= 0 นี่เป็นรหัสชิ้นสุดท้ายที่จำเป็นต้องทำการย้ายจาก matlab ไปยัง c ++ และฉันพยายามอย่างมากในขณะที่พยายามค้นหาไลบรารี c ++ ที่เหมาะสมซึ่งมีอัลกอริธึมนี้ นี่คือเหตุผลที่ฉันขอความช่วยเหลือที่นี่และฉันจะขอบคุณมากถ้าคุณสามารถให้ความเชี่ยวชาญของคุณ …

6
คำถามอ่อน: งูหลามพอดีกับรูปภาพได้ที่ไหน?
ดังนั้นฉันจึงถกเถียงกันว่าควรจะเรียน Python หรือไม่ จากการพูดกับอาจารย์ของฉัน Matlab ดูเหมือนว่าจะเป็นภาษากลางที่ใช้ในคณิตศาสตร์ประยุกต์ / วิทยาศาสตร์การคำนวณเท่าที่สถาบันการศึกษาเกี่ยวข้อง ในขณะที่อุตสาหกรรมอาจารย์ของฉัน (โดยเฉพาะผู้ที่ทำงานในอุตสาหกรรม) กล่าวว่าการเรียนรู้ c ++ เป็นเส้นทางที่ปลอดภัยที่สุด ฉันต้องการจะได้ยินจากพวกคุณทั้งในภาคการศึกษาและภาคอุตสาหกรรมว่าฉันควรจะใส่ใจกับ Python หรือเพียงแค่ทำให้ดีขึ้นในสิ่งที่ฉันรู้ (MATLAB และ C ++) ในเวลานั้น Update : Geoff นำเสนอจุดที่ดีฉันอาจจะวางรายละเอียดเพิ่มเติม: ปัจจุบันฉันอยู่ในระดับปริญญาตรีในปีที่แล้วเรียนคณิตศาสตร์ด้วยความเชี่ยวชาญเฉพาะด้านในการคำนวณ ฉันต้องการเรียนต่อระดับปริญญาโทและอยู่ในการค้นคว้า (ฉันไม่เคยเห็นตัวเองสนุกกับการสอน) หรือทำงานในห้องแล็บ ทั้งสองอย่างนั้นเหมาะสมที่สุด ในส่วนของการวิจัยสิ่งที่อาจเป็นไปตามการวิเคราะห์เชิงตัวเลขหรือความน่าจะเป็น ในกรณีที่แผนก. ไม่ได้ผลฉันจะเปิดให้ทำงานในอุตสาหกรรมตราบใดที่การเตรียมตัวสำหรับอุตสาหกรรมไม่ได้ใช้เวลามากเกินไปจากโรงเรียน ดังนั้นฉันคิดว่าฉันควรเรียนรู้ภาษาที่ใช้กันทั่วไปในอุตสาหกรรมเช่นเดียวกับการสำรองข้อมูล แต่นี่คือเหตุผลที่ฉันขัดแย้งกัน ฉันไม่สามารถเรียนได้ทุกภาษาหรือเตรียมตัวสำหรับทุกโอกาสที่จะทำเพราะต้องใช้เวลามากเกินไป
9 matlab  python  c++ 

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