[c++] Znalezienie ekstremum funkcji - optymalizacja

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

[c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

Witam!

Borykam się z problemem znalezienia maksymalnej wartości funkcji określonej wzorem:

a=b+sqrt(c);

Przy czym wartości b i c są od siebie zależne, tzn. do każdego c jest przyporządkowane jakieś b.

Wartość tę muszę znaleźć wielokrotnie (nawet kilkaset tysięcy razy) i dlatego szukam sposobu szybszego niż zwykły brute-force.
Znam możliwe wartości c, więc na początku programu obliczam dla nich pierwiastki i zapamiętuję w tablicy, ale nadal działa to zbyt wolno kiedy muszę to liczyć 100 000 razy.

Ma ktoś może jakiś mądry pomysł jak by to przyspieszyć?
http://www.kotwburaczkach.pl
Awatar użytkownika
thalcave
Przyjaciel
Przyjaciel
Posty: 821
Rejestracja: 08 lis 2006, 12:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: thalcave »

Z definicji ekstrema próbowałeś? co w tej funkcji jest parametrem a co zmienną?
GNU/Linux user
Na pytania na PW/e-mail nie udzielam odpowiedzi!
Szanujmy innych użytkowników!
Wesprzyj akcje: Temat rozwiązany -> dodajemy [solved]
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

Zarówno b jak i c są parametrami

Cała funkcja wygląda tak:

Kod: Zaznacz cały

int funkcja(int b,int c)
{
 return ceil(b+sqrt(c));
}
Próbowałem znaleźć maximum z pochodnej, ale... nie mogę znaleźć pochodnej :D
http://www.kotwburaczkach.pl
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: DDAroo »

o.0

Ta funkcja to f(x, y) = ceil(x + sqrt(y)) ?
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

f(x,y)=ceil(x+sqrt(y));
http://www.kotwburaczkach.pl
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: DDAroo »

Wiadomo coś o x tzn. czy jest większe od 0? Ekstrema chyba można wyliczyć analitycznie z funkcji f(x, y) = x + sqrt(y) korzystając z pochodnych cząstkowych i warunku na ekstremum lokalne funkcji dwóch zmiennych.

EDIT.
Zresztą funkcja jest monotoniczna więc jej wartość jest tym większa im większe jest x i y oraz tym mniejsza im mniejsze jest x i y.

EDIT2.
JoeBuck pisze: Przy czym wartości b i c są od siebie zależne, tzn. do każdego c jest przyporządkowane jakieś b.
W jaki sposób są zależne? Da się to opisać wzorem, czy jest to tabela z wartościami b i c?
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

x może być mniejsze, równe albo większe od zera - wiadomo tylko, że zawsze jest całkowite.

Wiem, że funkcja jest monotoniczna, ale problem leży w tym, że zmiana x nie zawsze pociąga za sobą zmianę y w tą samą stronę. Czasem x rośnie a y maleje, czasem odwrotnie, czasem oba rosną. Jedyna zależność jest taka, że dla danego y zawsze mamy jednoznacznie określony x.

Masz może pod ręką jakieś dobre materiały o pochodnych i ekstremach funkcji dwuargumentowych?

Edit:
Tabela z wartościami.
http://www.kotwburaczkach.pl
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: DDAroo »

Hmm to trzeba zrobić inaczej, bo skoro b i c są ztablicowane to nie jest to typowe matematyczne szukanie ekstremum funkcji dwóch zmiennych. Dużo masz tych wartości b i c? kilka tysięcy?
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

Kilkaset tysięcy ;/
http://www.kotwburaczkach.pl
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: DDAroo »

c jest także całkowite? są jakieś ograniczenia co do wartości maksymalnej c oraz maksymalnej i minimalnej wartości b? Potrzebujesz dokładnie największej wartości czy może być bliska największej?
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

c całkowite

b>2 i b<1 000 000
c>2 i c<1 000 000

Potrzebuję dokładnie największej
http://www.kotwburaczkach.pl
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: mikolajs »

Przy czym wartości b i c są od siebie zależne, tzn. do każdego c jest przyporządkowane jakieś b.
a to przyporządkowanie określone jest wzorem?
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

Nie jest określone żadnym wzorem. Dla jakiegoś c mamy jakieś b.
http://www.kotwburaczkach.pl
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: mikolajs »

Jeżeli polega to na wczytywaniu z pliku po 100 000 par liczb i powtarzane jest to kilkaset tysięcy razy (jeżeli dobrze zrozumiałem) to dłużej będzie trwało wczytywanie z pliku niż same obliczenia.
Maksimum normalnie byłoby dla max x i max y. Więc możesz znaleźć maksymalną wartość x i y i odrzucić wyniki dla których: max(x) > sqrt(max(y) + x). (może można by to jeszcze bardziej zawęzić)
Awatar użytkownika
JoeBuck
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 07 lip 2009, 12:06
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++] Znalezienie ekstremum funkcji - optymalizacja

Post autor: JoeBuck »

No tak, ale wczytywania niestety nie przyspieszę.

Czas mi się kończy, więc chyba już tylko lekko dopieszczę tego brute-force'a
Dzięki za zainteresowanie i zaangażowanie.
Mikolajs, skorzystam z Twoich zależności, dziękuję!
http://www.kotwburaczkach.pl
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości