C++ 在特征值C+中,什么与Python的np.linalg.solve(A,B)相等+;

C++ 在特征值C+中,什么与Python的np.linalg.solve(A,B)相等+;,c++,numpy,eigen,C++,Numpy,Eigen,上面可以计算Ax=B的根,这里,A是一个3乘3的矩阵,B是一个3乘1的向量。我想在Egeng库中找到一个与相同的函数,而不是Python Numpy库。 使用Python Numpy linalg.solve()得到的结果是正确的。矩阵A和B如下所示: #!/usr/bin/python x = np.linalg.solve(A, B) 但是,我选择下面的代码(C++Eigen)来解决相同的问题,错误显示给我 A: 64 256 1024 48 256 1280 24 1

上面可以计算Ax=B的根,这里,A是一个3乘3的矩阵,B是一个3乘1的向量。我想在Egeng库中找到一个与相同的函数,而不是Python Numpy库。 使用Python Numpy linalg.solve()得到的结果是正确的。矩阵A和B如下所示:

#!/usr/bin/python
x = np.linalg.solve(A, B)
但是,我选择下面的代码(C++Eigen)来解决相同的问题,错误显示给我

A: 
  64  256 1024
  48  256 1280
  24  192 1280
B: 
-9
 0
 0
上面的代码在运行时出错:

// C++ with Eigen Library
auto x = A.colPivHouseholderQr().solve(B)
frenet:/usr/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h:546:void
特征::ColPivHouseholderQR::_solve_impl(常数RhsType&,
DSTYPE&)常量[带RhsType=特征::矩阵;DSTYPE=
特征::矩阵;_MatrixType=Eigen::矩阵]:断言'rhs.rows()==rows()'失败。

我不知道会发生什么。希望你能尽快帮助我

如果编译时知道
A
为3x3,我建议直接计算逆(如果需要多次,只计算一次)

#包括
#包括
int main(){
本征::矩阵x3d A;

A您能提供更多关于
A、B、x
的信息吗?在这两种情况下,您是否比较了Ax和B?此外,MWE将非常有用。您是否检查
A
是否为满秩线性解算器(特别是迭代解算器)将根据残差工作到特定公差。如果a不是满秩,则您将没有有效的x解,或者无限多的解可能会显示这两个结果?您显示的是3x3矩阵,但您提到a是4x4。请澄清。
auto
负责上述问题。谢谢!
frenet: /usr/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h:546: void
 Eigen::ColPivHouseholderQR<MatrixType>::_solve_impl(const RhsType&, 
DstType&) const [with RhsType = Eigen::Matrix<double, -1, 1>; DstType = 
Eigen::Matrix<double, -1, 1>; _MatrixType = Eigen::Matrix<double, -1,
 -1>]: Assertion `rhs.rows() == rows()' failed.
#include <Eigen/LU>
#include <iostream>

int main() {
  Eigen::Matrix3d A;
  A << 64, 256, 1024, 48, 256, 1280, 24, 192, 1280;
  Eigen::Vector3d B;
  B << -9.0, 0, 0;
  Eigen::Matrix3d A_inv = A.inverse();
  Eigen::Vector3d x = A_inv * B;

  std::cout << "solution x=\n" << x << "\n\nresidual A*x-B=\n" << A * x - B << '\n';
}