X

Newton-Raphson Yöntemi ile Kök Bulma – MATLAB Uygulaması

Dah önce Sabit Kesen Yöntemi (False position) ve Bisection (İkiye Bölme) Yöntemi ile bir fonksiyonun köklerini nasıl bulabileceğimizi işlemiştik. Bu yazımızda da Newton Yöntemini (Newton-Raphson yöntemi olarak da bilinir) göreceğiz ve MATLAB uygulamasını göstereceğiz.

Yazı İçeriği

Newton-Raphson Yöntemi nedir? Nasıl çalışır?

Newton-Raphson Yöntemi'nde tahmin aralığında bir nokta seçilir ve bu noktaya kesen doğrunun eğiminin (yani fonksiyonun o noktadaki türevinin) x-eksenini kestiği nokta bir sonraki nokta olarak seçilir. Aynı şekilde diğer noktalar da bu şekilde seçilmeye devam eder.

ilk tahmin noktası olmak üzere, bir sonraki nokta aşağıdaki gibi bulunabilir:

   

Newton Raphson Yöntemi – Animasyon

Örnek:

fonksiyonunun kökünü alt tahmin , üst tahmin ve hata kriteri olacak şekilde Newton-Raphson Yöntemi'ni kullanarak MATLAB yardımıyla bulalım.

MATLAB Uygulaması

1) Fonksiyon dosyalarını oluşturalım

Hesaplama sırasında kökünü bulmak istediğimiz fonksiyonave bu fonksiyonun türevine ihtiyacımız olacak. Bu yüzden fonksiyonumuzu ve onun türevini iki ayrı MATLAB fonksiyonu olarak oluşturmamız gerekiyor. Öncelikle fonksiyonum isminde, kökünü bulmak istediğimiz fonksiyonu içeren bir m dosyası oluşturarak kaydediyoruz.

function [y]=fonksiyonum(x)
y = 4*x.^4 + 6*x.^3 + 10*x-20;

Daha sonra da fonksiyonumuzun türevini içeren turev.m dosyamızı aşağıdaki gibi bir MATLAB fonksiyonu olarak oluşturuyoruz:

function [y]=turev(x)
y=16*x.^3 + 18*x.^2 + 10;

2) Newton Raphson Yöntemini Uygulayalım

Başlangıç koşullarımızı kodlayalım:

clear all; clc;
L=0;            %Alt değer
U=10;           %Üst değer
hata=1e-9;      %Hata kriteri
n=20;           %Maksimum iterasyon sayısı
hata = 1e-10;   %Hata değeri

Bir başlangıç noktası olarak kökü arayacağımız aralığın orta değerini başlangıç noktası olarak seçelim:

x(1)=(L+U)/2;

Şimdi de Newton-Raphson Algoritmamızı for döngüsü ile çalıştıralım. Eğer döngü boyunca hata kriteri sağlanırsa döngü sonlansın ve sonuçlarımız ekrana basılsın:

for i=1:n
 %Newton Raphson hesaplaması
 x(i+1) = x(i) - fonksiyonum(x(i)) / turev(x(i));

%Hata hesabı
 if (i>1) && (abs(x(i+1)-x(i))<hata)
 break
 end
[adinserter block="2"]
 fx(i)=fonksiyonum(x(i));
 end

Son olarak da sonuçlarımızı komut penceresine bastıralım:

%Sonuçları bastıralım
fx(i+1)=fonksiyonum(x(i+1));
step=[1:i+1];
x=x(1,1:i+1);
fx=fx(1,1:i+1);

table=[step;x;fx];
fprintf('\nIter.    \t  x \t       f(x) \n')
fprintf('%2.0f      \t %2.7f   \t %2.15f \n',table)

Sonuç:

Algoritmamız sadece 11 iterasyon sonunda değerine yakınsadı. Görüldüğü gibi Newton-Raphson Yöntemi kök bulma konusunda oldukça hızlı ve etkili bir yöntem olup Sayısal Analiz yöntemleri arasında hatırı sayılır bir yere sahiptir.

Iter.          x            f(x)
1           5.0000000        3280.000000000000000
2           3.6666667        1035.456790123457000
3           2.6717438        324.962764334533860
4           1.9392378        99.718819049122914
5           1.4262178        28.218778435209508
6           1.1228905        6.083213635740638
7           1.0129845        0.578449023272654
8           1.0001591        0.007003495368266
9           1.0000000        0.000001063609350
10           1.0000000        0.000000000000000
11           1.0000000        0.000000000000000

sayginer: Kişisel internet sayfası: http://sayginer.com