Ограничение обычных наименьших квадратов с использованием Scipy / Numpy - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь решить набор линейных уравнений:

min || Ax - B ||^2
    for t in [0,1]

such that the coefficients x in this equation satisfy the linear equation:

C x = D

Эта система пытается подогнать набор полиномов для аппроксимации функции F (t) в диапазоне t.

  • A - это матрица, представляющая карту набора многочленов в диапазоне значений t
  • x - это вектор коэффициентов (что я хочу), соответствующий весу, примененному к каждому многочлену вA
  • B - вектор, представляющий значения F (t),
  • C - матрица, а вектор D, которые вместе представляют граничные условия на коэффициенты этой системы

Это случай решения линейных уравнений с использованием ограничения обыкновенных наименьших квадратов .

В то время как существуют известные решения в замкнутой форме, например Каруш-Кун-Такер Я ищу маршрут в scipy / numpy, который можно использовать для решения этой проблемы.

Исследования показали, что модуль scipy.optimize включает следующие функции:

scipy.optimize.least_squares .

scipy.optimize.nnls .

scipy.optimize.lsq_linear .

Выше предлагается как из этого вопроса , так и этого вопроса .

Но в них нет условий, которые работают для ограничения некоторых другихлинейное уравнение.Что я могу использовать в scipy и numpy для этого?

1 Ответ

0 голосов
/ 02 марта 2019

Для этого вы можете использовать scipy.minimize(method='SLSQP').Документация: здесь .

Вы можете определить ограничение равенства как вызываемую функцию с подписью:

def cons1(x):
    return sum(D - C*x)

SLSQP обязательно используетограничение, чтобы управлять вашей проблемой оптимизации.Обратите внимание, что это приличный градиент, поэтому вы, скорее всего, найдете локальные минимумы для задач большого размера.

Другой вариант - scipy.minimize(method=’trust-constr’), документация здесь .Эти методы изначально реализованы в python, поэтому исходный код и модификации доступны через.

Если у вас есть гладкая монотонная или контекстная функция, по моему опыту SLSQP должно быть достаточно.

...