私は、Matlabのmex
関数による固有解を使って線形代数方程式Ax = b
を解くことに取り組んでいます。 Matlabワークスペースからの複雑な疎な行列Aと疎ベクトルbが与えられているので、行列AとベクトルbをEigen sparse行列形式でマップしたいと思います。その後、私はそれを解決するためにEigenの線形方程式ソルバーを使用する必要があります。最後に、結果xをMatlabワークスペースに転送する必要があります。MATLABワークスペースからEigenの複雑な疎行列をマッピングする
しかし、私はC++でよくなく、Eigenにも慣れていないからです。私は最初のステップで固執しています。つまり、Eigen acceptedフォーマットで複雑な疎行列を構築します。
私は
Eigen::MappedSparseMatrix<double,RowMajor> mat(rows, cols, nnz, row_ptr, col_index, values);
、固有の以下の機能があります発見したと私は、上記の「行、colsのための情報を取得するためにこれらのMEX機能などmxGetPr、mxGetPi、mxGetIr、mxGetJcを、使用することができます、nnz、row_ptr、col_index、values "を参照してください。しかし、私の場合、行列Aは複雑な疎行列であるため、 "MappedSparseMatrix"がそれを行うことができるかどうかはわかりません。
できる場合は、「MappedSparseMatrix」の形式はどのようにする必要がありますか?次は正しいですか?
Eigen::MappedSparseMatrix<std::complex<double>> mat(rows, cols, nnz, row_ptr, col_index, values_complex);
もしそうなら、values_complexをどのように構築すればよいですか? 私は前にrelevant topicを見つけました。私は複雑な密行列を得るために次のコードを使うことができます。
MatrixXcd mat(m,n);
mat.real() = Map<MatrixXd>(realData,m,n);
mat.imag() = Map<MatrixXd>(imagData,m,n);
私の行列Aがスパース行列であるので、しかし、私が次のような複雑な疎行列としてマットを定義した場合、それはエラーが生成されますようだ:
SparseMatrix<std::complex<double> > mat;
mat.real() = Map<SparseMatrix>(rows, cols, nnz, row_ptr, col_index, realData);
mat.imag() = Map<SparseMatrix>(rows, cols, nnz, row_ptr, col_index, imagData);
だから、誰もがいくつかを提供することができますそれのアドバイス?