問題タブ [eigen3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
358 参照

c++ - c++: Eigen 定義の行列を関数に渡し、それらを使用する - ベスト プラクティス

かなり大きな行列 (Eigen を使用して作成したもの) を渡す必要がある関数があります。範囲は 200x200 -> 1000x1000 です。関数はこれよりも複雑ですが、基本的な機能は次のとおりです。

mTestに等しく設定すると、配列用にRAMで使用可能なスペースを見つけるのに時間がかかるため、より大きなサイズのマトリックスで実行するのにはるかに時間がかかる理由はありますか? まばらな配列に切り替えると、これはかなり高速になるようです。

大きな行列を渡す必要があり、実行時の行列サイズの増分効果を最小限に抑えたい場合、ここでのベスト プラクティスは何ですか? 現時点では、同じプログラムの実行速度が C++ の方が Matlab よりも遅いため、明らかに速度を上げたいと考えています。

一番、

ベン

0 投票する
4 に答える
1005 参照

c++ - 行列積の Cholesky で Eigen と C++11 の型推論が失敗する

Eigen と C++11 の "auto" 型を使用して、行列の積をその転置でコレスキー分解しようとしています。私がやろうとすると問題が発生します

XCode 6.1、Eigen 3.2.2 を使用しています。私が得る型エラーはhereです。

この最小限の例は、私のマシンの問題を示しています。の型をcからautoに変更して、動作するMatrixXdことを確認します。

まだ自動を使用している間にこれを機能させる方法はありますか?

副次的な質問として、行列がMatrixXd各段階で a であると主張しないパフォーマンス上の理由はありますか? auto を使用すると、Eigen は、それが空想する奇妙なテンプレート表現として答えを保持することができます。MatrixXd と入力すると問題が発生するかどうかはわかりません。

0 投票する
1 に答える
72 参照

c++ - ライブラリ アダプタのパフォーマンスの低下

Eigen3 線形代数ライブラリをラップして、その構文がよりクリーンになるようにしています。ただし、最初のステップとして、(+= オーバーロードを介して) + 演算子のオーバーロードを作成すると、ラッパーのパフォーマンスがすぐに 3 倍低下します。問題が発生した場所と修正方法について、いくつかの洞察を提供していただけますか? ありがとう。

0 投票する
1 に答える
2038 参照

c++ - Eigen's Conjugate Gradient vs SimplicialLLT for Poisson Equation

I am using finite differences for a square 100x100 domain (with neumann bcs on all sides) in c++ using Eigen's sparse matrix functionality, and built in solvers to compute x in Ax=b.

I have tried the following solvers, but am getting very different time results to what I expect from reading the documentation in http://eigen.tuxfamily.org/dox-devel/group__TopicSparseSystems.html which gives typical timescales for different solvers. In particular, the documentation suggests that conjugate gradients should be one of the fastest ways of solving this system, giving a timescale of 0.239 seconds for solving Poisson SPD with a size bigger than my system. By contrast this documentation suggests that SimplicialLLT should take roughly 3X as long.

When I run each of the solvers I am obtaining the following: - Conjugate gradients: 25 seconds - LLT: 0.35 seconds

I was wondering whether anyone could help me understand why there is two orders of magnitude between these two solvers, and in particular, why CG seems to be being beaten by LLT, in contrast to the literature? Also, if anyone else has an idea how I could substantially speed up the solvers by using different methods from other packages, then suggestions are welcome!

I am implementing the solvers by the following:

Here A is that of a finite difference Laplacian, and b is a vector of point sources of the field.

Thanks!

Ben

0 投票する
1 に答える
276 参照

c++ - ブロックと式には const 値エラーが必要です

マトリックスAのブロックからマトリックスBを作成したいと思います.Aのサイズが変わるので、次のことを達成しようとしています

ここで、N は A の列番号です。このエラーが発生しthe expression must have constant value.ます。この問題を解決するにはどうすればよいですか? 私は使用しようとしましconst_cast<>たが、それでも同じ問題が発生します。

0 投票する
0 に答える
730 参照

c++11 - CGAL凸包と固有値

凸包を構築するために、自分自身のデータを CGAL で使用するにはどうすればよいですか。特に、タイプを使用して、CGALクラスにEigen3すべてをコピーせずに、CGALが直接使用できるようにラップしたいと思いますか?Eigen3 Vector2dPoint_2

固有型はすべてメンバー関数を持っています.x() , .y(), .z()

誰かがこれを達成する方法を紹介できますか?カーネル拡張チュートリアルは非常に理解しにくいです....

更新
これまでに、Eigen::Matrix(ポインターまたはEigen::Refクラス) への参照を格納し、2x1 ベクトルである列を反復処理するカスタム イテレーターを思いつきました。これはパズルの一部にすぎません: 第二に、単純に typedef Point_2asEigen::Vector2dを使用し、カーネル拡張チュートリアル (上記を参照) を使用することができましたが、パズル全体をまとめる方法がまだわかりませんでした。(コードは明日載せます)

0 投票する
1 に答える
146 参照

c++ - Eigen3 または他の行列ライブラリの 2D 行列は、共有メモリを介して異なるプロセスから更新できますか?

eigen3 でこのプログラムに相当するものは何ですか? 別のプロセスから共有メモリ マトリックスを読み書きできるようにしてから、マトリックスの固有値を取得できるようにする必要があります。Eigen3 は OpenMP を利用できるようですが、明確な例は見つかりませんでした。

サーバ:

クライアント

0 投票する
0 に答える
229 参照

c++ - 非スカラー (ブロック) 行列の Eigen3 カスタマイズ

ブロック行列代数のライブラリが必要です。ブロック行列は、密行列 (ブロック) への参照 (ポインターまたはラッパー/インターフェイス) のみを格納する疎行列です。ブロックのサイズ (行と列) は可変です。できれば遅延評価を使用して、これらのブロック行列に対して代数を定義したいと思います。基本的に、次のようなものが必要です。

また

私の現在のアプローチは、次を使用することです。

しかし、ブロックの存続期間を処理するクラスが必要です。Eigen::MatrixXd*また、バックグラウンドでの暗黙的なキャストにあまり満足していませんlong-それが起こっていると思います。

Eigenカスタマイズの説明に基づくと、これが実現可能かどうかは明確ではありません。Eigen::SparseMatrixBase は非スカラー型を優先しません。

質問: Eigen を問題へのアプローチと見なす必要がありますか? はいの場合、非スカラー行列要素型の問題を回避するにはどうすればよいですか?

どんなコメントでも大歓迎です!