저는 Matlab의 mex
함수를 통한 고유 해법을 사용하여 선형 대수 방정식 Ax = b
을 풀기 위해 작업 중입니다. 복잡한 희소 행렬 A와 Matlab 작업 공간의 희소 벡터 b가 주어지면 Eigen sparse 행렬 형식으로 행렬 A와 벡터 B를 매핑하려고합니다. 그 후, 나는 그것을 해결하기 위해 Eigen의 선형 방정식 해석을 사용해야합니다. 결국 Matlab 작업 공간으로 결과 x를 전송해야합니다.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에 대해 알아 냈습니다. 다음 코드를 사용하여 복잡한 밀도 매트릭스를 얻을 수 있습니다.
이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);
그래서 사람이 몇 가지를 제공 할 수 있습니다 내 행렬 A가 희소 행렬이기 때문에
MatrixXcd mat(m,n);
mat.real() = Map<MatrixXd>(realData,m,n);
mat.imag() = Map<MatrixXd>(imagData,m,n);
그러나, 나는 다음과 같은 복잡한 희소 행렬로 매트를 정의 할 경우 오류가 발생합니다 보인다 그 충고? 두 개의 별도의 버퍼에