система линейных уравнений, наименьших квадратов с ограничениями

я пытаюсь описать предварительные условия в первую очередь

У меня есть несколько изображений / матриц, которые можно представить как слои в программе обработки изображений. эти слои будут добавлены для формирования окончательного результата. каждый слой имеет коэффициент от 0 до 1

x_1 * M_1 + x_2 * M_2 + … = S

матрицы M_i являются фиксированными и не изменяются.
Цель состоит в том, чтобы определить факторы x_i, которые наилучшим (не обязательно наилучшим) приближаются к заданному S

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

каждая матрица M_i является столбцом M и вместе они образуют уравнение

M · x = S

M может быть очень большим (несколько 10.000 строк и 100 столбцов)

У вас есть предложения по методам, предпочтительно на основе библиотек, чтобы решить эту проблему? Я знаю, что есть много библиотек, которые могут решать задачи наименьших квадратов, но я не смог найти ту, которая поддерживает ограничения. сначала выполнение условия> = 0 сделало бы это для меня

Заранее спасибо за помощь

1

Решение

mlpack кажется, есть множители Лагранжа, см. документы.
Это позволяет вам решать уравнения с ограничениями.

2

Другие решения

ты можешь использовать NLopt библиотека для оптимизации и построения вашей целевой функции в виде вычисления сжатых инноваций (возможно, с использованием алгоритма COBYLA).

Вы можете использовать также QuantLib’s Генеральные Линейные Сквиры Leaast класс для этого, использование так же просто, как:

LinearRegression *lr = new LinearRegression( x, y, 1.0);
cout << lr->coefficients();

QuantLib LinearRegression

0

По вопросам рекламы [email protected]