Я так понимаю вы минимизируете величину
где
— ваши экспериментальные точки, а
,
и
— искомые параметры.
Во-первых, когда вы встречаетесь с многомерной численной задачей нелинейной оптимизации, то в первую очередь советую смотреть в сторону
алгоритма Нелдера-Мида. Он имеет ряд достоинств: не требует счёта производной, в отличие от всяких градиентных методов, и значительно более устойчивей своих конкурентов на всяких "плохих" случаях, типа функции Розенброка. Плюс это алгоритм не требует диапазона значений для поиска, только начальное значение, от которого он будет отталкиваться.
Во-вторых, ваша модельная функция линейна по целым двум из трёх своих аргументов! Это значит, что эти аргументы могут быть вычислены с ходу в лоб прямым дифференцированием. Ну, разумеется, не конечное значение может быть вычислено, а оптимальное значение для текущего шага численной оптимизации. Но это сразу редуцирует задачу из трёхмерия в одномерие. Численный поиск минимума функции одной переменной задача
качественно более простая, чем поиск минимума в многомерии. Тем более, есть все основания полагать, что минимум у вас единственный ("хорошая" функция с "хорошими" данными).
Так вот, как редуцировать размерность задачи, пользуясь линейностью модели по своим аргументам. Стандартная процедура. Берём и дифференцируем целевую величину
по параметрам
и
и приравниваем результат нулю:
Откуда выходит линейная задача на параметры
и
:
Находим их, подставляем в целевую функцию
и получаем целевую функцию, зависящую только от одного искомого параметра
. Теперь дело за компьютером. Алгоритм, разумеется, какой-нибудь одномерный без производных.
И да, величина
— это количество ваших данных.
А можно поинтересоваться результатами?
Я бы поинтересовался табличкой исходных данных, чтобы поиграться.
Кстати, если
равноудалены, то все суммы в матрице являются суммами арифметических прогрессий, и для них можно сразу запилить общую формулу. Немного ускорит счёт.