Моя программа пытается решить систему линейных уравнений. Для этого он собирает матрицу coeff_matrix
и вектор value_vector
и использует Eigen для их решения следующим образом:
Eigen::VectorXd sol_vector = coeff_matrix
.colPivHouseholderQr().solve(value_vector);
Проблема в том, что система может быть как переопределена, так и недоопределена. В первом случае Эйген дает либо правильное, либо неправильное решение, и я проверяю решение с помощью coeff_matrix * sol_vector - value_vector
.
Однако, пожалуйста, рассмотрите следующую систему уравнений:
a + b - c = 0
c - d = 0
c = 11
- c + d = 0
В этом конкретном случае Эйген правильно решает три последних уравнения, но также дает решения для a
и b
.
Чего я хотел бы добиться, так это того, чтобы решались только те уравнения, которые имеют только одно решение, а остальные (здесь первое уравнение) оставались бы в системе.
Другими словами, я ищу метод, чтобы узнать, какие уравнения могут быть решены в данной системе уравнений в данный момент, а какие нет, потому что будет более одного решения.
Не могли бы вы предложить какой-нибудь хороший способ добиться этого?
Редактировать: обратите внимание, что в большинстве случаев матрица не будет квадратной. Я добавил сюда еще одну строку просто для того, чтобы отметить, что переопределение тоже может иметь место.