C++ 中的分段错误(Eigen 库)
Segmentation Fault in C++ (Eigen library)
我正在尝试使用特征库来确定超定线性系统的最小二乘解。
当矩阵大小很大时,代码将进入分段错误,例如下面程序中所示的 6000 行。同样的程序在 rows = 5000 时运行。我阅读了很多关于修复分段错误的帖子,但我找不到任何有用的东西。
#include <cstdlib>
#include <iostream>
#include <Eigen/Dense>
#include <complex>
#define cols 45
#define rows 6000
using namespace Eigen;
int main() {
int i,j;
Matrix<std::complex<double>, rows,cols> zMat;
for(i=0;i<rows;i++) {
for(j=0;j<cols;j++) {
zMat(i,j)=std::complex<double>(rand(),rand());
}
}
VectorXcd ampIn(rows);
for(i=0;i<rows;i++)
ampIn(i)=std::complex<double>(rand(),rand());
//Solving Matrix equation using QR Decomposition
VectorXcd solution = zMat.colPivHouseholderQr().solve(ampIn);
std::cout << "The least-squares solution is:\n" << solution << std::endl;
return 0;
}
对于 Eigen 库,对于大于 1 MB 的数据,使用 MatrixXcd
而不是 Matrix<std::complex<double>...
我正在尝试使用特征库来确定超定线性系统的最小二乘解。
当矩阵大小很大时,代码将进入分段错误,例如下面程序中所示的 6000 行。同样的程序在 rows = 5000 时运行。我阅读了很多关于修复分段错误的帖子,但我找不到任何有用的东西。
#include <cstdlib>
#include <iostream>
#include <Eigen/Dense>
#include <complex>
#define cols 45
#define rows 6000
using namespace Eigen;
int main() {
int i,j;
Matrix<std::complex<double>, rows,cols> zMat;
for(i=0;i<rows;i++) {
for(j=0;j<cols;j++) {
zMat(i,j)=std::complex<double>(rand(),rand());
}
}
VectorXcd ampIn(rows);
for(i=0;i<rows;i++)
ampIn(i)=std::complex<double>(rand(),rand());
//Solving Matrix equation using QR Decomposition
VectorXcd solution = zMat.colPivHouseholderQr().solve(ampIn);
std::cout << "The least-squares solution is:\n" << solution << std::endl;
return 0;
}
对于 Eigen 库,对于大于 1 MB 的数据,使用 MatrixXcd
而不是 Matrix<std::complex<double>...