У меня недоопределенная система линейных уравнений. Это может быть решено, например, с помощью SimPy, где решение является функцией некоторых свободных переменных. Я ищу эти бесплатные переменные. Этот набор переменных не уникален, но достаточно одного варианта. Например
[1 0 1] [x1] = [1]
[0 1 0] [x2] = [1]
[x3]
Здесь x2
определяется вторым уравнением, и в качестве свободной переменной можно использовать либо x1
, либо x3
. Так, например, набор {x1}
- верное решение моей проблемы.
Один из способов найти это - использовать SymPy и проанализировать решения, чтобы найти, какие переменные там используются. Это довольно громоздко. Есть способ сделать это лучше? Желательно без каких-либо символьных вычислений (с возвратом индекса свободных переменных).
Здесь задается тот же вопрос, но нет ответа, так как выяснилось, что спрашивающий хотел спросить что-то еще: Как определить, какая из них свободная, в результате sympy.linsolve
Ему просто нужно было единое решение для системы. Я хочу знать свободные переменные, и мне даже не нужно знать решение.
@EPo К сожалению, моя матрица была неверной. Я исправил это, и теперь комментарии под ним верны. x2 = 1
и x1 + x3 = 1
, поэтому либо x1
, либо x3
могут быть выбраны как бесплатные
Это похоже на Как найти основу для пространства столбцов прямоугольной матрицы?, за исключением того, что вы запрашиваете свободные переменные, которые соответствуют столбцам, которые остаются после того, как мы выбрали основу для пространства столбцов. Таким образом, разница в наборах сводит одну проблему к другой. Вот пример с немного более сложной матрицей:
import numpy as np
from scipy.linalg import lu
M = np.array([[1, 1, 0, 1], [0, 0, 1, 0], [0, 0, 7, 0]])
U = lu(M)[2]
basis_columns = {np.flatnonzero(U[i, :])[0] for i in range(U.shape[0])}
free_variables = set(range(U.shape[1])) - basis_columns
Ответ: {1, 3}
.
Предостережение: все это чувствительно к ошибкам с плавающей запятой, поэтому SymPy все же может быть предпочтительнее, если у вас есть точные рациональные числа на входе и вы хотите сохранить их как таковые.
Не уверен, что это точно, но я думаю, что свободная переменная - это любая переменная с ненулевым коэффициентом для неосновного элемента в эшелонированная форма и переменной, которую он описывает.
какое уравнение для x3?