2016-02-26 89 views
4

我學會了如何使用Eigen找到矩陣的逆矩陣。但是,當我發現一個數組,它是的功能的輸出I得到一個錯誤使用特徵矩陣的逆

會員在「X」,「逆」,這是無級的請求類型的逆 「雙**」

請幫助我,在使用C++庫來查找矩陣的逆。

我寫的代碼是:

#include <iostream> 
#include <armadillo> 
#include <cmath> 
#include <Eigen/Dense> 

using namespace std; 
using namespace arma; 
using namespace Eigen; 

int main() 
{ 
    vec a; 
    double ** x; 

    double ** inv_x; 
    a <<0 << 1 << 2 << 3 << 4; //input vector to function 
    double ** f (vec a); //function declaration 

    x= f(a); // function call 

    //inv_x=inv(x); 

    cout << "The inverse of x is:\n" << x.inverse() << endl; // eigen command to find inverse 
    return 0; 
} 

// function definition 
double ** f(vec a) 
{ 
    double ** b = 0; 
    int h=5; 

    for(int i1=0;i1<h;i1++) 
    { 
     b[i1] = new double[h]; 
     { 
      b[i1][0]=1; 
      b[i1][1]=a[i1]; 
      b[i1][2]=a[i1]*a[i1]+1/12; 
      b[i1][3]=pow(a[i1],3)+a[i1]/4; 
      b[i1][4]=1/80+pow(a[i1],2)/2+pow(a[i1],4); 
     } 

    } 
    return b; 
} 

這裏用戶定義函數f返回數組x。我試圖使用特徵庫找到x的逆。

+1

這將是因爲它是一個雙**,而不是一個特徵矩陣? – immibis

+0

@immibis先生我想使用特徵庫找到一個矩陣逆,而不使用「特徵」矩陣聲明語法,例如「Matrix3f」等。 –

+0

@ArunGovindNeelanA我不確定它是直接可能的,Eigen使用它自己的類型。 – Zermingore

回答

3

首先,如Martin Bonner所述,不要使用double **來存儲矩陣,但要確保係數是按順序存儲的。

然後,您可以使用Eigen::Map類將原始緩衝區視爲特徵的對象,如記錄there。例如:

double data[2][2]; 
Eigen::Map<Matrix<double,2,2,RowMajor> > mat(data[0]); 
mat = mat.inverse(); 
+0

謝謝! @ggael –