Вам действительно нужно показать это как MCVE .Если бы вы смоделировали это немного больше, ваш результат мог бы быть следующим:
#include <Eigen/Core>
#include <Eigen/Sparse>
using namespace Eigen;
int main()
{
int truncatedSize = 50;
SparseMatrix<double> A(truncatedSize, truncatedSize);
// We have no idea what TruncatedGlMatrix or TruncatedForce are...
// for (int i = 0; i < truncatedSize; i++)
// {
// for (int j = 0; j < truncatedSize; j++)
// {
// A.insert(i, j) = TruncatedGlMatrix[i][j];
// }
// }
VectorXf V(truncatedSize);
// for (int i = 0; i < truncatedSize; i++)
// {
// V(i) = TruncatedForce[i][1];
// }
// solve Ax = b
ConjugateGradient<SparseMatrix<double>, Lower | Upper> cg;
cg.compute(A);
VectorXf xa(truncatedSize);
xa = cg.solve(V);
return 0;
}
Я получаю от вас другую ошибку, но это может быть потому, что мне пришлось добавить некоторые догадки относительно того, что вына самом деле смотрите.В приведенном выше коде проблема заключается в том, что вы смешиваете скалярные типы double
и float
.А именно,
xa = cg.solve(V);
xa
и V
являются векторами float
с, в то время как cg
и A
имеют double
в качестве скалярного типа.Вы должны явно привести между ними, так что замена этой строки на
xa = cg.solve(V.cast<double>()).cast<float>();
решит проблему, с которой сталкивается мой MCVE (которая также может быть вашей проблемой, я не знаю достаточно, чтобы сказать).