Я новичок в c ++ и библиотеке Eigen. Я хочу выполнить декомпозицию LU (частичное вращение) на матрице размером 1815 X 1815
со сложными записями. Однако производительность моего кода плохая, декомпозиция LU занимает 77.2852
секунды, в то время как MATLAB занимает всего 0.140946
секунды. Пожалуйста, найдите прикрепленный код. Любой совет, как я могу улучшить код? Обратите внимание, что в первой части кода я импортирую матрицу из файла с записями: a + bi
, где a
и b
- комплексные числа. Файл матрицы был сгенерирован из MATLAB. Спасибо.
#include <iostream>
#include <Eigen/Dense>
#include <fstream>
#include <complex>
#include <string>
#include <chrono>
using namespace std;
using namespace std::chrono;
using namespace Eigen;
int main(){
int mat_sz = 1815; // size of matrix
MatrixXcd c_mat(mat_sz,mat_sz); // initialize eigen matrix
double re, im;
char sign;
string entry;
ifstream myFile("A_mat"); // format of entries : a + bi. 'a' and 'b' are complex numbers
//Import and assign matrix to an Eigen matrix
for (int i = 0; i < mat_sz; i++){
for (int j = 0; j < mat_sz; j++){
myFile >> entry;
stringstream stream(entry);
stream >> re >> sign >> im;
c_mat(i,j) = {re, (sign == '-') ? -im : im}; // Assigning matrix entries
}
}
// LU Decomposition
auto start = high_resolution_clock::now();
c_mat.partialPivLu(); // Solving equation through partial LU decomposition
auto stop = high_resolution_clock::now();
auto duration = duration_cast<microseconds>(stop - start);
double million = 1000000;
cout << "Time taken by function: " << duration.count()/million << " seconds" << endl;
}