부스트의 ublas 부분을 사용하려고하는데 어떤 이유로 행렬을 곱해서 다른 행렬에 결과를 할당 할 수 없습니다.부스트 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
어떻게 행렬을 곱하고 결과를 할당합니까?
나는 무슨 일이 일어나고 있는지 완전히 이해하지 못하고 있지만 몇 가지 발견했습니다. Symatrix typedef를 symmetric_matrix 및 int 행렬의 double 유형으로 변경하면 코드가 작동합니다. 그래서 prod 함수가 반환 유형을 좋아하는 것으로 보입니다. –