Kultaisen leikkauksen menetelmä

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 18. helmikuuta 2018 tarkistetusta versiosta . tarkastukset vaativat 10 muokkausta .

Kultaleikkausmenetelmä  on menetelmä, jolla löydetään yhden muuttujan reaalifunktion ääriarvo tietyltä väliltä. Menetelmä perustuu segmentin jaon periaatteeseen kultaisen leikkauksen suhteissa . Se on yksi yksinkertaisimmista laskennallisista menetelmistä optimointiongelmien ratkaisemiseksi . Ensimmäisen kerran Jack Kiefer esitteli vuonna 1953.

Menetelmän kuvaus

Olkoon funktio annettu . Tämän jälkeen tämän funktion määrittelemättömän arvon löytämiseksi tietystä segmentistä, joka täyttää hakukriteerit (olkoon se vähintään ), tarkasteltava segmentti jaetaan suhteessa kultaiseen leikkaukseen molempiin suuntiin, eli kahteen pisteeseen valitaan ja siten, että:

, missä on kultaisen leikkauksen osuus .

Tällä tavalla:

Eli piste jakaa segmentin suhteessa kultaiseen leikkaukseen. Samalla tavalla jakaa segmentin samassa suhteessa. Tätä ominaisuutta käytetään iteratiivisen prosessin rakentamiseen.

Algoritmi

  1. Ensimmäisessä iteraatiossa annettu segmentti jaetaan kahdella pisteellä, jotka ovat symmetrisiä sen keskipisteen suhteen, ja arvot näissä kohdissa lasketaan.
  2. Sen jälkeen hylätään toinen segmentin päistä, jolle kahden uuden asetetun pisteen joukosta suurin arvo ( minimihaun tapauksessa ) osoittautui olevan lähempänä.
  3. Seuraavassa iteraatiossa edellä esitetyn kultaisen leikkauksen ominaisuuden vuoksi on jo tarpeen etsiä vain yksi uusi piste.
  4. Toimenpide jatkuu, kunnes määritetty tarkkuus on saavutettu.

Formalisointi

  1. Vaihe 1. Janan alkurajat ja tarkkuus asetetaan .
  2. Vaihe 2. Laske alkujakopisteet: ja niissä olevat tavoitefunktion arvot : .
    • Jos (jos haluat etsiä max, muuta epäyhtälö arvoon ), sitten
    • Muuten .
  3. Vaihe 3
    • Jos , niin lopeta.
    • Muussa tapauksessa palaa vaiheeseen 2.

Algoritmi on otettu Matthewsin ja Finkin kirjasta Numerical Methods. MATLABin käyttö.

Tämän algoritmin toteutus F# :ssa, jossa tavoitefunktion arvoja käytetään uudelleen:

olkoon phi = 0 . 5 * ( 1. 0 + sqrt 5. 0 ) minimoi f eps a b = anna rec min_rec f eps a b fx1 fx2 = jos b - a < eps niin 0 . _ _ _ 5 * ( a + b ) muuten olkoon t = ( b - a ) / phi let x1 , x2 = b - t , a + t anna fx1 = vastaa fx1 kanssa Jotkut v -> v | Ei mitään -> f x1 anna fx2 = sovittaa fx2 kanssa Jotkut v -> v | Ei mitään -> f x2 jos fx1 >= fx2 sitten min_rec f eps x1 b ( Jotkut fx2 ) Ei mitään muuta min_rec f eps a x2 Ei mitään ( Jotkut fx1 ) min_rec f eps ( min a b ) ( max a b ) Ei mitään Ei mitään // Kutsuesimerkkejä: minimoi cos 1 e - 6 0 . 0 6 . 28 |> printfn "%.10g" // = 3,141592794; funktiota f kutsutaan 34 kertaa. minimoida ( hauska x -> ( x - 1 . 0 )** 2 . 0 ) 1 e - 6 0 . 0 10 . 0 |> printfn "%.10g" // = 1,000000145; funktiota f kutsutaan 35 kertaa.

Fibonacci-lukumenetelmä

Johtuen siitä, että asymptotiikassa kultaleikkausmenetelmä voidaan muuntaa ns. Fibonacci -lukumenetelmäksi . Fibonacci-lukujen ominaisuuksien vuoksi iteraatioiden määrä on kuitenkin tiukasti rajoitettu. Tämä on kätevää, jos toiminnon mahdollisten kutsujen määrä asetetaan välittömästi.

Algoritmi

  1. Vaihe 1. Janan alkurajat ja iteraatioiden määrä asetetaan , lasketaan alkujakopisteet: ja niissä tavoitefunktion arvot : .
  2. Vaihe 2 .
    • Jos , niin .
    • Muuten .
  3. Vaihe 3
    • Jos , niin lopeta.
    • Muussa tapauksessa palaa vaiheeseen 2.

Kirjallisuus

  1. Akulich I. L. Matemaattinen ohjelmointi esimerkeissä ja tehtävissä: Proc. opiskelijatalouden tuki. asiantuntija. yliopistot. - M . : Korkeampi. koulu, 1986.
  2. Gill F., Murray W., Wright M. Käytännön optimointi. Per. englannista. - M .: Mir, 1985.
  3. Korshunov Yu. M. Kybernetiikan matemaattiset perusteet. - M .: Energoatomizdat, 1972.
  4. Maksimov Yu. A., Filippovskaya EA Algoritmit epälineaaristen ohjelmointiongelmien ratkaisemiseen. - M .: MEPhI, 1982.
  5. Maksimov Yu. A. Lineaariset ja diskreetit ohjelmointialgoritmit. - M .: MEPhI, 1980.
  6. Korn G., Korn T. Matematiikan käsikirja tutkijoille ja insinööreille. - M .: Nauka, 1970. - S. 575-576.
  7. Korn G., Korn T. Matematiikan käsikirja tutkijoille ja insinööreille . - M . : Nauka, 1973. - S. 832 kuvituksella ..
  8. John G. Matthews, Curtis D. Fink. Numeeriset menetelmät. MATLABin käyttö. – 3. painos. - M., St. Petersburg: Williams, 2001. - S. 716.

Katso myös