Я написал python код, который импортирует некоторые данные, которыми я затем манипулирую, чтобы получить неквадратную матрицу А. Затем я использовал следующий код для решения матричного уравнения.
from scipy.optimize import lsq_linear
X = lsq_linear(A_normalized, Y, bounds=(0, np.inf), method='bvls')
Как вы можете видеть Я использовал этот конкретный метод, потому что мне требуется, чтобы все X-коэффициенты были положительными. Однако я понял, что lsq_linear из scipy.optimize минимизирует L2-норму AX - Y для решения уравнения. Мне было интересно, знает ли кто-нибудь об альтернативе lsq_linear, которая решает уравнение, минимизируя вместо этого норму L1. Я заглянул в скучную документацию, но пока мне не повезло найти такую альтернативу самому.
(Обратите внимание, что я на самом деле знаю, что такое Y, и что я пытаюсь выяснить, это X).
Редактировать: После попытки различных предложений из раздела комментариев и после большого разочарования мне наконец удалось чтобы заставить его работать, используя cvxpy. Однако с этим есть проблема. Прежде всего, элементы X должны быть положительными, но это не так. Более того, когда я умножаю матрицу A_normalized на X, они не равны Y. Мой код ниже. Буду очень признателен за любые предложения о том, что я могу сделать, чтобы это исправить. (Кстати, мое первоначальное использование lsq_linear в приведенном выше коде дало мне X, удовлетворяющий A_normalized * X = Y.)
import cvxpy as cp
from cvxpy.atoms import norm
import numpy as np
Y = specificity
x = cp.Variable(22)
objective = cp.Minimize(norm((A_normalized @ x - Y), 1))
constraints = [0 <= x]
prob = cp.Problem(objective, constraints)
result = prob.solve()
print("Optimal value", result)
print("Optimal var")
X = x.value # A numpy ndarray.
print(X)
A_normalized @ X == Y