Newton-Raphson yöntemi, eşitlik köklerinin bulunmasında en yaygın kullanılan metotlardan birisidir. Yöntemin temeli aşağıdaki şekilde gösterildiği gibi başlangıç değerinin fonksiyonu kestiği noktada çizilen teğetin yatay ekseni kestiği yeni nokta, başlangıç değeri ile değiştirilerek köke yaklaşmaya çalışmaktır. Bu yeni nokta çoğu zaman başlangıç değerine göre daha yaklaşık bir köktür. Taylor serisi açılımından hareketle Newton – Raphson yöntemi yakınsama ifadesi aşağıdaki şekilde elde edilebilir.
Burada yukarıdaki eşitlikler kullanılarak ilk eşitlik aşağıdaki şekilde yeniden düzenlenebilir.
Son bulunan eşitlik başlangıç değeri, fonksiyon değeri, ve fonksiyonun başlangıç değeri ile elde edilen türevi kullanılarak elde edilen yeni yaklaşık kök değeridir. Bu ifadeyi genelleştirerek bir iterasyon ifadesi şeklinde aşağıdaki eşitlik şeklinde yazılabilir.
Bir başka yaklaşımla (f(x0) ,x0 ) noktasındaki teğetin eğimi aşağıdaki eşitlik şeklinde olduğu bilinmektedir. Bu eğim fonksiyon değerinin , başlangıç değeri (x0) ile yeni yaklaşık değer (x1) farkına oranı şeklinde yazılabilir.
Aşağıda f(x)=3-2*x-exp(-x)=0 lineer olmayan denklemin kökünü Newton-Raphson metodu ilen bulan MATLAB programı detaylı şekilde verilmiştir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
clc; clear all; % f, lineer olmayan denklemdir. % f1, f fonksiyonun türevidir. % x0, iterasyon başlangıç değeri % epsilon, f fonksiyonunun toleransı % delta, ilk koşul tolerans değeri % y değeri ne kadar küçükse o kadar mükemmeldir.!!!!!!!! % k, iterasyon değeridir. % maxi, maksimum iterasyon sayısıdır. syms x delta=0.0000001; epsilon=0.00001; maxi=20; x0=0; f=@(x) 3-2*x-exp(-x); f1=@(x) exp(-x)-2; for k=1:maxi a=f1(x0); %türevin sıfır olup olmadığı kontrol ediliyor. if abs(a)<0.00001 disp('turevin değeri sıfıra çok yakın, algoritma durur') break end x1=x0-f(x0)/f1(x0); hata=abs(x1-x0); hatatek=2*hata/(abs(x1)+delta); x0=x1; y=f(x0); if(hata<delta)|(hatatek<delta)|(abs(y)<epsilon) break end end disp('aranılan kök değeri') x1 disp('hata miktarı') y disp('iterasyon sayısı') k |
Programın sonucu aşağıdaki gibidir.