DoubleMatrix mult(DoubleMatrix& m2, ComplexMatrix& m1) { // Check dimensions unsigned int m1_nRows = m1.numRows(); unsigned int m2_nRows = m2.numRows(); unsigned int m1_nColumns = m1.numCols(); unsigned int m2_nColumns = m2.numCols(); if (m1.size() == 0) { return real(m1); } if (m2.size() == 0) { return m2; } DoubleMatrix result(m1_nRows, m2_nColumns); if (m1_nColumns == m2_nRows) { for (unsigned int row = 0; row < result.numRows(); row++) { for (unsigned int col = 0; col < m2_nColumns; col++) { double sum = 0.0; for (unsigned int k = 0; k < m1_nColumns; k++) { sum = sum + (real(m1[row][k]) * m2[k][col]); } result[row][col] = sum; } } return result; } if (m1_nRows == m2_nColumns) { return mult(m2, m1); } throw ("Incompatible matrix operands to multiply"); }
ls::ComplexMatrix getComplexMatrixFromString(const string& textMatrix) { ComplexMatrix mat; //Parse the matrix vector<string> rows = splitString(textMatrix, "\n"); for(int row = 0; row < rows.size(); row++) { vector<string> values = splitString(rows[row], " \t"); for(int col = 0; col < values.size(); col++) { if(!mat.size()) { mat.resize(rows.size(), values.size()); } std::complex<double> val = toComplex(values[col]); mat(row, col).Real = real(val); mat(row, col).Imag = imag(val); } } return mat; }