Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача минимизации функции многих переменных, подскажите готовые решения, либы, проги. 
:(
    Опции темы
DProf
Дата 14.3.2013, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: нет
Всего: 1



Добрый день!
В ходе написания программы на С++ понадобилось найти минимум функции девяти (!) переменных. Подскажите готовые решения (библиотеки, проги) для решения задачи минимизации. Переменные ограничены на известном интервале. Функция нелинейная (хотя может быть и получится ее линеаризовать). В Matlabe вот такие средства встроенные есть. А есть какая нибудь либа на С++ для этого? Информации в интернете по теме очень много, но тяжело найти здравое решение 'из коробки'. Хочется просто импортировать функцию минимизации и не разбираться ни капли в ее особенностях.

PM MAIL   Вверх
borisbn
Дата 14.3.2013, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Думаю, сильно зависит от вида функции, от того, как она задана - таблично, в виде полинома, аналитически и т.п.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
DProf
Дата 14.3.2013, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: нет
Всего: 1



Аналитически. Но это уже вопрос о методах решения. Хочется же просто мощную библиотеку на с++. Задача то вполне типичная, но что то не могу найти готового решения на си. 
PM MAIL   Вверх
volatile
Дата 15.3.2013, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(DProf @  14.3.2013,  16:44 Найти цитируемый пост)
Хочется просто импортировать функцию ... не разбираться ни капли в ее особенностях.

 smile 
я тоже так всегда хочу, но почти никогда так не получаецца. 

Если по теме, то задачи такого рода хорошо решают генетические алгортитмы.
готовых либ правда не знаю, (может и есть, просто не изучал этот вопрос).


PM MAIL   Вверх
borisbn
Дата 15.3.2013, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



> Аналитически
Т.е. я правильно понимаю, что на входе д.б. что-то типа
Код
std:: string f = "sin(x0) + atan(x1/x2) - x3*x4^2 = 0";

а на выходе вектор исков ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 15.3.2013, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135





--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
DProf
Дата 15.3.2013, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: нет
Всего: 1



Цитата(borisbn @ 15.3.2013,  06:23)
> Аналитически
Т.е. я правильно понимаю, что на входе д.б. что-то типа
Код
std:: string f = "sin(x0) + atan(x1/x2) - x3*x4^2 = 0";

а на выходе вектор исков ?

Много проще, минимизируемую функцию можно прямо в код вставить, она заранее известна.
За ссылки на либы спасибо. Пробовать буду.
PM MAIL   Вверх
math64
Дата 15.3.2013, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



В общем случае не определишь.
Например функция, почти всюду равная 0, но маленьких в окрестностях x0 равная -1. Причем, её можно сделать гладкой и бесконечно дифференцирумой (как exp(-1/x^2) вблизи 0).
PM   Вверх
DProf
Дата 18.3.2013, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: нет
Всего: 1



Цитата

В общем случае не определишь

Ну допустим я уверен что функция имеет минимум (даже не спрашивайте, почему:) ) в заданной окрестности.
Цитата(volatile @ 15.3.2013,  00:02)
я тоже так всегда хочу, но почти никогда так не получаецца. 

Вы правы. К сожалению. 
Во всех этих особенностях по ходу придется глубоко копаться. Я ж не математик. Ужас.

А функция - это полином второго порядка. Я вот начал подумывать тупо перебрать с мелким шагом все переменные от их возможного минимума до максимума. Скорость работы большого значения не играет. Если разбить интервал на 1 000 000 значений, то это всего то надо
1 000 000 * 9! = 362880000000 раз вычислить значение функции.

Это сообщение отредактировал(а) DProf - 18.3.2013, 18:49
PM MAIL   Вверх
Фантом
Дата 18.3.2013, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: нет
Всего: 49



Цитата(DProf @  18.3.2013,  19:35 Найти цитируемый пост)

А функция - это полином второго порядка.

От девяти переменных? Интересно, откуда Вы извлекли такую задачу...

Скорее всего, она решается аналитически (или, по крайней мере, допускает существенное уменьшение числа аргументов). Может быть, выложите выражение вместе с границами для переменных?

 
PM   Вверх
W4FhLF
Дата 18.3.2013, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Заодно надо уточнить какой минимум нужен: локальный или глобальный?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
feodorv
Дата 18.3.2013, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(DProf @  18.3.2013,  19:35 Найти цитируемый пост)
то это всего то надо
1 000 000 * 9! = 362880000000 раз вычислить значение функции

Чего-то я сомневаюсь в правильности этой выкладки. 
1 000 000 в 9ой степени, мне кажется, ближе к истине...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 19.3.2013, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



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

Для полинома с  девятью переменными нужно найти способ сокращения числа переменных.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1644 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.