Я написал код на Python, который импортирует некоторые данные, которыми я затем манипулирую, чтобы получить неквадратную матрицу A. Затем я использовал следующий код для решения матричного уравнения.
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. Я просмотрел документацию по scipy, но пока мне не удалось найти такую альтернативу.
(Обратите внимание, что я действительно знаю, что такое 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
return np.sum(np.dot(A_normalized, X) - Y)
в функцию и обернуть ее вscipy.optimize.minimize
. - person Joe   schedule 11.04.2020norm(x,1)
-переформулировку из коробки. - person sascha   schedule 11.04.2020>=0
нарушается чем-то вроде10^-8
. Незначительный. Ваша проверка мат-мул также будет иметь аналогичные нарушения. Это нормально и (на практике) будет всегда. - person sascha   schedule 12.04.2020A_normalized @ X == Y
со значениями с плавающей запятой, особенно в (незакрытой форме) численной оптимизации, действительно следует читать:What Every Computer Scientist Should Know About. Floating-Point Arithmetic
. Подсказка:np.isclose()
. - person sascha   schedule 12.04.2020