Questions tagged «c++»

强大的面向对象编程语言。

2
使用LAPACK和BLAS 对求解
我正在将现有代码从MATLAB移植到C ++,并具有一个线性系统来解决(而不是更典型的形式)A x = bxA=bxA=bxA=bAx=bAx=bAx=b 矩阵是密集的,具有一般形式,但不大于1000x1000。因此在MATLAB中,可以通过函数或正斜杠表示法找到解决方案AAAmrdivide(b,A)x = b/A; 如何使用BLAS和LAPACK例程在C ++代码中解决此问题? 我熟悉的LAPACK程序DGESV解决了为。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对转置的进行运算来求解最终形式。(因此转置成本和解决系统的成本)一ATATA^TAAA 有没有一种方法更有效或以其他方式更好? 我正在使用矩阵和向量类以及BOOST uBLAS库中的BLAS实现以及与LAPACK库例程的绑定。我已经成功地将此设置用于其他操作,并希望找到限于这些库的解决方案。 另外,我应该注意,我在代码设置期间仅执行了几次此类操作,因此性能并不是关键问题。 也许此MATLAB 文档对其mrdivide他人有帮助。

3
Blaze线性代数库?
SIAM《科学计算》杂志上的“重述表达模板:当前方法的性能分析”一文引用了“ Blaze”线性代数库。我以前从未听说过,而且似乎找不到在线参考。(明显的google搜索正在将上述论文归还给您。) 那么这个图书馆是什么,我在哪里可以了解更多呢?

1
替换C ++中的Mathematica的QuasiMonteCarlo集成
我有一个Mathematica程序,使用该QuasiMonteCarlo方法在3或4维中执行一些积分。问题是,要花费一些令人讨厌的时间,以致于某些计算无法在我们的HPC群集上提供的最大工作时间内完成。因此,我正在考虑用C ++重写该程序,我怀疑它将大大提高它的速度。 我查看了GSL文档,虽然有关于准随机序列和常规MC集成的部分,但没有任何东西可以将它们组合在一起。同样,一两个Google搜索并没有发现任何看起来像是广受信任的实现。在C ++中,经过良好测试的QMC集成实现方式有哪些选择? 为了保持一致性,如果可以选择,我宁愿使用Mathematica实现的类似于Halton-Hammersley-Wozniakowski方法的方法。

3
高效的三对角矩阵算法实现
我正在使用隐式数值方案解决物理问题。这导致我用三对角矩阵求解线性方程。我已经从Wikipedia 编写了此算法。我想知道是否有一个有效的库可以优化方式解决这类方程。一个重要的注意事项是,矩阵本身仅在系统参数发生变化时才会发生变化,因此我有机会对一些算法步骤进行了预先计算,以获得了不错的性能表现。我正在使用C ++。

1
将Runge-Kutta方法应用于二阶ODE
如何用Runge-Kutta第四阶代替Euler方法来确定自由落体运动的重力大小不是恒定的(例如,从地面10000 km处自由落体)? 到目前为止,我通过欧拉方法编写了简单的积分: 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 getMagintude() x += v * dt; time += dt; } rk4()函数体在哪里: inline double rk4(double tx, double tdt) …

3
测试两个12x12矩阵是否具有相同的行列式
给我一个对称的,可逆的,正定的和密集的12×1212×1212 \times 12矩阵QQQ我需要测试其中,J是全1矩阵。det(Q)=det(12I−Q−J)(1)det(Q)=det(12I−Q−J)(1)\det(Q) = \det(12I-Q-J) \; \; (1)JJJ 我目前正在使用armadillo库执行此操作,但事实证明它太慢了。问题是我需要对一万亿个矩阵执行此操作,事实证明,计算这两个行列式是我程序的瓶颈。因此,我有两个问题 给定我的大小,是否可以使用任何技巧更快地计算行列式?在这种情况下,是否可以对12×1212×1212 \times12矩阵进行混乱的扩展? 还有其他有效的方法来检验是否相等(1)(1)(1) 编辑。回答评论。我需要计算所有连接的13阶非自补图GGG,以使G和\ overline {G}具有相同数量的生成树。动机可以在此mathoverflow帖子中找到。对于机器,我正在8核3.4GHh机器上并行运行它。131313GGGG¯¯¯¯G¯\overline{G} 编辑。通过制作一个专门用于计算12×1212×1212 \times 12 × 12矩阵行列式的C程序,我能够将预期运行时间减少50%。仍然欢迎提出建议。

5
用于数值积分的C ++库(正交)
我有自己的数值积分(正交)子例程,它是Bulirsch&Stoer于1967年出版的ALGOL程序的C ++改编(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
在C / C ++中寻找Runge-Kutta八阶
我想在使用Windows机器以C ++编写的天体力学/天体动力学应用程序中使用Runge-Kutta 8阶方法(89)。因此,我想知道是否有人知道有文档记录且可以免费使用的好的库/实现?只要用C编写就可以了,只要不存在任何编译问题即可。 到目前为止,我已经找到了这个库(mymathlib)。该代码似乎还可以,但是我还没有找到有关许可的任何信息。 您能通过揭示一些您可能知道并且适合我的问题的替代方法来帮助我吗? 编辑: 我看到确实没有像我期望的那样有太多的C / C ++源代码。因此,Matlab / Octave版本也可以(仍然必须免费使用)。

1
在科学计算的背景下,C ++ 11 move语义会产生什么影响?
C ++ 11引入了移动语义,例如,在C ++ 03需要执行副本构造或副本分配的情况下,可以提高代码性能。该文章报道说,下面的代码与C + 11编译经历了5倍加速: vector<vector<int> > V; for(int k = 0; k < 100000; ++k) { vector<int> x(1000); V.push_back(x); } 在科学计算的背景下,C ++ 11 move语义会产生什么影响? 我对这个问题很感兴趣,但更具体地说,我对使用Boost库编写的有限元代码的移动语义也很感兴趣。我使用增强版1.47.0(因为增强版发行说明中提到了移动语义是在1.48.0中引入的)和增强版1.53.0 (使用增强版1.47.0)测试了自己的一些C ++ 03代码,但是我没有注意到太多改进。我想任何积蓄从不必为做复制建筑boost::numeric::ublas::vector/ matrix和boost::function不显着的,因为求解系统矩阵构成块体的工作量。 编辑:实际上,似乎只为移动语义实现了boost::function(请参见1.52.0版发行说明)。中没有提到移动语义boost::numeric,我将源代码拼凑起来以确保没有似乎右值引用。

3
如何在C ++中构建递归样条函数
目前,我正在研究一种称为基样条搭配的微分方程求解方法。我遇到的麻烦是建立一种建立任意阶样条的方法,关系为 ,初始条件 B 1 i(x)={ 1乙k + 1一世(x )= x − x一世Xķ + 我− x一世乙ķ一世+ xk + i + 1− xXk + i + 1− x我+ 1乙ķ一世+ 1( x )乙一世ķ+1个(X)=X-X一世Xķ+一世-X一世乙一世ķ+Xķ+一世+1个-XXķ+一世+1个-X一世+1个乙一世+1个ķ(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) ,我什至从这个问题开始就遇到了麻烦,因为它是递归的,可能是从“顶部”或“底部”开始的,并且我遇到了一般作家的事情,而我无法我围绕我需要做的事情。乙1个一世(x )= { 10对于 X一世≤ X < X我+ 1除此以外乙一世1个(X)={1个对于 X一世≤X<X一世+1个0除此以外B^1_i(x)=\begin{cases} 1 & \; \text{for } \; …
10 c++  b-spline 

3
周围是否有“轻量级”的FEM软件包?
基本上,FEM似乎是一个“已解决”的问题。现有许多强大的框架,例如Trilinos,PETSc,FEniCS,Libmesh或MOOSE。 它们的共同点是:它们非常“重”。首先,安装通常非常麻烦。其次,它们的接口/ API很繁琐-您必须将整个想法转化为相应库的思想。这也意味着很难满足特殊要求或现有代码的互操作性和可扩展性。 其他项目(例如随机示例)Boost,LibIGL,Aztec(线性求解器),Eigen或CGAL证明,绝对有可能编写功能强大的库,这些接口可以通过非常精简的界面无缝集成到C ++或Python代码中,而无需安装超重的框架。 FEM是否有真正轻巧的包装?我不是在寻找简单,自动的求解器-我是在寻找一个提供强大功能,同时保持精益接口,与常见数据结构(例如C ++ STL)互操作性以及轻量级安装(例如仅标题)的库。

1
三次特征值问题的Jacobi-Davidson方法的实现
我有一个很大的立方特征值问题: (一个0+ λ一个1个+λ2一个2+λ3一个3)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 ⎡⎣⎢−A0000I000I⎤⎦⎥⎡⎣⎢xyz⎤⎦⎥=λ⎡⎣⎢A1I0A20IA300⎤⎦⎥⎡⎣⎢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 & \mathbf{A}_2 & \mathbf{A}_3 \\ \mathbf{I} & …

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 ++代码,用于func()极限之间的一维数字积分(使用扩展的梯形规则)[ a ,b ][a,b][a,b] 使用 …

2
C ++库,用于非线性约束最小化
我目前正在尝试解决在matlab“ fmincon”函数中实现的非线性约束最小化问题。我的期望是,minimum(fun1,x0,uB,lB,fun2)其中x0是初始状态,fun1是需要最小化的函数,uB是上限,lB是下界,fun2是提供非线性相等向量的函数/不平等,如http://www.mathworks.com/help/optim/ug/fmincon.html中所述作为nonlcon函数。这些向量也通过迭代而改变(它们非线性地取决于x_n,解向量的第n次迭代)。在matlab实施中,它们的形式为c(x)<= 0。这是需要从matlab移植到c ++的最后一段代码,在尝试寻找包含该算法的合适c ++库时,我一直在费劲工作。这就是为什么我在这里寻求帮助的原因,如果您能提供您的专业知识,我将不胜感激。 什么我想要做的很好的例子,在这个页面上第一http://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-examples.html#f10960?s_tid=doc_12b唯一的区别就是我也需要边界... 提前致谢。 彼得

6
软问题:Python在哪里适合图片?
所以我一直在争论我是否应该去学习Python。与我的教授交谈后,就学术界而言,Matlab似乎是应用数学/计算科学中使用的通用语言。在工业界时,我的教授们(尤其是那些在工业界工作的人)说,学习c ++是最安全的方法。 我想听听你们在学术界和行业中的人,我是否应该打扰Python,或者只是暂时擅长于我所知道的(MATLAB和C ++)。 更新:杰夫提出了一个很好的观点,我可能应该提出更多细节: 去年,我目前是本科生,攻读计算专业的数学。我想去读研究生,继续研究(我从未见过自己喜欢教书)或在实验室工作。两者都是理想的。至于研究领域,可能涉及数值分析或概率论。万一计划A不能奏效,我会愿意在工业界工作,只要为自己为工业做准备不会花太多时间上学。因此,我认为我应该学习行业中通用的语言,作为备份。但这也是为什么我感到矛盾。我无法学习每种语言,也无法为每种可能性做好准备,因为这会花费太多时间。
9 matlab  python  c++ 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.