web-dev-qa-db-ja.com

固有値を使用した逆行列

Eigen を使用して、行列の逆行列を見つける方法を学びました。しかし、関数の出力である配列の逆を見つけたとき、エラーが発生しました

非クラスタイプ「double **」である「x」のメンバー「inverse」のリクエスト

行列の逆行列を見つけるために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を返します。 eigenライブラリを使用してxの逆を見つけようとしています。

7
AGN

まず、Martin Bonnerが述べたように、行列を格納するためにdouble **を使用しないでください。ただし、係数が順番に格納されていることを確認してください。

次に、Eigen::Mapクラスを使用して、文書化されているように、生のバッファーをEigenのオブジェクトとして表示できます そこに 。例えば:

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