나는 Eigen의 희소 행렬 기능을 사용하는 C++의 정사각형 100x100 도메인 (모든면에 neumann bcs 포함)에 유한 차분을 사용하고 Ax = b에서 x를 계산하는 솔버로 작성했습니다.Eigen의 공액 기울기 대 Poplon 방정식의 SimplicialLLT 방정식
다음 솔버를 시도했지만 다른 솔버의 일반적인 시간 계를 제공하는 http://eigen.tuxfamily.org/dox-devel/group__TopicSparseSystems.html의 설명서를 읽는 것으로 예상되는 결과가 매우 다른 시간대로 바뀌고 있습니다. 특히, 공액 그라디언트는이 시스템을 푸는 가장 빠른 방법 중 하나 여야하며, 시스템보다 큰 크기의 푸 아송 SPD를 풀 때 0.239 초의 시간을 주어야합니다. 대조적으로이 문서는 SimplicialLLT가 대략 3X 정도 걸릴 것이라고 제안합니다.
나는 다음 획득하고있는 해법의 각 실행하면 : - 어원이 그라디언트 25 초 - LLT : 0.35 초
을 나는 2 차의 크기가 왜 사람이 나를 이해하는 데 도움이 수 있는지 궁금이 두 솔버 사이에서, 특히 문학과는 대조적으로 CG가 LLT에 맞았던 이유는 무엇입니까? 또한, 다른 사람들이 다른 패키지의 다른 메소드를 사용하여 솔버의 속도를 상당히 높일 수있는 아이디어가 있다면 제안을 환영합니다!
다음//Conjugate gradients
ConjugateGradient<SparseMatrix<double> > cg;
cg.compute(A);
MatrixXd vGDNF = cg.solve(b);
//SimplicialLLT
SimplicialLLT<SparseMatrix<double>> solver;
MatrixXd vGDNF = solver.compute(A).solve(b);
A는 유한 차분 라플라스의를하고, B는 필드의 점 오염원의 벡터입니다 :
나는 다음으로 해법을 구현하고있다.
감사합니다. 이 문서에 벤
감사합니다. 대단히 감사합니다. – ben18785