fitting function в Матлабе

makei

Есть вектор F экспериментальных результатов. Хотелось бы его представить в таком виде:
F(n) = a*exp(-n/l) + (1-a)*H(n где аргумент n - натуральное число от 1 до N(известно
a, l - фит коэффициенты, которые необходимо определить.
Проблема в том, что функция H(x) не может быть задана явно, однако она табулирована, т.е. для каждого n (от 1 до N) H(n) - известное число.
Фактически, у меня есть два вектора F и H одинаковой длины N и мне нужно найти коэффициенты a и l, которые приводили бы к наилучшему соответствию. К сожалению, как скормить дискретную функцию в fit я не нашел. Поделитесь пожалуйста хаками по этому поводу. Или можно ли это как-нибудь оформить с помощью регрессионного анализа?

stat3032681

Если это поможет, то в R это делается следующим образом:
1) Задается 3 вектора: F, H, J. F и H - твои известные векторы, J - вектор натуральных чисел от 1 до N. Твоя задача построить функцию между F и векторами H, J в указанном виде.
2) Задается функция ошибки, например, sum(abs(F - a*exp(-J/l) - (1-a)*H. Задача сводится к минимизации этой ошибки.
3) Случайным образом определяются начальные коэффициенты a и I. Дальше в R можно использовать функцию optim, которая минимизирует указанную ошибку и находит оптимальные коэффициенты.
В принципе, это можно сделать и вручную, используя метод градиентного спуска.

demiurg

В Матлабе есть несколько (или много даже) функций численной минимизации функции (с использованием аналиитического выражение для производной или без него).
Соответственно напиши штрафную функцию (например как сумму квадратов разностей) и минимизируй её такой функцией.

demiurg

Ну да, собственно, выше то же самое написали.

natastream

такой функцией.
карроче http://www.mathworks.com/help/matlab/ref/fminsearch.html

makei

Спасибо всем ответившим! Кажется это действительно самое лучшее решение в этой ситуации.
У меня самого было две других (наивных) идеи, зафитить H(n) какой-нибудь аналитической функцией и использовать дальше её (очень плохая идея) или же перебирать параметр a в цикле и использовать fit уже для вектора F - (1-a)*H, что есть тоже бред.
В общем, буду пробовать минимизировать предложенную функцию.
Оставить комментарий
Имя или ник:
Комментарий: