2011-05-02 3 views
2

부스트의 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 

어떻게 행렬을 곱하고 결과를 할당합니까?

+0

나는 무슨 일이 일어나고 있는지 완전히 이해하지 못하고 있지만 몇 가지 발견했습니다. Symatrix typedef를 symmetric_matrix 및 int 행렬의 double 유형으로 변경하면 코드가 작동합니다. 그래서 prod 함수가 반환 유형을 좋아하는 것으로 보입니다. –

답변

2

두 개의 대칭 행렬을 곱하면 항상 대칭 행렬을 얻게됩니다. not guaranteed입니다. 따라서이 오류는 관련이있을 수 있습니다. 비록 내가 여러분의 형식을 symmetric_matrix 형식으로 double로 변경할 때 코드가 왜 작동하는지 전혀 알지 못합니다.

+0

그게 문제 일 수 있습니다. 그것은 수치 스럽지만, 대칭 행렬의 제곱이 대칭이기도합니다. 어쨌든, 나는 일반 매트릭스 타입을 사용해야한다. :( –

관련 문제