[PASCAL] Minimum funkcji.

0

Czesc, mam napisac programik ktory by obliczal minimum dla dowolnej funkcji. Samo obliczenie minimum nie jest problemem, nie wiem tylko czy da sie zrobic tak zeby zczytanego stringa mozna bylo uzyc jako funkcji. Moze ktos wie jak to zrobic?

0

Odwrotna Notacja Polska (ONP) [ew. Reverse Polish Notation - RPN].

0

http://4programmers.net/article.php?id=622
http://4programmers.net/article.php?id=631

  • artykuł w ostatnim KS Ekspert PLUS (nawet dobrze opisane)
0

obliczenie minimum nie jest problemem? tu się bardzo mylisz! znalezienie minimum globalnego, bądź globalnego na zadanym przedziale funkcji nieliniowej nie jest prostą sprawą, wymaga bardzo dużego nakładu mocy obliczeniowej.

no chyba, że szukasz miejsca zerowego funkcji liniowej ;-)

0

ŁF: W sumie wszystko zależy od sposobu podania tej funkcji. Jak ma się ładny wzór (oczywiście nie każdą funkcję da się tak przedstawić), to policzenie pochodnej to jest pestka. Dalej policzenie miejsca zerowego pochodnej też nie jest takim strasznym problemem (oczywiście albo analitycznie - ograniczając się do jakichś bardziej określonych funkcji, albo numerycznie - z jakąś konkretną dokładnością, choćby metodą bijekcji).

Jak napisałem jest to kwestia pewnego ograniczenia, dla jakich funkcji da się to prosto rozwiązać, ale większość "szkolnych" przykładów nie powinno sprawić takiemu programikowi większego problemu.

0
Adam.Pilorz napisał(a)

ŁF: W sumie wszystko zależy od sposobu podania tej funkcji. Jak ma się ładny wzór (oczywiście nie każdą funkcję da się tak przedstawić), to policzenie pochodnej to jest pestka. Dalej policzenie miejsca zerowego pochodnej też nie jest takim strasznym problemem (oczywiście albo analitycznie - ograniczając się do jakichś bardziej określonych funkcji, albo numerycznie - z jakąś konkretną dokładnością, choćby metodą bijekcji).

bisekcji, nie bijekcji.
co da Ci znalezienie zera pochodnej?
po pierwsze - to też nie jest łatwa sprawa, zwłaszcza jeśli zero jest z obu stron otoczone lokalnymi ekstremami (o tych samych znakach); miłego szukania minimum, jeśli pochodna osiąga podwójne miejsce zerowe - przegapienie go jest banalnie łatwe;
po drugie - globalne minimum nie ma nic wspólnego z liczeniem pochodnej. zero pochodnej wskazuje tylko na punkt przegięcia funkcji (czyli być moze ekstremum lokalne), a nie na to, czy jest to ekstremum globalne.
po trzecie - co to znaczy "ładny wzór"? przecież nikt nie będzie liczył pochodnej analitycznie, to zbyt wolne. a policzona pochodna - jak już napisałem - niczego nie ułatwi.

0

ŁF, zero pierwszej pochodnej to nie jest punkt przegięcia tylko tzw punkt stacjonarny.
Poza tym nie ma o czym mówić bo w zadaniu nie ma mowy o tym że funkcja jest różniczkowalna , ba nawet nie musi być ciągła. W tak ogólnym zadaniu chyba nie da sie nic efektywnego zrobic poza próbami "wyłowienia" takich extremów poprzez sprawdzanie wartości z ustalonym krokiem , który lokalnie będziemy zmniejszać. A to dość prymitywny sposób. Jesli ktos zna lepszy to prosze sie dopisac do tego watku. Ciekaw jestem jaki to sposób:)

0

prosta i w miarę skuteczna metoda: sprawdzanie z określonym krokiem zmiany znaku pochodnej, potem algorytm bisekcji do wyznaczenia dokładnego położenia zera pochodnej, czyli minimum lokalnego. niestety to rozwiązanie dalej ma wadę - może przegapić pomiedzy kolejnymi krokami zmianę znaku pochodnej.
metoda skuteczna, ale deczko bardziej skomplikowana -> algorytm symulowanego wyżarzania (albo trochę szybsze probabilistyczne symulowane wyżarzanie).
poza tym sporo różnych algorytmów do minimalizacji funkcji znajdziesz w sieciach neuronowych.

co do punktu przegięcia - no fakt, punkt przegięcia jest dla drugiej pochodnej.

0

ŁF: a może on chce policzyć minimum trójmianu kwadratowego ;P

0
ŁF napisał(a)

bisekcji, nie bijekcji.

Tfu, oczywiście :]. Bijekcja to TROSZKĘ co innego ;), chociaż też pojęcie matematyczne.

ŁF napisał(a)

co da Ci znalezienie zera pochodnej?

A no to, że zero pochodnej to jest ekstremum lokalne funkcji, której pochodną liczymy.

ŁF napisał(a)

po pierwsze - to też nie jest łatwa sprawa, zwłaszcza jeśli zero jest z obu stron otoczone lokalnymi ekstremami (o tych samych znakach); miłego szukania minimum, jeśli pochodna osiąga podwójne miejsce zerowe - przegapienie go jest banalnie łatwe;

Hmm... Mam jednak wrażenie, że zero podwójne spowoduje jedynie to, że w pewnym punkcie styczna do wykresu funkcji stanie się równoległa do osi OX. Nie zmienia to faktu, że nie będzie tam ekstremum lokalnego ("kierunek" monotoniczności w otoczeniu takiego podwójnego miejsca zerowego pochodnej jest jednak ten sam)

ŁF napisał(a)

po drugie - globalne minimum nie ma nic wspólnego z liczeniem pochodnej. zero pochodnej wskazuje tylko na punkt przegięcia funkcji (czyli być moze ekstremum lokalne), a nie na to, czy jest to ekstremum globalne.

Już wyżej zostało zauważone, że ekstremum lokalne. A jak mamy wszystkie ekstrema lokalne oraz wartości funkcji w granicach dziedziny, to możemy policzyć ekstremum globalne. Oczywiście pod warunkiem, że funkcja jest różniczkowalna, bo inaczej nie ma mowy o liczeniu pochodnej w ogóle. Faktycznie, nie pomyślałem o innych funkcjach, przyznaję się bez bicia.

ŁF napisał(a)

po trzecie - co to znaczy "ładny wzór"? przecież nikt nie będzie liczył pochodnej analitycznie, to zbyt wolne. a policzona pochodna - jak już napisałem - niczego nie ułatwi.

No cóż, dla prostych funkcji (wielomianów itp.) policzenie pochodnej analitycznie jest o niebo prostsze i szybsze od policzenia jej numerycznie. Do tego dochodzi większa (nieskończona) dokładność takiego rozwiązania. No i mimo wszystko jestem przekonany, że dla funkcji różniczkowalnej policzenie pochodnej da wiele.

1 użytkowników online, w tym zalogowanych: 0, gości: 1