2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 12:25 
Заслуженный участник
Аватара пользователя


26/01/14
4846
Здравствуйте! Очень нужно написать в 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 
Заслуженный участник
Аватара пользователя


26/01/14
4846
Или например так:

Код:
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 
Заслуженный участник
Аватара пользователя


11/04/08
2748
Физтех
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 
Заслуженный участник
Аватара пользователя


26/01/14
4846
Спасибо, разобрался. Такой вопрос: хорошо ли работает эта самая lsqnonlin? Не лучше ли составить саму минимизируемую функцию из суммы квадратов и применять fminsearch?

 Профиль  
                  
 
 Re: Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 19:47 
Заслуженный участник
Аватара пользователя


11/04/08
2748
Физтех
Mikhail_K в сообщении #875741 писал(а):
хорошо ли работает эта самая lsqnonlin?

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

 Профиль  
                  
 
 Re: Нелинейный метод наименьших квадратов
Сообщение15.06.2014, 20:19 
Заслуженный участник
Аватара пользователя


26/01/14
4846
Я где-то слышал мнение, что lsqnonlin работает принципиально хуже fminsearch. Может, и неправда.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group