タグ付けされた質問 「c++」

強力なオブジェクト指向プログラミング言語。

2
LAPACKとBLASを使用して
既存のコードをMATLABからC ++に移植しており、を解決する線形システムを持っています(より一般的な形式A x = bではなく)xA=bxA=bxA=bAx=bAx=bAx=b 行列は高密度で一般的な形式ですが、1000x1000以下です。そのため、MATLABでは、解は関数またはスラッシュ表記法で見つかりますAAAmrdivide(b,A)x = b/A; BLASおよびLAPACKルーチンを使用して、C ++コードでこれを解決するにはどうすればよいですか? 私は、LAPACKルーチンに精通していDGESV解きするために、X。Ax=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、転置操作を使用して最終形式を解きます。(Aを転置するコストとシステムを解決するコスト)ATATA^TAAA より効率的なアプローチや他の方法でより良いアプローチがありますか? BOOST uBLASライブラリからのBLAS実装だけでなく、LAPACKライ​​ブラリルーチンへのバインドと同様に、マトリックスクラスとベクトルクラスを使用しています。私はこのセットアップを他の操作に正常に使用してきましたが、これらのライブラリに限定されたソリューションを見つけたいと思っています。 また、コードのセットアップ中にこのタイプの操作を実行するのは数回だけなので、パフォーマンスは重要な問題ではありません。 たぶん、このMATLABのドキュメント上には、mrdivide他人のために有用です。

3
Blaze線形代数ライブラリ?
SIAM Journal of Scientific Computingの論文「Expression Templates Revisited:A Performance Analysis of Current Methodologies」は、「Blaze」線形代数ライブラリを参照しています。私はそれについて聞いたことがなく、オンラインの参照を見つけることができないようです。(明らかなグーグル検索は上記の論文を返している。) それでは、このライブラリとは何であり、どこで詳細について学ぶことができますか?

1
C ++でのMathematicaのQuasiMonteCarlo統合の置き換え
QuasiMonteCarloメソッドを使用して3次元または4次元で積分を実行するMathematicaプログラムがあります。問題は、これらの計算の一部がHPCクラスターで利用可能な最大ジョブ時間で完了できない点まで、実行するのに非常に長い時間がかかることです。だから私はプログラムをC ++で書き直すことを考えています。 GSLのドキュメントを見て、準ランダムシーケンスと通常のMC統合に関するセクションはありますが、それらをまとめるものは見当たりません。また、1つか2つのGoogle検索では、広く信頼されている実装のように見えるものは何も見つかりませんでした。C ++でのQMC統合の十分にテストされた実装のオプションは何ですか? 一貫性を保つために、Mathematicaが実装するHalton-Hammersley-Wozniakowskiメソッドに近いものを使用することをお勧めします(オプションの場合)。

3
効率的な三重対角行列アルゴリズムの実装
暗黙的な数値スキームを使用して物理的な問題を解決しています。これは、三重対角行列を持つ線形方程式を解くことにつながります。私はウィキペディアからこのアルゴリズムをコーディングしました。このタイプの方程式を最適化された方法で解くことができる効率的なライブラリがあるのだろうか。重要な注意点は、システムパラメーターが変更されたときにのみマトリックス自体が変更されることです。そのため、素晴らしいパフォーマンスボーナスを得るために、いくつかのアルゴリズムステップを事前に計算する機会がありました。C ++を使用しています。

1
Runge-Kuttaメソッドを2次ODEに適用する
オイラー法をルンゲ・クッタの4次に置き換えて、一定の重力ではない自由落下運動(たとえば、地上1万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
2つの12x12行列の行列式が同じかどうかのテスト
12×1212×1212 \times 12QQQJdet(Q)=det(12I−Q−J)(1)det(Q)=det(12I−Q−J)(1)\det(Q) = \det(12I-Q-J) \; \; (1)JJJ 現在、armadilloライブラリでこれを行っていますが、遅すぎることがわかりました。事は、私は何兆もの行列に対してこれを行う必要があるということであり、2つの行列式を計算することが私のプログラムのボトルネックであることがわかりました。したがって、2つの質問があります サイズを知っていれば、行列式をより速く計算するために使用できるトリックはありますか?この場合に機能する可能性のある12×1212×1212 \times12行列の乱雑な展開でしょうか? 同等性をテストする他の効率的な方法はありますか(1)(1)(1) 編集。コメントに答えるため。私はすべての接続された非自己相補的なグラフを計算する必要GGGための131313ようにGGG及びG¯¯¯¯G¯\overline{G}スパニングツリーの同じ数を有しています。この理由は、このmathoverflowの投稿にあります。マシンについては、8コア3.4GHhマシンで並行して実行しています。 編集。12×1212×1212 \times 12行列の行列式を具体的に計算するCプログラムを作成することで、予想される実行時間を50%短縮することができました。提案はまだ歓迎されています。

4
C / C ++でルンゲクッタ8次を探しています
Windowsマシンを使用して、C ++で記述された天体力学/宇宙力学アプリケーションでルンゲクッタ8次法(89)を使用したいと思います。したがって、誰もが文書化されて自由に使用できる優れたライブラリ/実装を知っているのでしょうか?予想されるコンパイルの問題がない限り、Cで記述されていても問題ありません。 これまでのところ、このライブラリ(mymathlib)を見つけました。コードは問題ないようですが、ライセンスに関する情報は見つかりませんでした。 あなたが知っている可能性があり、私の問題に適した選択肢のいくつかを明らかにすることで私を助けてくれますか? 編集: 私が思ったほど多くのC / C ++ソースコードが利用できないことがわかります。したがって、Matlab / Octaveバージョンも問題ありません(まだ自由に使用できる必要があります)。

1
科学計算のコンテキストでC ++ 11移動セマンティクスの影響は何ですか?
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移動セマンティクスの影響は何ですか? この質問は一般的な質問に興味がありますが、具体的には、Boostライブラリを使用して記述された有限要素コードの移動セマンティクスにも興味があります。ブーストバージョン1.47.0(ブーストリリースノートには移動のセマンティクスが1.48.0で導入されていると記載されているため)とブーストバージョン1.53.0 を使用して、独自のC ++ 03コードの一部をテストしましたが、あまり改善されていません。システムマトリックスの解決はワークロードの大部分を構成するため、boost::numeric::ublas::vector/のコピー構築を行わなくても済むことによる節約は目立たないmatrixと思いますboost::function。 編集:実際には、移動のセマンティクスが実装されているように見えますboost::function(バージョン1.52.0リリースノートを参照)。には移動のセマンティクスについての言及はありません。boost::numericソースを確認して確認し、右辺値の参照がないようです。

3
C ++で再帰的スプライン関数を作成する方法
現在、私は基底スプライン選点と呼ばれる微分方程式解法に取り組んでいます。私が問題を抱えているのは、という関係で、任意次数のスプラインを作成するメソッドを作成することです と初期条件 そして、この問題は「上部」または「下部」のどちらからでも再帰的に開始される可能性があるため、この問題から始めても問題があり、一般的なライターブロックタイプに遭遇しています何が必要なのか気になっていないところです。B 1 i(x)={ 1Bk + 1私(x )= x − x私バツk + i− x私Bk私+ xk + i + 1− xバツk + i + 1− xi + 1Bki + 1(x )B私k+1(バツ)=バツ−バツ私バツk+私−バツ私B私k+バツk+私+1−バツバツk+私+1−バツ私+1B私+1k(バツ) 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ために バツ私≤ X < Xi + 1そうでなければB私1(バツ)={1ために バツ私≤バツ<バツ私+10そうでなければB^1_i(x)=\begin{cases} 1 & \; \text{for …
10 c++  b-spline 

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 

3
「軽量」のFEMパッケージはありますか?
基本的に、FEMはかなり「解決」された問題のようです。Trilinos、PETSc、FEniCS、Libmesh、MOOSEなど、数多くの強力なフレームワークが存在します。 彼らが共通していることの1つは、それらが非常に「重い」ことです。まず、インストールは通常非常に骨の折れる作業です。第二に、それらのインターフェース/ APIは分厚くて重いです-あなたはあなたの考え全体をそれぞれのライブラリの考えに翻訳しなければなりません。これは、特別な要件や既存のコードの相互運用性と拡張性が困難であることも意味します。 (ランダムな例)Boost、LibIGL、Aztec(線形ソルバー)、Eigen、またはCGALなどの他のプロジェクトは、C ++またはPythonコードにシームレスに統合する強力なライブラリーを、非常に無駄のないクリーンなインターフェースで、インストールの必要なしに作成することが絶対に可能であることを示しています超重いフレームワークの。 FEM用の本当に軽量なパッケージはありますか?簡単なオートマジックソルバーを探しているのではありません-無駄のないインターフェース、一般的なデータ構造(たとえばC ++ STLなど)との相互運用性、および軽量のインストール(たとえばヘッダーのみ)を維持しながら強力な機能を提供するライブラリを探しています。

1
3次固有値問題に対するJacobi-Davidson法の実装
私は大きな三次固有値問題を抱えています: (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 ⎡⎣⎢−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} & 0 & …

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; } 上記は、拡張された台形規則を使用して、台形を使用しfunc()制限間の1D数値積分の私のC ++コードです。[a,b][a,b][a,b]N−1N−1N-1 私は実際に3D統合を行っています。このコードは再帰的に呼び出されます。私は作業して、適切な結果を出しています。N=50N=50N = 50 さらに減らす以外に、上記のコードを最適化してより速く実行する方法を提案できる人はいますか?または、より速い統合方法を提案できますか?NNN

2
非線形制約付き最小化のためのC ++ライブラリ
現在、MATLABの「fmincon」関数に実装されている非線形制約付き最小化問題を解決しようとしています。私の期待は、minimize(fun1、x0、uB、lB、fun2)です。ここで、x0は初期状態、fun1は最小化する必要がある関数、uBは上限、lBは下限、fun2は非線形等式のベクトルを提供する関数です。 /不等式に記載されているようにhttp://www.mathworks.com/help/optim/ug/fmincon.htmlnonlcon関数として。これらのベクトルも反復によって変化します(これらは、解ベクトルのn番目の反復であるx_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++ 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.