2017-03-07 108 views
0

現在我想用C++ Boost來求解矩陣函數:A * P = X,P = A \ X。我有矩陣A和矩陣X,所以我需要做P = A \ X來得到矩陣P.這是一個矩陣劃分問題,對嗎?使用C++ Boost的矩陣分割

我的C++代碼是

#include "stdafx.h" 
#include <boost\mat2cpp-20130725/mat2cpp.hpp> 
#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/matrix_proxy.hpp> 
#include <boost/numeric/ublas/io.hpp> 
using namespace boost::numeric::ublas; 
using namespace std; 

int main() { 
    using namespace mat2cpp; 
    matrix<double> x(2,2); // initialize a matrix 
    x(0, 0) = 1; // assign value 
    x(1, 1) = 1; 
    matrix<double> y(2, 1); 
    y(0, 0) = 1; 
    y(1, 0) = 1; 

    size_t rank; 
    matrix<double> z = matrix_div(x, y, rank); 
} 

但它有錯誤Error figure,請幫幫我!謝謝!

+0

可能重複[什麼是未定義的引用/無法解析的外部符號錯誤,以及如何解決它?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved- external-symbol-error-and-how-do-i-fix) –

+0

我在我的Boost發行版(1.63)中找不到'boost \ mat2cpp-20130725/mat2cpp.hpp'。你使用什麼版本? – TobiMcNamobi

+0

Google發現三(3)頁字符串爲「mat2cpp-20130725」。其中之一就是這個問題。另外兩個表明這個目錄不是提升的一部分。 –

回答

1

首先,沒有像矩陣分割這樣的事情。如果你有這個方程A * P = X並且你想找到P,那麼解決方案是:inv(A)* A * P = inv(A)* X,其中inv(A)是A矩陣的逆矩陣。因爲我們知道inv(A)* A等於單位矩陣,所以我們可以得出結論:P = inv(A)* X.

現在你的問題是計算A矩陣的逆。有幾種方法可以做到這一點,我的建議是使用LU分解。

老實說,我不知道增強庫是否有mat2cpp這樣的東西。如果你想使用提升,我會建議使用boost/numeric/ublas/matrix.hpp

+0

很好的答案。我想添加「計算逆* ...如果它存在*」。除了[uBLAS](http://www.boost.org/doc/libs/1_63_0/libs/numeric/ublas/doc/index.html)之外,Boost還包含名爲[QVM]的庫(http:// www .boost.org/doc/libs/1_63_0/libs/qvm/doc/index.html),我最近使用它來計算(小)矩陣的逆。 – TobiMcNamobi