2014 dxdy logo

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

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




 
 Оптимизация в Mathematica.
Сообщение20.10.2012, 07:25 
Здравствуйте!

Написал на форум экспоненты, но что-то так никто мне не ответил. Спрошу здесь. Проблема возникла с пакетом Mathematica.

Мне нужно оптимизировать ОЧЕНЬ большую функцию с помощью NMaximize или FindMaximum, без разницы чем. Дело в том, что если я эту функцию выпишу заранее, Математика мне ее очень-очень долго будет считать, а потом ее не сможет оптимизировать (проверено). Поэтому я хочу, как водится, сделать функцию как func = Function[vars, body], а затем чтобы мне NMaximize сразу подставлял уже начальные значения в нее и считал численно. То есть чтобы не хранить эту функцию заранее, а вычислять численно уже в самой процедуре максимизации.

Это функция правдоподобия с рекурсией, то есть текущие наблюдения связаны с предыдущими, поэтому если ее заранее выписывать, из-за рекурсии получиться МОНСТР. А если вычислять рекурсию по-ходу, получая уже числа, а не нарастающее выражение, то максимизация должна облегчиться (я надеялся, что она хотя-бы начнется).

Проблема в том, что и в этом случае мне максимизирующие процедуры не считают. Просто ступор, и все.

.nb файл залил на народ, вот ссылка: http://narod.ru/disk/62665515001.c9d7fb ... CH.nb.html

Могу так же код здесь выложить, если надо. Очень нужна помощь, спасибо!

 
 
 
 Re: Оптимизация в Mathematica.
Сообщение20.10.2012, 08:56 
Если попробовать подставить в функции какие-нибудь небольшие числа, например,
Код:
egarchseq[{1, 2, 3, 4}]

дает огромные значения, а
Код:
LLF[{1, 2, 3, 4}]

не считает. Оба выдают ошибку
Код:
General::ovfl: Overflow occurred in computation. >>

Можно для начала оттестировать все это на каких-нибудь не очень длинных данных, Length[x]=10, скажем.

 
 
 
 Re: Оптимизация в Mathematica.
Сообщение20.10.2012, 12:00 
Попробовал протестировать на Length[x]=10, считает очень долго и не сходится почему-то.

Пытаюсь бороться с Overflow[], но не учень успешно. Добавил в тело функции следующую строку:

If[LLF == Indeterminate || Overflow[] || Underflow[], 10000, LLF]

Должно было помочь и функция возвращала бы по крайней мере 10000, но все равно возвращает Indeterminate.

Вот обновленный файл. Не понимаю, в чем дело.
http://narod.ru/disk/62701259001.fe5580 ... CH.nb.html

PS: А вообще, по ощущениям, что лучше, оптимизационные функции из Mathematica или MatLab'овский fmincon/fminunc?

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


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