Code: Select all
np.linalg.lstsq(left_hand, right_hand, rcond=None)
Ich muss eine Funktion in C ++ schreiben, die das gleiche wie das Python -Programm tut. Mein erster Ansatz dafür bestand darin
Code: Select all
cv::solve(equationSystem, equationsRightSide, solutions, cv::DECOMP_SVD);
Obwohl ihre Ergebnisse die meiste Zeit sehr ähnlich sind, unterscheiden sie sich manchmal um ziemlich viel. Zum Beispiel für ein System mit 3 Variablen: < /p>
Code: Select all
cv::solve()
Code: Select all
np.linalg.lstsq()
Ich verstehe, dass dies am wahrscheinlichsten ist, weil CV :: Lösung und np.lininalg.Lininalg. Mit CV :: Solve können Sie nur die Matrix -Dezositionsmethode festlegen, während LSTSQ viele weitere Argumente enthält. Daher versuche ich, nach alternativen Funktionen zu suchen, um die C ++ - Version zu implementieren. Ich habe Eigen mit dem folgenden Code ausprobiert: < /p>
Code: Select all
Eigen::JacobiSVD svd(
ES_Eigen, Eigen::ComputeThinU | Eigen::ComputeThinV);
// In Python, if rcond = None, linalg.lstsq calculates the rcond value as the machine's precision
// times the greatest between the equations right side's columns and rows
double rcond = std::numeric_limits::epsilon() * std::max(equationsRightSide.rows, equationsRightSide.cols);
svd.setThreshold(rcond);
Eigen::VectorXd x = svd.solve(RS_Eigen);
std::cout