нуль-пространство

ема

У меня есть набор уравнений с переменными, обозначенными строчными буквами и константами с прописными переменными как таковыми

A = a + b  
B = c + d  
C = a + b + c + d + e  

Мне предоставлена ​​информация о структуре этих уравнений в панде DataFrame с двумя столбцами:Константы а такжепеременные

Например.

df = pd.DataFrame([['A','a'],['A','b'],['B','c'],['B','d'],['C','a'],['C','b'], 
['C','c'],['C','d'],['C','e']],columns=['Constants','Variables'])

Затем я преобразовываю это в разреженную матрицу CSC с помощью NetworkX

table = nx.bipartite.biadjacency_matrix(nx.from_pandas_dataframe(df,'Constants','Variables')  
,df.Constants.unique(),df.Variables.unique(),format='csc')

При преобразовании в плотную матрицу,Таблица выглядит следующим образом

матрица ([[1, 1, 0, 0, 0], [0, 0, 1, 1, 0], [1, 1, 1, 1, 1]], dtype = int64)

Отсюда я хочу найти, какие переменные разрешимы (в этом примере толькоe разрешима), и для каждой разрешимой переменной, от каких констант зависит ее значение (в данном случае, так какe = C-B-A, это зависит отA, B, а такжеC)

Попытки решения

Сначала я попытался использовать rref для поиска решаемых переменных. Я использовал библиотеку символов sympy и функцию sympy.Matrix.rref, которая дала мне именно то, что я хотел, поскольку любая разрешимая переменная имела бы свою собственную строку с почти всеми нулями и 1, которую я мог проверять на строку за строкой.

Однако это решение не было стабильным. Прежде всего, это было очень медленно, и не использовал тот факт, что мои наборы данных, вероятно, будут очень разреженными. Кроме того, RREF не очень хорошо с плавающей точкой. Поэтому я решил перейти к другому подходу, мотивированномуУдаление неразрешимых уравнений из недоопределенной системы, который предложил использовать SVD

Для удобства в библиотеке scipy.sparse есть функция svd, а именно scipy.sparse.linalg.svds. Однако, учитывая отсутствие у меня фона линейной алгебры, я не понимаю результатов, полученных при запуске этой функции на моем столе, или того, как использовать эти результаты, чтобы получить то, что я хочу.

Дальнейшие детали в проблемеКоэффициент каждой переменной в моей задаче равен 1. Так можно выразить данные в двух столбцах панд DataFrame, показанных ранее.Подавляющее большинство переменных в моих реальных примерах не будет решаемо. Цель состоит в том, чтобы найти те немногие, которые разрешимыЯ более чем готов попробовать альтернативный подход, если он соответствует ограничениям этой проблемы.

Я впервые пишу вопрос, поэтому прошу прощения, если он не совсем соответствует правилам. Пожалуйста, оставьте конструктивную критику, но будьте нежны!

Ответы на вопрос(2)

Ваш ответ на вопрос