2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 12:25 
Аватара пользователя
Здравствуйте! Очень нужно написать в Matlab программу для наилучшего приближения заданной точечной функции функциями заданного вида, например $c+b\exp(ax)$ и другими нелинейными.

Наверное, для этого в Matlab должна быть отдельная команда (нелинейная регрессия, нелинейный метод наименьших квадратов)

К сожалению, в Матлабе я ориентируюсь очень плохо, поэтому если не трудно, то прошу привести пример реализации такой команды, а не только сказать название.

Заранее извиняюсь, если эта тема уже где-то разбиралась.

-- 15.06.2014, 13:08 --

Например, я нашёл в справке такую функцию.
$$
stats::reg([0,1,2,3],[1,3,5,7],p1+p2*x1,[x1],[p1,p2]);
$$
Но если я запускаю Matlab и пишу её, то выдаётся ошибка Unexpected MATLAB Operator. Почему?

 
 
 
 Re: Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 13:44 
Аватара пользователя
Или например так:

Код:
stats::reg([[1.1, 54], [1.2, 73], [1.3, 98], [1.4, 133]], a*exp(b*x), [x], [a, b])


Та же ошибка.
Может, надо подключить какой-то пакет?

-- 15.06.2014, 14:27 --

Ещё прочитал, что можно использовать функцию LSQNONLIN
Пожалуйста, приведите пример использования этой функции

 
 
 
 Re: Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 16:25 
Аватара пользователя
Mikhail_K
Да, используйте lsqnonlin. Справку с примерами смотрите здесь: http://matlab.exponenta.ru/optimiz/book ... nonlin.php

Кратко говоря, на вход lsqnonlin подается указатель на вектор-функцию (сумму квадратов компонент которой следует минимизировать, обозначим ее $f(x)$) и начальное приближение. В вашем случае компонента вектор-функции $f(x)$ представляет собой разницу между данным, табличным, значением и значением согласно модели.

Например, если ваша модель $c+b\exp{(ax)}$, то в более подходящих обозначениях у вас $x = (a,b,c) = (x_1,x_2,x_3)$ -- набор параметров, по которым будет идти оптимизация, а независимую переменную в модели обозначим давайте $t$. Теперь, вот у вас есть табличный набор $\{ t_k , y_k \}$, это числа, они вам известны. Тогда $k$-ая компонента требуемой функции $f(x)$ будет равна: $f_k(x) = y_k - (x_3 + x_2 \exp{(x_1 t_k)})$. Внимательно прочитайте эту формулу, каждую букву. Вот это -- разница между измерением и моделью. И мы хотим воспользоваться методом наименьших квадратов, значит мы ищем параметры $x = (a,b,c) = (x_1,x_2,x_3)$, которые бы минимизировали сумму квадратов всех $f_k$.

Так что программируйте соответствующим образом функцию $f(x)$ и пишите что-то типа
Код:
x_opt = lsqnonlin(@f,x0)


Инструмент
Код:
stats::reg
не работает в Матлабе, это функция системы компьютерной алгебры MuPAD, которая идет вместе с тулбоксом Symbolic Math Toolbox и запускается только из соответствующей среды.

 
 
 
 Re: Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 19:09 
Аватара пользователя
Спасибо, разобрался. Такой вопрос: хорошо ли работает эта самая lsqnonlin? Не лучше ли составить саму минимизируемую функцию из суммы квадратов и применять fminsearch?

 
 
 
 Re: Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 19:47 
Аватара пользователя
Mikhail_K в сообщении #875741 писал(а):
хорошо ли работает эта самая lsqnonlin?

Ответы на подобные вопросы дает только опыт непосредственного применения обоих методов к конкретной задаче. Могу лишь сказать, что раз алгоритмы этих методов разные, то и итерации этих методов совпадать не обязаны. Попробуйте оба метода и выясните сами, что вам больше подходит.

 
 
 
 Re: Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 20:19 
Аватара пользователя
Я где-то слышал мнение, что lsqnonlin работает принципиально хуже fminsearch. Может, и неправда.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group