Regula Falsi Yöntemi (Yer değiştirme yöntemi)

Herkese Merhaba! Bugün sayısal analizde kapalı yöntemlerden son yöntemimiz olan regula falsi yöntemi üzerinde duracağız. Şuana kadar gördüğümüz grafik yöntemi ve bisection yöntemi varken neden bu yönteme ihtiyaç duyulmuştur? Biliyoruz ki insanlık daima geliştirmelere ihtiyaç duymuştur. İnsanlığın sağladığı bu gelişmeler bunun gibi yöntemlerde de etkili olmuştur. İhtiyaçlar doğrultusunda bisection yönteminin yavaş olmasından kaynaklı olarak Regula Falsi Yöntemi (Yer değiştirme yöntemi) bulunmuştur.

Regula Falsi yöntemi karşımıza yer değiştirme yöntemi olarak çıkabiliyor. Buna ek olarak False Position Method (Doğrusal interpolasyon yöntemi) isimleriyle de çıkabiliyor. Yukarıda belirttiğim gibi bazı problemlerin çözümünde bisection yöntemi oldukça uzun sürüyor. Bu çözümü hızlandırmak amacıyla yer değiştirme yöntemi geliştirilmiştir.


Regula Falsi Yönteminin Hesaplanması

Bisection yöntemi yazısında bahsettiğim gibi tüm bu yöntemlerin birbirinden farkı genel olarak orta değerin hesaplanmasında çıkmaktadır. Bu yöntemi de bisectiondan ayıran tek fark orta değerin hesaplanmasıdır. Bisection yöntemindeki gibi bu yöntemde de [a ,b] aralığında fonksiyonun değerleri f(a) ve f(b) çarpımları ters işaretliyse bu aralıkta kesin bir kök vardır.

Bu yöntemde [a, b] aralığında; fonksiyon, uygun bir doğru ile yer değiştirilerek kök aranmaktadır. Buradaki ( a , f(a) ) ve ( b f(b) ) noktaları arasında çizilen doğrunun x ekseninin kesim noktası c olarak alınmaktadır. Çünkü bu c değeri kök değerine daha yakındır. Şekil olarak bakacak olursak;

Fonksiyonun f(a) ile f(b) arasında kalan yayı doğru haline getirilmesi
Fonksiyonun f(a) ile f(b) arasında kalan yayı doğru haline getirilmesi

Fonksiyonun f(a) ile f(b) arasında kalan yayı doğru haline getirildiğinde x eksenini kesen c noktası kök değerine daha yakındır. Burada gördüğünüz f(a).f(c)>0 işlemi bize kökün c ile b arasında olduğunu göstermektedir. Bunun tam tersi durumu için ise;

Fonksiyonun f(a) ile f(b) arasında kalan yayı doğru haline getirilmesi
Fonksiyonun f(a) ile f(b) arasında kalan yayı doğru haline getirilmesi

Burada da f(a).f(c)<0 işlemi bize kökün a ile c arasında olduğunu göstermektedir. Eğer bir yazılım mühendisi öğrencisi iseniz buradaki hesaplanma işlemi çokta işinize yaramayacaktır. Yine de şekil üzerinden formülün nasıl çıkarıldığını anlayabilirsiniz. Fakat bize yalnızca orta nokta olan c’nin bulunma formülü yeterli olacaktır.

Regula Falsi Yönteminde Orta Noktanın Bulunması Formülü
Regula Falsi Yönteminde Orta Noktanın Bulunması

Orada en alttaki kutucuk içinde bulunan c = b*f(a) – a*f(b) / f(a) – f(b) bizim orta noktamızı bulma formülüdür.

En baştan sıralayacak olursak öncelikle bize verilen aralıkta f(a)*f(b)<0 şartı aranır. Ardından orta noktamız (c değeri) hesaplanır. Daha sonra f(c) değeri hesaplanır. Eğer f(c) = 0 ise kök c deyip bitirebiliriz. Eğer f(c) != 0 (f(c) Eşit değilse sıfıra) işleme devam edilir. Alt ve üst değerlerimize karar verirken ise eğer f(a) * f(c) > 0 | a = c | ya da f(a) * f(c) < 0 | b = c | olarak eşitlenmektedir. Ve tekrar ilk aşamaya dönülür. Hata Hesaplanması ve Tolerans Değeri yazımızdan hatırlayacağınız üzere döngümüzü bize verilen tolerans değeri üzerinden de hesaplayabiliriz. Bu yöntem için bağıl hatanın tolerans değerinden küçük olma şartı koşulmaktadır. Bağıl Hata = | (Son değer – Bir önceki değer) / Son değer|şeklinde hesaplanmaktadır. Eğer bu formülün sonucu tolerans değerinden küçük ise en doğru cevap olarak kabul edilmektedir. Ve döngü sonlandırılmaktadır. Şimdiye kadar konuştuklarımızı MATLAB kullanarak bir soru üzerinde pekiştirelim.


Regula Falsi Matlab Örneği

Şimdi yapacağımız örnekte dikkat etmenizi istediğim bir nokta olacak. Lütfen aşağıda vermiş olduğum kodları detaylıca inceleyin. Ve bundan önceki yöntemle işlem açısından ne fark var anlamaya çalışın. Göreceksiniz ki orta nokta olan xr noktasının karşısında onun hesaplanma yöntemi dışında hiçbir fark yok. Tabii buna işlem açısından bakarsak geçerli 🙂 Gerçekten de diğer yöntemlerde de bu durum söz konusu. Hadi gelin kodumuzu inceleyelim.

Matlab üzerinde örneğimiz
Matlab üzerinde örneğimiz

Satır Satır İlerleyelim..

İlk olarak [1,3] aralığında f(x)=x^3-5x denklemini inceleyeceğimizi belirttik. Ardından aralığımdaki a b değerlerini ve bize verilen tolerans değerini tanımladım. Tolerans değeri ile ilgili yazımda belirttiğim gibi bu değer bize hesaplanıp verilmektedir. Bizim bulduğumuz bir değer değildir. Ardından bir fprintf satırını görmektesiniz. Bunu yazmamın sebebi size döngü üzerinde sayıların nasıl değiştiğini göstermektir. Oradaki ilk fprintf bize hangi sayı hangi başlıkta bir nevi onu gösteriyor. Yani sonucumuza bir etkisi yok yalnızca aşağıda göreceğiniz çıktı da anlaşılabilir olması için yazdım.

Ardından 1’den 50’ye kadar bir for döngüsü oluşturuyorum. Bunun içinde sırasıyla; f(a), f(b), f(xr) değerlerini elimde tutmak için fonka, fonkb, ve fonkxr olarak değerleri tutuyorum. Orta noktamız olan xr‘yi de regula falsi yönteminin formülünü kullanarak değerini tutuyorum. Orada gördüğünüz bir diğer fprintf satırı döngüdeki oluşan değerleri sırasıyla i, a, b, xr, fonkxr olacak şekilde yazıyorum. Oradaki %4.1f, %7.8f.. şeklinde giden ifade az önceki yazdığım sıralamaya denk geliyor. Yani bununda sonucumuza etkisi yok yalnızca görebilmeniz açısından yapılmış bir süsleme gibi düşünebilirsiniz.

Ardından abs(fonkxr) fonksiyonunu kullanarak fonkxr değerinin mutlak değerde tolerans değerinden küçüklüğünü kontrol ediyorum. Eğer küçükse döngü sonlanıyor. Aksi takdirde döngü devam edecek. Yine bisection yönteminden hatırlayacağınız gibi orta noktayı aralığıma ekliyorum. Eğer fonka*fonkxr<0 ise b değerim artık yeni orta noktam olacak. Aynı zamanda hatırlayacaksınız ki formülümde bisection yönteminden farklı olarak fonka ve fonkb değerini kullanıyorum. Bu yüzden eğer ilk koşulum doğruysa fonkb = fonkxr eşitliğini de yazmam gerekiyor. Aksi takdirde ise bu durumun tersi olacağı için aynı işlemleri a = xr ve fonka = fonkxr olacak şekilde değiştiriyorum.

En son ise döngümüz tamamlanıyor ardından da i, xr ve fonkxr değerlerini CommandWindow üzerinde yazdırıyorum.

Kodları elimden geldiğince satır satır anlatmaya çalıştım yine de anlamadığınız bir kısım olursa bana ulaşabilirsiniz. Hadi şimdi çıktımıza bakalım.

Matlab üzerindeki örneğimizin çıktısı
Matlab üzerindeki örneğimizin çıktısı

Gördüğünüz üzere döngümüz 15. iterasyonda durmuş ve tolerans değerimize yakın bir sonuç bulmuşuz. Rakamların döngünün sonuna doğru ne kadar küçük değiştiğini dikkat etmenizi isterim. Ve daha %7.8 şeklinde yazdığımız için sadece 8 basamağını gösteriyor belki de değişiklikler çok daha küçüktür.

Böylece sayısal analizde kapalı yöntemleri bitirmiş olduk ve bundan sonra açık yöntemlere başlayacağız. Bir sonraki yazıda görüşünceye dek herkese sağlıklı günler dilerim.♡