[c++] Znalezienie ekstremum funkcji - optymalizacja
- JoeBuck
- 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
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ć?
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
- thalcave
- 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
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]
Na pytania na PW/e-mail nie udzielam odpowiedzi!
Szanujmy innych użytkowników!
Wesprzyj akcje: Temat rozwiązany -> dodajemy [solved]
- JoeBuck
- 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
Zarówno b jak i c są parametrami
Cała funkcja wygląda tak:
Próbowałem znaleźć maximum z pochodnej, ale... nie mogę znaleźć pochodnej 
Cała funkcja wygląda tak:
Kod: Zaznacz cały
int funkcja(int b,int c)
{
return ceil(b+sqrt(c));
}

http://www.kotwburaczkach.pl
- DDAroo
- 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
o.0
Ta funkcja to f(x, y) = ceil(x + sqrt(y)) ?
Ta funkcja to f(x, y) = ceil(x + sqrt(y)) ?
- JoeBuck
- 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
f(x,y)=ceil(x+sqrt(y));
http://www.kotwburaczkach.pl
- DDAroo
- 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
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.
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.
W jaki sposób są zależne? Da się to opisać wzorem, czy jest to tabela z wartościami b i c?JoeBuck pisze: Przy czym wartości b i c są od siebie zależne, tzn. do każdego c jest przyporządkowane jakieś b.
- JoeBuck
- 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
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.
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
- DDAroo
- 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
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?
- JoeBuck
- 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
Kilkaset tysięcy ;/
http://www.kotwburaczkach.pl
- DDAroo
- 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
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?
- JoeBuck
- 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
c całkowite
b>2 i b<1 000 000
c>2 i c<1 000 000
Potrzebuję dokładnie największej
b>2 i b<1 000 000
c>2 i c<1 000 000
Potrzebuję dokładnie największej
http://www.kotwburaczkach.pl
-
- 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
a to przyporządkowanie określone jest wzorem?Przy czym wartości b i c są od siebie zależne, tzn. do każdego c jest przyporządkowane jakieś b.
- JoeBuck
- 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
Nie jest określone żadnym wzorem. Dla jakiegoś c mamy jakieś b.
http://www.kotwburaczkach.pl
-
- 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
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ć)
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ć)
- JoeBuck
- 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
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ę!
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
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 12 gości