У меня есть большое количество уравнений (n) с большим количеством неизвестных (m), где m больше, чем n. Я пытаюсь найти значения m, используя n уравнений и большой набор наблюдаемых значений.
Я посмотрел на некоторые реализации Левенберга-Марквардта в C #, но я не смог найти ни одной, которая бы решала более 1 уравнения. Например, я посмотрел на http://kniaz.net/software/LMA.aspx, и это, кажется, то, что я хочу, за исключением того, что он принимает только одно уравнение в качестве параметра, я хочу решить для ряда уравнений одновременно. Аналогично, этот пакет: http://www.alglib.net/ содержит хорошую реализацию LM, но только для одного уравнения.
Мне было интересно, есть ли в C # хорошие реализации или что я могу использовать с моим C # кодом, который может это сделать? Попытка разработать дифференциалы первого порядка моих уравнений также будет дорогостоящей, поэтому я надеюсь, что смогу использовать небольшие конечные разности для их аппроксимации.
Кроме того, есть ли хорошее и простое для понимания объяснение того, как работает LM и как его реализовать? Я попытался прочитать некоторые учебники по математике, чтобы реализовать его сам, но я довольно невежествен в математике, поэтому большая часть объяснений потеряна для меня.
редактирование:
Подробнее о моей проблеме:
1) Уравнения формируются динамически и могут меняться при каждом запуске моей задачи
2) У меня нет хорошего предположения о начальных параметрах. Я планирую запустить его несколько раз с рандомизированными начальными параметрами, чтобы найти глобальный минимум.
Редактировать 2:
Еще один вопрос, я читаю эту статью: http://ananth.in/docs/lmtut.pdf, и в разделе 2 я увидел следующее:
x = (x1; x2 ... xn) - вектор, и каждый rj
это функция от ℜn
к ℜ. RJ упоминаются
как остатки, и предполагается, что m> = n.
Значит ли это, что LM не работает, если у меня больше параметров, чем функций? Например, если я хочу решить A и B для функции:
Y = AX + B
Это будет невозможно из-за того, что мой вектор параметров имеет размер 2 (A и B), а число моих функций равно 1?