MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş Y. Doç. Yuriy Mishchenko
Algoritmalara giriş Ders planı (en önemli genel matematiksel problemler) Lineer olmayan denklem çözme İkiye bölme metodu Newton-Raphson metodu Sekant metodu Lineer olmayan denklem sistemi çözme Gaus metodu (lineer denklem sistemleri, Newton-Raphson metodunun adımı) Sayısal optimizasyon metodları Dereceli azaltma algoritması
Algoritmalara giriş Algoritmaların çoğunun doğası matematiksel, yani matematiksel şekilde tanımlanmış ve matematiksel problemin çözümü sağlar Bu durumda, temel matematiksel işlemler bilinir olarak varsayıyoruz yani basit matematiksel işlemler söz konusu değil, bunların üstündeyiz
Algoritmalara giriş Matematiksel problemler arasında en temel olan biri genel denklem çözme
Lineer olmayan denklem çözme Lineer olmayan denklem vardır, ve burada f(x) lineer olmayan genel bir fonksiyon Birçok gerçek problem ve soru gerçek hayatta ve uygulamalarda bu şekile götürülebilir
Lineer olmayan denklem çözme Bu soru çok kolay durumda bile çözülemez;
İkiye bölme metodu İkiye bölme algoritması Ana fikri: eğer bir [a,b] aralığında bir f fonksiyonunun sıfırı varsa, bu fonksiyonun aralığın sonunda hem pozitif hem de negatif olması genellikle beklenebilir b a pozitif negatif
İkiye bölme metodu İkiye bölme algoritması Sıfır noktasını bulmak için, arama aralığını ikiye bölünce hangi tarafta f(a’)*f(b’)<0 koşulun doğruluğunu kontrol ederiz, o tarafta sıfır aramaya devam ederiz b a pozitif negatif
İkiye bölme metodu b a pozitif negatif
İkiye bölme metodu İkiye bölme algoritması Aralığın uzunluğu her zaman iki kat azalır, yani çok hızlı f fonksiyonunun sıfırı herhangi gereken belirlilikle log zamanda bulunabilir
İkiye bölme metodu İkiye bölme denklem çözme algoritması: giriş [ab] aralığı, AB olsun fonksiyon, f olsun AB’nin orta noktası, O olsun AB’nin uzunluğu gereken belirlilikten büyük İKEN AB’nin sol sonu, A olsun EĞER f(A)*f(O) 0’den küçük İSE yeni AB AB’nin sol yarısı olsun AKSİ HALDE yeni AB AB’nin sağ yarısı olsun AB’nin orta noktası, O olsun
Bir boyutlu genel arama İkiye bölme arama algoritması: giriş nesne dizisi, D olsun hedef nesnesi, H olsun D’nin ortasındaki nesnesi, A olsun A H’ye eşit değil ve D’nin boyut 1’den büyük İKEN EĞER A H’den büyük İSE yeni D D’nin sol yarısı olsun AKSİ HALDE yeni D D’nin sağ yarısı olsun D’nin ortasındaki nesnesi, A olsun Eğer A H’ye eşit değil İSE Hedef bulunamadı
İkiye bölme metodu Burada bir boyutlu fonksiyonun sıfırını aranması bir boyutlu genel arama sorunu olarak düşünülebilir, öyleyse genel ikiye bölme yaklaşımını çok verimli şekilde kullanabildik
Newton-Raphson metodu Ana fikir: eğer lineer olmayan denklem çözülemezse, lineer denklemi nasıl çözülebilmesini biliyoruz...
Newton-Raphson metodu Lineer olmayan denklemi çözmek için o zaman: Orijinal genel denklemi yaklaşık olarak lineer denklem kullanarak yazarız Bu “yaklaşık” lineer denklemi çözeriz Bu “yaklaşık” çözüm gerçek çözüme daha yakın olacağını umarız Gerekirse aşağıdaki adımlar son “yaklaşık” çözüm başlangıç nokta olarak kullanarak tekrarlarız
Newton-Raphson metodu Orijinal denklemi yaklaşık olarak lineer denklem kullanarak temsil etmek için türev kullanabiliriz; türev
Newton-Raphson metodu Bu yaklaşık denklemin çözümünün gerçek çözüme daha yakın olacağını umarız;
Newton-Raphson metodu Newton-Raphson yöntemi: Orijinal denklemi türev kullanarak yaklaşık olarak lineer denklem olarak temsil ediyoruz O “yaklaşık” lineer denklemi direkt olarak çözüyoruz Nekadar gerekirse aşağıdakiler tekrarlıyoruz
Newton-Raphson metodu Newton-Raphson algoritması: giriş fonksiyonu, f giriş fonksiyonunun türevi, f’ başlangıç noktası, x gereken belirlilik, e x’nin değişimi e’den büyük İKEN yeni x, x-(f’(x)^-1)*f(x) olsun
Sekant metodu Sekant metodunun ana fikir: a b
Sekant metodu Sekant metodunun ana fikir: Sekant metodunda Newton-Rhapson metodu gibi orijinal genel denklem yaklaşık lineer denklem kullanarak temsil ederiz Burada bu lineer denklem (a,f(a)) ve (b,f(b)) noktaları geçen (kırmızı) çizgi olarak düşünülür, Bu yöntemde fonksiyonun türevinin bilinmesi gerekmez, ve bu açıdan sekant metodu Newton-Raphson metodundan daha kolaydır a b
Sekant metodu Sekant metodunun ana fikir: (a,f(a)) ve (b,f(b)) noktaları geçen lineer fonksiyonu kullanarak orijinal denklemin yaklaşık çözümü elde edilir Bu yaklaşık çözümü x için f(a)*f(x) koşul kontrol edilir ve sıfırın yeni aralığı seçilir Bu yeni aralığında aynı işlem tekrarlanır b a
Sekant metodu Bu algoritmayı evde yazın
Denklem sistemi çözme Birçok durumda bir problemi çözmek için aynı zamanda birçok fonksiyon/koşul sıfıra dönmesi gerekmektedir Bu fonksiyonlarda tipik olarak birçok değişken vardır
Denklem sistemi çözme Bu durumda, bir denklem sistemi olduğunu diyoruz, hem f hem de x birçok fonksiyon ve değişken içerebilir anlamındadır, yani f=(f1,f2,f3,...) ve x=(x1,x2,x3,...)
Denklem sistemi çözme Bu problemin çözümünü elde etmek için yeni Newton-Rhapson yöntemi kullanılabilir, yani orijinal fonksiyonun yaklaşık lineer temsili aranıp o yaklaşık lineer denklem sistemi çözülür
Denklem sistemi çözme Eğer bir değişken durumunda Newton-Rhapson yönteminde fonksiyonun türevi vardıysa, burada türevin rölü bir matris almaktadır
Denklem sistemi çözme Burada yaklaşık denklem sistemi lineer denklem sistemi yani doğrusal denklem dizgesi, yani önceki Newton-Raphson adımı gerçekleştirmek için lineer denklem sistemi çözebilmemiz lazım
Denklem sistemi çözme
Denklem sistemi çözme Lineer denklem sistemleri, temel seviyede önemli ve birçok durumda karşılayan bir matematiksel problem
Denklem sistemi çözme Bu problemin en verimli genel çözüm Gaus yöntemidir
Denklem sistemi çözme Gaus yönteminin ana fikri, ilk önce 2., 3., vb denklemlerden 1. denklemi çıkartıp 2., 3. vb denklemlerden x1 terimi kaldırılmaktır
Denklem sistemi çözme Örneğin, eğer biz 2. denklemden 1. denklem a21/a11 ile çarpıp çıkartırsak, 2. denklemden x1 terimi kaldırılır, aynı şekilde x1 terimi 3., 4., vb denklemlerden kaldırılabilir
Denklem sistemi çözme İkinci adım olarak, 1., 3., 4., vb denklemlerden 2. denklem kullanarak x2 terimi kaldırılır
Denklem sistemi çözme Örneğin, eğer biz 1. denklemden 2. denklem a12/a22 ile çarpıp çıkartırsak, 1. denklemden x2 terimi kaldırılır
Denklem sistemi çözme Bu şekilde devam denklem sistemi “koşegen” formuna getirilir, yani bütün denklemlerde tek x-terim kalır
Denklem sistemi çözme Koşegen formundaki sistemi çözmek kolaydır, yani
“Gaus yöntemi” algoritması: giriş sistemin katsayıları, a(k,m) olsun giriş sistemin sabit terimleri, b(k) olsun denklem/bilinmeyenlerin sayısı, K olsun BÜTÜN b(k;0)=b(k); //hesaplama ilk değişkenleri belirtmek BÜTÜN a(k,m;0)=a(k,m); BÜTÜN k İÇİN //hangi denklem çıkartılacağız BÜTÜN m İÇİN a(k,m;k)=a(k,m;k-1); // i. denklem değişmez BÜTÜN n İÇİN (k≠n) // hangi denklemden çıkartacağız G=a(n,k;k-1) /a(k,k;k-1) // uygun bir çarpıcı BÜTÜN m İÇİN // iki denklem çıkartma işlemi a(n,m;k)=a(n,m;k-1)-G*a(k,m;k-1) // k. katsayı a(n,k;k)---->0 burada b(n;k)=b(n;k-1)-G*b(k;k-1) // sağ sabitin güncelleştirilmesi BÜTÜN m İÇİN x(m)=b(m;K)/a(m,m;K); //final çözüm
Denklem sistemi çözme Genel problem için, orijinal denklem sistemi türevler kullanarak yaklaşık olarak lineer denklem sistemi kullanarak temsil edilip o Gaus yöntemi kullanarak çözüp Newton-Rhapson yöntemi uygulanabilir;
Denklem sistemi çözme Yani, Orijinal denklemi türevler kullanarak ve bir başlangıç noktasına göre yaklaşık lineer denklem sistemi şeklinde yazıyoruz Bu yaklaşık lineer denklem sistemi çözümünü Gaus yöntemi kullanarak buluyoruz Yaklaşık sistemin çözümü, yeni başlangıç noktası olarak kullanıyoruz Bu çözüm gereken belirliliğe gelene kadar aşağıdaki adımları tekrarlıyoruz
Denklem sistemi çözme Bu algoritmayı evde yazın
Sayısal optimizasyon Sayısal optimizasyon, birkaç değişkene bağlı bir fonksiyonun en büyük veya en küçük değerini bulmayı demektir
Sayısal optimizasyon
Sayısal optimizasyon Optimizasyon çok önemli ve birçok uygulamalarda karşılayan problem, ve algoritma biliminin de çok büyük kısmıdır
Sayısal optimizasyon En yüksek noktasında fonksiyon ne artabilir nede azalabilir, yani bu noktada tüm değişkenlere göre fonksiyonun türevi sıfıra eşit olması gerekmektedir
Sayısal optimizasyon Yani, fonksiyonun max noktasını bulmak için genel denklem sistemi çözmek yeterlidir, ve bu Newton-Rhapson yöntemi kullanarak yapılabilir
Sayısal optimizasyon Sayısal optimizasyon: giriş fonksiyonu, f giriş fonksiyonunun xk türevleri, fk lineer-olmayan-denklem-sistemi-çöz( fk )
Sayısal optimizasyon Alternatif olarak çok sık ve birçok durumda (özellikle değişken sayısı yüksek olursa) kullanılan yöntem, dereceli azaltma veya artırma yöntemidir (“gradient descent” veya “gradient ascent” yöntemi) Dereceli artırma yöntemi, genel ve çok güclü sayısal optimizasyon yöntemidir
Sayısal optimizasyon Bir (x1,x2,...) başlangıç noktası ile başlıyoruz Var olan başlangıç noktasında fonksiyonun en hızlı artıran yönüne küçük adımı yapıp başlangıç noktasını güncelleştiriyoruz Yukarıdaki adımı ne kadar gerekiyorsa tekrarlıyoruz Fark edin ki, öyle adımlarla fonksiyonun değeri sürekli düşer yani sonuçta ola fonksiyonun en yüksek bir noktası sağlanması lazım
Sayısal optimizasyon Artırılacak fonksiyon (iki değişken)
Sayısal optimizasyon ... sonuçta bir en yüksek noktaya ulaşıyoruz ... f değerini en hızlı artıran adımları yapıp o noktayı taşıyoruz ... Bir noktada başlıyoruz ...
Sayısal optimizasyon Bir fonksiyonu en hızlı artıran yöne fonksiyonun eğimi yani “gradient” denir Yani fonksiyonun değerini en hızlı artırmak için, fonksiyonun eğim vektörünün yönüne adımlar yapılmalıdır
Sayısal optimizasyon Fonksiyonun eğim vektörü bu şekilde verilir Türevler , şuanki noktaya göre hesaplanmalıdır
Sayısal optimizasyon Not: Dereceli artırma sadece lokal olarak bir max noktasını verir, başka başlangıçla başlayınca başka bir max noktasına gelmeye ihtimal var
Sayısal optimizasyon Not: Eğer fonksiyonun tek max noktası varsa, dereceli artırmanın o noktayı vermesi garantisi var
Sayısal optimizasyon Dereceli artırma algoritmasını evde yazın