6.5 Aral¬k üzerinde s¬f¬ryerleri
6.5.2 Vektörel Newton Yöntemi
Sabit nokta iterasyon yöntemleri bir disk içerisinde yer alan tüm s¬f¬ryerle- rini(reel ve kompleks) bulacak biçimde geli¸stirilebilirler. Özel olarak New- ton yöntemi MATLAB/Octave vektör cebiri kullan¬larak bu amaçla geli¸stir- ilebilir. Reel s¬f¬ryerleri için uygun ba¸slang¬ç vektör tahmini ile [7] yüksek lisans tez çal¬¸smas¬nda sunulmu¸stur.
Bu bölümde [7] de geli¸stirilen reel s¬f¬ryerleri algoritmas¬n¬, s¬f¬r merkezli diskteki tüm s¬f¬ryerlerini belirleyecek biçimde geli¸stirerek Algoritma 6.3 ile a¸sa¼g¬da veriyoruz.
Algoritma 6.3 ya ait Program 6.4 bölüm al¬¸st¬rmalar¬sonunda verilmek- tedir.
ÖRNEK 6.12. f(x) = x3 1; x5 1; x7 1; x9 1 fonksiyonlar¬n¬n tüm s¬f¬ryerlerini yukar¬daki algoritma yard¬m¬yla belirleyerek, s¬f¬ryerlerini birim çember üzerinde gösteriniz.
Çözüm.
S¬ras¬yla herbir fonksiyon için a¸sa¼g¬daki program parças¬n¬uygun gra…k penceresinde çal¬¸st¬ral¬m.
x=-1:0.01:1;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2-1;
subplot(2,2,1);
contour(X,Y,Z,[0 0.01]);
hold on;
f=inline(’x.^3-1’);
df=inline(’3*x.^2’);
Xff=cvnewton(f,df,2,1);
plot(Xff,’*r’);axis(’square’);
Elde etti¼gimiz ekran ç¬kt¬s¬¸Sekil 6.5 te sunulmaktad¬r .
-1 -0.5 0 0.5 1
-1 -0.5 0 0.5 1
-1 -0.5 0 0.5 1
-1 -0.5 0 0.5 1
-1 -0.5 0 0.5 1
-1 -0.5 0 0.5 1
-1 -0.5 0 0.5 1
-1 -0.5 0 0.5 1
¸
Sekil 6.5: xn 1 inn = 3;5;7ve 9 için s¬f¬ryerleri.
ÖRNEK 6.13. f(x) = sin(x) 1=x fonksiyonunun [ 10;10] aral¬¼g¬ndaki s¬f¬ryerlerini Program 6.4 ile belirleyiniz.
Çözüm. >> f=inline(’sin(x)-1./x’)
>> df=inline(’cos(x)+1./x.^2’)
>> X¤=cvNewton(f,df,10,1)
X¤ = -9.3172 -6.4391 -2.7726 -1.1142 1.1142 2.7726 6.4391 9.3172 Elde edilen s¬f¬ryerleri ve fonksiyon gra…¼gi ¸Sekil 6.6 de gösterilmektedir.
S¬f¬ryerini içeren aral¬kta fonksiyonun i¸saret de¼gi¸stirmemesi durumunda vektörel ikiye bölme yöntemi yerine vektörelNewtonyönteminin kullan¬lmas¬
uygundur. A¸sa¼g¬daki örnekte fonksiyonun s¬f¬ryerlerinde i¸saret de¼gi¸stirmedi-
¼
gine dikkat ediniz.
K a ra d e n iz Te k n ik M a t e m a t ik , e rh a n @ k tu .e d u .t r
-10 -8 -6 -4 -2 0 2 4 6 8 10 -10
-8 -6 -4 -2 0 2 4 6 8 10
¸
Sekil 6.6: f(x) = sin(x) 1=xfonksiyonu gra…¼gi ve s¬f¬ryerleri(*) ÖRNEK 6.14. f(x) = sec(x) 1 fonksiyonunun [ 10;10] aral¬¼g¬ndaki s¬- f¬ryerlerini Program 6.4 ile belirleyiniz.
Çözüm. >>f=inline(’sec(x)-1’)
>>df=inline(’sec(x).*tan(x)’)
>>X¤=cvNewton(f,df,10)
>>X¤ =-6.2832 -0.0000 6.2832
-8 -6 -4 -2 0 2 4 6 8
-100 -80 -60 -40 -20 0 20
¸
Sekil 6.7: sec(x)-1 fonksiyonu ve s¬f¬ryerleri
Al¬¸st¬rmalar 6.2.
1. Vektörel ikiye bölme yöntemine ait algoritma6.2 için uygun program haz¬rlayarak a¸sa¼g¬da verilen fonksiyonlar¬n kar¸s¬lar¬nda belirtilen ar- al¬klardaki s¬f¬ryerlerini belirleyiniz.
(a) f(x) = x3+ 3x2 2x 1;[ 5;5]
(b) f(x) = cos(x) 1=x2;[ 8;8]
(c) f(x) = e x2 sin(x);[ 7;7]
(d) f(x) = tan(x) cos(x);[ 10;10]
2. Yukar¬da verilen 6.3 algoritmas¬na ait cvNewton isimli Program 6.4 a¸sa¼g¬da verilmi¸stir. cvNewton program¬n¬ yukar¬da bölüm sonunda ve- rilen çözümlü örnekler üzerinde test yap¬n¬z. Ayn¬sonuçlar¬elde ediyor musunuz?
3. Soru 2 de inceledi¼giniz program¬, Soru 1 de verilen örnekler üzerinde de test yap¬n¬z. Vektörel ikiyebölme yöntemi ile ayn¬sonuçlar¬elde ediyor musunuz?
4. Proje(Polinomlar için Vektörel Newton Yöntemi): Fonksiyon ve türevini kullan¬c¬dan alarak belirtilen yar¬çapl¬ disk içerisindeki tüm s¬f¬ryer- lerini belirleyen 6.3 algoritmas¬n¬, verilen polinomun tüm s¬f¬ryerle- rini bulacak biçimde ve CVNewtonp ismiyle geli¸stiriniz. Kullan¬c¬n¬n sadece polinomun katsay¬lar vektörünün girmesi yeterli olmal¬d¬r.(·Ipucu:
Öncelikle verilen bilgiden hareketle s¬f¬ryerlerini içeren disk yar¬çap¬n¬
ilgili teoriyi ara¸st¬rarak tahmin ediniz. Ayr¬ca türev polinomunun kat- say¬lar vektörünü, verilen polinom katsay¬lar vektörü yard¬m¬yla belir- leyiniz.) Test sonuçlar¬n¬z¬ MATLAB/OCTAVE roots fonksiyonu ile elde edebilece¼giniz sonuçlarla kar¸s¬la¸st¬r¬n¬z.
K a ra d e n iz Te k n ik M a t e m a t ik , e rh a n @ k tu .e d u .t r
Algoritma 6.3 Disk içersindeki tüm kökler için Vektörel Newton Algorit- mas¬
1. input: f; df; r; secenek; dx; secenek = 0:reel s¬f¬ryerleri,secenek = 1:tüm s¬f¬ryerleri
2. varsay¬lan de¼gerler: secenek= 0; dx= 0:1;
3. Reel s¬f¬ryerler için X0 = r:dx:r;
4. Tüm s¬f¬ryerleri içinX = [ r :dx:r]x[ r :dx:r];Y =X;Z =X+iY; 5. Z matrisinin sat¬rlar¬n¬uç uca ekleyerek X0 ba¸slang¬ç vektörü olu¸stur;
6. Xf f(X0) = 0;
7. sayac= 0;M axsayac= 15;carp= 1e10;eps= 1E 14;
8. M axsayacde¼gerine ula¸s¬lana kadar a¸sa¼g¬dadakileri tekrarla;
(a) df(X0)vektörünü hesapla vedf(X0)6= 0 olan i0 indislerini belirle;
(b) X0 X0(i0);
(c) X1 X0 f(X0):=df(X0);
(d) jX1j< re¸sitsizli¼gini sa¼glayanii indislerini belirle;
(e) X0 X0(ii); X1 X1(ii);
(f) f ark jX1 X0j;
(g) f ark epse¸sitsizli¼gini sa¼glayanj0indislerini belirle;
(h) f ark > epse¸sitsizli¼gini sa¼glayanj1indislerini belirle;
(i) sayac sayac+ 1;
(j) Xf X0(j0);yak¬nsayan bile¸senleri Xf vektörüne y¬¼g;
(k) X0 X1(j1);yak¬nsamayan bile¸senleri güncel ba¸slang¬ç vektörü ola- rak al;
(l) X0 bo¸s ise mevcut Xf f i kullan¬c¬ya ilet;
(m) secenek= 1 ise
i. reel ve sanal k¬s¬mlar¬virgülden sonra on basama¼ga kadar yuvarla;
ii. fakl¬bile¸senleri belirle veXf f vektöründe biriktir.
(n) secenek= 0 ise
i. yak¬nsak bile¸senleriXf f vektöründe biriktir;
ii. Xf f vektörünü s¬rala;
iii. ard¬¸s¬k elemanlar aras¬ndaki fark¬K a ra d e n iz Te k n ik M a t e m a t ik , e rh a n @ k tu .e d u .t rdx den büyük olanlar¬ farkl¬
function Xff=cvnewton(f,df,r,secenek,dx)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Vektörel Newton B(0,r) deki komplex/reel kökleri bulur
% secenek girilmezse reel s¬f¬ryerlerini bulur.
% secenek=1 ise tüm s¬f¬ryerlerini bulur.
% ec, May¬s, 2015
% Bu program [7] de verilen program¬n geli¸stirilmi¸s versiyonudur.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
carp=1e6; %kompleks kökler için yuvarlama parametresi sayac=0; %sayac de¼gi¸skeni
eps=1E-14; %yak¬nsama kontrol parameteresi maxsayac=25; % maximum iterasyon say¬s¬
if nargin==3 secenek=0;dx=0.1;
end;
if nargin==4 dx=0.1;
end
if secenek==0
X0=-r:dx:r;X0=X0’; %reel s¬f¬ryerleri için ba¸slang¬ç elseif secenek==1 % tahmin vektörü
x=-r:dx:r;y=j*x;n=length(x);n2=n*n;
[X,Y]=meshgrid(x,y);
Z=X+Y;
X0=reshape(Z,n2,1); % tüm s¬f¬ryerleri için ba¸slang¬ç
% tahmin vektörü(reel ve kompleks) else error(’kullan¬m: Xf=cvnewton(f,df,r,secenek,dx)’);
end
test=sayac<maxsayac; % döngü de¼gi¸skeninin ilk de¼geri 1 e e¸sit ii=find(f(X0)==0); % tesadüfen bulunabilen s¬f¬ryerleri
Xf=X0(ii); % s¬f¬ryerlerini saklayan vektörel de¼gi¸sken while test
df0=df(X0); %türevin X0 daki de¼gerler vektörü
i0=find(df0~=0); % türevin s¬f¬rdan farkl¬ oldu¼gu indisler X0=X0(i0); %turevi s¬f¬rdan farkl¬ ba¸slang¬ç de¼gerleri X1=X0-f(X0)./df(X0); %Vektörel Newton ad¬m¬
ii=find(abs(X1)<r); % r yar¬çapl¬ bölgedeki s¬f¬ryerleri indisleri X0=X0(ii);
X1=X1(ii);
fark=abs(X1-X0); %yakla¸s¬mlar aras¬ fark
j0=find(fark<=eps); %yak¬nsayan bile¸senlerin indisleri j1=find(fark>eps); %yak¬nsamayan bile¸senlerin indisleri sayac=sayac+1; %döngü de¼gi¸sken de¼ger art¬r¬m¬
if length(j0)>0
Xf=[Xf;X1(j0)]; % yak¬nsayan bile¸senleri X vektörüne diz end
K a ra d e n iz Te k n ik M a t e m a t ik , e rh a n @ k tu .e d u .t r
if length(j1)>0
X0=X1(j1); % yak¬nsamayan bile¸senlerle devam et end
if isempty(X0)
break; %bölgede yak¬nsamayan bile¸sen yoksa döngüden ç¬k end
test=sayac<maxsayac; % maxsayac ula¸s¬lana kadar i¸slemleri tekrarla end
if secenek==1
Xfr=round(carp*real(Xf))/carp; %reel k¬s¬mlar¬ yuvarla Xfs=round(carp*imag(Xf))/carp; % sanal k¬s¬mlar¬ yuvarla
Xfy=round(carp*Xfr)/carp+i*round(carp*Xfs)/carp; %yuvarlanm¬¸s de¼gerler Xff=unique(Xfy); %farkl¬ olan yuvarlanm¬¸s de¼gerleri belirle
else
ii=find(abs(f(Xf))<1e-5); % yak¬nsak bile¸sen indisleri if length(ii)>0
Xf=Xf(ii);
Xf=sort(Xf); %s¬rala
Xff(1)=Xf(1);n=length(Xf)-1;
for ii=2:n
if abs(Xf(ii+1)-Xf(ii))>dx
Xff=[Xff;Xf(ii+1)]; %farkl¬ olanlar¬ seç end
end
else display(’No reel zeros’);
end end
Program 6.4: Geli¸stirilmi¸s Vektörel Newton yöntemi uygulamas¬
[1] Atkinson, K. An Introduction to Numerical Analysis, John Wiley &
Sons, 1988.
[2] Co¸skun, E. OCTAVE ile Say¬sal Hesaplama ve Kod- lama(URL:erhancoskun.com.tr).
[3] Co¸skun, E. Maxima ile Sembolik Hesaplama ve Kod- lama(URL:erhancoskun.com.tr).
[4] Edwards & Penney, çeviri ed. Ak¬n, Ö., Diferensiyel Denklemler ve S¬n¬r De¼ger Problemleri, Palme Yay¬nc¬l¬k, 2006.
[5] MATLAB, Mathworks(URL:mathworks.com).
[6] Maxima, GNU özgür yaz¬l¬m(URL:maxima.sourceforge.net).
[7] Memo¼glu, M., Vektörel S¬f¬ryeri ve ektremum nokta belirleme algorit- malar¬, Yüksek Lisans Tez Çal¬¸smas¬, KTÜ, 2012.
[8] OCTAVE, GNU özgür yaz¬l¬m(URL:OCTAVE.sourceforge.net).
[9] Press, H. W. ve ark., Numerical Recipes in C, Cambridge University Press, 1988.
[10] Stoer, J., Bulirsh, R., Introduction to Numerical Analysis, Springer- Verlag, 1976.
[11] Strang, G., Introduction to Applied Mathematics, Wellesley-Cambridge, 1986.
K a ra d e n iz Te k n ik M a t e m a t ik , e rh a n @ k tu .e d u .t r