2016-09-25 9 views
0

のは、私は一定である4つの行列、および変数である1人の行列があるとしましょう:再利用固有式テンプレート

Eigen::MatrixXf M,N,O,P; // Fixed

Eigen::MatrixXf Q; // Value changes

をそして私は評価したい式を持っている:

auto myExpression = M*N*O*P*Q;

私は、次の操作を実行した場合:

for (int i = 0; i<5; ++i) {

Q = MatrixXf::Random(SomeSize,SomeSize);

MatrixXf result = myExpression.eval();

}

予想通り、この作品は、でしょうか? Qの新しい値から正しい結果が得られますか?それらはすぐに評価されるため

auto expr = M.lu().solve(O+P)+N*Q; 

がアイゲン3.2では、あなたはほかに行列積と注意する必要があります:あなたの式のような行列分解を伴わない場合は、固有3.3では

+0

3.3で動作するという事実から独立していますが、意図的にあなたのコードを難読化し、Eigen 3.2と互換性がないようにしたい場合を除き、悪い考えです... – chtz

答えて

1

は、答えは...はいあります。

+0

ありがとう。好奇心から疎な行列にも同じことが当てはまりますか? – NOP

+0

@NOP:3.3では、これはまばらなスパースまたは混雑した疎の製品の場合にも当てはまります。これを悪用するのは良い考えではないことに注意してください。一般的に、あなたが何をしているのか分かっている場合は、式テンプレートのみを保存してください。 – chtz

関連する問題