Найдите, какие переменные свободны в недоопределенной линейной системе

У меня недоопределенная система линейных уравнений. Это может быть решено, например, с помощью SimPy, где решение является функцией некоторых свободных переменных. Я ищу эти бесплатные переменные. Этот набор переменных не уникален, но достаточно одного варианта. Например

[1  0  1] [x1] = [1]
[0  1  0] [x2] = [1]
          [x3]

Здесь x2 определяется вторым уравнением, и в качестве свободной переменной можно использовать либо x1, либо x3. Так, например, набор {x1} - верное решение моей проблемы.

Один из способов найти это - использовать SymPy и проанализировать решения, чтобы найти, какие переменные там используются. Это довольно громоздко. Есть способ сделать это лучше? Желательно без каких-либо символьных вычислений (с возвратом индекса свободных переменных).

Здесь задается тот же вопрос, но нет ответа, так как выяснилось, что спрашивающий хотел спросить что-то еще: Как определить, какая из них свободная, в результате sympy.linsolve

Ему просто нужно было единое решение для системы. Я хочу знать свободные переменные, и мне даже не нужно знать решение.

какое уравнение для x3?

Evgeny 12.09.2018 23:46

@EPo К сожалению, моя матрица была неверной. Я исправил это, и теперь комментарии под ним верны. x2 = 1 и x1 + x3 = 1, поэтому либо x1, либо x3 могут быть выбраны как бесплатные

Jens Renders 12.09.2018 23:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
578
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это похоже на Как найти основу для пространства столбцов прямоугольной матрицы?, за исключением того, что вы запрашиваете свободные переменные, которые соответствуют столбцам, которые остаются после того, как мы выбрали основу для пространства столбцов. Таким образом, разница в наборах сводит одну проблему к другой. Вот пример с немного более сложной матрицей:

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 все же может быть предпочтительнее, если у вас есть точные рациональные числа на входе и вы хотите сохранить их как таковые.

Не уверен, что это точно, но я думаю, что свободная переменная - это любая переменная с ненулевым коэффициентом для неосновного элемента в эшелонированная форма и переменной, которую он описывает.

Другие вопросы по теме