我目前正在研究C++中的流体模拟,算法的一部分是求解稀疏线性方程组。人们建议为此使用Eigen图书馆。我决定用我写的这个简短的程序来测试它:
#include <Eigen/SparseCholesky>
#include <vector>
#include <iostream>
int main() {
std::vector<Eigen::Triplet<double>> triplets;
triplets.push_back(Eigen::Triplet<double>(0, 0, 1));
triplets.push_back(Eigen::Triplet<double>(0, 1, -2));
triplets.push_back(Eigen::Triplet<double>(1, 0, 3));
triplets.push_back(Eigen::Triplet<double>(1, 1, -2));
Eigen::SparseMatrix<double> A(2, 2);
A.setFromTriplets(triplets.begin(), triplets.end());
Eigen::VectorXd b(2);
b[0] = -2;
b[1] = 2;
Eigen::SimplicialCholesky<Eigen::SparseMatrix<double>> chol(A);
Eigen::VectorXd x = chol.solve(b);
std::cout << x[0] << ' ' << x[1] << std::endl;
system("pause");
}
它给出了这两个方程:
X-2Y=- 2
3X-2Y=2
正确的解决方案是:
x=2
Y=2
但问题是,当程序运行时,它输出:
0.181818-0.727273
这是完全错误的!我已经调试了几个小时了,但这是一个非常短的程序,我完全按照Eigen网站上的教程操作。有人知道是什么导致了这个问题吗?
另外,我知道我使用的类是用于稀疏矩阵的,但是这些类和普通矩阵类之间的唯一区别是元素的存储方式。