2

Boostのublas部分を使用しようとしていますが、何らかの理由で行列を乗算してその結果を他の行列に割り当てることができません。

これは機能します:

#include <boost/numeric/ublas/symmetric.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace boost::numeric::ublas;

typedef symmetric_matrix<int,lower> symatrix;

int main() {
  int N = 10;
  symatrix foo(N,N);
  for (int i = 0; i < N; i++)
    for(int j = 0; j <= i; j++) {
      foo(i,j) = i - j + 1;
    }
  symatrix goo(foo);
  //goo = prod(foo,foo);
  std::cout << prod(foo,foo)<< std::endl;

}

しかし、私がその行のコメントを外しgoo = prod(foo,foo);たり、次のようなことを試みたりした場合:

symatrix goo = prod(foo,foo);

解読できないランタイムエラーが発生します。

Check failed in file /usr/include/boost/numeric/ublas/detail/matrix_assign.hpp at line 761:
detail::expression_type_check (m, cm)
terminate called after throwing an instance of 'boost::numeric::ublas::external_logic'
  what():  external logic
Aborted

行列を乗算して結果を割り当てるにはどうすればよいですか?

4

1 に答える 1

2

2つの対称行列を乗算するときに、常に対称行列が返されるとは限りません。したがって、このエラーはそれに関連している可能性がありますが、タイプをsymmetric_matrixタイプからdoubleに変更したときにコードが機能する理由はわかりません。

于 2011-05-02T18:38:12.577 に答える