Altın bölüm araması - Golden-section search

Altın bölüm araştırmasının diyagramı. İlk üçlüsü x değerler {x1, x2, x3}. Eğer f (x4) = f4a, üçlü {x1, x2, x4} sonraki yineleme için seçilir. Eğer f (x4) = f4b, üçlü {x2, x4, x3} seçilir.

altın bölüm araması bulmak için bir tekniktir ekstremum belirli bir aralıktaki bir işlevin (minimum veya maksimum). Kesinlikle tek modlu işlev aralığın içinde bir ekstremum ile o ekstremumu bulacak, çoklu ekstrema içeren bir aralık için (muhtemelen aralık sınırları dahil), bunlardan birine yakınsayacaktır. Aralıktaki tek ekstremum, aralığın bir sınırındaysa, bu sınır noktasına yakınsar. Yöntem, belirtilen aralıktaki değer aralığını art arda daraltarak çalışır, bu da onu nispeten yavaş ama çok sağlam kılar. Teknik, adını, algoritmanın, üç aralık genişliğinin orantılı olduğu dört nokta için işlev değerlerini sürdürmesi gerçeğinden türemiştir. 2-φ: 2φ-3: 2-φ nerede φ ... altın Oran. Bu oranlar her bir yineleme için korunur ve maksimum verimlidir. Sınır noktaları haricinde, bir minimum ararken, merkezi nokta her zaman dış noktalardan küçüktür veya bunlara eşittir, bu da dış noktalar arasında bir minimum bulunmasını sağlar. Bir maksimum ararken tam tersi doğrudur. Algoritma sınırıdır Fibonacci araması (ayrıca aşağıda açıklanmıştır) birçok fonksiyon değerlendirmesi için. Fibonacci araması ve altın bölüm araması tarafından keşfedildi Kiefer (1953) (ayrıca bkz.Avriel ve Wilde (1966)).

Temel fikir

Buradaki tartışma, bir minimumun (maksimumun aranması benzerdir) arama açısından ortaya konmuştur. tek modlu işlev. Zıt işaretli iki işlev değerlendirmesinin bir kökü parantez içine almak için yeterli olduğu sıfır bulmanın aksine, minimum ararken üç değer gereklidir. Altın bölüm araması, minimum bulan aralığı kademeli olarak azaltmanın etkili bir yoludur. Önemli olan, kaç noktanın değerlendirildiğine bakılmaksızın, minimumun şu ana kadar değerlendirilen en düşük değere sahip noktanın bitişiğindeki iki nokta tarafından tanımlanan aralık içinde olduğunu gözlemlemektir.

Yukarıdaki şema, minimum bulma tekniğinde tek bir adımı göstermektedir. Fonksiyonel değerleri dikey eksendedir ve yatay eksen, x parametre. Değeri zaten şu üç noktada değerlendirildi: , , ve . Dan beri ikisinden de daha küçük veya , açıktır ki minimum değer aralığı içinde -e .

Küçültme sürecindeki bir sonraki adım, işlevi yeni bir değerde değerlendirerek "araştırmaktır". x, yani . Seçmek en verimli olanıdır en büyük aralığın içinde bir yerde, yani arasında ve . Diyagramdan, fonksiyonun vermesi durumunda , sonra minimum ve ve yeni üçlü nokta , , ve . Bununla birlikte, işlev değeri verirse , sonra minimum ve ve yeni üçlü nokta , , ve . Böylece, her iki durumda da, fonksiyonun minimumunu içermesi garanti edilen daha dar yeni bir arama aralığı oluşturabiliriz.

Prob noktası seçimi

Yukarıdaki diyagramdan, yeni arama aralığının iki arasında olacağı görülüyor. ve uzunlukta a + cveya arasında ve uzunlukta b. Altın bölüm araması, bu aralıkların eşit olmasını gerektirir. Aksi takdirde, bir "kötü şans" koşusu, daha geniş aralığın birçok kez kullanılmasına yol açabilir ve böylece yakınsama oranını yavaşlatabilir. Bunu sağlamak için b = a + calgoritma seçmeli .

Ancak, hala nerede olduğu sorusu var. ile ilgili olarak yerleştirilmelidir ve . Altın bölüm araması, bu noktalar arasındaki aralığı, bu noktalar sonraki üçlü ile aynı oranda boşluk olacak şekilde seçer. veya . Algoritma boyunca aynı boşluk oranını koruyarak, çok yakın veya ve aralık genişliğinin her adımda aynı sabit oranda küçülmesini garanti eder.

Matematiksel olarak, değerlendirmeden sonraki boşluğun bu değerlendirmeden önceki aralıkla orantılıdır, eğer dır-dir ve yeni üçlü puanımız , , ve sonra istiyoruz

Ancak, eğer dır-dir ve yeni üçlü puanımız , , ve sonra istiyoruz

Eleniyor c bu iki eşzamanlı denklemden elde edilen

veya

nerede φ altın Oran:

Değerlendirme noktalarının orantılı aralıklarında altın oranın ortaya çıkışı, bu araştırmanın nasıl algoritma adını alır.

Fesih koşulu

Başvuruya bağlı olarak herhangi bir sayıda fesih koşulu uygulanabilir. Aralık ΔX = X4-X1 minimum tahmininde mutlak hatanın bir ölçüsüdür X ve algoritmayı sonlandırmak için kullanılabilir. Değeri ΔX faktör azalır r = φ-1 her yineleme için, mutlak bir hataya ulaşmak için yineleme sayısı ΔX hakkında ln (ΔX / ΔXÖ) / ln (r) nerede ΔXÖ başlangıç ​​değeridir ΔX.

Düzgün işlevler minimuma yakın düz olduklarından (ilk türevi sıfıra yakın), minimumun konumlandırılmasında çok büyük bir doğruluk beklememeye dikkat edilmelidir. Kitapta verilen fesih koşulu C Sayısal Tarifler arasındaki boşlukları test etmeye dayanmaktadır , , ve , göreceli doğruluk sınırları dahilinde olduğunda sona erdirme

nerede algoritmanın bir tolerans parametresidir ve ... mutlak değer nın-nin . Kontrol, merkezi değerine göre köşeli parantez boyutuna dayanır, çünkü bu göreceli hata yaklaşık olarak mutlak hatanın karesi ile orantılıdır tipik durumlarda. Aynı nedenle, Sayısal Tarifler metni şunu önermektedir: , nerede gerekli mutlak hassasiyettir .

Algoritma

Yinelemeli algoritma

Altın bölümün diyagramı minimum için arama. İlk aralık X1 ve X4 üç aralığa bölünür ve f [X], dört aralığın her birinde değerlendirilir Xben. Minimum içeren iki aralık f (Xben) daha sonra seçilir ve üçüncü bir aralık ve fonksiyonel değer hesaplanır ve işlem, sonlandırma koşulları karşılanana kadar tekrarlanır. Üç aralık genişliği her zaman orantılıdır c: cr: c nerede r = φ-1 = 0.619 ... ve c = 1-r = 0,381 ..., φ olmak altın Oran. Bu aralık oranları seçimi, oranların bir yineleme sırasında korunmasına izin veren tek seçenektir.
  1. Küçültülecek işlevi, f (x), aranacak aralığı {X olarak belirtin1, X4} ve fonksiyonel değerleri F1 ve F4.
  2. Bir iç noktayı ve fonksiyonel değerini hesaplayın F2. İki aralık uzunluğu orantılıdır c: r veya r: c nerede r = φ - 1; ve c = 1-r, ile φ altın oran olmak.
  3. Üçlü kullanarak yakınsama kriterlerinin karşılanıp karşılanmadığını belirleyin. Eğer öyleyse, bu üçlüden en az X'i tahmin edin ve geri dönün.
  4. Üçlüden diğer iç noktayı ve fonksiyonel değerini hesaplayın. Üç aralık oran içinde olacaktır c: cr: c.
  5. Sonraki yineleme için üç nokta, F'nin minimum olduğu nokta ve ona en yakın iki nokta X'te olacaktır.
  6. 3. adıma gidin
Altın bölüm araması için "" "Python programı. Bu uygulama   işlev değerlendirmelerini yeniden kullanmaz ve minimumun c olduğunu varsayar   veya d (a veya b'nin kenarlarında değil) "" "ithalat matematikgr = (matematik.sqrt(5) + 1) / 2def gss(f, a, b, tol=1e-5):    "" "Altın bölüm araması    [a, b] üzerinde minimum f bulmak için    f: [a, b] üzerinde kesinlikle tek modlu bir işlev    Misal:    >>> f = lambda x: (x-2) ** 2    >>> x = gss (f, 1, 5)    >>> yazdır ("%. 15f"% x)    2.000009644875678    """    c = b - (b - a) / gr    d = a + (b - a) / gr    süre abs(b - a) > tol:        Eğer f(c) < f(d):            b = d        Başka:            a = c        # Yanlış sonuçlara veya sonsuz döngüye yol açabilecek hassasiyet kaybını önlemek için burada hem c hem de d'yi yeniden hesaplıyoruz        c = b - (b - a) / gr        d = a + (b - a) / gr    dönüş (b + a) / 2
Altın bölüm araması için "" "Python programı. Bu uygulama   işlev değerlendirmelerini yeniden kullanır, değerlendirmelerin 1 / 2'sini kaydeder.   yineleme ve sınırlayıcı bir aralık döndürür. "" "ithalat matematikinvphi = (matematik.sqrt(5) - 1) / 2  # 1 / phiinvphi2 = (3 - matematik.sqrt(5)) / 2  # 1 / phi ^ 2def gss(f, a, b, tol=1e-5):    "" "Altın bölüm araması.    Tek bir yerel minimum ile bir f fonksiyonu verildiğinde    [a, b] aralığı, gss bir alt küme aralığı döndürür    d-c <= tol ile minimum içeren [c, d].    Misal:    >>> f = lambda x: (x-2) ** 2    >>> a = 1    >>> b = 5    >>> tol = 1e-5    >>> (c, d) = gss (f, a, b, tol)    >>> yazdır (c, d)    1.9999959837979107 2.0000050911830893    """    (a, b) = (min(a, b), max(a, b))    h = b - a    Eğer h <= tol:        dönüş (a, b)    # Toleransa ulaşmak için gerekli adımlar    n = int(matematik.tavan(matematik.günlük(tol / h) / matematik.günlük(invphi)))    c = a + invphi2 * h    d = a + invphi * h    yc = f(c)    yd = f(d)    için k içinde Aralık(n-1):        Eğer yc < yd:            b = d            d = c            yd = yc            h = invphi * h            c = a + invphi2 * h            yc = f(c)        Başka:            a = c            c = d            yc = yd            h = invphi * h            d = a + invphi * h            yd = f(d)    Eğer yc < yd:        dönüş (a, d)    Başka:        dönüş (c, b)

Özyinelemeli algoritma

halka açık sınıf GoldenSectionSearch {    halka açık statik final çift invphi = (Matematik.sqrt(5.0) - 1) / 2.0;    halka açık statik final çift invphi2 = (3 - Matematik.sqrt(5.0)) / 2.0;    halka açık arayüz Fonksiyon {        çift nın-nin(çift x);    }    // Minimum f içeren [a, b] alt aralığını döndürür    halka açık statik çift[] gss(Fonksiyon f, çift a, çift b, çift tol) {        dönüş gss(f, a, b, tol, b - a, doğru, 0, 0, doğru, 0, 0);    }    özel statik çift[] gss(Fonksiyon f, çift a, çift b, çift tol,                                çift h, Boole noC, çift c, çift fc,                                Boole noD, çift d, çift fd) {        Eğer (Matematik.abs(h) <= tol) {            dönüş yeni çift[] { a, b };        }        Eğer (noC) {            c = a + invphi2 * h;            fc = f.nın-nin(c);        }        Eğer (noD) {            d = a + invphi * h;            fd = f.nın-nin(d);        }        Eğer (fc < fd) {            dönüş gss(f, a, d, tol, h * invphi, doğru, 0, 0, yanlış, c, fc);        } Başka {            dönüş gss(f, c, b, tol, h * invphi, yanlış, d, fd, doğru, 0, 0);        }    }    halka açık statik geçersiz ana(Dize[] argümanlar) {        Fonksiyon f = (x)->Matematik.pow(x-2, 2);        çift a = 1;        çift b = 5;        çift tol = 1e-5;        çift [] ans = gss(f, a, b, tol);        Sistem.dışarı.println("[" + ans[0] + "," + ans[1] + "]");        // [1.9999959837979107,2.0000050911830893]    }}
ithalat matematikinvphi = (matematik.sqrt(5) - 1) / 2  # 1 / phiinvphi2 = (3 - matematik.sqrt(5)) / 2  # 1 / phi ^ 2def gssrec(f, a, b, tol=1e-5, h=Yok, c=Yok, d=Yok, fc=Yok, fd=Yok):    "" "Altın bölüm araması, yinelemeli.    Tek bir yerel minimum ile bir f fonksiyonu verildiğinde    [a, b] aralığı, gss bir alt küme aralığı döndürür    d-c <= tol ile minimum içeren [c, d].    Misal:    >>> f = lambda x: (x-2) ** 2    >>> a = 1    >>> b = 5    >>> tol = 1e-5    >>> (c, d) = gssrec (f, a, b, tol)    >>> yazdır (c, d)    1.9999959837979107 2.0000050911830893    """    (a, b) = (min(a, b), max(a, b))    Eğer h dır-dir Yok: h = b - a    Eğer h <= tol: dönüş (a, b)    Eğer c dır-dir Yok: c = a + invphi2 * h    Eğer d dır-dir Yok: d = a + invphi * h    Eğer fc dır-dir Yok: fc = f(c)    Eğer fd dır-dir Yok: fd = f(d)    Eğer fc < fd:        dönüş gssrec(f, a, d, tol, h * invphi, c=Yok, fc=Yok, d=c, fd=fc)    Başka:        dönüş gssrec(f, c, b, tol, h * invphi, c=d, fc=fd, d=Yok, fd=Yok)

Fibonacci araması

Bulmak için çok benzer bir algoritma da kullanılabilir. ekstremum (minimum veya maksimum) bir sıra tek bir yerel minimum veya yerel maksimuma sahip değerler. Yalnızca tamsayı dizi indekslerini incelerken altın bölüm aramasının prob konumlarını yaklaştırmak için, bu durum için algoritmanın varyantı tipik olarak, parantez içindeki aralığın uzunluğunun bir olduğu çözümün bir parantezini korur. Fibonacci numarası. Bu nedenle, altın bölüm aramasının sıra varyantına genellikle Fibonacci araması.

Fibonacci araması ilk olarak Kiefer (1953) olarak minimax bir aralıkta tek modlu bir fonksiyonun maksimumunu (minimum) arayın.

Ayrıca bakınız

Referanslar

  • Kiefer, J. (1953), "Bir maksimum için sıralı minimax arama", American Mathematical Society'nin Bildirileri, 4 (3): 502–506, doi:10.2307/2032161, JSTOR  2032161, BAY  0055639
  • Avriel, Mordecai; Wilde, Douglass J. (1966), "Simetrik Fibonacci arama tekniği için optimallik kanıtı", Fibonacci Üç Aylık Bülteni, 4: 265–269, BAY  0208812