으로 복잡한 매트릭스를 매핑 I 다음의 행렬이 있습니다은 아이겐
int N = 3;
complex<double>* complexvector = new complex<double>[N];
for(int i=0; i<N; i++)
{
complexvector[i]=complex<double>(i+1,i+1);
}
complex<double>** complexMatrix = new complex<double>*[N];
for(int i=0; i<N; i++)
{
complexMatrix[i] = new complex<double>[N];// allocate an array to each pointer
}
complexMatrix[0][0] = complex<double>(1,1);
complexMatrix[0][1] = complex<double>(2,2);
complexMatrix[0][2] = complex<double>(3,3);
complexMatrix[1][0] = complex<double>(4,4);
complexMatrix[1][1] = complex<double>(5,5);
complexMatrix[1][2] = complex<double>(6,6);
complexMatrix[2][0] = complex<double>(7,7);
complexMatrix[2][1] = complex<double>(8,8);
complexMatrix[2][2] = complex<double>(9,9);
complex<double>* returnvector = new complex<double>[N];
returnvector = preformcholesky(complexMatrix, complexvector, N);
을 그리고 난 여기에 콜레을 수행
이complex<double>* preformcholesky(complex<double>** matrix, complex<double>* vector,
int size)
{
std::cout << "start cholesky" << std::endl;
Map<MatrixXcd, RowMajor> mat(*matrix,size,size);
Map<VectorXcd> vec(vector,size);
printMatrix(matrix,size);
std::cout << "mat" << mat << std::endl;
std::cout << "vec" << vec << std::endl;
//mat.llt();
VectorXcd x = mat.llt().solve(vec);
std::cout << "coeff" << x << std::endl;
return x.data();
}
는 "매트"을 인쇄 할 때 문제가, 그것은 다음과 같이 간다 :
mat (1,1) (0,3.21143e-322) (6,6)
(2,2) (4,4) (0,3.21143e-322)
(3,3) (5,5) (7,7)
여기서 (0,3.21143e-322)는 어디에서 왔습니까? "매트릭스"를 인쇄하면 OK입니다. 그래서지도가 잘못되었다고 생각합니다. 더 많은 코드가 필요하면 알려주세요. 나는 Eigen을 처음 접했고 어쩌면 몇 가지 기본적인 실수를했을 것이다. 나는 C++과 리눅스를 사용하고있다.
그들은 0에 가까워지는 부동 소수점 인 것처럼 보이는데, 이는 일부 수치 알고리즘에서 자주 발생합니다. 예 : 문턱 값은 0 점에 대한 독자적인 해석을 갖습니다. – keyser
아직지도 알고리즘에서 MatrixXcd로 변환 한 알고리즘이 없습니다. – user1876942
좋은 지적. 그 생성자가 어떻게 행렬 데이터를 만드는 지보십시오. – keyser