я пытаюсь описать предварительные условия в первую очередь
У меня есть несколько изображений / матриц, которые можно представить как слои в программе обработки изображений. эти слои будут добавлены для формирования окончательного результата. каждый слой имеет коэффициент от 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 сделало бы это для меня
Заранее спасибо за помощь
mlpack кажется, есть множители Лагранжа, см. документы.
Это позволяет вам решать уравнения с ограничениями.
ты можешь использовать NLopt библиотека для оптимизации и построения вашей целевой функции в виде вычисления сжатых инноваций (возможно, с использованием алгоритма COBYLA).
Вы можете использовать также QuantLib’s Генеральные Линейные Сквиры Leaast класс для этого, использование так же просто, как:
LinearRegression *lr = new LinearRegression( x, y, 1.0);
cout << lr->coefficients();