2011-05-02 113 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更改爲double類型symmetric_matrix和int matrix,則您的代碼可以正常工作。所以看起來prod函數確實像你的返回類型。 – 2011-05-02 18:47:06

回答

2

您是not guaranteed當您乘以兩個對稱矩陣時始終得到對稱矩陣。所以這個錯誤可能與此有關,儘管我不知道爲什麼代碼工作時,我將您的類型更改爲symmetric_matrix類型爲double。

+0

這可能是問題所在。這是一個恥辱,因爲對稱矩陣的平方也是對稱的。無論如何,我應該使用一般矩陣類型。 :( – 2011-05-03 00:37:16