EGE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ MAKİNA MÜHENDİSLİĞİ BÖLÜMÜ, İZMİR

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "EGE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ MAKİNA MÜHENDİSLİĞİ BÖLÜMÜ, İZMİR"

Transkript

1 EGE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ MAKİNA MÜHENDİSLİĞİ BÖLÜMÜ, İZMİR Yrd. Doç. Dr. M. Turhan ÇOBAN EGE Ünverstes, Mühendsl Fa. Mana Mühendslğ Bölümü

2 İÇİNDEKİLER TEK BOYUTLU LİNEER OLMIYAN OPTİMİZASYON, GEOMETRİK YÖNTEMLER. OPTİMİZASYONUN TANIMLANMASI VE GRAFİK YÖNTEMLE TEK BOYUTLU OPTİMİZASYON 0.. BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-ALTIN ORAN FİBONACCHİ) ARAMA.3 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-İKİNCİ DERECE POLİNOM METODLARI.4 BİR BİLİNMİYENLİ-LİNEER OLMAYAN KÜBİK POLİNOM ARAMA YÖNTEMİ.5 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-NEWTON-RAPHSON METODU.6 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK BRENT METODU.7 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-TÜREVLİ BRENT METODU.8 OPTİMİZASYON SINIR TAHMİN DEĞERLERİNİN İYİLEŞTİRİLMESİ.9 ALIŞTIRMALAR VE ÖDEVLER DENKLEM SİSTEMLERİNİN ÇÖZÜMÜ. DOĞRUSAL DENKLEM SİSTEMLERİ, GENEL.3 GAUSS ELEME METODU.4 KISMİ PİVOT İŞLEMİ, KISMİ PİVOTLU GAUSS ELEME METODU.5 GAUSS-JORDAN METODU.6 KISMİ PİVOTLU GAUSS-JORDAN METODU.7 LU-ALT-ÜST ÜÇGEN MATRİS- GAUSS DOLİTTLE) METODU.8 CRAUT LU METODU.9 JACOBİ, GAUSS-SEİDEL VE RAHATLAMALI İNTERPOLASYON İTERATİF METODLARI.0 CHOLESKY SİMETRİK MATRİS LU METODU. 3LÜ VE 5Lİ BANT MATRİS. KONJUGE GRADYAN METODU 3. RAKAMSAL VERİLMİŞ BİR BOYUTLU VERİNİN OPTİMİZASYONU VE EĞRİ UYDURMA 3. POLİNOM EN KÜÇÜK KARELER METODU İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 3. GENELLEŞTİRİLMİŞ FONKSİYONLU EN KÜÇÜK KARELER METODU İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 3.3 ORTAGONAL EN KÜÇÜK KARELER METODU İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 3.4 NEWTON ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 3.5 LAGRANGE ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 3.6 KÜBİK ŞERİT ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 3.7 İKİNCİ DERECE B- ŞERİT ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 3.8 HAREKETLİ EN KÜÇÜK KARELER YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU 4 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK OPTİMİZASYON METODLARI 4. NEWTON-RAPHSON ÇOK BİLİNMİYENLİ LİNEER OLMIYAN DENKLEM SİSTEMLERİNİN ÇÖZÜLMESİ 4. NEWTON-RAPHSON OPTIMIZASYONU 4.3 EN DİK YAMAÇ METODU 4.4 NELDER-MEAD SİMPLEKS METODU 4.5 FLETCHER-REEVES METODU GEOMETRİK DİREK TERS HESSİAN DEĞİŞTİRME METODU KONJUGE GRADYEN METODU)

3 4.6 FLETCHER-REEVES METODU KONJUGE GRADYEN METODU) VE NELDER VE MEAD SİMPLEKS METODUNUN BİRLEŞTİRİLEREK KULLANILMASI 4.7 NEWTON-RAPHSON METODU VE NELDER VE MEAD SİMPLEKS METODUNUN BİRLEŞTİRİLEREK KULLANILMASI 4.8 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK DİREK HESSİAN DEĞİŞTİRME METODU : BROYDEN-FLETCHER-GOLDBERG-SHANNO BFGS) 4.9 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK DİREK TERS HESSİAN DEĞİŞTİRME METODU DAVİDON-FLETCHER-POWELL METODU 4.0 SÜREKLİLİK METODU 4. SHERMAN MORRISON FORMÜLLÜ BROYDEN KİRİŞ METODU İLE OPTİMİZASYON 5 GLOBAL İSTATİSTİK ÇÖZÜM METODLARI 5. GENETİK ALGORİTMALAR 5. MONTE-CARLO OPTİMİZASYONU 5.3 İTERASYONLU TEPE TIRMANMA 5.4 TAVLAMA SİMULASYONU SIMULATED ANNEALING) 6 SINIRLAMALI LİNEER OLMAYAN OPTİMİZASYON 7 BİRDEN FAZLA BOYUTLU FONKSİYONLARA EĞRI UYDURMA LINEER OLMIYAN FONKSİYONLARA EĞRI UYDURMA 7. GENEL EN KÜÇÜK KARELER METODU İLE BİRDEN FAZLA DEĞİŞKENLİ FONKSİYONLARIN EĞRİ UYDURMASI 7. LİNEER OLMAYAN KATSAYILI BİR VE ÇOK BOYUTLU BAĞIMSIZ DEĞİŞKENLİ FONKSİYONLARA EĞRİ UYDURMA 8. LİNEER OPTİMİZASYON, SİMPLEKS METODU 9. GEZGİN SATICI PROBLEMİ 9. GENETİK ALGORİTMA 9. MONTE-KARLO 9.3 KARINCA OPTİMİZASYONU

4 . TEK BOYUTLU LİNEER OLMIYAN OPTİMİZASYON, GEOMETRİK YÖNTEMLER. OPTİMİZASYONUN TANIMLANMASI VE GRAFİK YÖNTEMLE TEK BOYUTLU OPTİMİZASYON Optmzasyon mnmzasyon ve masmzasyon şlemlerne verlen genel br smdr. Temel matemat olara batığımızda te boyutlu f) fonsyonu çn df)/d = 0 f) fonsyonunun mnmum veya masmumunu tanımlar. Temel tanım olara mnmum veya masmum arasında şlemsel olara br far yotur, çün masmum f)) = mnmum-f)) olara yazılablr. Bu yüzden sadece fonsyonu - le çarpara masmum veya mnmum bulma şlemler arasına yer değştrme mümündür. Te boyutlu mnmzasyon şlemne l örne olara graf çzme yöntemn verelm. Br fonsyonun grafğn çzere sabt aralılarla fonsyon değern hesaplayara) mnmumun yer çzlen grafnotalarının arasında boşlu hassasyet le saptanablr. Mnmum notaya yalaştığınızda yen daha üçü br aralı saptıyara fonsyonu terar bu aralı çn tarayablrz. Program.-.0*c/ *c+c*c+0.*c*c*c fonsyonu masmumu veya.0*c/ *c+c*c+0.*c*c*c) fonsyonu mnmumunun graf yöntemle bulunması mport java.o.*; class fa etends f_ double func double c) return -.0*c/ *c+c*c+0.*c*c*c)); class PlotT0 publc statc vod man Strng args[]) throws IOEcepton fa ff=new fa); Plot pp=new Plotff,0.0,0.0,400,0); pp.plot); Çıtı.-.0*c/ *c+c*c+0.*c*c*c fonsyonu masmumu veya.0*c/ *c+c*c+0.*c*c*c) fonsyonu mnmumunun graf yöntemle bulunması Çıtı.-.0*c/ *c+c*c+0.*c*c*c fonsyonu masmumu veya.0*c/ *c+c*c+0.*c*c*c) fonsyonu mnmumunun graf yöntemle bulunmasında detaya nlmes

5 Program.- de -.0*c/ *c+c*c+0.*c*c*c) fonsyonunun grafğ çzdrlmetedr. Graf programımız farenn aoordnatlarını da yansıttığından farerey mnmumun üzerne getrere erandan değer detaylı olara ouyablrz. Graf ontrol sayfasıdan ve y esenlernn mnumum ve masmum değerlern elle değştrere optmum notası cvarını daha detaylı çzdrere notayı ouma olaylığı da elde edeblrz. Graf yöntemn ço daha büyü adımlarla br tarama olara ullanırsa optmumun olduğu bölgey saptama çn de ullanablrz.. BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-ALTIN ORAN FİBONACCHİ) ARAMA 0,,,,3,5,8,3,,34, sersne fbonacc sers sm verlr. Genel yazılımı Fn)=Fn-)+Fn-) şelndedr. F0)=0, F)= şelde tanımlanmıştır. Fbonacc sersnn büyü oranlarında F n ) 5 R= lm = = n F n) Pe bu oranı optmzasyonda nasıl ullanacağız? Verlen br a,c) bölgesnn hang tarafında br mnmumveya masmum) olduğunu estreblme çn bu bölgede ara notayı değerlendrmemz gerer. Mnmum arıyorsa ara nota bölgey 3 parçaya böleceğ çn mnmum değern saptandığı notanın tarafında bölgeler alır dğer bölgey atarız. Anca yen değerlendrmede yne ara notaya htyaç duyulur. Kendmze daha önce hesaplanan ara notalardan br terar yen hesapta ullanılamazmı sorusunu sorarsa yanıtımız ara notaların seçmnde altın oran ullanımı olacatır. Şel.- Altın oran mnmum arama prensb. Şel.- de görüldüğü gb a ve c notaları arasında mnmum değer veren notayı bulmaya çalışalım bölgenn uzunluğu d0=c a) olacatır. b notasını b=a+d0*r b notasını b = c d0*r = a + d0*r

6 olara alır se ve mnmumun b notasında olduğunu abul ederse b-c) aralığı ptal olacatır. yen aralığımız d=d0*r olacağından b notasını b=a+d*r=a+d0*r olara alırız bu br önce b notasının aynısıdır. b notasını b = c d*r = a + d*r = a + d0*r 3 olara alırız. Br nota aynı olduğundan yen eleme çn sadece br fonsyon değerlendrmesne htyacımız olacatır. ve her yen elemede notaların br sağ veya soldan elememze göre değşere) dama aynı alacatır. Program.- Altın oran arama programı mnmzasyon çn) // OPTIMİZASYON // ÖDEV mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class fb etends f_ publc double func double c) return -.0*c/ *c+c*c+0.*c*c*c)); publc class FOPO publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya)

7 p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) fb f=new fb); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; System.out.prntln"=0.5"+f.func0.5)); System.out.prntln"=.5"+f.func.5)); r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Fbonacch optmzasyon : ",JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı.- Fbonacc altın oran ) mnmzasyon programı Örne fonsyon Çıtı - de aynı fonsyondur..3 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-İKİNCİ DERECE POLİNOM METODLARI Altın arama metodu lneer br arama metodudur, her zaman şmze yarar anca çözüme ulaşması görecel olara yavaştır. Çözüme ulaşma hızını arttırma ster se nc dereceden br arama yöntemne başvurablrz. 3 notadan nc dereceden br polnom geçmes uralını ö bulma bölümünde de ullanmıştı. Benzer br yalaşımla verlen 3 notadan a b ve c notaları olsun) geçen parabolün mnmumveya masmum) notasını parabol denlemnn çözümünden elde edeblrz. Parabolün mnmum notası c b) [ f a) d = b c b) [ f a) f b)] a b) [ f c) f b)] a b) [ f c) f a)] f a)] denlemn ullanara elde edleblr. D noasını buldutan sonra b notası yerne d notasınıalara yen br terasyon çn hesabımıza devam ederz. Şel.3- nc derece polnom metodu le mnmum bulunması

8 Program.3- nc derece polnom optmzasyonu /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class fb etends f_ publc double func double ) return *-.0*; publc class FOPO publc statc double polnomderecef_ f,double 0,double ) double =0+)/.0; return polnomderecef,0,,); publc statc double polnomderecef_ f,double 0,double,double ) double epslon=.0e-0; double delta=.0e-5; nt prnt=0; return polnomderecef,0,,,epslon,delta,prnt); publc statc double polnomderecef_ f,double 0,double,double,double epslon,double delta,nt prnt) nt mat=00; double f0 = f.func0); double f = f.func); double f = f.func); double f3 = f; double 3 = 0; double h = - 0; double =; double dd=math.absf-f0); whle dd >epslon) h>delta)) ++; 3=f0**-*)+f**-0*0)+f*0*0-*))/ *f0*-)+.0*f*-0)+.0*f*0-)); f3=f.func3); f3 >= 0 && 3<) =;f=f;=3;f=f3; else f3 >= && 3 <) 0=;f0=f;=3;f=f3; else f3 >) 0=;f0=f;=;f=f;=3;f=f3; else f3 < 0) 0=3;f0=f3;=0;f=f0;=;f=f; dd=math.absf-f0); h=math.abs-0); f>mat) brea; //end of whle fprnt==) System.out.prntln" = "+3+"f = "+f3+"hata ="+h+"hata f)=y "+dd); return 3; publc statc vod man Strng args[]) fb f=new fb); double 0,,; 0=Double.parseDoubleJOptonPane.showInputDalog" Fonsyonun alt sınırını grnz 0 : ")); =Double.parseDoubleJOptonPane.showInputDalog" Fonsyonun orta sınırını grnz : ")); =Double.parseDoubleJOptonPane.showInputDalog" Fonsyonun üst sınırını grnz : ")); double r; r= polnomderecef,0,,,.0e-0,.0e-5,); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Polnom derece optmzasyon : ",JOptonPane.PLAIN_MESSAGE); System.et0);

9 Çıtı.3- nc derece polnom optmzasyonu.4 BİR BİLİNMİYENLİ-LİNEER OLMAYAN KÜBİK POLİNOM ARAMA YÖNTEMİ Fonsyonumuza üçüncü dereceden br polnom olara yalaşara, bu polnomun ölern bulma şlemn br önce bölümdene benzer br şelde gerçeleştreblrz. Hermte üb polnomu P)=a- 0 ) 3 +b- 0 ) +c- 0 )+d alınaca olursa, bu polnomun dönüş notası mnmum masmum veya etremum notası) [ 0, ] aralığı çn : b ± b 4ac 0 = formülünden hesaplanablr. İterasyon formülümüz, mnmum sağlama çn 3a * b + b 4ac = 0 + şelnde yazılablr. Bu polnomun a b c d atsayılarını blmyoruz. Bu 3a atsayıları bulma çn p 0 )=d=f 0 ) p 0 )=c=f 0 ) a=g-h)/h h = 0 b=3h-g F=[f ) - f 0 )]/h G==[f ) f 0 )]/h H=[F f 0 )]/h Formüller le hesaplanablr. Br önce quadrat formülde olduğu gb burada da her bulunan nota yen br notanın bulunması çn ullanılablr. Formüllerde fonsyonu endnn yanında türev değerlernn de bulunması geremetedr. Bu değerler program 3- de sayısal türevler ullanılara oluşturulmuştur. Sayısal türev avramı çn lgl bölümümüzü nceleyeblrsnz. Program.4- üçüncü derece polnom optmzasyonu // // // Küb arama yöntem le OPTİMİZASYON // // mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ class fb etends f_ publc double func double ) return +0/*); //=========================================================== publc class FSCO4E publc statc double dff_ f,double,double h) //Türev hesabı double hh=.0/h; return -f.func+.0*h)+8.0*f.func+h)-8.0*f.func-h)+f.func-.0*h))/.0*hh;

10 publc statc double cubc_search_optf_ f,double 0,double ) nt nma=500; double tolerance=.0e-5; double f0,f,df0,df,fs,dfs; double h=0.0000; double s; nt =0; double X,F,G,H,a,b,c; f0=f.func0); f=f.func); df0=dff,0,h); df=dff,,h); whlemath.abs0-)>tolerance && <nma) ++; X=.0/-0); F=X*f-f0); G=X*df-df0); H=X*F-df0); a=x*g-.0*h); b=3.0*h-g; c=df0; s=0+math.sqrtb*b-3.0*a*c)-b)/3.0*a); fs=f.funcs); dfs=dff,s,h); fdfs > 0 ) =s;f=fs;df=dfs; else 0=s;f0=fs;df0=dfs; f>=nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return 0+)/.0; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) fb f=new fb); double []=vergr"arama bölge sınırlarını grnz: o "); double r= cubc_search_optf,[0],[]); JOptonPane.showMessageDalognull," mnmum değer : "+r+"\nfonsyon değer : "+f.funcr), "üb arama yöntem le mnmzasyon hesabı : ",JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı.4- üb polnom optmzasyonu.5 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-NEWTON-RAPHSON METODU

11 Kö bulma şlemler sırasında Newton-raphson yöntemn ncelemşt. Optmzasyonun temel tanımına ger dönerse Mnmum veya masmum) f) deme df)/d=0 anlamına gelyordu. Öyleyse Newton-Raphson metodu le fonsyonun türevnn öünü bulursa burada fonsyonun br masmum veya mnmum veya etremun dönme notası) bulunacağı anlamına gelr. Mnmum f)=0 df ) g ) = = d 0 Newton raphson formülü n+ = n g ) dg ) d = n df ) d d f ) d = n f ' ) f " ) şelnde yazılablr. Program 3- de Newton-Raphson optmzasyon programı verlmştr. Bu programda nc türevler sayısal olara far denlemler le) bulunmatadır. Program.5- Newton-Raphson optmzasyon programı /// OPTIMİZASYON // Newton ö bulma yöntem ve türev ) ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class fc publc double funcdouble ) return -.0*Math.sn)-*/0.0); class fb etends f_ publc double funcdouble ) return -.0*Math.cos)-/0); publc class FOPO3 publc statc double dervatvef_ df,double ) // türev alt programı // df fonsyonunun türevn hesaplar double h0=0.56; nt,m; nt n=7; //dervatve of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,);

12 for=0;<n;++) T[][0]= df.func + h[]) - df.func - h[]))/.0*h[]); form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/ h[]*h[]- h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double newtonf_ df,double ) // df le verlen türev fonsyonunun ölern bulur nt nma=500; double tolerance=.0e-5; double f,df; fornt =0;<nma;++) f=df.func); df=dervatvedf,); -=f/df; fmath.absf)<tolerance) return ; return ; publc statc double newton_nd_dervatvef_ df,double ) // df le verlen türev fonsyonunun ölern bulur nt nma=500; double d=e-3; double m; double tolerance=.0e-5; double f,fm,df,dfm,df; fornt =0;<nma;++) f=df.func); fm=df.func-d); df=dervatvedf,); dfm=dervatvedf,-d)); df=-6.0/d/d*f-fm)+.0/d*.0*df+dfm); -=f/df+.5*f*f/df*df*df)*df); fmath.absf)<tolerance) return ; return ; publc statc vod man Strng args[]) fc f=new fc); fb df=new fb); double 0; 0=Double.parseDoubleJOptonPane.showInputDalog" optmum nota tahmn grnz 0 : ")); double r; r= newtondf,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Newton optmzasyon : ",JOptonPane.PLAIN_MESSAGE); r= newton_nd_dervatvedf,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Newton nc türev optmzasyon : ",JOptonPane.PLAIN_MESSAGE); System.et0);

13 Çıtı.5- Newton-Raphson optmzasyon programı.6 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK BRENT METODU b a) [ f b) f a)] b c) [ f b) = b b a) [ f b) f a)] b c) [ f b) f a)] f c)] parabol formülünü ullanara mnmuma ulaşableceğmz görmüştü. Anca bu formülün temel br hatası bulunmatadır. Mnmuma ulaşacağı yerde masmuma ulaşması da mümündür. Daha emnyetl br yol zleme sterse fonsyon öe yeternce yalaşmadan önce altın oran gb daha emnyetl br metodla gttten sonra fonsyonun mnmum değere yalaştığını gördüğümüzde nc derece polnom yalaşımına geçeblrz. Brent metodu bu şlev sağlama çn gelştrlmştr. Brent metodu br terasyonda 6 nota ullanır. Bu notalara a,b,u,v,w ve derse, tanımları şu şelde yapılablr. A ve b mnmumun çnde bulunduğu bölgey gösterr. o ana adar bulunan mnmuma en yaın notadır. w, den sonra gelen mnmuma en yaın notadır ve v w dan sonra gelen mnmuma en yaın notadır. ayrıca a b bölgesnn orta notasını m olara tanımlayablrz, anca bu notada fonsyon hesaplanmaz. Önce v ve w notalarından br parabol eğr geçrrz. Yen değern abul edleblmes çn önce a b bölgesnn çne düşmes şarttır. Eğer bu şart gerçeleşyor se eğer bu gerçeleşmş se yen hesaplanan değern o ana adar bulunan en y mnmum değernn altına düşmüş olması şartı aranır. Bu nc şart terasyonun mnmuma yalaştığı güvencesn sağlar. Eğer mnmum nota bu rter sağlıyor ama yne de yeternce mnmuma yalaşamıyorsa araya br altın oran arama step yerleştrlr. Yalız te br ötü adım çn bu yapılmaz algortma nc adımda endn toparlayablr, bu yüzden altın arama stepne geçlmeden önce br-aç adım belenr. Aynı zamanda değerlendrlen nota arasında mesafe daha önceden verlen toleransın altına düşmemeldr. Program 5- de brent mnmzasyon algortması verlmştr. Şel 5-4- de bu programda örne fonsyonun grafğ görülmetedr. Program 0.- Brent optmzasyon programı /// OPTIMİZASYON // br boyutlu lneer olmayan fonsyonlar // brent metodu // mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ class fb etends f_ publc double func double ) return -.0*Math.sn)-*/0.0); //- değer masmumunu elde etme çn verlmştr //=========================================================== publc class OPO9 publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası b a le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış)

14 // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc vod man Strng args[]) Strng s="üç adetö tahmn değern değerlern arada br boşlu bıraara grnz: "; double [] 0=opt.vergrs); fb f=new fb);

15 double r= brentf,0[0],0[],0[],.0e-8); s=" çözüm set : "+r+"\n fonsyon değer : "+-f.funcr)); //fonsyonun gerçe değern elde etme çn - le çarpılmıştır Strng s="brent metodu le lneer olmayan br değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Plot pp=new Plotf,0,,00); pp.plot); Çıtı 0.- Brent optmzasyon programı Şel 0.- Brent optmzasyon programında ullanılan fonsyonun grafğ.7 BİR BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-TÜREVLİ BRENT METODU Türevl Brent metodu brent metoduna benzer, temel farı burada a,b,c gb 3 nota alınması ve her yen notada fonsyon değernn yanında türev değernn de ontrol edlmesdr. a b ntervalnn ortasında yer alan c notasının türev bze mnmumun sol tarafa mı yosa sağ tarafamı düştüğü haında blg verr. Böylece br sonra arama bölgesnn a-c m yosa c-b m olduğunu bleblrz. c notasın türev ve nc derece nterpolasyonla bulunan en y notanın türev değerler rşseant) metodu ullanılara nterpole edlr. Eğer yeterl dönüşüm olmuyorsa terar altın arama metodunun uygulanmasına gdlr. Program.7- Türevl Brent optmzasyon programı /// OPTIMİZASYON // br boyutlu lneer olmayan fonsyonlar // türevl brent metodu // mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ class fb etends f_ publc double func double ) return -.0*Math.sn)-*/0.0);

16 //=========================================================== publc class OPO0 publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double dff_ f,double ) // türev alt programı // df fonsyonunun türevn hesaplar double h0=0.056; nt,m; nt n=7; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,); for=0;<n;++) T[][0]= f.func + h[]) - f.func - h[]))/.0*h[]); form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/ h[]*h[]- h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double dbrentf_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; // MOV3a,b,c, d,e,f) a)=d);b)=e);c)=f); // a=d;b=e;c=f nt ter; boolean o,o; double a,b,d,d,d,du,dv,dw,d,e=0.0; d=0.0; double fu,fv,fw,f,olde,tol,tol,u,u,u,v,w,,m; double mn=b; a=a < c? a : c); b=a > c? a : c); =w=v=b; fw=fv=f=f.func); dw=dv=d=dff,); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=tol*math.abs)+zeps; tol=.0*tol; f Math.abs-m) <= tol-0.5*b-a))) mn=; return mn;

17 f Math.abse) > tol) d=.0*b-a); d=d; f dw!= d) d=w-)*d/d-dw); f dv!= d) d=v-)*d/d-dv); u=+d; u=+d; o = a-u)*u-b) > 0.0 && d*d <= 0.0; o = a-u)*u-b) > 0.0 && d*d <= 0.0; olde=e; e=d; f o o) f o && o) d=math.absd) < Math.absd)? d : d); else f o) d=d; else d=d; f Math.absd) <= Math.abs0.5*olde)) u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=0.5*e=d >= 0.0? a- : b-)); else d=0.5*e=d >= 0.0? a- : b-)); else d=0.5*e=d >= 0.0? a- : b-)); f Math.absd) >= tol) u=+d; fu=f.funcu); else u=+signtol,d); fu=f.funcu); f fu > f) mn=; return mn; du=dff,u); f fu <= f) f u >= ) a=; else b=; //MOV3v,fv,dv, w,fw,dw) v=w;fv=fw;dv=dw; //MOV3w,fw,dw,,f,d) w=;fw=f;dw=d; //MOV3,f,d, u,fu,du) =u;f=fu;d=du; else f u < ) a=u; else b=u; f fu <= fw w == ) //MOV3v,fv,dv, w,fw,dw) v=w;fv=fw;dv=dw; //MOV3w,fw,dw, u,fu,du) w=u;fw=fu;dw=du; else f fu < fv v == v == w) //MOV3v,fv,dv, u,fu,du) v=u;fv=fu;dv=du; System.out.prntln"DBRENT mamum terasyon sayısını aştı sonuç geçerl olmıyablr"); return mn; publc statc vod man Strng args[]) Strng s="üç adetö tahmn değern değerlern arada br boşlu bıraara grnz: "; double [] 0=opt.vergrs); fb f=new fb); double r= dbrentf,0[0],0[],0[],.0e-8); s=" çözüm set : "+r; Strng s="türevl Brent metodu le lneer olmayan br değşenl fonsyon optmzasyonu:";

18 JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı.7- Türevl Brent optmzasyon programı.8 OPTİMİZASYON SINIR TAHMİN DEĞERLERİNİN İYİLEŞTİRİLMESİ Optmzasyon değerlern herhang br optmzasyon yöntem le aramaya başlamadan önce sınır değerlernn yleştrlmes yapılablr. Böylece daha yaın br tahmn değernden nterpolasyon şlemne geçeren mnmum olan br alan seçlmş olduğuna emn olablrz. Mnbra metodu 3 notayla verlen arama bölgesn çnde br mnmum değer bulunana adar genşletr. Bu şle çn altın oran arama tenğn ullanır. Program.8- mnbra optmzasyon braet tayn programı /// OPTIMİZASYON // br boyutlu lneer olmayan fonsyonlar // brent metodu // mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ class fb etends f_ publc double func double ) return -.0*Math.sn)-*/0.0); //- değer masmumunu elde etme çn verlmştr //=========================================================== publc class OPO // mnumumu braete alma sınırlarını bulma) arama metodu // altın oran araması ullanır publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.));

19 publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa;

20 // // ver grş çıış metodu // publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="br veya üç adet masmum arama sınır tahmn değern arada br boşlu bıraara grnz: "; double [] 0=vergrs); fb f=new fb); double r[]; f0.length==3) r= opt.mnbraf,0[0],0[],0[]); else f0.length==) r= opt.mnbraf,0[0]); elsesystem.out.prntln"yanlış masmum raama sınır tahmn değer verdnz, l değer üzernden hesap yapılacatır"); r= mnbraf,0[0]); s=" yen ö tahmn değerler : \n"+matr.tostrngr); //fonsyonun gerçe değern elde etme çn - le çarpılmıştır Strng s="br boyutta çnde optmum olan bölgey sağlama :"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı.8- mnbra optmzasyon braet tayn programı BÖLÜM ALIŞTIRMALAR VE ÖDEVLER ALIŞTIRMA En temel optmzasyon problemlernden brs bell br hacm çnde barındıracağımız utuyu en ucuza mal etmetr. Kutu malyetler temel olara yüzey alanının fonsyonudur. Bu yüzden verlen hacm çn yüzey alanını mnmze etmemz gerer. Örne olara utu hacmn V=0.5 ltre= m 3 olara alırsa : πd 4V Hacm V = h veya buradan h yüsel termn çeerse h = olur. 4 πd πd πd 4V Slndrn yüzey alanı : A = + πdh = + olur 4 D Mnmzasyon problemnn analt çözümü brnc türevnn öünü bulma şlem olduğundan

21 da 4V = π D dd D = 0 3 4V 4*0.50 D = 3 olara bulunur. Buradan çözüm D = 3 = m dr. π π 3 4*0.50 Bu değer h termnde yerne oyarsa h = = m olara bulunur. πd HAFTA EKSERSİZLERİ Mnmum arama yöntemler a) Graf yöntemle çözüm graf çözüm : PlotT0.java b) Altın oran fbonnach yöntem) : FOPO.java Fonsyonun brnc türevnn öünü bulma yöntemler c) Newton-Raphson ö bulma yöntem : FOPO3.java d) İye bölme ö bulma yöntem : FOPO3Cjava HAFTA EKSERSİZLERİ ÖDEV Fonsyonun brnc türevnn öünü bulma yöntemler e) Newton-Raphson-ye bölme entegre ö bulma yöntem : FOPO3A.java f) Seantrş) ö bulma yöntem : FOPO3B.java g) İnc derece polnom Lagrange ters nterpolasyon yöntem FOPO3E.java h) Brent ö bulma yöntem Program : FOPO3F.java ) Brent ö bulma yöntem Program : FOPO3D.java Mnmum arama yöntemler j) İnc derece polnom geometr arama optmzasyon yöntem : FOPO.java ) Üçüncü derece polnom geometr arama optmzasyon yöntem : FSCO4E.java l) Brent geometr arama optmzasyon yöntem : OPO9.java PROBLEM Antbyot üreten br mayanın özgül çoğalma hızıg) besn derşlğ c) nn br fonsyonudur. g = *c/4+0.8c+c +0.c 3 ) çoğalmanın masmum olduğu c değern bulunuz. Besn sınırlaması nedenyle düşü derşllerde büyüme hızı 0 a düşmetedr. Aynı şelde yüse derşllerde de besn zehrlenmes sebebyle 0 a düşmetedr. bu yüzden c = 0 mg/l den büyü değerler ncelemeye gere yotur. Yuarda verlen metod ve programları ullanablrsnz Aşağıda Problem çözümü, java ve matlab ve c++ dllernde verlmştr. Altın arama java /// OPTIMİZASYON // ÖDEV mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class fb etends f_ publc double funcdouble c) return -*c/ *c+c*c+0.*c*c*c)); publc class FOPO publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur

22 // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; nt mat=00; whle Math.absyb-ya)>epslon) && h>delta) && <mat)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; f>=mat) System.out.prntln" = "++" masmum terasyon sayısı aşıldı sonuç yanlış olablr"); fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) fb f=new fb); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Fbonacch optmzasyon : ",JOptonPane.PLAIN_MESSAGE); System.et0);

23 f.m matlab fonsyonu functon g = fc) g = - *c./ *c + c.*c + 0.*c.*c.*c)); Altın arama matlab golden.m fonsyonu functon [p,yp] = goldenfunc,a,b,eps,delta) %ALTIN ORAN YONTEMI ILE PROBLEM 'IN COZUMU f nargn < 5) delta =.0e-0; end f nargn < 4) delta =.0e-0;eps=.0e-0; end r = 5^0.5-)/; %Altn Oran r=r*r; h = b - a; c = a + r*h; d = a + r*h; ya = fevalfunc,a); yb = fevalfunc,b); yd = fevalfunc,d); yc = fevalfunc,c); mat=00; =; whle abs yb-ya) > eps & h>delta) & <mat) ) = +; f yc < yd) b = d; yb = yd; d = c ; yd = yc; h = b - a; c = a + r*h; yc = fevalfunc,c); else a = c ; ya = yc; c=d; yc=yd; h=b-a; d = a + r*h; yd = fevalfunc,d); end end dp=absb-a); dy=absyb-ya); p=a; yp=ya; fyb<ya) p=b; yp=yb; end f>=mat) uyar='mamum terasyon aşıldı sonuc doğru olmayablr' end Matlabda golden programının f fonsyonuyla çalıştırılması ve sonucu >> = y = >>

24 Altın arama c++ prog.cpp programın c++ versyonu Borland C++ versyon 5.5) #nclude <stdo.h> #nclude <math.h> #nclude <ostream.h> double funcdouble c) return -*c/ *c+c*c+0.*c*c*c)); double goldendouble a,double b,double epslon,double delta) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = funca); double yb = funcb); double c = a + r*h; double d = a + r*h; double yc = funcc); double yd = funcd); yd=yd; yc=yc; nt = ; double dp,dy,p,yp; nt mat=00; delta=delta; whle fabsyb-ya)>epslon) && h>delta) && <mat)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = funcd); //end of f //end of whle p = a; f yb<ya) p = b; f>=mat) cout<<" = "<<<<" masmum terasyon sayısı aşıldı sonuç yanlış olablr"; return p; nt manvod) cout<<"mnmum ="<<golden0.0,0.0,.0e-0,.0e-0); return 0; Prog.cpp çıtısı mnmum =.5679 Newton metodu java /// OPTIMİZASYON

25 // Newton ö bulma yöntem ve türev ) ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class fb etends f_ publc double funcdouble c) return -*c/ *c+c*c+0.*c*c*c)); publc class FOPO3 publc statc double dff_ f,double ) double h=0.000;double hh=.0/h;return -f.func+.0*h)+8.0*f.func+h)-8.0*f.func-h)+f.func-.0*h))/.0*hh; publc statc double dff_ f,double ) double h=0.000;double hh=.0/h;return -f.func+.0*h)+6.0*f.func+h)-30.0*f.func)+6.0*f.func-h)-f.func-.0*h))/.0*hh*hh; publc statc double newtonf_ f,double ) // df le verlen türev fonsyonunun ölern bulur nt nma=500; double tolerance=.0e-5; double f,df; fornt =0;<nma;++) f=dff,); df=dff,); -=f/df; fmath.absf)<tolerance) return ; return ; publc statc double newton_nd_dervatvef_ f,double ) // df le verlen türev fonsyonunun ölern bulur nt nma=500; double d=e-3; double m; double tolerance=.0e-5; double f,fm,df,dfm,df; fornt =0;<nma;++) f=dff,); fm=dff,-d)); df=dff,); dfm=dff,-d)); df=-6.0/d/d*f-fm)+.0/d*.0*df+dfm); -=f/df+.5*f*f/df*df*df)*df); fmath.absf)<tolerance) return ; return ; publc statc vod man Strng args[]) fb f=new fb); double 0; 0=Double.parseDoubleJOptonPane.showInputDalog" optmum nota tahmn grnz 0 : ")); double r; r= newton_nd_dervatvef,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Newton optmzasyon : ",JOptonPane.PLAIN_MESSAGE); System.et0);

26 Türev fonsyonu matlab Functon dy = dffunc,,h) %türev f nargn < 3) h=0.0000; end hh=/h; 0=+*h; =+h; =-h; 3=-.0*h; f0 = fevalfunc,0); f = fevalfunc,); f = fevalfunc,); f3 = fevalfunc,3); dy=-f0+8*f-8*f+f3)/.0*hh; Türev fonsyonu nc türev) matlab functon dy = dffunc,,h) %türev f nargn < 3) h=0.0000; end hh=/h; 0=+*h; =+h; =; 3=-h; 4=-.0*h; f0 = fevalfunc,0); f = fevalfunc,); f = fevalfunc,); f3 = fevalfunc,3); f4 = fevalfunc,4); dy=-f0+6*f-30*f+6*f3-f4)/.0*hh*hh; Newton metodu matlab functon [p,yp] = newtonfunc,,eps,delta) %newton YONTEMI ILE PROBLEM 'IN COZUMU f nargn < 5) delta =.0e-0; end f nargn < 4) delta =.0e-0;eps=.0e-0; end mat=500; =0; fun=dffunc,); whle absfun) > eps & <mat) ) =+; fun=dffunc,); dfun=dffunc,); =-fun/dfun; end p=; yp=fun; f>=mat) uyar='mamum terasyon aşıldı sonuc doğru olmayablr' end Newton metodu c++ #nclude <stdo.h> #nclude <math.h> #nclude <ostream.h> double funcdouble c) return -*c/ *c+c*c+0.*c*c*c)); double dfdouble ) double h=0.000;double hh=.0/h;return -func+.0*h)+8.0*func+h)-8.0*func-h)+func-.0*h))/.0*hh; double dfdouble ) double h=0.000;double hh=.0/h;return -func+.0*h)+6.0*func+h)-30.0*func)+6.0*func-h)-func-.0*h))/.0*hh*hh; double newtondouble )

27 // newton ö bulma yöntem le optmzasyon nt nma=00; double tolerance=.0e-5; double f,df; fornt =0;<nma;++) f=df); df=df); -=f/df; f fabsf) < tolerance ) return ; return ; double goldendouble a,double b,double epslon,double delta) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = funca); double yb = funcb); double c = a + r*h; double d = a + r*h; double yc = funcc); double yd = funcd); yd=yd; yc=yc; nt = ; double dp,dy,p,yp; nt mat=00; delta=delta; whle fabsyb-ya)>epslon) && h>delta) && <mat)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = funcd); //end of f //end of whle p = a; f yb<ya) p = b; f>=mat) cout<<" = "<<<<" masmum terasyon sayısı aşıldı sonuç yanlış olablr"; return p; nt manvod) cout<<"mnmum ="<<newton.0); return 0; PROBLEM

28 Eletr aım taşıyan br tel etrafında yarıçapı r olan plast br zolasyon bulunmatadır. Telde eletrsel drenç ısı oluşturmatadır. Bu ısı plast zolasyondan ısı letm meanzmalarıyla amata ve ısı taşınımıyla T sıcalığında çevre havasına taşınmatadır. Teln sıcalığı : q ln r / a) T = + + T denlemyle verlr. Burada π hr q = telde ısı oluşumu = 50 W/m a = teln çapı = 5 mm = 50-3 m = ısıl letm atsayısı = 0. W/mK) h=hava çn taşınım atsayısı = 30 W/m K) T = çevre sıcalığı = 300 K olara verlmştr. T sıcalığını mnmum yapaca r yarıçapını bulunuz. PROBLEM 3 İ moleül arasında Lennard-Jones potansyel 6 σ σ V = 4ε denlemyle tanımlanır. Burada ε ve σ sabt değerlerdr. V potansyeln r r mnmum yapan σ r değern bulunuz. PROBLEM 4 Hdrojen atomu çn dalga fonsyonu σ / 3 ψ = C 7 8σ + σ ) e fonsyonu le tanımlanablr. Burada zr / a 0 σ = C = 8 3 π z a 0 / 3 z = çerde yü mtarı a 0 = Bohr yarıçapı r =radyal mesafedr. ψ dalga fonsyonunu mnmum yapan σ değern bulunuz.. DENKLEM SİSTEMLERİNİN ÇÖZÜMÜ. DOĞRUSAL DENKLEM SİSTEMLERİ, GENEL En genel formunda Doğrusal denlem sstemler : a X + a X + a 3 X a n X 3 = b a X + a X + a 3 X a n X 3 = b a 3 X + a 3 X + a 33 X a 3n X 3 = b 3. a n X + a n X + a n3 X a nn X 3 = b n Şelnde yazılablr. Bu denlem matrs formunda [A]X=B veya = A B şelnde yazılablr. Matrs formunu açı yazarsa :

29 a a... an a a... a n a n X b a n X = b ann X n bn Bazı aynalarda da bu denlem sstem ısaltılmış formda a a... a n b a a... a a... a n b veya a a an an... ann bn an an... a a a n n... nn b b... bn şelnde de gösterleblr. Bu denlem sstemnde A ve B değerler blnen değerler X değerler blnmeyenlerdr. X değerlernn saptanması problemn doğrusal denlem sstem çözümü olara adlandıracağız. Matrslerle lgl sayısal şlemler gelece bölümümüzde nceleyeceğz, anca matrs şlemlernn de temeln oluşturan doğrusal denlem sstem çözümü problemne l onu olara bamata yarar görüyoruz. Burada yöntem bazında tanımlamalara gdeceğz, her verlen yöntem örne br java programı le desteleyeceğz ve çeştl örnelern çözüm sonuçlarını da vereceğz. GAUSS ELEME METODU Gauss eleme yöntem en bast formunda matrslern temel özelllerne dayanan br şlemdr. Matrslern satırlarını değştrme, matrsn br satırını bell br çarpanla çarpma veya satırları brbryle toplamaveya çıarma) doğrusal denlem sstemnde blnmeyenlern değern etlemez. Bu yüzden doğrusal denlem sstemnde numaralı satır)- Sabt * j numaralı satır) gb br şlem denlem sstemnn değern değştrmeden oluşturablrz. Gauss eleme metodunda bu manpülasyonu yapmata gayemz üst üçgen matrs dedğmz matrsn dyagonalnn altının tamamen sıfıra eştlendğ eşdeğer formunu elde etmetr. Örneğn n=5 çn a' a' a' a' a' a' a' a' a' a' a' a' a' a' a' X X X X X b' b' = b' b' b' şelne getrmemz gerer. Bunu yapablme çn sstemat br eleme uygulayablrz. Örneğn a elemanını 0 a dönüştürme çn a = 0 = a C * a şlemnde sabtn değer C =a /a ) olacatır. İnc satırın her elemanı çn C çarpanı ullanılara yen değerne çevrlr. Örneğn a = a C *a a 3 = a 3 C *a 3.. a 5 = a 5 C *a 5 b =b C *b Bu şlemn sonunda a elemanı sıfırlanmış olur. Aynı şlem önce a n altında tüm satırlara uygulanara brnc sütunda 0 değerler oluşturulur. Daha sonra aynı şlem a nn altında olon çn ynelenr. Bu şlem aynı değşenlerle java döngüsü olara yazarsa for=0;<n-);++) for=+;<n;++) C[]=a[][]/a[][]; a[][]=0;

30 forj=+;j<n;j++) a[][j]-= C[]*a[][j]; b[] =b[] - C[]*b[]; Lneer denlem sstem üst üçgen matrs şelne dönüştürüldüten sonra tersten tbaren çözme yöntemyle blnmeyenler çözülür. Yuarıda verlen beşl sstemn çözüm set : X 5 = b 5 / a 55 X 4 = b 4 a 45 *X 5 )/a 44 X 3 = b 3 a 34 *X 4 a 35 *X 5 )/a 33 X = b a 3 *X 3 a 4 *X 3 a 5 *X 5 )/a X = b a *X a 3 *X 3 a 4 *X 4 a 5 *X 5 )/a Şelndedr. Bu şlem n*n matrs çn java odu olara yazaca olursa : [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; Doğrusal denlem sstemnn çıtılarını anlaşılır br şelde oluşturablme çn br Strng çıtı sınıfı olan matrsct.java programını oluşturdu. Program odu aşağıda verlmştr. Program.- matrs ct.java doğrusal denlem sstem formatlama sınıfı mport java.o.*; mport java.tet.*; mport java.utl.locale; publc class matrsct publc statc Strng tostrngdouble left, nt w, nt d) // double değşenn verlen boyuttaw) ve notadan sonra uzalığındad) // strng değşenne çevrr NumberFormat df=numberformat.getinstancelocale.us); df.setmamumfractondgtsd); df.setmnmumfractondgtsd); df.setgroupngusedfalse); Strng s = df.formatleft); whle s.length) < w) s = " " + s; f s.length) > w) s = ""; for nt =0; <w; ++) s = s + "-"; return s; publc statc Strng tostrngdouble left) // double değşenn sabt boyutta5) ve notadan sonra uzalığında5) // strng değşenne çevrr return tostrngleft,5,5); publc statc Strng tostrngdouble[][] left,nt w,nt d) //matrsn strng eşdeğern oluşturur nt n,m; Strng b; b=""; n=left.length; m=left[0].length; fornt =0;<n;++) fornt j=0;j<m;j++)

31 b=b+tostrngleft[][j],w,d); b=b+"\n"; return b; publc statc Strng tostrngdouble[][] a,double b[],nt w,nt d) //doğrusal denlem sstemnn strng eşdeğern oluşrurur nt n,m; Strng s; s=""; n=a.length; m=a[0].length; fornt =0;<n;++) s+=" "; fornt j=0;j<m;j++) s+=tostrnga[][j],w,d); s+=" "+tostrngb[],w,d)+" \n"; return s; publc statc Strng tostrngdouble[][] a,double b[]) //doğrusal denlem sstemnn strng eşdeğern oluşrurur return tostrnga,b,5,5); publc statc Strng tostrngtdouble[][] left,nt w,nt d) return tostrngmatr.transposeleft),w,d); publc statc Strng tostrngtdouble[][] left) return tostrngmatr.transposeleft),5,0); publc statc Strng tostrngtdouble[] left) // returns a vertcal strng representaton // of a double vector nt n,m; Strng b; b=""; n=left.length; fornt =0;<n;++) b=b+tostrngleft[])+"\n"; return b; publc statc Strng tostrngdouble[] left) // returns a horzontal strng representaton // of a double vector nt n,m; Strng b; b=""; n=left.length; fornt =0;<n;++) b=b+tostrngleft[])+"\t "; b=b+"\n"; return b; Şmd Gauss eleme şlemne br bütün program olara baalım : Program.- Gauss Eleme yöntem mport java.o.*;

32 class SCO0A publc statc double[] gaussdouble a[][],double b[]) nt n=a.length; double []=new double[n]; double carpan=0; double toplam=0; //gauss eleme nt,j,; Strng s=""; s="orjnal doğrusal denlem sstem :\n"+matrsct.tostrnga,b); for=0;<n-);++) for=+;<n;++) carpan=a[][]/a[][]; a[][]=0;//bu deym sadece elmne matrsn doğru değerlern hesaplama çn onulmuştur forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; s+="elmne matrs : ="++"\n";; s+=matrsct.tostrnga,b); System.out.prntlns); //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc vod manstrng args[]) throws IOEcepton double a[][]=,,5,,,,3,,; double b[]=,,; System.out.prntln"çözüm vetörü : \n"+matrsct.tostrngtgaussa,b))); Çıtı.- Gauss Eleme yöntem Capture Output > "C:\co\java\bn\java.ee" SCO0A Orjnal doğrusal denlem sstem : elmne matrs : = elmne matrs : = çözüm vetörü : > Termnated wth et code 0. Burada örne doğrusal denlem sstem :

33 5 X 0 = X 3 X Çıtının gerçe çözümler 0,3 ve - değerler olmalıdır, görüldüğü gb denlem sstemmzn çözümünde ufa ta olsa br hata mevcuttur. Burada elmne şlemlern daha y anlama çn br de açı hesap olara yapalım Sıfır ıncı olonolon numarası 0 dan başlıyor), brnc satırsatır numarası sıfırdan başlıyor) =0 çarpan C =a 0 /a 00 = /= a 0 = a 0 - C * a 00 = a 0 - a 0 /a 00 )* a 00 = - * = 0 sıfırıncı olon elmne proses tamamlandı brnc olon,nc satır = çarpan C 3 =a /a = -5/-3=5/3) a = a C 3 * a = a - a /a )* a = -5 5/3)*-3) = 0 a = a - C 3 * a = a - a /a )* a 0 = -4 5/3)*-8) = b = b - C 3 * b = b - a /a )* b = - 5/3)*-) = X 8 X X 0 = Gerye oyma şlem : X = b /a = / ) = - X = b - a *X )/a = )*-))/-3) =-9)/-3)=3 X 0 = b 0 - a 0 *X - a 0 *X )/a 00 = *3-5*-))/=0 X 0 0 = X 3 X.3 KISMİ PİVOT İŞLEMİ, KISMİ PİVOTLU GAUSS ELEME METODU Yuarda bast örnete de görüldüğü gb sonuçta bell br hata oluşmuştur. Gauss eleme proses te başına ullanıldığında bazı denlem sstemlernde bu hata büyü boyutlara ulaşablr. Bu durumun oluşmasında temel neden Gauss elmne prosesnde çarpanda bölüm termnn üst tarafta alan terme göre üçü olması ve bunun sonucunda çarpım termnn yuvarlatma hatası verece adar büyü değerlere ulaşmasıdır. Hatta bölünen sayı sıfıra eşt olursa çarpan sonsuza da gdeblr. Bunu engellemenn br yolu eleme proses yapılan olon çn bölünen değern en büyü değer olacağı şelde satırların yerlernn değştrlmesdr. Bu şleme ısm pvotlama adı veryoruz. Eleme prosesnn yapıdığı satır ve sütunları tarıyara masmum olan değerler dagonal termn üzernde de toplayablrz, anca sütunların yer değştrlmes durumunda değşenlern sıraları da değşeceğnden ço daha omples br ndesleme sstemne htyacımız olacatır. Bu yüzden tam pvotlama daha seyre olara ullanılan br prosestr. Şmd ısm pvotlamayı br önce aynı örnele anlatalım, örne problemmz : 5 X 0 = X 3 X Şelndeyd. Burada gauss elmnasyonu uygulamadan önce her olon çn eleme elemanını altta elemanlarla arşılaştırara alttaler arasında daha büyü mutla değere sahp olan varsa eleme elemanıyla bu satır değştrlecetr. Örneğmzn sıfırıncı sütünunda olan rt eleman a 00 e eşttr. Bu değer a 0 ) ve a 0 3) le arşılaştırıldığında a 0 değernn en büyü olduğu görülecetr. Bu yüzden. satır ve 0. satır yer değştrr ve sstem

34 3 X X 5 X 0 = Şeln alır. Bu şleme java program parçacığı olara baarsa : double buyu, dummy; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; Şelnde gerçeleştrdğmz görürüz. Burada satırları değştrme çn br e değşene htyaç duyulduğunu not etmede yarar görüyoruz. Kısm pvotlama şlemnden sonra gauss eleme şlemn bölüm. de anlattığımız gb gerçeleştrrz. Program.3- Pvotlu Gauss Eleme yöntem mport java.o.*; class SCO0B publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; Strng s="orjnal Matrs :\n"+matrsct.tostrnga,b); for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; s+="pvotlu Matrs : ="++"\n"+matrsct.tostrnga,b); //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0;

35 forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; s+="elmne proses btmş matrs : ="++"\n"+matrsct.tostrnga,b); //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; System.out.prntlns); return ; publc statc vod manstrng args[]) throws IOEcepton double a[][]=,,5,,,,3,,; double b[]=,,; System.out.prntln"sonuç vetörü : \n"+matrsct.tostrngtpvotlugaussa,b))); Çıtı.3- ısm pvotlu gauss eleme yöntem Capture Output > "C:\co\java\bn\java.ee" SCO0B Orjnal Matrs : pvotlu Matrs : = pvotlu Matrs : = elmne proses btmş matrs : = sonuç vetörü : Sonuçtan da görüldüğü gb sonuç vetöründe br önce görülen hata burada yo olmuştur. Küçü matrs sstemlernn çözümünde gauss eleme yöntem deal br çözümdür, anca matrs boyutu büyüdüğünde toplam hesap mtarı ço fazlalaştığından prat avantajını ytrr..4 GAUSS-JORDAN METODU Gauss Jordan metodu temel olara gauss metoduna benzer. Temel ayrılığı pvot elemanı dedğmz elemenn yapılmasında ullanılan temel elemanın bulunduğu satırın elemeden önce pvot elemanına bölünere normalze edlmes ve eleme prosesnn sadece pvot elemanının altında satırlara değl pvot elemanı satırı harcnde tüm satırlar çn uygulanmasıdır. Program.4- de Gauss-Jordan elemes java programı olara verlmştr. Burada çıtı olara java programlama bölümünde detaylarını verdğmz Tet sınıfı graf çıtısı ullanılmıştır. Grdnn çeştl şellerde grleblmes çn de publc statc double[][] Cdouble a[][],double b[]) ve publc statc double[][] Cdouble a[][],double b[][]) metodları tanımlanmıştır. Program.4- Gauss_Jordan Eleme yöntem mport java.o.*;

36 class SCO0C publc statc double[] gaussjordandouble a[][],double b[]) //pvotsuz nt n=b.length; nt np=n+; double C[][]=new double[n][np]; double []=new double[n]; double carpan=0; nt,j,; for=0;<n;++) forj=0;j<n;j++)c[][j]=a[][j];;c[][n]=b[]; for=0;<n;++) //gauss jordan eleme forj=+;j<np;j++) C[][j]/=C[][]; for=0;<n;++) f!=) carpan=c[][]; C[][]=0; forj=+;j<np;j++) C[][j]-=carpan*C[][j]; for=0;<n;++) []=C[][n]; return ; publc statc vod manstrng args[]) throws IOEcepton double a[][]=,,5,,,,3,,; double b[]=,,; double []=gaussjordana,b); Tet.prnt,"Gauss Jordan Metodu çözümü"); Çıtı.4- Gauss_Jordan Eleme yöntem çözüm set nc br örne olara : 3 4 X X X 0 = 0 bu örneğ programa grme çn ver satırını double a[][]=3,,-,,4,,,,; double b[]=,,0; Olara değştrmemz afdr. Çözüm set : Çıtı.4- Gauss_Jordan Eleme yöntem çözüm set

37 Olacatır. Bu denlem sstemn Gauss-Jordan eleme ullanara elle çözelm = X X X nc satırdan brnc satırı çıaralım = X X X a brnc satırı le çarpıp üçüncü satırdan çıaralım = X X X Şmd nc sütuna geçyoruz. İnc sütundapvot elemanı dr. Tüm nc satırı bu değere bölere normalze edelm = X X X brnc satırı sıfırlayalım nc satırı le çarpıp brnc satırdan çıaralım): = X X X üçüncü satırı sıfırlayalım nc satırı le çarpıp üçüncü satırdan çıaralım): = X X X üçüncü satırı.5455 e bölelm = X X X brnc satırı sıfırlayalım üçüncü satırı le çarpıp brnc satırla toplayalım) = X X X nc satırı sıfırlayalım üçüncü satırı le çarpıp nc satırdan çıaralım )

38 0 0 X = 0 0 X X çözüm vetörü X = X.000 X gerçe çözüm : X = X.0000 X değerlerdr..5 KISMİ PİVOTLU GAUSS-JORDAN METODU Gauss metodunda gb Gauss-Jordan metodunda da çözüm her zaman doğru olara oluşmıyablr. Doğru çözüme ulaşmamız pvotlama dedğmz e şlem geretrr. Kısm pvotlama şlemnde satırlar arasında en büyü mutla değere sahp olan satırla pvot satırı yer değştrlr. Program.5- Kısm Pvotlu Gauss_Jordan Eleme yöntem mport java.o.*; class SCO0C3 publc statc double[][] Cdouble a[][],double b[]) nt n=a.length;nt m=a[0].length;double c[][]=new double[n][m+]; fornt =0;<n;++)fornt j=0;j<m;j++)c[][j]=a[][j];;c[][m]=b[]; return c; publc statc double[][] Cdouble a[][],double b[][]) nt n=a.length;nt o=b[0].length;nt m=n+o;double c[][]=new double[n][m]; fornt =0;<n;++) fornt j=0;j<n;j++)c[][j]=a[][j];; fornt j=n;j<m;j++)c[][j]=b[][j]; return c; publc statc double[][] pvotlugaussjordandouble a[][]) //pvotlu nt n=a.length; nt m=a[0].length; nt o=m-n; double [][]=new double[n][o]; double carpan=0; double toplam=0; double buyu; double dummy=0; nt,j,,p,,jj; =0; for=0;<n;++) //pvotlama p=; buyu=math.absa[][]); for=0;<n;++) f!=) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<m;jj++)

39 dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; //gauss jordan elemey çözme forj=+;j<m;j++) a[][j]/=a[][]; a[][]=.0; for=0;<n;++) f!=) carpan=a[][]; a[][]=0; forj=+;j<m;j++) a[][j]-=carpan*a[][j]; forjj=0;jj<o;jj++) for=0;<n;++) [][jj]=a[][n+jj]; return ; publc statc vod manstrng args[]) throws IOEcepton double a[][]=3,0,,8,0,0,,-7,6,,8,6; //double a[][]=tet.readdouble_table); double [][]=pvotlugaussjordana); System.out.prntlnMatr.toStrng)); Tet.prnt,"Şel.5- Pvotlu Gauss Jordan Metodu çözümü"); Çıtı.5- Kısm pvotlu Gauss_Jordan Eleme yöntem çözüm set.6 LU-ALT-ÜST ÜÇGEN MATRİS- GAUSS DOLİTTLE) METODU Gauss ve Gauss-Jordan eleme metodlarında sol tarafta matrs le sağ tarafta vetör aynı anda şleme grmetedr. Bu durumda yen br sol taraf vetörü değerlendrmeye alınacağı zaman sağ tarafın terar şleme alınması geremetedr. Bunu engelleme çn sol taraf matrsnn üst üçgen matrsu) ve alt üçgen matrsl) olma üzere matrsn çarpımı şelne getrlmes, sonra bu alt matrs vetörünün çözülmesne gdleblr. Örneğn N=5 çn l [ L ] = l3 l4 l5 0 l l l l l l u 0 [ U ] = u u u u u u u u u u u u u u

40 şelndedr. Çözüm çn : [A]=[L][U] [A]X=B [L][U]X=B [L]D=B [U]X=D Temel matrs çarpım şlemler dzsnden yararlanılır. Burada U matrsn Gauss eleme prosesnden sonra üst üçgen matrs olara hesaplayablrz. L matrs Gauss eleme prosesnde çarpanlardan oluşur. L matrsnn dagonal elemanları değerne eşt olduğundan L ve U matrsler grş A matrsnn aynı yerne yerleştrleblr, e blgsayar alanı ullanılması geremez. Program.6. de Pvot ullanılmadan uygulanan Dolttle metodu verlmştr. Program.6. de LU şlem pvotlama şlem le brlte uygulanmıştır. Pvotlu versyonumuzda LU ayrıştırma proses ve denlem sstem çözme proses ayrı ayrı uygulandığından matrs satır değştrme şlem br referans değer üzernden taşınmata ve denlem sstem çözümünde b matrs aynı referansa göre yenden düzenlenmetedr. Program.6- Gauss Dolttle) Eleme yöntem mport java.o.*; mport java.swng.*; class SCO0D publc statc double[][] gaussludouble a[][]) nt n=a.length; double []=new double[n]; double a[][]=new double[n][n]; double carpan=0; double toplam=0; //gauss eleme nt,j,; for=0;<n;++) forj=0;j<n;j++)a[][j]=a[][j];; for=0;<n-);++) for=+;<n;++) carpan=a[][]/a[][]; a[][]=carpan;///l elemanı forj=+;j<n;j++) a[][j]-=carpan*a[][j]; return a; publc statc double[] yerne_oymadouble a[][],double b[]) //gauss LU çözümüyle LU ndrgenmes yapılmış Matrs ullanara lneer //denlem sstem öler nt n=a.length; double toplam; double []=new double[n]; double a[][]=new double[n][n]; double b[]=new double[n]; nt,j; for=0;<n;++) forj=0;j<n;j++)a[][j]=a[][j];;b[]=b[]; //System.out.prntln"a=\n "+Matr.toStrnga)); //System.out.prntln"b=\n "+Matr.toStrngTb)); for=;<n;++) toplam=b[];forj=0;j<;j++)toplam-=a[][j]*b[j];;b[]=toplam; //System.out.prntln"d=\n "+Matr.toStrngTb)); [n-]=b[n-]/a[n-][n-]; for=n-);>=0;--) toplam=0; forj=+;j<n;j++)

41 toplam+=a[][j]*[j];; []=b[]-toplam)/a[][]; //System.out.prntln"d=\n "+Matr.toStrngT)); return ; publc statc double[][] yerne_oymadouble a[][],double b[][]) nt n=a.length; nt m=b[0].length; double toplam; double [][]=new double[n][m]; double a[][]=new double[n][n]; double b[][]=new double[n][m]; nt,j,; for=0;<n;++) forj=0;j<n;j++)a[][j]=a[][j];;for=0;<m;++) b[][]=b[][]; //System.out.prntln"a=\n "+Matr.toStrnga)); //System.out.prntln"b=\n "+Matr.toStrngTb)); for=0;<m;++) for=;<n;++) toplam=b[][];forj=0;j<;j++)toplam-=a[][j]*b[j][];;b[][]=toplam; //System.out.prntln"d=\n "+Matr.toStrngTb)); [n-][]=b[n-][]/a[n-][n-]; for=n-);>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j][];; [][]=b[][]-toplam)/a[][]; //n sonu //System.out.prntln"d=\n "+Matr.toStrngT)); return ; publc statc double [] AXBdouble a[][],double b[]) //denlem sstem çözümü b vetörü çn nt n=a.length; double c[][]=gausslua); double s[]=yerne_oymac,b); return s; publc statc double [][] AXBdouble a[][],double b[][]) //denlem sstem çözümü b matrs çn nt n=a.length; double c[][]=gausslua); double s[][]=yerne_oymac,b); return s; publc statc vod manstrng args[]) throws IOEcepton double a[][]=3,-0.,-0.,0.,7,-0.3,0.3,-0.,0; JPanel y=new JPanel); Tet.addy,a,"a matrs"); double b[]=7.85,-9.3,7.4; Tet.addTy,b,"b matrs"); double []=AXBa,b); Tet.addTy,,"çözüm matrs"); Tet.prnty,"Gauss LU ayrıştırma ve yerne oyma metodu çözümü"); Program.6- Kısm Pvotlu LU Gauss Dolttle) Eleme yöntem mport java.o.*; mport java.swng.*; class SCO0D publc statc vod pvotdouble a[][],nt o[],double s[],nt ) // GaussLU çn pvot metodu nt n=a.length;

42 nt dummy=0; double buyu; double dummy=0; //pvotlama nt p=; buyu=math.absa[o[]][]); fornt =+;<n;++) dummy=math.absa[o[]][]/s[o[]]); fdummy > buyu) buyu=dummy;p=; dummy=o[p]; o[p]=o[]; o[]=dummy; publc statc nt[] sral_ndesnt n) // sıralı raamları taşıyan br referans vetörü oluşturur nt o[]=new nt[n]; fornt =0;<n;++) o[]=; return o; publc statc double[][] gaussludouble a[][],nt o[]) //ısm pvotlu gauss eleme yöntem nt n=a.length; double a[][]=new double[n][n]; double s[]=new double[n]; double carpan=0; double toplam=0; double absaj; //gauss eleme nt,j,,p,,jj; //System.out.prntln"Orjnal Matrs :\n"+matr.tostrnga)); for=0;<n;++) forj=0;j<n;j++)a[][j]=a[][j]; for=0;<n;++) o[]=;s[]=math.absa[][0]); forj=;j<n;j++) absaj=math.absa[][j]); fabsaj>s[]) s[]=absaj; for=0;<n-);++) pvota,o,s,); //pvot referansını değştr //System.out.prntln"pvotlu Matrs : ="++"\n"+matr.tostrnga)); //gauss elemey çözme for=+;<n;++) carpan=a[o[]][]/a[o[]][]; a[o[]][]=carpan; forj=+;j<n;j++) a[o[]][j]-=carpan*a[o[]][j]; return a; publc statc double[] yerne_oymadouble a[][],double b[]) nt n=a.length; return yerne_oymaa,b,sral_ndesn)); publc statc double[][] yerne_oymadouble a[][],double b[][]) nt n=a.length; return yerne_oymaa,b,sral_ndesn)); publc statc double[] yerne_oymadouble a[][],double b[],nt o[]) //gauss LU çözümüyle LU ndrgenmes yapılmış Matrs ullanara lneer //denlem sstem öler nt n=a.length; double toplam; double []=new double[n]; double a[][]=new double[n][n]; double b[]=new double[n];

43 nt,j; for=0;<n;++) forj=0;j<n;j++)a[][j]=a[][j];;b[]=b[]; //System.out.prntln"a=\n "+Matr.toStrnga)); //System.out.prntln"b=\n "+Matr.toStrngTb)); for=;<n;++) toplam=b[o[]];forj=0;j<;j++)toplam-=a[o[]][j]*b[o[j]];;b[o[]]=toplam; //System.out.prntln"d=\n "+Matr.toStrngTb)); [n-]=b[o[n-]]/a[o[n-]][n-]; for=n-);>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[o[]][j]*[j];; []=b[o[]]-toplam)/a[o[]][]; //System.out.prntln"d=\n "+Matr.toStrngT)); return ; publc statc double[][] yerne_oymadouble a[][],double b[][],nt o[]) nt n=a.length; nt m=b[0].length; double toplam; double [][]=new double[n][m]; double a[][]=new double[n][n]; double b[][]=new double[n][m]; nt,j,; for=0;<n;++) forj=0;j<n;j++)a[][j]=a[][j];;for=0;<m;++) b[][]=b[][]; //System.out.prntln"a=\n "+Matr.toStrnga)); //System.out.prntln"b=\n "+Matr.toStrngTb)); for=0;<m;++) for=;<n;++) toplam=b[o[]][];forj=0;j<;j++)toplam-=a[o[]][j]*b[o[j]][];;b[o[]][]=toplam; //System.out.prntln"d=\n "+Matr.toStrngTb)); [n-][]=b[o[n-]][]/a[o[n-]][n-]; for=n-);>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[o[]][j]*[j][];; [][]=b[o[]][]-toplam)/a[o[]][]; //n sonu //System.out.prntln"d=\n "+Matr.toStrngT)); return ; publc statc double [] AXBdouble a[][],double b[]) //denlem sstem çözümü b vetörü çn nt n=a.length; nt q[]=new nt[n]; double c[][]=gausslua,q); double s[]=yerne_oymac,b,q); return s; publc statc double [][] AXBdouble a[][],double b[][]) //denlem sstem çözümü b matrs çn nt n=a.length; nt q[]=new nt[n]; double c[][]=gausslua,q); double s[][]=yerne_oymac,b,q); return s; publc statc vod manstrng args[]) throws IOEcepton double a[][]=3,-0.,-0.,0.,7,-0.3,0.3,-0.,0; JPanel y=new JPanel); Tet.addy,a,"a matrs"); double b[]=7.85,-9.3,7.4; Tet.addTy,b,"b matrs"); double []=AXBa,b);

44 Tet.addTy,,"çözüm matrs"); Tet.prnty,"Gauss LU ayrıştırma ve yerne oyma metodu çözümü"); Çıtı.6- Kısm Pvotlu LU Gauss Dolttle) Eleme yöntem.7 CRAUT LU METODU Gauss Dolttle) LU ayrıştırmasında L matrsnn öşegen elemanları d. Craut ayrıştırmasının temel farı U matrsnn öşegen elemanlarının olmasıdır. Örneğn N=5 çn l l [ L ] = l l l l l l l l l l l l l 55 0 [ U ] = u u u u u u u5 u 5 u 35 u45 şelndedr. Çözüm çn yne : [A]=[L][U] [A]X=B [L][U]X=B [L]D=B [U]X=D Temel matrs çarpım şlemler dzsnden yararlanılablr. Craut algortması şlemler yaparen sırası le olon ve satır taramaları yapara hesaplama şlemn gerçeleştrr. İşlem steplern şu şelde sıralayablrz : l, = a, döngü =,,.,n a, j u, j = l döngü =,3,.,n döngü j=,3,.,n

45 j l, = j l = a u döngü =j,j+,.,n, j, j, j a j, l j, u, = u, j = döngü =j+,j+,.,n l jj döngü sonu l n, n = a n, n n l = n, u, n Algortmayı Altta örne programda verelm : Program.7- LU Craut yöntem mport java.o.*; class SCO0F //LU decomposton method publc statc double[][] LUdouble c[][],nt nd[],nt d[]) //LU ayrıştırması ve nde nd değerlern verr double a[][]; nt n=c.length; a=new double[n][n]; double vv[]; vv=new double[n]; double sum,dum,bg,temp; nt,j,; nt ma; nt nma=00; double tny=.0e-40; ma=0; for=;<=n;++) forj=;j<=n;j++) a[-][j-]=c[-][j-]; d[0]=; for=;<=n;++) bg=0.0; forj=;j<=n;j++) fmath.absa[-][j-])>bg) bg=math.absa[-][j-]); fbg==0) System.out.prntln"tel matrs");return a; vv[-]=.0/bg; forj=;j<=n;j++) for=;<j;++) sum=a[-][j-]; for=;<;++) sum-=a[-][-]*a[-][j-]; a[-][j-]=sum; bg=0; for=j;<=n;++) sum=a[-][j-]; for=;<j;++) sum-=a[-][-]*a[-][j-]; a[-][j-]=sum; dum=vv[-]*math.abssum);

46 fdum>=bg) ma=; bg=dum; //end of =0 fj!= ma) for=;<=n;++) dum=a[ma-][-]; a[ma-][-]=a[j-][-]; a[j-][-]=dum; d[0]=-d[0]; vv[ma-]=vv[j-]; //end of f nd[j-]=ma; fa[j-][j-]==0) a[j-][j-]=tny; fj!=n) dum=.0/a[j-][j-]; for=j+;<=n;++) a[-][j-]*=dum; //endf //end for j= return a; publc statc double[] LUabdouble a[][],double [],nt nd[]) nt =0; nt,j,ll=0; double sum=0; nt n=a.length; double b[]; b=new double[n]; for=;<=n;++) b[-]=[-]; for=;<=n;++) ll=nd[-]; sum=b[ll-]; b[ll-]=b[-]; f!=0) forj=;j<=-);j++) sum-=a[-][j-]*b[j-]; else fsum!=0) =; b[-]=sum; for=n;>=;--) sum=b[-]; f<n) forj=+);j<=n;j++) sum-=a[-][j-]*b[j-]; b[-]=sum/a[-][-]; return b; publc statc double[] AXBdouble a[][],double b[]) //craut LU methodu nt n=a.length;

47 double c[]=new double[n]; nt d[]=; nt nd[]=new nt[n]; double e[][]=new double[n][n]; e=matr.lua,nd,d); c=matr.luabe,b,nd); return c; //end of AXB publc statc double[][] AXBdouble a[][],double b[][]) fa.length!=b.length) System.out.prntln"Boyut hatası Matr.AB 47"); System.et); double[] bn=new double[b.length]; double[][] bout=new double[b.length][]; fornt =0;<bn.length;++) bn[]=b[][0]; double[] c=axba,bn); fornt =0;<bn.length;++) bout[][0]=c[]; return bout; publc statc vod manstrng args[]) throws IOEcepton double a[][]=3,-0.,-0.,0.,7,-0.3,0.3,-0.,0; double b[]=7.85,-9.3,7.4; double []=AXBa,b); //System.out.prntln"=\n "+Matr.toStrngT)); Tet.prnt,"craut LU ayrıştırma ve yerne oyma metodu çözümü");.8 JACOBİ, GAUSS-SEİDEL VE RAHATLAMALI İNTERPOLASYON İTERATİF METODLARI İteratf methodlar blhassa büyü matrslern çözülmesnde ço öneml olablr. Gauss eleme metodu ve LU metodu toplam olara n 3 /3, Gauss-Jordan metodu n 3 / şleme gere duyar n ço büyüdüğünde toplam şlem sayısı da ço büyür. İteratv metodlar eleme şlem yapmadan br önce çözüm setn ullanara, br sonra teratv çözüme ulaşır. Çözüm sabt hale geldğnde sonuç elde edlmş olur. İteratf yöntemlern en bast Jacob metodudur. Burada her denlem çn br değer seçlere değerlendrlr. Dğer değerler br önce terasyondan alınır. + = b Aj j ), n A j j Bu denlemn daha çabu br şelde çözüme ulaşması çn tüm değerler br önce terasyondan alma yerne hesaplanan tüm değerler formüle oyulur. Bu teratf yönteme Gauss-Sedel metodu adı verlr. + + = b Aj j Aj j ), A j n j= j= + n İteratv yöntemn dönüşmesn braz daha çabulaştırmanın yolu es terasyonla yen terasyon arasında rahatlama atsayısı sm verlen α gb br ağırlı atsayısıyla hesaplamaya gtmetr. + α j + = α ) + b Aj j Aj j ), A n j= j= + n α brden büyü veya üçü olablr. Bu yönteme rahatlamalı nterpolasyon relaaton) adı verlr. α bre eşt olduğunda yöntem normal Gauss-Sedel formülüne dönüşür.

48 Aşağıda bu metodun java dlnde yazılmış programı görülmetedr. Program.7- Gauss_sedel rahatlamalı nterpolasyon formülü mport java.o.*; class SCO0E publc statc double [] gauss_sedeldouble a[][],double b[]) double lambda=.; nt n=a.length; //l tahmn değerler 0 olara alındı double []=new double[n]; return gauss_sedela,b,,lambda); publc statc double [] gauss_sedeldouble a[][],double b[],double [],double lambda) //denlem sstem çözümü b teratf gauss_sedel metodu metodu //yaınsama fatörü lambda le brlte verlmş formül nt n=a.length; nt ma=300; double es=.0e-0; double dummy=0; double ea=e-; double sum=0; double old=0; nt ter=0; nt sentnel=0; fornt =0;<n;++) dummy=a[][]; fornt j=0;j<n;j++) a[][j]/=dummy; b[]/=dummy; fornt =0;<n;++) sum=b[]; fornt j=0;j<n;j++) f!=j)sum-=a[][j]*[j]; []=sum; ter=0; do sentnel=; fornt =0;<n;++) old=[]; sum=b[]; fornt j=0;j<n;j++) f!=j) sum-=a[][j]*[j]; []=lambda*sum+.0-lambda)*old; fsentnel== && []!=0.0 ) ea=math.abs[]-old)/[])*00.0; fea<es) sentnel=0; ter++; whlesentnel== && ter<ma); fter>=ma) System.out.prntln"Masmum terasyon sayısı aşıldı sonuç geçerl olmayablr ter = "+ter); return ; publc statc vod manstrng args[]) throws IOEcepton double a[][]=3,-0.,-0.,0.,7,-0.3,0.3,-0.,0; double b[]=7.85,-9.3,7.4; Tet.prntgauss_sedela,b),"Rahatlamalı Gauss Sedel Metodu çözümü"); Çıtı.7- Gauss_sedel rahatlamalı nterpolasyon formülü

49 .9 CHOLESKY SİMETRİK MATRİS LU METODU Cholesy smetr matrs LU metodu temel olara Dolttle LU metoduna benzer anca matrs smetr olduğundan ayrıştırma alt üçgen matrs ve alt üçgen matrsn transpozuüst üçgen matrs) şelnde ayrılablr. [A]=[L][L] T Ayrıştırma şlemn l ve l = = a l l a j j j= l l j =,,..., şelnde gerçeleştreblrz. Cholesy programı altta verlmştr. Program.8- Cholesy smetr matrs LU formülü mport java.o.*; class SCO0I publc statc double[][] cholesyludouble c[][]) //cholesy LU //sadece smetr matrsler çndr double factor=0; double buyu; nt,j,,p,,jj; nt n=c.length; double d[][]=new double[n][n]; double dummy; double toplam; for=0;<n;++) forj=0;j<n;j++) d[][j]=c[][j]; for=;<=n;++) for=;<=-);++) toplam=0;; forj=;j<=-);j++) toplam+=d[-][j-]*d[-][j-]; d[-][-]=d[-][-]-toplam)/d[-][-]; toplam=0.0; forj=;j<=-);j++) toplam+=d[-][j-]*d[-][j-]; d[-][-]=math.sqrtd[-][-]-toplam)); forj=+;j<=n;j++) d[-][j-]=0.0; return d; publc statc double[] substtutecholesydouble c[][],double b[]) //lerye doğru yerne oyma cholesy smetr LU metoduyla //ndrgenmş olmalıdır nt,j; double U[][]=Tc); double L[][]=c; System.out.prntln"L*LT) = "+Matr.toStrngMatr.multplyL,U)));

50 nt n=b.length; double toplam=0; double []=new double[n]; for=;<n;++) toplam=b[]; forj=0;j<;j++) toplam-=u[][j]*b[j]; b[]=toplam/l[][];; //gerye yerne oyma [n-]=b[n-]/l[n-][n-]; for=n-;>=0;--) toplam=0; forj=+);j<n;j++) toplam+=u[][j]*[j]; []=b[]-toplam)/u[][]; return ; publc statc double[][] Tdouble [][] left) //transpose matr f A=a,j) TA)=aj,) nt,j; nt n=left.length; nt m=left[0].length; double b[][]; b=new double[m][n]; for=0;<n;++) forj=0;j<m;j++) b[j][]=left[][j]; return b; publc statc vod manstrng args[]) throws IOEcepton double a[][]=6,5,55,5,55,5,55,5,979; double b[]=,,; double L[][]=cholesyLUa); System.out.prntln"Matrs L : \n"+matr.tostrngl)); double []=substtutecholesyl,b); System.out.prntln"Cholesy : \n"+matr.tostrngt)); Program.8- Cholesy smetr matrs LU formülü Matrs L : L*LT) = Cholesy : LÜ VE 5Lİ BANT MATRİS Üçlü öşegen sstem yan bant genşlğ 3 olan sstem genel olara

51 = n n n n n n n n n r r r r r r r f e g f e g f e g f e g f e g f e g f şelde fade edleblr. Tüm LU şlemlernde olduğu gb ayrıştırma, yerne oyma ve gerye doğru yerne oyma proseslernden oluşur. Ayrıştırma : fornt =;<n;++) e[]=e[]/f[-]; f[]=f[]-e[]*g[-]; İlerye doğru yerne oyma : fornt =;<n;++) r[]=r[]-e[]*r[-]; Gerye doğru yerne oyma : [n-]=r[n-]/f[n-]; fornt =n-);>=0;--) []=r[]-g[]*[+])/f[]; Tüm şlem java programı olara altta programda tanımlanmıştır. Program.9-3-lü bant matrs çn Thomas algortması mport java.o.*; class SCO0H publc statc double [] thomasdouble a[][],double r[]) // nt n=a.length; double f[]=new double[n]; double e[]=new double[n]; double g[]=new double[n]; double []=new double[n]; fornt =0;<n;++) f[]=a[][]; fornt =0;<n-);++) g[]=a[][+]; fornt =0;<n-);++) e[+]=a[+][]; fornt =;<n;++) e[]=e[]/f[-]; f[]=f[]-e[]*g[-]; fornt =;<n;++) r[]=r[]-e[]*r[-]; [n-]=r[n-]/f[n-]; fornt =n-);>=0;--) []=r[]-g[]*[+])/f[]; return ; publc statc double [] thomasdouble f[],double e[],double g[],double r[]) nt n=f.length; double []=new double[n];

52 fornt =;<n;++) e[]=e[]/f[-]; f[]=f[]-e[]*g[-]; fornt =;<n;++) r[]=r[]-e[]*r[-]; [n-]=r[n-]/f[n-]; fornt =n-);>=0;--) []=r[]-g[]*[+])/f[]; return ; publc statc vod manstrng args[]) throws IOEcepton double f[]=.04,.04,.04,.04; double g[]=-,-,-,0; double e[]=0,-,-,-; double b[]=40.8,0.8,0.8,00.8; System.out.prntln"thomas : \n"+matr.tostrngtthomasf,e,g,b))); double a[][]=.04,-,0,0,-,.04,-,0,0,-,.04,-,0,0,-,.04; double d[]=40.8,0.8,0.8,00.8; System.out.prntln"thomas : \n"+matr.tostrngtthomasa,d))); Çıtı.9-3-lü bant matrs çn Thomas algortması thomas : thomas : Beşl öşegen sstem yan bant genşlğ 5 olan sstem şu şelde yazarsa : = n n n n n n n n n n n n b b b b b b b d a e c d a e f f c d a e f c d a e f c d a e f c d a f c d burada LU ayrıştırma ve yerne oyma proses program.9. de görüldüğü gb oluşturulur. Program.9-5-lü bant matrs çn band algortması mport java.o.*; class SCO0J publc statc double [] beslbanddouble A[][],double b[]) // nt n=a.length; double f[]=new double[n-]; double c[]=new double[n-]; double d[]=new double[n]; double a[]=new double[n-]; double e[]=new double[n-]; double []=new double[n];

53 fornt =0;<n;++) d[]=a[][]; fornt =0;<n-);++) c[]=a[][+]; fornt =0;<n-);++) a[]=a[+][]; fornt =0;<n-);++) f[]=a[][+]; fornt =0;<n-);++) e[]=a[+][]; nt ; double mult; for=;<n-);++) mult=a[-]/d[-]; d[]+=-mult*c[-]; c[]+=-mult*f[-]; b[]+=-mult*b[-]; mult=e[-]/d[-]; a[]+=-mult*c[-]; d[+]+=-mult*f[-]; b[+]+=-mult*b[-]; //System.out.prntln+"d="+d[]+"c="+c[]+"b="+b[]); mult=a[n-]/d[n-]; d[n-]+=-mult*c[n-]; [n-]=b[n-]-mult*b[n-])/d[n-]; [n-]=b[n-]-c[n-]*[n-])/d[n-]; for=n-3;>=0;--) []=b[]-f[]*[+]-c[]*[+])/d[]; return ; publc statc double [] beslbanddouble f[],double c[],double d[],double a[],double e[],double b[]) nt n=d.length; double []=new double[n]; nt ; double mult; for=;<n-);++) mult=a[-]/d[-]; d[]+=-mult*c[-]; c[]+=-mult*f[-]; b[]+=-mult*b[-]; mult=e[-]/d[-]; a[]+=-mult*c[-]; d[+]+=-mult*f[-]; b[+]+=-mult*b[-]; //System.out.prntln+"d="+d[]+"c="+c[]+"b="+b[]); mult=a[n-]/d[n-]; d[n-]+=-mult*c[n-]; [n-]=b[n-]-mult*b[n-])/d[n-]; [n-]=b[n-]-c[n-]*[n-])/d[n-]; for=n-3;>=0;--) []=b[]-f[]*[+]-c[]*[+])/d[]; return ; publc statc vod manstrng args[]) throws IOEcepton double a[][]=.04,-,0,0,-,.04,-,0,0,-,.04,-,0,0,-,.04; double b[]=40.8,0.8,0.8,00.8; double []=beslbanda,b); Tet.prnt,"beşl bant matrs metodu çözümü"); Program lü bant matrs çn band algortması örne problem çözümü ana programı burada örne problem olara 3 lü band matrste aldığımız matrs çözdü, aynı sonucu görmüş oldu. İnc br örnete 5l band matrs çözelm :

54 matrsn alalım. Programın metodlarında br değşl olmayacağından sadece ana program lstesn veryoruz. Bu örnete tüm A matrsn verme yerne bantları verd. Bu şelde grş ço büyü boyutta matrsler çn olduça öneml br hafıza azanımı sağlar. Program lü bant matrs çn band algortması örne problem çözümü ana programı publc statc vod manstrng args[]) throws IOEcepton double d[]=6,6,6,6,6,6,6,6,6,7; double c[]=-4,-4,-4,-4,-4,-4,-4,-4,-4; double f[]=,,,,,,,; double a[]=-4,-4,-4,-4,-4,-4,-4,-4,-4; double e[]=,,,,,,,; double b[]=3,0,0,0,0,0,0,0,0,4; double []=beslbandf,c,d,a,e,b); Tet.prntT,"beşl bant matrs metodu çözümü"); Program lü bant matrs çn band algortması örne problem çözümü ana programı. KONJUGE GRADYAN METODU Vetör * poztf ve tanımlı A = b denlem sstemnn çözüm set se, bu çözüm setnn geçerl olması çn * T T vetörünün g ) = A b fonsyonunu mnmum yapması gerer. vetörünü çözüm * vetöründen farlı br vetör olara tanımlıyalım. E olara 0 dan farlı br v vetörü ve gerçe br sayı olan t sayısını tanımlayalım. g+tv)=g)+t [v T A-b)] + t [v T Av)] şelnde yazılablr. Bu denlem çn ve v vetörler blndğnde t nn hang değer çn fonsyonun mnmum olacağını rdeleyelmdeğşen boyutunu br boyuta ndrgeyelm). Bu fonsyonun sadece t nn fonsyonu olduğunu abul ederse : ht)=g+tv) yazablrz ve mnmum h fonsyonunun t ye göre türevnde oluşacatır. h t)= [v T A-b)]-t [v T Av)] = 0. Bu denlemden

55 T v A b) t = olduğu görüleblr. Bu özellten yararlanara çözüme gtme çn önce T v Av r = b A tanımını yapalım. Bu tanımı br önce t tanımında yerne oyarsa : T v r t = tanım, şeln alır. T v Av t ye teratf proses açısında batığımızda teratf olara değşen = - + t v ve r = b - Α çn t değer T v r t = T v Av şelnde yazılablr. Yen bulunan vetörü d A = b denlemn sağlamalıdır. Çözüme ulaştığımızda A = A - + t v ) = b olacağını da blyoruz. Anca arama yönü v hala blmyoruz. v yönü olara en d yamaç yönü seçleblr. Bu yön g ) = A b) = r olur. Bu durumda v + = g ) = r olara seçleblr. bu yön g ) de en büyü negatf değşm verr. Bu metoda en d yamaç metodu adı verlr. Alternatf br seçm se şöyle yapılablr : 0 dan farlı öyle v vetörler T seçeblrz bu vetörler çn v Av =0 j olur. Bu tür vetörlere ortogonal vetör adını veryoruz. Eğer j ortagonal v vetörler bulablrse, bu bzm çözümümüzü olduça bastleştrecetr sette ve j nn eşt olmadığı termler yo olacağından matrs çözümler yerlern çarpma ve bölme şlemlerne bıraacatır.). Hestenes ve Stefel n önerdğ Ortoganal set T r r s = T r r v + = r + s v şelnde br önce v vetör değer ullanılara türetlr. Özet olara metodu şu şelde uygulayablrz : r 0 = b A 0 ve v 0 = r 0 en d yamaç medodu değer) alınır. sonra = den n e adar T r r t = T v Av = - + t v r = b - Α T r r s = T r r v + = r + s v şelnde teratf proses oluşturulur. Görüldüğü gb yöntem uzun br yöntemdr, ve üçü matrsler çn ullanımı Gauss yöntem gb dre metodlara göre daha zordur. Anca denlem sstem ço büyü boyutlara ulaştığında terch edlen br yöntem halne gelr. Program.- onjuge gradyen metodu le matrs sstem çözümü mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; mport java.o.*; publc class conjugate_gradent publc statc double VT_Vdouble [] left)

56 //multples a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double VT_Xdouble [] left,double [] rght) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*rght[]; return tot; publc statc double[] multplydouble[] left,double[][] rght) //multplcaton of one vector wth one matr nt,jj,,j,; nt m=rght[0].length; nt n=rght.length; nt m=left.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<m;++) b[]+=rght[][]*left[]; return b; //end of multply of a vector and a matr publc statc double[] multplydouble[][] left,double[] rght) //multplcaton of one matr wth one vector nt,jj,,j,; nt m=left[0].length; nt n=left.length; nt m=rght.length; double[] b; b=new double[m]; fn!= m)

57 System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<n;++) b[]+=left[][]*rght[]; return b; //end of multply of a matr and a vector publc statc double[] multplydouble left,double[] rght) //multplyng a vector wth a constant nt ; nt n=rght.length; double b[]; b=new double[n]; for=0;<n;++) b[]=left*rght[]; return b; publc statc double[] substractdouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]-rght[]; return b; //end of vector substracton method publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[] equalsdouble[] left) //addton of two vectors

58 nt n=left.length; double b[]; b=new double[n]; fornt =0;<n;++) b[]=left[]; return b; //end of vector equal method publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); publc statc double VT_G_Vdouble V[],double G[][]) double []=multplyv,g); return VT_XV,); publc statc double[] conjugate_gradentdouble A[][],double b[]) nt n=a.length; double []=new double[n]; return conjugate_gradent,a,b); publc statc double[] conjugate_gradentdouble [],double A[][],double b[]) // teratve system of equaton soluton double eps=.0e-5; nt mater=500; nt n=.length; double r[]=new double[n]; double re[]=new double[n]; double v[]=new double[n]; double t; double s; r=substractb,multplya,)); v=equalsr); nt =0; do re=equalsr); t=vt_vre)/vt_g_vv,a); =add,multplyt,v)); r=substractr,multplymultplyt,v),a)); s=vt_vr)/vt_vre); v=addr,multplys,v)); ++; whlenormr)>eps && <mater); System.out.prntln" = "++" normr)="+normr)); return ; publc statc vod manstrng args[]) throws IOEcepton double A[][]=0.,0.,,,0,0.,4,-,,-,,-,60,0,-,,,0,8,4,0,-,-,4,700; double b[]=,,3,4,5; double []=conjugate_gradenta,b); System.out.prntln"Konjuge gradyan metodu : \n"+matr.tostrngt)); Program.- onjuge gradyen metodu le matrs sstem çözümü Capture Output > "C:\co\java\bn\java.ee" conjugate_gradent = 9 normr)= e-8 Konjuge gradyan metodu :

59 > Termnated wth et code 0. Konunun başında onjuge gradyan yöntemnn başarıyle uygulanablmes çn denlem sstemnn poztf ve tanımlı olması geretğn belrtmşt. Poztf ve tanımlı olmıyan denlem sstemlernn çözümler normal olara teratf yöntemlerle yapılamaz, anca denlem sstem ön şartlandırması veya yleştrmes dyebleceğmz br yöntem ullanara, matrs sstemn poztf tanımlı şele dönüştüreblrz. Poztf ve tanımlı br C matrs alalım. Bu matrs ullanara A * = C - A C - * = C - ve b * = C - b tanımlarını yapara denlem sstemmz daha ararlı olan A * * = b * formuna dönüştüreblrz. Bu dönüşümden sonra Konjuge gardyan yöntemn ullanara çözüme ulaşablrz. Poztf ve Tanımlı C matrs olara örneğn A matrsnn dagonal elemanlarının are ölernn alındığı, dğer elemanların 0 olduğu br matrs seçleblr. Ters matrs alınması şlem de sayıların e bölünmesyle oluşturulablr. Eğer bu programı ullanara şartlandırılmamış onjuge gradyan metodu ullanma sterse C değern I brm matrse eşt almalıyız. Bu metodun prosedurunu verrse : Grd : A matrs,b ve vetörler, C - poztf ve tanımlı matrs Adım : r 0 = b A w 0 = C - r 0 v 0 = C - w 0 α 0 = n w j j = Adım : = Adım 3 : whle<=n) do adım 4-5 Adım 4 : u=av t = n α j= v u = - + t v r =r - + t u w = C - r β n = w j j = Adım 5 : s = β /α v + = C - w + s v α = β =+ j j ön şartlandırmalı onjuge gradyan programımızın bu şelde oluşturulmuş br versyonu aşağıda verlmştr. Program.- şartlandırılmış onjuge gradyen metodu le matrs sstem çözümü mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; mport java.o.*; publc class conjugate_gradent publc statc double VT_Vdouble [] left) //multples a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; return tot;

60 publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double VT_Xdouble [] left,double [] rght) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*rght[]; return tot; publc statc double[][] multplydouble left,double[][] rght) //multplyng a matr wth a constant nt,j; nt n=rght.length; nt m=rght[0].length; double b[][]; b=new double[n][m]; for=0;<n;++) forj=0;j<m;j++) b[][j]=rght[][j]*left; return b; //end of multplyng a matr wth a constant double publc statc double[] multplydouble[] left,double[][] rght) //multplcaton of one vector wth one matr nt,jj,,j,; nt m=rght[0].length; nt n=rght.length; nt m=left.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<m;++) b[]+=rght[][]*left[]; return b; //end of multply of a vector and a matr publc statc double[] multplydouble[][] left,double[] rght) //multplcaton of one matr wth one vector nt,jj,,j,;

61 nt m=left[0].length; nt n=left.length; nt m=rght.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<n;++) b[]+=left[][]*rght[]; return b; //end of multply of a matr and a vector publc statc double[] multplydouble left,double[] rght) //multplyng a vector wth a constant nt ; nt n=rght.length; double b[]; b=new double[n]; for=0;<n;++) b[]=left*rght[]; return b; publc statc double[] substractdouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]-rght[]; return b; //end of vector substracton method publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[];

62 return b; //end of vector addton method publc statc double[] equalsdouble[] left) //addton of two vectors nt n=left.length; double b[]; b=new double[n]; fornt =0;<n;++) b[]=left[]; return b; //end of vector equal method publc statc double normdouble v[]) return Math.sqrtnormarev)); publc statc double normaredouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return total; publc statc double VT_G_Vdouble V[],double G[][]) double []=multplyv,g); return VT_XV,); publc statc double[][] Int n) //unt matr double b[][]; b=new double[n][n]; fornt =0;<n;++) b[][]=.0; return b; publc statc double[][] Ddouble A[][]) //Dagonal elements of matr nt n=a.length; double b[][]; b=new double[n][n]; fornt =0;<n;++) b[][]=a[][]; return b; publc statc double[][] nvsqrtddouble A[][]) //square root of Dagonal elements of a matr nt n=a.length; double b[][]; b=new double[n][n]; fornt =0;<n;++) b[][]=.0/math.sqrta[][]); return b; publc statc double[] conjugate_gradentdouble [],double A[][],double b[]) nt n=a.length; double C[][]=new double[n][n]; C=nvsqrtDA); return conjugate_gradent,a,b,c); publc statc double[] conjugate_gradentdouble A[][],double b[]) nt n=a.length;

63 double C[][]=new double[n][n]; C=nvsqrtDA); double []=new double[n]; //başlangıç değerler 0 olara alındı return conjugate_gradent,a,b,c); publc statc double[] conjugate_gradentdouble [],double A[][],double b[],double C[][]) // teratve system of equaton soluton double eps=.0e-5; nt mater=500; nt n=.length; double r[]=new double[n]; double re[]=new double[n]; double v[]=new double[n]; double w[]=new double[n]; double u[]=new double[n]; double t; double alfa,beta,s; nt =0; r=substractb,multplya,)); w=multplyc,r); v=multplyc,w); alfa=normarew); do ++; fnormv)<eps) return ; re=equalsr); u=multplya,v); t=alfa/vt_xv,u); =add,multplyt,v)); r=substractr,multplyt,u)); w=multplyc,r); beta=normarew); fbeta<eps) fnormr)<eps) return ; s=beta/alfa; v=addmultplyc,w),multplys,v)); alfa=beta; whlenormr)>eps && beta>eps && <mater ); System.out.prntln"="+); return ; publc statc vod manstrng args[]) throws IOEcepton double A[][]=0.,0.,,,0,0.,4,-,,-,,-,60,0,-,,,0,8,4,0,-,-,4,700; double b[]=,,3,4,5; double []=conjugate_gradenta,b); System.out.prntln"Konjuge gradyan metodu : \n"+matr.tostrngt)); Çıtı.- şartlandırılmış onjuge gradyen metodu le matrs sstem çözümü Capture Output > "C:\co\java\bn\java.ee" conjugate_gradent =5 Konjuge gradyan metodu : > Termnated wth et code 0. ÖDEV PROBLEMLERİ Ödev

64 = X X X X denlem sstemn çeştl yöntemler ullanara çözünüz. Ödev = X X X X X X denlem sstemn Thomas algortması 3 lü bant matrs yöntem) ullanara çözünüz. Ödev 3 = X X X X X X X denlem sstemn çözünüz. 3. RAKAMSAL VERİLMİŞ BİR BOYUTLU VERİNİN OPTİMİZASYONU + EĞRİ UYDURMA Eğer vermz raamsal olara verlmşse ve br fonsyon mevcut değlse bu raamsal verye önce br eğr uydurulması ve daha sonra uydurulan eğr üzernden optmum notanın hesaplanmasına gdlmes stenleblr. Anca bu durumda vernn sılığına bağlı olara uydurulan eğrnn değernn gerçe değerden sapma olasılığı her zaman mevcuttur. Bu bölümde temel eğr uydurma yöntemler olara en üçü areler, ortogonalbrbrlerne d vetörler) en üçü areler, Newton, Lagrange ve üb şert ve B-şert aradeğer tenlern ullanacağız. Optmzasyon örne vers Şelnde olsun, bu ver mnmum notası = de y= olaca şelde düzenlenmş nc derece polnom vers çermetedr. Verden mnmum notasının - aralığında olduğunu söyleyeblrz anca tam değern belrleyemeyz. Örnelerde optmzasyon metodu olara altın oran arama metodunu ullanacağız.

65 3. POLİNOM EN KÜÇÜK KARELER METODU İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU = = m j j m a j f 0 ) ) ) φ j nc derece polnomu verlmş olsun. Bu polnoma,f, =0...n versn uydurma styoruz. Bu ver set çn en uygun a j m) değerlern bulma styoruz. Bunun çn = = = n m j j m j m m m a f w a a H 0 ) ) ) 0 ) ) ),..., φ fonsyonunun mnmum değern bulmamız gerer. Fonsyonda w) ağırlı fonsyonu adını alır ve n w,..., 0 ) = olmalıdır. Fonsyonun mnmum notası türevnn 0 a eşt olduğu nota olacatır. m a f w a a a H n m j j m j m m m m 0,..., 0 ) ) ) ),..., 0 ) ) ) ) 0 = = = = = φ φ [ ] m f w a w n m j m j j,..., 0 ) ) ) ) ) ) 0 = = = = φ φ φ Bu denlem temel olara m+ lneer denlem sstemdr. Şmd problemn özel br formuna göz atalım. = = m j j m a j f 0 ) ) ) φ temel denlemnde j j = ) φ se denlem, = = m j j m a j f 0 ) ) haln alır. Aynı zamanda ağırlı fonsyonunu da olara alalım ) = w ). Bu durumda mnmzasyon denlem m a f a a a H n m j j m j m m m m 0,..., 0 ),..., 0 ) ) ) ) 0 = = = = = m f a n m n j m j,..., 0 0 ) = = = = = + şeln alır. Bu matrs açı formda yazacaca olursa: = = = = = = = + = + = = + = = = = + = = = = = = n m n n n m n m n m n m n m n m n n n n m n n n n m n n f f f f a a a a n Çözümü oluşturma çn herhang br doğrusal denlem çözüm yöntemnden yararlanablrz. Bu yöntem gördüğümüz gb doğrusal br denlem sstem çözümü geretryor, anca sstemmz tanımı cabı hata oluşma olasılığı yüse olan br matrstr. Çözümlerde bu notaya dat edlmeldr. Program 3.- En üçü areler metodu eğr uydurma ve optmzasyon br arada) /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f_ekk etends f_ double E[]; publc f_ekkstrng s,nt m) double []; double y[];

66 double a[][]=tet.readdoublets); =a[0]; y=a[]; E=EKK,y,m); publc double func double ) // ths functon calculates the value of // least square curve fttng functon nt n=e.length; double ff; fn!=0.0) ff=e[n-]; fornt =n-;>=0;--) ff=ff*+e[]; else ff=0; return ff; //en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] EKKdouble [],double y[],nt n) nt l=.length; nt,j,; nt np=n+;

67 double A[][]; A=new double[np][np]; double B[]; B=new double[np]; double X[]; X=new double[np]; for=0;<n+;++) forj=0;j<n+;j++) f==0 && j==0) A[][j]=l; else for=0;<l;++) A[][j] += Math.pow[],+j)); for=0;<l;++) f==0) B[]+= y[]; else B[] += Math.pow[],)*y[]; X=pvotlugaussA,B); double ma=0; for=0;<n+;++) fmath.absx[]) > ma) ma = Math.absX[]); for=0;<n+;++) fmath.absx[]/ma) > 0) && Math.absX[]/ma) <.0e-00)) X[]=0; return X; publc class FOPOEKK publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya)

68 p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) throws java.o.ioecepton f_ekk f=new f_ekk"n.tt",3); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "En Küçü areler eğr uydurmalı Fbonacch sayısal ver optmzasyonu : ",JOptonPane.PLAIN_MESSAGE); Plot pp=new Plotf,-4.0,6.0,00); pp.adddata"n.tt"); pp.setplottype,38); // very beşöşe yıldız olara çz pp.setcolor,color.blue); // very mav çz pp.plot); 3. GENELLEŞTİRİLMİŞ FONKSİYONLU EN KÜÇÜK KARELER METODU İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU Üstte bölümde en üçü areler metodunun genel hal m m) f ) = a j φ ) fonsyonu çn verlmşt. j= 0 j m) m) H a a n m 0,..., m ) m) = w ) f a ) ) 0 m) φ φ = = j j a = j= 0 n m) [ a ] = w ) φ ) f = 0 m m w ) j ) ) φ φ j,..., j= 0 = 0,..., m Genel en üçü areler yöntem bazı problemler çn özel polnom gb önceden tam olara blnen fonsyonlara göre daha problem spesf fonsyonların tanımlanmasına olana verr. Örneğn gaz R4B gazı yoğunlu denlem aynalarda

69 3 /3 ρ' / ρc = E+ ) τ + E5 ln = 0 θ ) τ = T c T)/T c ve θ = T/T c ρ aynayan sıvının yoğunluğu; ρ c rt yoğunlu; T sıcalı; T c rt sıcalı; şelnde verlmştr. Görüldüğü gb böyle br denlem standart polnom tanımına uymamatadır, anca tüm atsayıları lneer olduğundan rahatlıla en üçü areler yöntem ullanılara atsayıları hesaplanablr. Sayısal vermz optmzasyon açısından nceleren eğer fonsyonun şelyle lgl genel br avrama sahpse genel en üçü areler yöntemyle stedğmz br fonsyona eğr uydurablrz. Örne fonsyon olara a3 a4 f ) = a0 + a + a + + fonsyonuna eğr uydurara altın oran yöntemyle mnmumu bulalım Program 3. Genelleştrlmş en üçü areler yöntem /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //prototp fonsyon sınıfı abstract class f_r abstract double funcdouble,nt equaton_ref); //szn eğr uydurmada ullanacağınız fonsyonu tanımlayan sınıf //örne fonsyon : // y=a[0]+a[]* + a[]** + a[3]/+ a[4]/* class fr etends f_r double funcdouble,nt ) double =.0; f==0) =.0; else f==) =; else f==) =*; else f==3) =.0/; else f==4) =.0/*); return ; class f_genelekk etends f_ double E[]; publc f_genelekkstrng s,nt m) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; E=EKKgenel,y,m); publc double funcdouble ) // ths functon calculates the value of // least square curve fttng functon fr f=new fr); nt n=e.length; double ff=0; fn!=0.0) fornt =n-;>=0;--) ff+=e[]*f.func,); return ff;

70 //Genel en üçü areler metodu en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] EKKgeneldouble [],double y[],nt n) fr f=new fr); nt l=.length; nt,j,; nt np=n+; double A[][]; A=new double[np][np]; double B[]; B=new double[np]; double X[]; X=new double[np]; for=0;<n+;++) B[]=0; forj=0;j<np;j++) A[][j]=0.0; for=0;<l;++) A[][j]+=f.func[],)*f.func[],j); for=0;<l;++) B[]+= f.func[],)*y[]; System.out.prntln"A = \n"+matr.tostrnga)); System.out.prntln"B = \n"+matr.tostrngtb)); X=pvotlugaussA,B);

71 //X=B/A; double ma=0; for=0;<n+;++) fmath.absx[]) > ma) ma = Math.absX[]); for=0;<n+;++) fmath.absx[]/ma) > 0) && Math.absX[]/ma) <.0e-00)) X[]=0; Tet.prntTX,"Genel Fonsyon atsayılar vetörü"); return X; publc class FOPOGenelEKK publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) throws java.o.ioecepton f_genelekk f=new f_genelekk "n.tt",4); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : "));

72 b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Genel En Küçü areler eğr uydurmalı Fbonacch sayısal ver optmzasyonu : ",JOptonPane.PLAIN_MESSAGE); Plot pp=new Plotf,-4.0,6.0,00); pp.adddata"n.tt"); pp.setplottype,38); // very beşöşe yıldız olara çz pp.setcolor,color.blue); // very mav çz pp.plot); 3.3 ORTAGONAL EN KÜÇÜK KARELER METODU İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU Standart EKK yöntem, denlem sstem çözümü geretrdğnden alternatf olara denlem sstem çözümü geretrdğnden eğr uydurulaca fonsyon olara ortagonal fonsyonlar seçlere denlem sstem çözmeden en üçü areler yöntem çözümlerne ulaşılablr. Bu sabtler ullanara en üçü areler hesabını şu şelde gerçeleştrrz. A Frst Course n Numercal Analyss, Anthony Ralston, Phlp Rabnowtz, Mc Graw Hll ISBN adlı tapta verlen br ortagonal formülü burada veryoruz : ) p j m j nc dereceden br polnom olsun. m nc dereceden en üçü areler polnom fonsyonunu da m m) y ) = b p ) şelnde verleblr. Eğer,f =,,n vers çn j j= 0 j [ f y ] n ) 0 m m = m) m) H b,..., b ) = w ) fonsyonunun mnmumunu verece b atsayılarını bulma sterse, br önce bölümdene benzer olara m) m) H b b n m 0,..., m ) m) = w ) f b p ) p ) 0 m) = = j j b = j= 0 0,..., m

73 [ ] m f p w b p p w n m j m j n j,..., 0 ) ) ) ) ) ) 0 = = = = = denlem daha ısa fade edeblme çn: m p p w d n j j,..., 0 ) ) ) 0 = = = [ ] m f p w b n m j j,..., 0 ) ) ) = = = ω olara adlandırır se, bu durumda denlemmz [ ] m b d m j m j j,..., 0 0 ) = = = ω şelnde yazablrz. Haln alır. Denlemn bu şelde yazılması hesaplama baımından bana br avantaj getrmemştr. Anca ) p fonsyonunu özel br form olan ortogonal polnom olara alır se, ortogonal polnomların özellğ gereğ : Eğer j se 0 ) ) ) 0 = = n j p p w olur. Bu durumda sstemmz ço daha bast br denlem olan [ ] m b d m j,..., 0 ) = = ω formunu alır. Burada b j m) değern çözme çn denlem sstem çözümü yern bast bölme şlemne bıramış olur. [ ] m d b m j,..., 0 ) = = ω Ortogonal polnom olara çeştl polnomlar seçme mümündür. Programımızda ulanacağımız ortogonal polnom : p j+ ) = - α j+ )p j ) - β j p j- ) j = 0,,. p 0 ) = p - ) = 0 şelndedr. α j+ ve β j hesaplanması gereen polnom sabtlerdr. )] )[ )] )[ )] [ ) ) ) ) n n n n p w p w p w p p w = = = = = = β )] )[ )] [ ) n n p w p w = = = α Bu sabtler ullanara en üçü areler hesabını şu şelde gerçeleştrrz. = = n j j m p b y ) ) j j b j γ ω = = = n j j p f w ) ω = = n j j p w )] [ γ

74 Ortagonal polnom eğr uydurma, denlem sstem çözmedğ çn denlem sstem çözümünden oluşan hataları da barındırmayacatır, bu yüzden polnom eğr uydurmaya göre terch edleblr, anca polnom denlemnn bastlğ bu denleme yoğun br uygulama alanı getrmştr. Şmd formülümüzü örne programımızda ullanalım. Optmzasyon formülü olara yne Altın oran formülü ullanılmıştır. Problem 3.3- Ortogonal polnom en üçü areler yöntem /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f_opekk etends f_ double E[][]; publc f_opekkstrng s,nt m) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; E=OPEKK,y,m); publc double func double ) // polnom değerler hesaplama fonsyonu double yy=0; nt ; nt m=e[0].length-; nt mp=m+; double q[]; q=new double[mp]; //vector<double> qm+,0.0); for=m-;>=0;--) q[]=e[0][]+-e[][+])*q[+]-e[][+]*q[+]; yy=q[]; return yy; publc statc double[][] OPEKKdouble [],double f[],nt m) //ortogonal polnom en üçü areler metodu //Referans : A Frst Course n Numercal Analyss // Anthony Ralston,Phlp Rabnowtz, Mc Graw Hll ISBN //m polnom dereces f grd vers nt,j,; nt n=.length; nt mp=n+; nt mp=n+; double p[][]=new double[mp][n]; double gamma[]=new double[mp]; double beta[]=new double[mp]; double omega[]=new double[mp]; double alpha[]=new double[mp]; double b[]=new double[mp]; double w[]=new double[n]; double a[][]=new double[3][mp]; for=0;<n;++) p[][]=.0; p[0][]=0.0; w[]=.0; gamma[0]=0; for=0;<n;++) gamma[0]+=w[];

75 beta[0]=0.0; forj=0;j<m+;j++) omega[j]=0; for=0;<n;++) omega[j]+=w[]*f[]*p[j+][]; b[j]=omega[j]/gamma[j]; f j!= m) alpha[j+]=0; for=0;<n;++) alpha[j+]+=w[]*[]*p[j+][]*p[j+][]/gamma[j]; for=0;<n;++) p[j+][]=[]-alpha[j+])*p[j+][]-beta[j]*p[j][]; gamma[j+]=0; for=0;<n;++) gamma[j+]+=w[]*p[j+][]*p[j+][]; beta[j+]=gamma[j+]/gamma[j]; //end of j forj=0;j<m+;j++) a[0][j]=b[j]; a[][j]=alpha[j]; a[][j]=beta[j]; return a; publc class FOPOOPEKK publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f

76 //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) throws java.o.ioecepton f_opekk f=new f_opekk"n.tt",3); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Ortogonal en üçü areler le eğr uydurulmuş sayısal vernn Fbonacch opt.: ",JOptonPane.PLAIN_MESSAGE); Plot pp=new Plotf,-4.0,6.0,00); pp.adddata"n.tt"); pp.setplottype,38); //very beşöşe yıldız olara çz pp.setcolor,0,0,50); //very mav çz pp.plot); Çıtı 3.3- Ortogonal polnom en üçü areler yöntem Çıtı 3.3- Ortogonal polnom en üçü areler yöntem örne fonsyonu grafğ Bu yöntemde eğr polnom formülümüz braz arışı olmala brlte denlem sstem çözümüne dayanmadığından deal br yöntemdr.

77 3.4 NEWTON ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU İnterpolasyon proseslernn en üçü areler eğr uydurmasından temel farı nterpolasyon değerlernn ver notalarından tam olara geçmesdr. En üçü arelerde se eğr le notalarımız arasında mesafey mnmze edyordu. n+ ver notasından geçen Newton nterpolasyonaradeğer) formülünü f n )=b 0 +b - 0 )+.+b n - 0 ) - ) - n ) formülünden elde edeblrz. Katsayıları b 0 =f 0 ) b =f[, 0 ] b = f[,, 0 ] b n = f[ n, n-,., 0 ] şelnde yazablrz. Burada f ) f j ) f[, j] = j f[, j ] f [ j, ] f[, j, ] = benzer bçmde n. Dereceden sonlu bölünmüş far da f[ n, n-,...,, 0] f [ n, n-,...,, 0] f[ n, n-,...,, 0] = n 0 şelnde yazılablr. Bu denlem Newton un bölünmüş far nterpolasyon polnomu olara adlandırılır. Br örne problem verelm : A lnn nüfüs dağılımı aşağıda gb verlmştr. Newton nterpolasyon metodu le 945 yılının nüfusunu hesaplama styelm. Yıl nüfus Newton far tablosu : X y f[,j] f[,j,] f[,j,,l] f[,j,,l,n] f[,j,,l,n,m] Şelnde oluşacatır. Buradan derecesn arttırara çözümlere ulaşırsa : Şelnde çözümler hesaplayablrz. Newton nterpolasyon formülünün en öneml avantajı polnom atsayısını arttırma çn son polnom termn hesaplayara br önce dereceden polnom çn hesaplanan değere eleyeblme olasılığımızın olmasıdır. Şmd bu formülü optmzasyon problemyle brleştren br örne oluşturalım: Program 3.4- Newton nterpolasyon formülüyle verye eğr uydurara optmzasyonu /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f_newton etends f_

78 double F[][]; publc f_newtonstrng s) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; F=Newton,y); publc double funcdouble ) nt n=f[0].length; double carpm=.0; double toplam=0; fornt =0;<n;++) carpm=f[][]; fornt j=0;j<=-);j++) carpm*=-f[n][j]); toplam+=carpm; return toplam; publc statc double[][] Newtondouble [],double y[]) nt n=.length; double F[][]=new double[n+][n]; fornt =0;<n;++) F[][0]=y[]; fornt =;<n;++) fornt j=;j<=;j++) F[][j]=F[][j-]-F[-][j-])/[]-[-j]); fornt =0;<n;++) F[n][]=[]; //System.out.prntlnMatr.toStrngF)); return F; publc class FOPOnewton publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc);

79 else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) f_newton f=new f_newton"n.tt"); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Fbonacch optmzasyon : ",JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 3.4- Newton nterpolasyon formülüyle verye eğr uydurara optmzasyonu 3.5 LAGRANGE ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU Lagrange nterplasyon polnomu Newton nterpolasyon polnomunun yenden formülleştrlmesdr. Lagrange nterpolasyonunda bölünmüş farların hesaplanması geremez. n n f ) = L ) f ) Burada = 0 j= 0 j n j L ) = şelndedr. çarpım sembolüdür. Örneğn doğrusal polnom n=) çn 0 f ) = f 0) + f 0 0 nc dereceden polnom çn se : j )

80 ) ) 0) ) 0) ) f ) = f 0) + f ) + f ) 0 ) 0 ) 0) ) 0) ) şelnde açı formülü yazablrz. Bu metodu br optmzasyon metodu formuna getrrse : Program 3.5- Lagrange nterpolasyon formülüyle verye eğr uydurara optmzasyonu /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f_lagrange etends f_ double L[][]; f_lagrangestrng s) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; L=Lagrange,y); publc statc double[][] Lagrangedouble [],double y[]) nt n=.length; double L[][]=new double[][n]; fornt =0;<n;++) L[0][]=y[]; fornt j=0;j<n;j++) f!=j) L[0][]/=[]-[j]); fornt =0;<n;++) L[][]=[]; return L; publc double funcdouble ) nt n=l[0].length; double carpm=.0; double toplam=0; fornt =0;<n;++) carpm=l[0][]; fornt j=0;j<n;j++) f!=j) carpm*=-l[][j]); toplam+=carpm; return toplam; publc class FOPOlagrange publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h;

81 double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) f_lagrange f=new f_lagrange"n.tt"); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Lagrange nterpolasyonlu Fbonacch optmzasyon : ",JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 3.5- Lagrange nterpolasyon formülüyle verye eğr uydurara optmzasyonu 3.6 KÜBİK ŞERİT ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU

82 İnterpolasyon yapmanın dğer br yolu tüm notalardan geçen polnomlarla notaları bağlamatır. Örneğn üçüncü dereceden br polnom düşünüleblr. r )=a - ) 3 + b - ) + c - )+y n nterpolasyon prosesnde polnomların ver notalarından geçmes gerer. r + )=y + n aynı zamanda brnc türevlern de sürel olması gerer. r - )= r ) n üçüncü dereceden polnom çn nc türevler de eştleyeblrz. r - )= r ) n tüm sstem çözme çn şart daha gerer. Bu şartlar r )=0 r n- n )=0 olara alınırsa buna doğal üb şert nterpolayonu adını verrz. Başa sınır şartları belrlememz de mümündür. h = + - n Tum bu şartla br denlem sstem olara br araya toplanırsa : a h 3 + b h +c h = y + -y, n 3a - h - + b - h - +c - -c = 0, n 6a - h - + b - +b = 0, n b 0 =0 6a n- h n- + b n- = 0 set oluşur bu set 3n-3 denlem çerr.bu sayıda denlem br arada çözme şlem matrs çözümlemesne olduça ağır br yü getreblr artı hata olasılılarını arttırır. Toplam çözülmes gereen denlem sayısını azaltmanın br yolu değştrlmş özel br üçüncü dereceden polnom ullanmatır. Eğer üb polnomumuz s )=a - )+ b + -)+ [- ) 3 c ) 3 c ]/6h ) n şelnde verlmş se s )=a - b + [- ) c ) c ]/h ) n s )=[- ) c ) c ]/h n olur burada a ve b c nın fonsyonu olara yazılablr. b =[6y -h c ]/6h ), n a =[6y + -h c + ]/6h ), n Bu durumda çözülmes gereen denlem sstem sadece c termlerne dönüşür. y + y y y h - c - + h - - h )c + h c + = 6 h h bu sstemde toplam n- denlem mevcuttur. w y+ y =, h n tanımını yaparsa çözülece denlem sstemn, n h h + h ) 0 h h 0 h + h ) h n h + h n 0 n ) h h n n + h 0 n ) 0 c0 A 0 c 6 w w ) 0 c 6 w3 w ) =... 0 c n 6 wn wn 3) hn cn 6 wn wn ) cn B burada A ve B ullanıcı tarafından verlmes gereen sınır şartlarıdır. Bu şartları ver notası az olduğunda bu yöntemmzn sapmasına sebep olablr, anca ver notası ço olduğunda olduça y br yöntemdr. Denlem sstemn çözme çn 3-lü bant matrs Thomas algortmasını ullanablrz.

83 Program 3.6- Küb şert nterpolasyon formülüyle verye eğr uydurara optmzasyonu /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f_cubc etends f_ double S[][]; publc f_cubcstrng s,double co, double cn) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; S=cubc_splne,y,co,cn); publc f_cubcstrng s) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; S=cubc_splne,y,0.0,0.0); publc double funcdouble ) nt n=s[0].length; double =0; double =0; double y=0; double h=0; fornt =0;<n-);++) fs[3][]<= && <=S[3][+]) h=s[3][+]-s[3][]); =-S[3][]); =S[3][+]-); y=s[0][]*+s[][]*+***s[][+]+***s[][])/6.0*h); brea; fy==0 && S[3][n-]<= ) nt =n-; h=s[3][+]-s[3][]); =-S[3][]); =S[3][+]-); y=s[0][]*+s[][]*+***s[][+]+***s[][])/6.0*h); return y; publc statc double [] thomasdouble a[][],double r[]) // nt n=a.length; double f[]=new double[n]; double e[]=new double[n]; double g[]=new double[n]; double []=new double[n]; fornt =0;<n;++) f[]=a[][]; fornt =0;<n-);++) g[]=a[][+]; fornt =0;<n-);++) e[+]=a[+][]; fornt =;<n;++) e[]=e[]/f[-]; f[]=f[]-e[]*g[-]; fornt =;<n;++)

84 r[]=r[]-e[]*r[-]; [n-]=r[n-]/f[n-]; fornt =n-);>=0;--) []=r[]-g[]*[+])/f[]; return ; publc statc double [] thomasdouble f[],double e[],double g[],double r[]) nt n=f.length; double []=new double[n]; fornt =;<n;++) e[]=e[]/f[-]; f[]=f[]-e[]*g[-]; fornt =;<n;++) r[]=r[]-e[]*r[-]; [n-]=r[n-]/f[n-]; fornt =n-);>=0;--) []=r[]-g[]*[+])/f[]; return ; publc statc double [][] cubc_splnedouble [],double y[],double c0,double cn) nt n=.length; double h[]=new double[n]; double w[]=new double[n]; double f[]=new double[n]; double e[]=new double[n]; double g[]=new double[n]; double d[]=new double[n]; double []=new double[n]; double S[][]=new double[4][n]; nt ; for=0;<n-);++) h[]=[+]-[]; w[]=y[+]-y[])/h[]; d[0]=c0; d[n-]=cn; for=;<n-);++) d[]=6.0*w[]-w[-]); f[0]=.0; f[n-]=.0; g[0]=0.0; g[n-]=0.0; e[0]=0.0; e[n-]=0.0; for=;<n-);++) f[]=.0*h[]+h[-]);e[]=h[-];g[]=h[]; S[]=thomasf,e,g,d); S[3]=; for=0;<n-);++) S[0][]=6.*y[+]-h[]*h[]*S[][+])/6.0*h[]); S[][]=6.*y[]-h[]*h[]*S[][])/6.0*h[]); return S; publc class FOPOcubc publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato

85 double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) throws java.o.ioecepton f_cubc f=new f_cubc"n.tt"); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "Küb şert nterpolasyonlu Fbonacch optmzasyon : ",JOptonPane.PLAIN_MESSAGE); Plot pp=new Plot"n.tt"); pp.setplottype0,38); //very beşöşe yıldız olara çz pp.setcolor0,0,0,50); //very mav çz pp.addfunctonf,-4.0,6.0,00); pp.plot);

86 3.7 İKİNCİ DERECE B- ŞERİT ARADEĞER HESABI İNTERPOLASYON) YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU Bu bölümümüzde B şert nterpolasyonunu nceleyeceğz. Sonsuz sayıda notadan oluşmuş br set düşünelm Şel : B 0 şert tanımı..< t - < t - < t 0 < t < t < Bu notalar çn tanımlayacağımız sıfırıncı dereceden br B 0 şert elemanının tanımı > < = ) t t t t B bu tanım Şel 6.8- de graf olara gösterlmştr. Fonsyonun değer t notasında t + notasında 0; t le t + arasında t + notası harç olma üzere yne br, bu bölgenn dışında 0 değer almatadır. Bu fonsyon drac-delta fonsyonu olara blnr. B şert fonsyonu aynı zamanda her durum çn poztf tanımlı br fonsyondur. Yan tüm ve değerler çn 0 ) 0 B yazılablr. Aynı zamanda tüm değerler çn ) 0 = = = B olur. B 0 tanımlandığında daha üst dereceden B şert fonsyonları bu tanımdan yola çıılara tanımlanablr. ) ) ) B t t t B t t t B =

87 < < < < = ) t t t t t t t t t t t veya t B B şert fonsyonu şel de gösterlmştr. Şel B şert tanımı Bu fonsyon çn de ) = = = B bağıntısı geçerldr. B şert nterpolasyon formülü nc dereceden B şert çn = = = B C f ) ) şelnde fade edlr. Anca bu denlem yuarıda denlemle brlte değerlendrlr se: + = = = B t t t B t t t C f ) ) ) formunu alır. Buradan da denlemmz = = = B C f ) ) formuna dönüştüreblrz. Katsayılar arasında + = j j j j j j t t t C t t t C C Bu temel bağıntılardan yararlanara B şert nterpolasyonu adım adım oluşturablrz. En genel formda nterpolasyon formülümüz : = = = B A S ) ) se Önce 0ıncı dereceden şert nterpolasyon le başlarsa, bu denleme X t 0 t t n Y y 0 y. Y n versn uyduracağız. Yan St )=y n 0 olmasını styoruz. Eğr uydurmaya B 0 şerdnden başlarsa = = = j j t B j j 0 ) 0 δ olduğundan problemn çzümü bast olara A =y n 0 seçmeten barettr. Bu durumda şert = = n B y S 0 0 ) ) formunu alaca tır. Oıncı derece şertten brnc derece şerte geçerse çözümümüz yne bast br denlemdr. = = = j j t B j j 0 ) δ

88 = = n = 0 S ) y B şelnde olacatır. Burada yne A =y n ) polnomlar çn, örneğn derece polnom çn = = [ A t t ) + A t t )] t ) = j j j+ j j+ j j t t 0 olmuştur. Daha yüse dereceden A B bağıntısını yazablrz. Bu durumda aşağıda j+ j denlem sstem elde edlr A j t j+ t j ) + Aj+ t j t j ) = y j t j+ t j ) 0 j n Bu denlem sstemn çözmenn br yolu A 0 değerne herhang br değer atayara ger alan değerler A 0 değernden türetme yoluna gtmetr. Bu durumda denlem Aj+ = α j + β j Aj 0 j n formunda yazılablr. Burada atsayılar t t j+ j α j = y t t j j t t 0 j n j j+ β j = t t j j şelnde yazılablr. Katsayıların değerlern üçü tutablme çn bzm seçtğmz A 0 değer n Φ = + = 0 A fonsyonunu mnmum yapaca şelde seçlmes tavsye edlr. Buradan A0 değern bulma çn Bütün A değerlernn A 0 dan türedğn hatırlayalım) şu şelde br denlem yazablrz Aj+ = γ j + δ j A 0 0 j n denlemde γ ve δ ardışı yerne oyma proses le saptanablr. j j γ = α 0 0 γ = α + β γ j Φ = Φ = A j A + A + j j δ = β 0 0 δ = β δ A... A 0 n j j j 0 j n + γ + A + + A A 0 0 δ 0 0) γ δ 0)... γ n δ n 0) fonsyonun türevn 0 a eştlememz gerer. dφ da 0 = A n n 0 bu denlem ısaca qa + p = 0 0 q = + γ + δ A ) δ + γ + δ A ) δ γ + δ A ) δ = 0 şelnde yazılırsa + δ 0 + δ δ n p = γ δ + γ δ + γ δ γ δ 0 0 n n olur. A 0 ın mnmum değern seçme çn bu şelnde yazablrz. Bu tanımla nc dereceden B şert nterpolasyon atsayılarını bulma çn gereen tüm denlemler oluşmuş olur. Bu denlem sstemnde herhang br matrs çözümü olmadığından ve değerler ardışı yerne oyma le oluşturulduğundan programın oluşturulması br üst bölümde verdğmz üb şert nterpolasyonuna göre ço daha olaydır. Program derece B-şert nterpolasyon formülüyle verye eğr uydurara optmzasyonu /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; mport java.swng.table.*; mport java.o.*; class f_b_splne etends f_

89 double a[]; double t[]; publc f_b_splnestrng s) double y[]; double a[][]=tet.readdoublets); t=a[0]; y=a[]; a=b_splnet,y); publc double funcdouble ) double h[]=ht); nt ; nt n=t.length-; double nn=n+; double d,e; for=n-);>=;--) f-t[])>=0) brea; ++; d=a[+]*-t[-])+a[]*t[]-+h[+]))/h[]+h[+]); e=a[]*-t[-]+h[-])+a[-]*t[-]-+h[]))/h[-]+h[]); double bs=d*-t[-])+e*t[]-))/h[]; return bs; publc statc double[] hdouble t[]) nt n=t.length-;//t 0..n nt nn=n+; double h[]=new double[nn]; fornt =;<=n;++) h[]=t[]-t[-]; h[0]=h[]; h[n+]=h[n]; return h; publc statc double [] B_Splnedouble t[],double y[]) nt n=t.length-; nt nn=n+; nt ; double delta,gamma,p,q,r; double a[]=new double[nn]; double h[]=new double[nn]; h=ht); delta=-; gamma=.0*y[0]; p=delta*gamma; q=.0; for=;<=n;++) r=h[+]/h[]; delta=-r*delta; gamma=-r*gamma+r+)*y[]; p=p+gamma*delta; q=q+delta*delta; a[0]=-p/q; for=;<=n+);++) a[]=h[-]+h[])*y[-]-h[]*a[-])/h[-]; return a; publc class FOPOBSplne publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt)

90 // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) throws java.o.ioecepton f_b_splne f=new f_b_splne"n.tt"); f_ f=f; double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "B-Şert nterpolasyonlu Fbonacch optmzasyon : ",JOptonPane.PLAIN_MESSAGE); Plot pp=new Plotf,.0,5.0,00); pp.adddata"n.tt"); pp.setplottype,38); //very beşöşe yıldız olara çz pp.setcolor,0,0,50); //very mav çz pp.plot);

91 Çıtı derece B-şert nterpolasyon formülüyle verye eğr uydurara optmzasyonu Gördüğünüz gb burada sonuç dğerlerne göre daha farlı çıtı. Bu yöntemmzn daha hatalı mı olduğunu göstermetedr? Aslında sayısal ver olara nc derece polnom alara braz hle yaptı polnom açılımı olan metodlar bze görecel daha y sonuçlar verd. graf çıtısına batığımızda yöntemn usurlu olmadığını, sadece tanımın sürel polnomu tam tutmadığını görüyoruz. 3.8 HAREKETLİ EN KÜÇÜK KARELER YÖNTEMİ İLE EĞRİ UYDURULMASI VE RAKAMSAL VERİ OPTİMİZASYONU m n n m) j+ a j w f 0,..., m = = denlemn polnomlar çn en üçü areler denlem = 0 = = olara tanımlamış ve bu denlem ağırlı fonsyonu w ==sabt olma üzere çözmüştü. Bu çözümde polnomun üssünü artırmanın her zaman çn çözüm vermedğn göreblrz. Örneğn X F Versne en üçü areler polnom metodu le 3.üncü,4üncü ve 5nc dereceden eğrler uyduralım.

92 Burada tüm eğrler brbrnden farlı sonuçlar vermştr, pe hangs daha doğrudur? Bunu estrmemz her zaman çn ço olay olmıyacatır. Burada uygulayableceğmz değş br yalaşım da sürel değşeblr br ağırlı fonsyonunu uygulamatır. Örneğn ağırlı fonsyonu olara n fonsyonu olara değşen w ) = gb br fonsyon alablrz. Böyle br fonsyonda olduğunda w ) olduğu görülmetedr. Eğer her çn = olduğunda f=f olduğunu abul eder, bunun dışında değerler çn verlen e bağlı ağırlı fonsyonu cnsnden en üçü areler yöntemn çözere f değern bulablrz. Yalnız bu durumda w ) n fonsyonu olara değştğnden her nota çn atsayı matrsn terar hesaplamamız gereecetr. Bu yüzden hareet halnde br en üçü areler metodu oluşturmuş olacağız. Aynı verye hareetl en üçü areler metodunu uydurduğumuzda 4. dereceden polnom ullanara ve ağırlı ) fonsyonu olara w = fonsyonunu alara Şmd yuarda ver notalarını alara hareetl EKK le optmumu bulmaya çalışalım. Program 3.8- Hareetl en üçü areler formülüyle verye eğr uydurara optmzasyonu /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f_hareetlekk etends f_ double [],y[]; nt m; //en üçü areler polnomunun üst fonsyonu nt ; //w)=/abs-)^ ağırlı fonsyonunun üssü publc f_hareetlekkstrng s,nt m,nt ) double a[][]=tet.readdoublets); =a[0]; y=a[]; m=m; =; publc double funcdouble ) return hareetlekk,,y,m,); //hareetl en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[])

93 //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double hareetlekkdouble,double [],double y[],nt n,nt ) nt l=.length; nt,j,; nt np=n+; double A[][]; A=new double[np][np]; double B[]; B=new double[np]; double X[]; X=new double[np]; double w[]=new double[l]; for=0;<l;++) f==[]) return y[]; for=0;<l;++) w[]=.0/math.powmath.abs-[]),); //for=0;<l;++) w[]=math.ep--[])*-[]))/4.0; for=0;<np;++) forj=0;j<np;j++) f==0 && j==0) A[][j]=l; else for=0;<l;++) A[][j] += w[]*math.pow[],+j)); for=0;<l;++) f==0) B[]+= w[]*y[]; else B[] += w[]*math.pow[],)*y[]; X=pvotlugaussA,B); double ma=0; for=0;<n+;++) fmath.absx[]) > ma) ma = Math.absX[]); for=0;<n+;++)

94 fmath.absx[]/ma) > 0) && Math.absX[]/ma) <.0e-00)) X[]=0; return funcekkx,); publc statc double funcekkdouble e[],double ) // ths functon calculates the value of // least square curve fttng functon nt n=e.length; double ff; fn!=0.0) ff=e[n-]; fornt =n-;>=0;--) ff=ff*+e[]; else ff=0; return ff; publc statc double[][] funcekkdouble [],double y[],nt polnomatsays,nt aradegersays,nt ) //aradegersays: --o--o----o--o-- zncrnde deneysel notalar se // ara değer sayısı dr nt n=.length; nt nn=n-)*aradegersays+)+; double z[][]=new double[][nn]; double d=0; nt =0; nt ; for=0;<n-);++) z[0][]=[];z[][]=hareetlekkz[0][],,y,polnomatsays,);++; fornt j=0;j<aradegersays;j++) d=[+]-[])/double)aradegersays+.0); z[0][]=z[0][-]+d;z[][]=hareetlekkz[0][],,y,polnomatsays,);++; z[0][]=[];z[][]=hareetlekkz[0][],,y,polnomatsays,); return z; publc class FOPOhareetlEKK publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc);

95 else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) throws java.o.ioecepton f_hareetlekk f=new f_hareetlekk"n.tt",3,); double a,b; a=double.parsedoublejoptonpane.showinputdalog" Fonsyonun alt sınırını grnz a : ")); b=double.parsedoublejoptonpane.showinputdalog" Fonsyonun üst sınırını grnz b : ")); double r; r= goldenf,a,b,.0e-0,.0e-5,0); JOptonPane.showMessageDalognull," optmzasyon değer : "+r+"\nfonsyon değer : "+f.funcr), "En Küçü areler eğr uydurmalı Fbonacch sayısal ver optmzasyonu : ",JOptonPane.PLAIN_MESSAGE); Plot pp=new Plotf,-4.0,6.0,400); pp.adddata"n.tt"); pp.setplottype,38); // very beşöşe yıldız olara çz pp.setcolor,color.blue); // very mav çz pp.plot); Çıtı 3.8- Hareetl en üçü areler formülüyle verye eğr uydurara optmzasyonu Çıtı 3.8- Hareetl en üçü areler formülüyle verye eğr uydurara optmzasyonu

96 pe y br sonuç gb görünmüyor, demn y uyum parametrelern sağlıyamadı, vers çn deneyelm br de Çıtı Hareetl en üçü areler formülüyle verye eğr uydurara optmzasyonu Çıtı Hareetl en üçü areler formülüyle verye eğr uydurara optmzasyonu Bu fonsyon çn uyum daha y gb görünüyor. PROBLEM 3. En üçü areler polnom) yöntemn ve brent optmzasyon yöntemn ullanara versnn mnmum notasını saptayınız. Bunun çn gerel olan programı gelştrnz. PROBLEM 3. Küb şert nterpolasyon yöntemn ve brent optmzasyon yöntemn ullanara versnn mnmum notasını saptayınız. Bunun çn gerel olan programı gelştrnz.

97 ÇÖZÜM /// OPTIMİZASYON // derece polnom nterpolasyon ullanara optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f_cubc etends f_ double S[][]; publc f_cubcstrng s,double co, double cn) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; S=cubc_splne,y,co,cn); publc f_cubcstrng s) double []; double y[]; double a[][]=tet.readdoublets); =a[0]; y=a[]; S=cubc_splne,y,0.0,0.0); publc double funcdouble ) nt n=s[0].length; double =0; double =0; double y=0; double h=0; fornt =0;<n-);++) fs[3][]<= && <=S[3][+]) h=s[3][+]-s[3][]); =-S[3][]); =S[3][+]-); y=s[0][]*+s[][]*+***s[][+]+***s[][])/6.0*h); brea; fy==0 && S[3][n-]<= ) nt =n-; h=s[3][+]-s[3][]); =-S[3][]); =S[3][+]-); y=s[0][]*+s[][]*+***s[][+]+***s[][])/6.0*h); return y; publc statc double [] thomasdouble a[][],double r[]) // nt n=a.length; double f[]=new double[n]; double e[]=new double[n]; double g[]=new double[n]; double []=new double[n]; fornt =0;<n;++) f[]=a[][]; fornt =0;<n-);++) g[]=a[][+]; fornt =0;<n-);++) e[+]=a[+][]; fornt =;<n;++) e[]=e[]/f[-]; f[]=f[]-e[]*g[-]; fornt =;<n;++)

98 r[]=r[]-e[]*r[-]; [n-]=r[n-]/f[n-]; fornt =n-);>=0;--) []=r[]-g[]*[+])/f[]; return ; publc statc double [] thomasdouble f[],double e[],double g[],double r[]) nt n=f.length; double []=new double[n]; fornt =;<n;++) e[]=e[]/f[-]; f[]=f[]-e[]*g[-]; fornt =;<n;++) r[]=r[]-e[]*r[-]; [n-]=r[n-]/f[n-]; fornt =n-);>=0;--) []=r[]-g[]*[+])/f[]; return ; publc statc double [][] cubc_splnedouble [],double y[],double c0,double cn) nt n=.length; double h[]=new double[n]; double w[]=new double[n]; double f[]=new double[n]; double e[]=new double[n]; double g[]=new double[n]; double d[]=new double[n]; double []=new double[n]; double S[][]=new double[4][n]; nt ; for=0;<n-);++) h[]=[+]-[]; w[]=y[+]-y[])/h[]; d[0]=c0; d[n-]=cn; for=;<n-);++) d[]=6.0*w[]-w[-]); f[0]=.0; f[n-]=.0; g[0]=0.0; g[n-]=0.0; e[0]=0.0; e[n-]=0.0; for=;<n-);++) f[]=.0*h[]+h[-]);e[]=h[-];g[]=h[]; S[]=thomasf,e,g,d); S[3]=; for=0;<n-);++) S[0][]=6.*y[+]-h[]*h[]*S[][+])/6.0*h[]); S[][]=6.*y[]-h[]*h[]*S[][])/6.0*h[]); return S; publc class OPO9cubc publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn;

99 double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-;

100 nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double goldenf_ f,double a,double b,double epslon) return goldenf,a,b,epslon,.0e-0,0); publc statc double goldenf_ f,double a,double b) return goldenf,a,b,.0e-0,.0e-0,0); publc statc double goldenf_ f,double a,double b,double epslon,double delta,nt prnt) // f fonsyonunun mnmumunu bulur // not mamum f) = mnmum -f)) double r = Math.sqrt5.0)-.0)/.0; // golden rato double r = r*r; double h = b - a; double ya = f.funca); double yb = f.funcb); double c = a + r*h; double d = a + r*h; double yc = f.funcc); double yd = f.funcd); nt = ; double dp,dy,p,yp; whle Math.absyb-ya)>epslon) h>delta)) ++; f yc<yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = a + r * h; yc = f.funcc); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r * h; yd = f.funcd); //end of f //end of whle dp = Math.absb-a); dy = Math.absyb-ya); p = a; yp = ya; f yb<ya) p = b; yp = yb; fprnt==) System.out.prntln" mn = "+p+"ymn = "+yp+"error of ="+dp+"error of y"+dy); return p; publc statc vod man Strng args[]) throws java.o.ioecepton Strng s="üç adetö tahmn değern değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f_cubc f=new f_cubc"n.tt"); double r= brentf,0[0],0[],0[],.0e-8);

101 s=" çözüm set : "+r+"\n fonsyon değer : "+-f.funcr)); //fonsyonun gerçe değern elde etme çn - le çarpılmıştır Strng s="brent metodu le lneer olmıyan br değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Plot pp=new Plotf,.0,5.0,00); pp.adddata"n.tt"); pp.setplottype,38); //very beşöşe yıldız olara çz pp.setcolor,0,0,50); //very mav çz pp.plot); PROBLEM 3.3 İc derece B-şert nterpolasyon yöntemn ve brent optmzasyon yöntemn ullanara versnn mnmum notasını saptayınız. Bunun çn gerel olan programı gelştrnz. 4. ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK OPTİMİZASYON METODLARI 4. LİNEER OLMAYAN DENKLEM SİSTEMLERİNİN ÇÖZÜMÜ NEWTON - RAPHSON YÖNTEMİ Burada ço lneer olmıyan geometr metodlara geçmeden önce bu tür metodların brçouna temel teşl eden Lneer olmıyan ço boyutlu denlem sstemlernn çözümünü nceleyeceğz. Br boyutlu Newton-Raphson formülünde n+ = n - f n ) /f n ) formülüne ulaşmıştı. Bu formülü braz değştrrse aynı formül Δ n+ = n+ - n = - f n ) /f n )

102 f n )*Δ n+ = - f n ) formunda yazılablr. Şmd aynı şlem ço boyutlu br denlem sstemnn ölern bulma problem olara düşününelm. Türev denlem: f f f f... 3 n f f f f... 3 n [ f ] = f f f f Δ = n fn fn fn f n... 3 n şelnde verleblr. Bu durumda Newton-raphson denlem [ f ] Δ = - f Δ = - [ f ] f şeln alır. Δ f Δ f Δ3 f = f Δn f n 3 Görüldüğü gb denlemmz br lneer denlem sstemdr ve br önce bölümde gördüğümüz tenlerle çözüleblr. Her çözümde Δ n yen değerlern elde edeceğmzden, bunlardan da yen değerlern buluruz. Program 4.- Ço boyutlu lneer olmayan denlem çözümü ölern bulma) // SCO5 Newton Raphson metoduyla // brden fazla değşenl denlem sstemnn ölern bulma mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; publc class SCO5 // Newton Raphson Metodunu ullanara denlem sstemnn ölern bulma publc statc double[] fdouble []) //çözümü stenen fonsyon double ff[]=new double[]; ff[0]=[0]*[0]+[0]*[]-0.0; ff[]=[]+3.0*[0]*[]*[]-57.0; return ff; publc statc double[][] dfdouble []) //çözümü stenen fonsyonun türev fonsyonları double a[][]=new double[][]; a[0][0]=4.0*[0]+[]; a[0][]=[0]; a[][0]=3.0*[]*[]; a[][]=.0+6.0*[0]*[]; return a; publc statc double[] multplydouble[] left,double rght) //multplyng a vector wth a constant nt ;

103 nt n=left.length; double b[]; b=new double[n]; for=0;<n;++) b[]=rght*left[]; return b; publc statc double absdouble[] left) // absolute value of a vector nt ; nt n=left.length; double b=0; for=0;<n;++) b=b+math.absleft[]); return b; publc statc double[] dvdedouble[] left,double[][] rght) return pvotlugaussrght,left); //en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ;

104 publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[] newtondouble []) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d de tanımlanacatır // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü double t=.0; nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double b[]; b=new double[n]; for=0;<n;++) b[]=.0; =0; whle ++ < nma && absb) > tolerance ) b=multplydvdef),df)),-t); =add,b); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); System.out.prntln); return ; publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) double [] 0=vergr); double [] r= newton0);

105 Strng s=" ö değerler : \n"+matr.tostrngtr); Strng s="ço değşenl Newton-Raphson metodu le ö bulma : "; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.- Ço boyutlu lneer olmayan denlem çözümüölern bulma) Newton-Raphson denlemnde en öneml problemlerden br türevlern değerlernn geremesdr. Bu zorluğu türevler sayısal yöntemlerle far denlemler olara) hesaplamatır. Program 4.- Ço boyutlu lneer olmayan denlem çözümü ölern bulma) Türev matrs sayısal olara hesaplanıyor // SCO5 Newton Raphson metoduyla // brden fazla değşenl denlem sstemnn ölern bulma mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ abstract class f_ // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func) returns the value of f[0] and f[] // as a two dmensonal vector abstract double[] funcdouble []); class fa etends f_ publc double[] funcdouble []) //çözümü stenen fonsyonun türev fonsyonları //çözümü stenen fonsyon double ff[]=new double[]; ff[0]=[0]*[0]+[0]*[]-0.0; ff[]=[]+3.0*[0]*[]*[]-57.0; return ff; publc class FSCO5A // Newton Raphson Metodunu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] newtond f_ f,double []) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d turev alt programıyla hesaplanır.

106 // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü double t=.0; nt,,jj; nt nma=500; double tolerance=.0e-5; nt n=.length; double b[]; b=new double[n]; double dy[][]; dy=new double[n][n]; =0; for=0;<n;++) b[]=.0; whle ++ < nma && Matr.absb) > tolerance ) for=0;<n;++) forjj=0;jj<n;jj++) dy[][jj]=dff,,,jj); b=multplydvdef.func),dy),-t); =add,b); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double dff_ f,double [],nt denlem_ref,nt _ref) // Türev hesabı double h=0.00; double hh=.0/h; nt,m; nt n=.length; double f[]; f=new double[n]; double f[]; f=new double[n]; double f3[]; f3=new double[n]; double f4[]; f4=new double[n]; double []; =new double[n]; double []; =new double[n]; double 3[]; 3=new double[n]; double 4[]; 4=new double[n]; for=0;<n;++) []=[]; []=[]; 3[]=[]; 4[]=[]; [_ref]+=.0*h; [_ref]+=h; 3[_ref]-=h; 4[_ref]-=.0*h; f=f.func); f=f.func); f3=f.func3); f4=f.func4);

107 double f=f[denlem_ref]+8.0*f[denlem_ref]-8.0*f3[denlem_ref]+f4[denlem_ref])/.0*hh; //System.out.prntln"f"+_ref+","+denlem_ref+") = "+f); return f; publc statc double[] multplydouble[] left,double rght) //multplyng a vector wth a constant nt ; nt n=left.length; double b[]; b=new double[n]; for=0;<n;++) b[]=rght*left[]; return b; publc statc double absdouble[] left) // absolute value of a vector nt ; nt n=left.length; double b=0; for=0;<n;++) b=b+math.absleft[]); return b; publc statc double[] dvdedouble[] left,double[][] rght) return pvotlugaussrght,left); //en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--)

108 toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) fa f =new fa); double [] 0=vergr); Strng s="türev fonsyonları sayısal hesaplanmış Newton-Raphson ö bulma : "; double [] r= newtondf,0); Strng s=" ö değerler : \n"+matr.tostrngtr); JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); 4. ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-NEWTON-RAPHSON OPTIMIZASYONU

109 f,, 3,, n ) fonsyon set verldğnde, brnc, nc türevler ve değerler terasyon farları = n f f f f f... 3 ve = )... ) ) ) 3 3 m n m n m m m m m m m δ ve = ] [ n n n n n n n f f f f f f f f f f f f f f f f H şelnde verleblr. m+) nc terasyon çn Newton-Raphson denlem [ ] m m m H f = + δ şelnde yazılablr. Görüldüğü gb lneer br denlem sstem oluşmuştur ve her terasyonda bu denlem sstemnn çözülmes gerer. Sstem çözüldüğünde tüm değerlernn yen teratf değerler bulunur. nc türev H hessan matrs smn alır. Brnc ve nc türevler sayısal metodlarla da hesaplanablr, anca bu durumda hata olasılıları doğal olara artar. Bu denlem [ ] m m m H f = + δ m m m m H f + = + olara ta yazılablr. Burada [ ] m H Hesan matrsnn ters nverse) matrsdr. Bu denleme br genelleştrme daha yaparsa : m m m m m H f α + = + şeln alır. Şmdl m α e vetörünü ullanmıyacağız, brm vetör olara abul edeblrz. ÖRNEK PROBLEM f 0, )= fonsyonunun =[-,] notasından başlayara mnmum değerlern bulunuz. = = f = ] [H = ] [ H [ ] = = = m m m f H δ =.5 0 örne problem üç ayrı program le çözelm brnc problemde fonsyon, brnc ve nc türevler verlmştr. İnc programda fonsyon ve brnc türev verlmş, nc türevlerhessan) sayısal türev ullanılara hesaplanmıştır. Üçücü programda hem brnc hem nc türevler sayısal olara hesaplanmıştır.

110 Program 4.- Ço blnmyenl lneer olmayan geometr Newton-Raphson optmzasyon programı // SCO5 Newton Raphson metoduyla // brden fazla değşenl denlem sstemnn ölern bulma mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ abstract class fj_ etends Mathd // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0][0]=[0]+sn[]) f[0][]=[0]*[] // f[][0]=[0]*[0]-[] f[][]=[0]+[]*[0] // func) returns the value of f[0][0] and f[0][] // f[0][] and f[][] // as a two dmensonal vector // abstract double[][] funcdouble []); abstract class f_ etends Mathd // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func) returns the value of f[0][0] // f[0][] // as a two dmensonal vector // abstract double[] funcdouble []); abstract class f_j etends Mathd // sngle functon mult ndependent varable // a sngle value s returned ndced to equaton_ref // eample f=[0]+sn[]) // // func,) returns the value of f[] // func,0) returns the value of f[0] abstract double funcdouble []); class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fb etends f_ publc double[] funcdouble []) //çözümü stenen fonsyonun türev fonsyonları double ff[]=new double[]; ff[0]=6.0*[0]-4.0*[]-.0; ff[]=-4.0*[0]+4.0*[]-.0; return ff; class fc etends fj_ publc double[][] funcdouble [])

111 //çözümü stenen fonsyonun türev fonsyonları double ff[][]=new double[][]; ff[0][0]=6.0;ff[0][]=-4.0; ff[][0]=-4.0;ff[][]=4.0; return ff; publc class FSCO5G // Newton Raphson Metodunu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] newtond f_ f,fj_ f,double []) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d turev alt programıyla hesaplanır. // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü double t=.0; nt,,jj; nt nma=500; double tolerance=.0e-5; nt n=.length; double b[]; b=new double[n]; double dy[][]; dy=new double[n][n]; =0; for=0;<n;++) b[]=.0; whle ++ < nma && Matr.absb) > tolerance ) for=0;<n;++) forjj=0;jj<n;jj++) dy[][jj]=dff,,,jj); b=multplydvdedyf,),hf,)),-t); =add,b); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[][]hfj_ f,double []) //Hessan matrs nt n=.length; double dy[][]=f.func); System.out.prntlnMatr.toStrngdy)); return dy; publc statc double[] dyf_ f,double []) //brnc türev nt n=.length; double deltay[]=f.func); System.out.prntlnMatr.toStrngTdeltay)); return deltay;

112 publc statc double dff_ f,double [],nt denlem_ref,nt _ref) // Türev hesabı double h=0.00; double hh=.0/h; nt,m; nt n=.length; double f[]; f=new double[n]; double f[]; f=new double[n]; double f3[]; f3=new double[n]; double f4[]; f4=new double[n]; double []; =new double[n]; double []; =new double[n]; double 3[]; 3=new double[n]; double 4[]; 4=new double[n]; for=0;<n;++) []=[]; []=[]; 3[]=[]; 4[]=[]; [_ref]+=.0*h; [_ref]+=h; 3[_ref]-=h; 4[_ref]-=.0*h; f=f.func); f=f.func); f3=f.func3); f4=f.func4); double f=f[denlem_ref]+8.0*f[denlem_ref]-8.0*f3[denlem_ref]+f4[denlem_ref])/.0*hh; //System.out.prntln"f"+_ref+","+denlem_ref+") = "+f); return f; publc statc double[] multplydouble[] left,double rght) //multplyng a vector wth a constant nt ; nt n=left.length; double b[]; b=new double[n]; for=0;<n;++) b[]=rght*left[]; return b; publc statc double absdouble[] left) // absolute value of a vector nt ; nt n=left.length; double b=0; for=0;<n;++) b=b+math.absleft[]); return b; publc statc double[] dvdedouble[] left,double[][] rght) return pvotlugaussrght,left); //en ucu areler metodu

113 publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers);

114 nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) fa f =new fa); fb f =new fb); fc f3 =new fc); double [] 0=vergr); Strng s="newton-raphson ö bulma : "; double [] r= newtondf,f3,0); Strng s=" ö değerler : \n"+matr.tostrngtr); JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.- Ço blnmyenl lneer olmayan geometr Newton-Raphson optmzasyon programı Program 4.- Ço blnmyenl lneer olmayan geometr Newton-Raphson optmzasyon programı, Hessan matr H sayısal türev ullanılara hesaplanmış // FSCO5H Newton Raphson metoduyla // brden fazla değşenl denlem sstemnn ölern bulma // ve optmzasyon mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ abstract class fj_ etends Mathd // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0][0]=[0]+sn[]) f[0][]=[0]*[] // f[][0]=[0]*[0]-[] f[][]=[0]+[]*[0] // func) returns the value of f[0][0] and f[0][] // f[0][] and f[][] // as a two dmensonal vector // abstract double[][] funcdouble []); abstract class f_ etends Mathd // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func) returns the value of f[0][0] // f[0][] // as a two dmensonal vector

115 // abstract double[] funcdouble []); abstract class f_j etends Mathd // sngle functon mult ndependent varable // a sngle value s returned ndced to equaton_ref // eample f=[0]+sn[]) // // func,) returns the value of f[] // func,0) returns the value of f[0] abstract double funcdouble []); class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=3.0*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fb etends f_ publc double[] funcdouble []) //çözümü stenen fonsyonun türev fonsyonları double ff[]=new double[]; ff[0]=6.0*[0]-4.0*[]-.0; ff[]=-4.0*[0]+4.0*[]-.0; return ff; publc class FSCO5H // Newton Raphson Metodunu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] newtond f_ f,double []) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d turev alt programıyla hesaplanır. // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü double t=.0; nt,,jj; nt nma=500; double tolerance=.0e-0; nt n=.length; double b[]; b=new double[n]; double dy[][]; dy=new double[n][n]; =0; for=0;<n;++) b[]=.0; whle ++ < nma && Matr.absb) > tolerance ) b=multplydvdedyf,),hf,)),-t); =add,b);

116 f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double dff_ f,double [],nt denlem_ref,nt _ref) // Türev hesabı double h=0.00; double hh=.0/h; nt,m; nt n=.length; double f[]; f=new double[n]; double f[]; f=new double[n]; double f3[]; f3=new double[n]; double f4[]; f4=new double[n]; double []; =new double[n]; double []; =new double[n]; double 3[]; 3=new double[n]; double 4[]; 4=new double[n]; for=0;<n;++) []=[]; []=[]; 3[]=[]; 4[]=[]; [_ref]+=.0*h; [_ref]+=h; 3[_ref]-=h; 4[_ref]-=.0*h; f=f.func); f=f.func); f3=f.func3); f4=f.func4); double f=-f[denlem_ref]+8.0*f[denlem_ref]-8.0*f3[denlem_ref]+f4[denlem_ref])/.0*hh; return f; publc statc double[][] Hf_ f,double []) nt n=.length; double dy[][]=new double[n][n];; fornt =0;<n;++) fornt jj=0;jj<n;jj++) //Hessan matrs dy[][jj]=dff,,,jj); System.out.prntlnMatr.toStrngdy)); return dy; publc statc double[] dyf_ f,double []) //brnc türev nt n=.length; double deltay[]=f.func); System.out.prntlnMatr.toStrngTdeltay)); return deltay; publc statc double[] multplydouble[] left,double rght) //multplyng a vector wth a constant nt ;

117 nt n=left.length; double b[]; b=new double[n]; for=0;<n;++) b[]=rght*left[]; return b; publc statc double[] dvdedouble[] left,double[][] rght) return pvotlugaussrght,left); //en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma];

118 for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) fa f =new fa); fb f =new fb); double [] 0=vergr); Strng s="newton-raphson ö bulma : "; double [] r= newtondf,0); Strng s=" ö değerler : \n"+matr.tostrngtr); JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); // FSCO5I Newton Raphson metoduyla // brden fazla değşenl denlem sstemnn ölern bulma // ve optmzasyon Hessan matrs H sayısal olara hesaplanmış, brnc türev de sayısal olara hesaplanmış mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ abstract class fj_ etends Mathd // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0][0]=[0]+sn[]) f[0][]=[0]*[] // f[][0]=[0]*[0]-[] f[][]=[0]+[]*[0] // func) returns the value of f[0][0] and f[0][] // f[0][] and f[][] // as a two dmensonal vector //

119 abstract double[][] funcdouble []); abstract class f_ etends Mathd // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func) returns the value of f[0][0] // f[0][] // as a two dmensonal vector // abstract double[] funcdouble []); abstract class f_j etends Mathd // sngle functon mult ndependent varable // a sngle value s returned ndced to equaton_ref // eample f=[0]+sn[]) // // func,) returns the value of f[] // func,0) returns the value of f[0] abstract double funcdouble []); class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fb etends f_ f_j f; fbf_j f) f=f; publc double[] funcdouble []) // Türev hesabı double h= ; double hh=.0/h; nt,m; nt n=.length; double f; double f; double f3; double f4; double []; =new double[n]; double []; =new double[n]; double 3[]; 3=new double[n]; double 4[]; 4=new double[n]; double f[]=new double[n]; fornt j=0;j<n;j++) for=0;<n;++) []=[]; []=[]; 3[]=[]; 4[]=[];

120 [j]+=.0*h; [j]+=h; 3[j]-=h; 4[j]-=.0*h; f=f.func); f=f.func); f3=f.func3); f4=f.func4); f[j]=-f+8.0*f-8.0*f3+f4)/.0*hh; return f; publc class FSCO5I // Newton Raphson Metodunu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] newtond f_ f,double []) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d turev alt programıyla hesaplanır. // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü double t=.0; nt,,jj; nt nma=500; double tolerance=.0e-5; nt n=.length; double b[]; b=new double[n]; double dy[][]; dy=new double[n][n]; =0; for=0;<n;++) b[]=.0; whle ++ < nma && Matr.absb) > tolerance ) for=0;<n;++) forjj=0;jj<n;jj++) dy[][jj]=dff,,,jj); b=multplydvdedyf,),hf,)),-t); =add,b); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double dff_ f,double [],nt denlem_ref,nt _ref) // Türev hesabı double h= ; double hh=.0/h; nt,m; nt n=.length; double f[]; f=new double[n]; double f[]; f=new double[n]; double f3[]; f3=new double[n];

121 double f4[]; f4=new double[n]; double []; =new double[n]; double []; =new double[n]; double 3[]; 3=new double[n]; double 4[]; 4=new double[n]; for=0;<n;++) []=[]; []=[]; 3[]=[]; 4[]=[]; [_ref]+=.0*h; [_ref]+=h; 3[_ref]-=h; 4[_ref]-=.0*h; f=f.func); f=f.func); f3=f.func3); f4=f.func4); double f=-f[denlem_ref]+8.0*f[denlem_ref]-8.0*f3[denlem_ref]+f4[denlem_ref])/.0*hh; //System.out.prntln"f"+_ref+","+denlem_ref+") = "+f); return f; publc statc double[][] Hf_ f,double []) nt n=.length; double dy[][]=new double[n][n];; fornt =0;<n;++) fornt jj=0;jj<n;jj++) //Hessan matrs dy[][jj]=dff,,,jj); System.out.prntlnMatr.toStrngdy)); return dy; publc statc double[] dyf_ f,double []) //brnc türev nt n=.length; double deltay[]=f.func); System.out.prntlnMatr.toStrngTdeltay)); return deltay; publc statc double[] multplydouble[] left,double rght) //multplyng a vector wth a constant nt ; nt n=left.length; double b[]; b=new double[n]; for=0;<n;++) b[]=rght*left[]; return b; publc statc double[] dvdedouble[] left,double[][] rght) return pvotlugaussrght,left);

122 //en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: ");

123 StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) fa f =new fa); fb f =new fbf); double [] 0=vergr); Strng s="newton-raphson ö bulma : "; double [] r= newtondf,0); Strng s=" ö değerler : \n"+matr.tostrngtr); JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.- Ço blnmyenl lneer olmayan geometr Newton-Raphson optmzasyon programı, Hessan matr H sayısal türev ullanılara hesaplanmış 4.3 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-EN DİK YAMAÇ METODU N boyutlu sınırlamasız optmzasyon problemne Mnmum : f 0,,,, n ) problemn çözme yöntemlerne devam edyoruz. Denlemmzn türev fonsyonu f,, 3,..., n) f,, 3,..., n) f,, 3,..., n) = f,, 3,..., n) 3... f,, 3,..., n) n olara verlmşt. Bu metoda br başlangıç notası seçere başlarız. Örneğn başlangıç notası P = f,, 3,..., n ) olsun. Önce her yen step çn türev denlem d = f 3,,,..., ) = n 0... n hesaplanır. Sonra bu değer ullanılara α atsayısı cnsnden yen değere geçlr.

124 f,,,..., ) f,,,..., ) f,,,..., ) f α ) = f + α d ) = f [ α 3 n ],[ α 3 n ],...,[ α 3 n ]) n n f α) te boyutlu fonsyon değern mnmum yapan α değer te boyutlu optmzasyon tenlernden brs + ullanılara bulunur. Yen değer + = + α d formülünü ullanara hata üçülene adar teratf olara terarlanır. Program 4.3- en d yamaç algortması programı mport java.swng.*; mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.o.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fdm etends f_ // boyutlu fonsyonu te boyutlu fonsyona çevren // pseudo fonsyon f_j ff; double pc[]; double c[]; double t[]; nt n; publc fdmf_j ff,double p[],double []) n=p.length; ff=ff; pc=new double[n]; c=new double[n]; t=new double[n]; fornt =0;<n;++) pc[]=p[];c[]=[]; publc double funcdouble ) for nt j=0;j<n;j++) t[j]=pc[j]+*c[j]; return ff.funct); publc class OPO8 publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); // 3. brent metodu // // golden altın) oran - Fbonacch metodu ve nc derece polnom metodunu brlte ullanır publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter;

125 double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; // 3. en d yamac metodu // publc statc double[] endyamac f_j f,double []) // en d yamac metodu // lnmn ve brent metodunuullanır double t=.0;

126 nt,,jj; nt nma=500; double tolerance=.0e-0; nt n=.length; double b[]; b=new double[n]; double lambda; double dy[]=new double[n]; //dy=new double[n][n]; =0; for=0;<n;++) b[]=.0; whle ++ < nma && Matr.absb) > tolerance ) dy=turevf,); lambda=lnmnf,,dy); b=matr.multplydy,lambda); =Matr.add,b); //System.out.prntln"= "++"\n"+matr.tostrng)); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b);

127 f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[] turevf_j f_derv,double []) // df/dj j=0...length // Ths method calculates turev of a functon wth more than one ndependent varable. // Accuracy of method can be adjusted by changng varables h0 and n // functon nput should be n the form gven n abstract class // f_j,j=0...length = df/d_ref) double a[]=new double[.length]; fornt _ref=0;_ref<.length;_ref++) a[_ref]=turevf_derv,,_ref); return a; publc statc double turevf_j f,double [],nt _ref)

128 // df/dj double h0= ; nt,m; nt n=7; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) //h[]=h0*math.powr,); h0/=.0; h[]=h0; //frst turev dfference formula) for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]; T[][0]=f.func)-f.func))/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; // ver grş çıış metodu // publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs);

129 f f_=new f); double [] r= endyamacf_,0); s=" çözüm set : \n"+matr.tostrngtr); Strng s="en d yamaç lneer olmıyan ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.3- En d yamaç metodu çıtısı ÖRNEK PROBLEM Genel formül : En d yamaç formülü : m + m α m f m m + m m m m = + α H f = + veya yuarıda yazdığımız şelyle m m m m + m m = + α d, d = f f 0, )= fonsyonunun =[-,] notasından başlayara mnmum değerlern bulunuz. f 60 4 = = = = 0 + α α = + 5 = - -α 0 = +5α Bu değerler f 0, )= fonsyonunda yerne oyarsa y=3 α) -4- -α) +5α)+ +5α) -- -α)- +5α) y = α+3033 α Brnc derece denlemn buluruz. Bzm optmal notamız brnc dereceye dönüşmüş olan y fonsyonunun mnmum notasıdır. Bu yüzden α nın y y mnmum yapan değern bulacağız. Programda bunun çn brent metodu ullanılmıştır. Burada se analt olara dre çözüm yapalım: y = α = 0 α= Bu değer ve 0 α 0 = çn de yerne oyarsa = α =-. çn =.63973

130 3 α = çn 3 =.363 α 3 =-. çn =.5073 bundan sonra aynı terasyona görüldüğü gb devam ederz. 4.4 NELDER VE MEAD SİMPLEKS METODU Nelder ve Mead tarafından gelştrlen ço boyutlu smples metodu olara adlandırableceğmz metod br anlamda te boyutta yaptığımız altın arama metodunu ço boyuta yansıtma prosesdr. Smples n boyutlu br geometr şeldr. N boyutta N+) nota çerr. İ boyutta smples br üçgenden oluşur. Üç boyutta br üçgenler przması haln alır 4 yüzeyl). Br boyutlu mnmzasyon prosesnde mnmumun sınırlarını saptama olasıdır. Anca ço boyuta geçtğmzde bu olasılı ortadan alar. N boyutta en y yapableceğmz arama prosesne başlama çn N+ nota vermetr. Bundan sonra program yüzey topolojsn nceleyere mnmuma doğru hareet etmeye başlar. Bu hareetlern esası şu şelde oluşur : program verlen tüm notalarda fonsyonu analz edere en yüse ve en düşü değerler bulur, dğer notaları aynı bıraara en yüse değer en yüse ve en düşü elemanların üzernde olduğu yüzeye göre yansıma notasına taşır. Mnmzasyon doğrultusunda yeterl değşm yo se yansıtma fatöründen daha büyü yada daha üçü br fatör ullanılara ta gerçeleştrleblr. Mnmum değere yalaştığımızda smples daralma le üçülür, bu daralma prosesde br seferde brden fazla nota çn uygulanablr. Şel 4.4- de bu prosesler geometr olara 3 boyutlu uzay smples çn 4 nota) görüyoruz. Şel 4.4- Nelder-Mead smples amp hareetler N+ nota verere nelder mead teratf araştırmasına başlama yerne br nota verere ve bu notayı - = P +λd j denlem le N+ notaya genşletere N+ notamızı elde edeblrz. bu denlemde eğer =j λ= eğer j λ=0 değer alır. Yan örneğn a da P = b ve d = db se c dc a a + da a a 0 = b = b = b + db 3 = b olacatır. Böylece smplese grd olara N+ vetör c c c c + dc yerne vetör verere nelder mead terasyonuna başlayablrz. İterasyon stepler şu şelde gerçeleşr :. verlen N+ Nota çn masmum en büyü), masmumdan sonra en büyü ve mnmum fonsyon değerlern veren notalar bulunur.. yansıtma) masmum değer veren nota tüm dğer notaların ortalama değer üzernden yansıtılara yen br nota elde edlr. = ortalama yen = ortalama - masmum n masmum 3. genşlemel yansıtma) eğer elde edlen yen notanın değer mnmum notsında değerden üçü se ynsıtma doğru yönde br lerleme sağlamış demetr, daha büyü nc br yansıtma genşleme)

131 uygulanablr: eğer f yen ) < f mnmum ) yen = λ yen -λ) ortalama burada λ brden üçü br sayıdır. a. eğer f yen ) < f mnmum ) masmum = yen masmum yerne yen değer alınır. b. Değlse ) masmum = yen masmum yerne yen değer alınır. 4. Şart 3 daha y br değer vermemş se yansıtma proses bze y br değer vermeyece demetr, anca f yen ) değer f masmum ) ve f masmumdan br üçü ) değerler arasında se yne a. masmum = yen alınablr. b. Aynı zamanda yen br nota araması den üçü br genleşme sayısı büzülme) ullanılara gerçeleştrleblr. yen =β masmum -β) ortalama. Eğer bu proses başarılı se f yen ) < f masmum ) masmum = yen masmum yerne yen değer alınır. 5. Eğer yuarıda şartların hçbr başarı sağlamamış se tüm smples elemanları mnmumun olduğu notaya doğru büzülür. = + mnmum ) 6. böylece br çevrm proses btrlmş olur ve aynı şleme yen br çevrm çn başlanılır. Şel 4.4- Nelder-Mead smples amp hareet sers Şel 4.4. de Nelder ve mead ampnn masmuma ne şelde yalaştığı görülmetedr. Program 4.4. de bu şlemn programlanmış formu verlmştr. Program 4.4- Nelder ve Mead smples optmzasyon arama programı // Newton metodu le optmzasyon // mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=[0]-.0)*[0]-.0)*[0]-.0)*[0]-.0)+[]-.0)*[]-.0)+ 3.0*[]-.0)*[]-.0)*[]-.0)*[]-.0)*[]-.0)*[]-.0); return ff; //mnmum değl masmum stendğnden - le çarptı publc class OPO7B //. Nelder ve Mead metodu smples arama metodu) // publc statc double[] nelderf_j fnelder,double a[],double da[],nt materaton,double tolerance,nt prntlst) nt,j; double [][]=new double[a.length+][a.length];

132 double p[][]=new double[a.length+][a.length+]; for=0;<.length;++) forj=0;j<[0].length;j++) f==j)[][j]=a[j]+da[j];p[][j]=[][j]; else [][j]=a[j];p[][j]=[][j]; p[][j] = fnelder.funcp[]); //System.out.prntln"=\n"+Matr.toStrng)); // Nelder mead ço boyutlu smple mnmzasyon metodu // Nelder & Mead 965 Computer J, v.7, // Grş değşenler tanımlaması // fnelder : abstract ço boyutlu fonsyon f) // : for n boyutlu n+ smle notasını çerr bağımsız değşen set // materaton : mamum terasyon sayısı // tolerance : nt NDIMS =.length-; nt NPTS =.length; nt FUNC = NDIMS; nt ncalls = 0; ////// başlangıç smplen oluştur ////////////////// //double p[][]=new double[npts][npts]; // [row][col] = [whchv][coord,func] double z[]=new double[ndims]; double best = E99; //////////////// l fonsyon değerlern hesapla //////////////// /* for nt =0; <NPTS; ++) for nt j=0; j<ndims; j++) p[][j] = [][j]; p[][ndims] = fnelder.funcp[]); System.out.prntln"="++"p=\n"+Matr.toStrngp)); */ nt ter=0; for ter=; ter<materaton; ter++) //System.out.prntln"ter="+ter+"p=\n"+Matr.toStrngp)); /////////// lo, nh, h notalarını tanımla ////////////// nt lo=0, h=0, nh = -; // - means mssng double flo = p[0][func]; double fh = flo; double pavg,sterr; for =; <NPTS; ++) f p[][func] < flo) flo=p[][func]; lo=; f p[][func] > fh) fh=p[][func]; h=; double fnh = flo; nh = lo; for =0; <NPTS; ++) f!= h) && p[][func] > fnh)) fnh=p[][func]; nh=; //System.out.prntln"büyü y ="+fh+" "+h+" nc büyü y ="+fnh+" "+nh+" üçü y ="+flo+" "+lo); ////////// çıış rter ////////////// f ter % 4*NDIMS) == 0) //y nn standart hata rter set değernden tolerance) // üçü olmalı // ortalama değer hesapla en büyü değer de dahl olma üzere) pavg=0; for=0;<npts;++) pavg+=p[][func]; pavg/=npts; double tot=0; fprntlst!=0) System.out.prntter); for j=0; j<=ndims; j++) System.out.prntp[lo][j]+" "); System.out.prntln""); for=0;<npts;++)

133 tot=p[][func]-pavg)*p[][func]-pavg); sterr=math.sqrttot/npts); //fsterr < tolerance) for j=0; j<ndims; j++) z[j]=p[lo][j]; //brea; best = p[lo][func]; ///// ave[] vetorünü en büyü değer harç tutara hesapla ////// double ave[] = new double[ndims]; for j=0; j<ndims; j++) ave[j] = 0; for =0; <NPTS; ++) f!= h) for j=0; j<ndims; j++) ave[j] += p[][j]; for j=0; j<ndims; j++) ave[j] /= NPTS-); ///////// yansıt //////////////// double r[] = new double[ndims]; for j=0; j<ndims; j++) r[j] = *ave[j] - p[h][j]; double fr = fnelder.funcr); f flo <= fr) && fr < fnh)) // n zone: accept for j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; f fr < flo) //// genşlet, else abul et double e[] = new double[ndims]; for j=0; j<ndims; j++) e[j] = 3*ave[j] - *p[h][j]; double fe = fnelder.funce); f fe < fr) for j=0; j<ndims; j++) p[h][j] = e[j]; p[h][func] = fe; contnue; else for j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; ///////////// daralt: f fr < fh) double c[] = new double[ndims]; for j=0; j<ndims; j++) c[j] =.5*ave[j] - 0.5*p[h][j]; double fc = fnelder.funcc); f fc <= fr) for j=0; j<ndims; j++) p[h][j] = c[j]; p[h][func] = fc; contnue; else /////// daralt

134 for =0; <NPTS; ++) f!= lo) for j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); contnue; f fr >= fh) /// double cc[] = new double[ndims]; for j=0; j<ndims; j++) cc[j] = 0.5*ave[j] + 0.5*p[h][j]; double fcc = fnelder.funccc); f fcc < fh) for j=0; j<ndims; j++) p[h][j] = cc[j]; p[h][func] = fcc; contnue; else ///////// for =0; <NPTS; ++) f!= lo) for j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); return z; publc statc double[] nelderf_j fnelder,double a[],double da[],double tolerance) return nelderfnelder,a,da,500,tolerance,0); publc statc double[] nelderf_j fnelder,double a[],double da[]) return nelderfnelder,a,da,500,.0e-0,0); // ver grş çıış metodu // publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); double [] d0=new double[0.length]; fornt =0;<0.length;++) d0[]=0.*0[]; f f=new f); double [] r= nelderf,0,d0); s=" çözüm set : \n"+matr.tostrngtr); Strng s="nelder-mead metodu le lneer olmıyan ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0);

135 Çıtı 4.4- Nelder ve Mead smles optmzasyon arama programı ÖRNEK PROBLEM Br örne olara şlemn detaylarına baaca olursa : f 0, )= fonsyonunun =[-,] notasından başlayara mnmum değerlern bulalım l 50 terasyonun sonuçları nelder_mead_orne_sonuc.tt dosyasında yer almatadır. Burada l ve son ısmını lsteleyelm : ter=p= büyü y = nc büyü y =4.3 üçü y =36.0 ter=p= büyü y =4.3 nc büyü y =36.0 üçü y = ter=3p= büyü y =36.0 nc büyü y = üçü y = ter=4p= büyü y = nc büyü y = üçü y = ter=5p= büyü y = nc büyü y = üçü y = ter=6p= büyü y = nc büyü y = üçü y = ter=7p= büyü y = nc büyü y = üçü y = ter=8p= büyü y = nc büyü y = üçü y = ter=9p=

136 büyü y = nc büyü y = üçü y = ter=0p= büyü y = nc büyü y = üçü y = ter=p= büyü y = nc büyü y = üçü y = ter=p= büyü y = nc büyü y = üçü y = ter=3p= büyü y = nc büyü y = üçü y = ter=4p= büyü y = nc büyü y = üçü y = ter=5p= büyü y = nc büyü y = üçü y = ter=6p= büyü y = nc büyü y = üçü y = ter=7p= ter=49p= büyü y = nc büyü y = üçü y = Amp hareetlern graf olara görme sterse : mport java.o.*; class PlotT0 publc statc vod man Strng args[]) throws java.o.ioecepton double []=-.4,-,-,-.4; double y[]=,.4,,; double []=-.,-,-,-.; double y[]=.6,.4,,.6; double 3[]=-.,-0.8,-,-.; double y3[]=.6,.,,.6; double 4[]=-.,-0.8,,-.; double y4[]=.6,.,3.05,.6; double 5[]=.4,-0.8,,.4; double y5[]=.55,.,3.05,.55; double 6[]=.4,3.,,.4;

137 double y6[]=.55,3.5,3.05,.55; double 7[]=.4,3.,.65,.4; double y7[]=.55,3.5,3.0375,.55; double 8[]=.4,.365,.65,.4; double y8[]=.55, ,3.0375,.55; double 9[]=.4,.365,.5,.4; double y9[]=.55, , ,.55; double 0[]=.4,.5,.5,.4; double y0[]=.55,.065, ,.55; double []=.865,.5,.5,.865; double y[]=.7875,.065, ,.7875; double []=.865,.5,0.9,.865; double y[]=.7875,.065,.575,.7875; double 3[]=.865,.65,0.9,.865; double y3[]=.7875, ,.575,.7875; double 4[]=0.65,.65,0.9,0.65; double y4[]=.0874, ,.575,.0874; double 5[]=0.65,.9375,0.9,0.65; double y5[]=.0874,.50785,.575,.0874; double 6[]=0.65,.9375, ,0.65; double y6[]=.0874,.50785,.0035,.0874; double 7[]= ,.9375, , ; double y7[]=.75785,.50785,.0035,.75785; Plot pp=new Plot,y); pp.adddata,y); pp.adddata3,y3); pp.adddata4,y4); pp.adddata5,y5); pp.adddata6,y6); pp.adddata7,y7); pp.adddata8,y8); pp.adddata9,y9); pp.adddata0,y0); pp.adddata,y); pp.adddata,y); pp.adddata3,y3); pp.adddata4,y4); pp.adddata5,y5); pp.adddata6,y6); pp.adddata7,y7); pp.plot);

138 Grafte çözüm notası 0 le gösterlmştr. 500 terasyon sonunda sonuç : Gördüğümüz gb çözüm öe doğru yol almatadır anca prosesn ço hızlı olduğunu söyleyemeyz. Nelder- Mead bastlğ dolayısıyla en ço ullanılan geometr metodlar arasındadır. 4.5 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-FLETCHER-REEVES METODU KONJUGE GRADYEN METODU) En d tepe metodunun vermn arttırma çn çeştl yöntemler uygulanması mümündür. Bu yöntemlerden brs daha önce arama yönlernn br ombnasyonunu yen arama yönünü bulma çn ullanmatır. İterasyona önce en d yamaç metodu le başlarız. 0 0 d = g g = f,, 3,..., n ), = 0,..., n =0 çn + = + α d denlemn hesaplayablrz. Bundan sonra β n çn g g T ) g ) T ) g ) = d = g + β d + = + α d ÖRNEK PROBLEM Genel formül : En d yamaç formülü : m + m α m f m m + m m m m = + α H f = + veya yuarıda yazdığımız şelyle m m m m + m m = + α d, d = f f 0, )= fonsyonunun =[-,] notasından başlayara mnmum değerlern bulunuz. f 60 4 = = = = 0 + α

139 0 0 α = + 5 = - -α 0 = +5α Bu değerler f 0, )= fonsyonunda yerne oyarsa y=3 α) -4- -α) +5α)+ +5α) -- -α)- +5α) y = α+3033 α Brnc derece denlemn buluruz. Bzm optmal notamız brnc dereceye dönüşmüş olan y fonsyonunun mnmum notasıdır. Bu yüzden α nın y y mnmum yapan değern bulacağız. Programda bunun çn brent metodu ullanılmıştır. Burada se analt olara dre çözüm yapalım: y = α = 0 α= Bu değer 0 ve de yerne oyarsa α = çn = şmd Fletcher-Reeves d gradyan yöntemn hesaplayablrz g = f = = T g ) g ) β = = = T g ) g ) d = g + β d = = + α d = + α Bu değerler Bu değerler f 0, )= fonsyonunda yerne oyarsa ve çözerse : α = bulunur. Buradan da : = olara nc terasyon sonuçlarını elde ederz Problem 4.5- Fletcher-Reeves metodu, türev fonsyonu tanımlanmış mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; //ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fb etends f_ publc double[] funcdouble []) olur. Bu l stepmz en d yamaç step d

140 //çözümü stenen fonsyonun türev fonsyonları double ff[]=new double[]; ff[0]=6.0*[0]-4.0*[]-.0; ff[]=-4.0*[0]+4.0*[]-.0; return ff; publc class OPOE publc statc double VT_Vdouble [] left) //multples a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; System.out.prntln"v = \n"+matr.tostrngleft)+"carpm="+tot); return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=dfdf,,); return a; publc statc double dfdf_j f,double [],nt ref) nt ; double h=.0e-3; double hh=.0/h; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; for=0;<.length;++) f!=ref)

141 ph[]=[];ph[]=[];mh[]=[];mh[]=[]; else ph[]=[]+.0*h;ph[]=[]+h;mh[]=[]-.0*h;mh[]=[]-h; fph=f.funcph); fph=f.funcph); fmh=f.funcmh); fmh=f.funcmh); return -fph+8.0*fph-8.0*fmh+fmh)/.0*hh; publc statc double dfdf_j f,double [],nt ref,nt jref) //nctürev matrs nt ; double h=.0e-4; double hh=.0/h; nt n=.length; double ff; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; fornt j=0;j<n;j++) fj!=jref) ph[j]=[j];ph[j]=[j];mh[j]=[j];mh[j]=[j]; else ph[j]=[j]+.0*h;ph[j]=[j]+h;mh[j]=[j]-.0*h;mh[j]=[j]-h; fph=dfdf,ph,ref); fph=dfdf,ph,ref); fmh=dfdf,mh,ref); fmh=dfdf,mh,ref); ff=-fph+8.0*fph-8.0*fmh+fmh)/.0*hh; return ff; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double []) // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır)

142 // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d));

143 publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u)

144 a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; // 4. fletcher Reeves metodu // publc statc double[] fletcher_reeves f_j f,f_ df,double []) nt,j,,jj,; nt nma=500; double gamma=.0; double tolerance=.0e-; nt n=.length; double alpha; double g[]=new double[n]; double ge[]=new double[n]; double d[]=new double[n]; double beta=0; double alpha_d; double Q[]=new double[n]; nt nn=5; =0; j=0;=0; whle j < nma && gamma > tolerance ) g=df.func); gamma=normg); f<) for=0;<n;++)d[]=-g[];;ge=g; else beta=vt_vg)/vt_vge); for=0;<n;++)q[]=beta*d[];; for=0;<n;++)d[]=-g[]+q[]; alpha=lnmnf,,d); for=0;<n;++)[]+=alpha*d[]; System.out.prntln"alpha="+alpha+"beta="+beta+"\n\n"+Matr.toStrng)+"\nd\n"+Matr.toStrngd)); ge=g; j++;++; f>=nn) =0; //terar br en d yamaç metodu uygulaması fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f f_=new f);

145 fb df_=new fb); double [] r= fletcher_reevesf_,df_,0); s=" çözüm set : \n"+matr.tostrngtr); Strng s="fletcher-reeves ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.5- Fletcher-Reeves metodu, türev fonsyonu tanımlanmış Problem 4.5- Fletcher-Reeves metodu, türev fonsyonu sayısal olara hesaplanmış mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; //ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı publc class OPOE publc statc double VT_Vdouble [] left) //multples a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; System.out.prntln"v=\n"+Matr.toStrngleft)+"carpm="+tot); return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double normdouble v[])

146 // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); //=================== publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=dfdf,,); return a; publc statc double dfdf_j f,double [],nt ref) nt ; double h=.0e-3; double hh=.0/h; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; for=0;<.length;++) f!=ref) ph[]=[];ph[]=[];mh[]=[];mh[]=[]; else ph[]=[]+.0*h;ph[]=[]+h;mh[]=[]-.0*h;mh[]=[]-h; fph=f.funcph); fph=f.funcph); fmh=f.funcmh); fmh=f.funcmh); return -fph+8.0*fph-8.0*fmh+fmh)/.0*hh; publc statc double dfdf_j f,double [],nt ref,nt jref) //nctürev matrs nt ; double h=.0e-4; double hh=.0/h; nt n=.length; double ff; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; fornt j=0;j<n;j++) fj!=jref) ph[j]=[j];ph[j]=[j];mh[j]=[j];mh[j]=[j]; else ph[j]=[j]+.0*h;ph[j]=[j]+h;mh[j]=[j]-.0*h;mh[j]=[j]-h; fph=dfdf,ph,ref); fph=dfdf,ph,ref); fmh=dfdf,mh,ref); fmh=dfdf,mh,ref); ff=-fph+8.0*fph-8.0*fmh+fmh)/.0*hh; return ff; //=================== publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa));

147 publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double []) // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q;

148 else u=+d; f u-a < tol b-u < tol) d=signtol,m-); d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b;

149 aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; // 4. fletcher Reeves metodu // publc statc double[] fletcher_reeves f_j f,double []) nt,j,,jj,; nt nma=500; double gamma=.0; double tolerance=.0e-; nt n=.length; double alpha; double g[]=new double[n]; double ge[]=new double[n]; double d[]=new double[n]; double beta; double alpha_d; double Q[]=new double[n]; nt nn=5; =0; j=0;=0; whle j < nma && gamma > tolerance ) g=dff,); gamma=normg); f<) for=0;<n;++)d[]=-g[];;ge=g;

150 else beta=vt_vg)/vt_vge); for=0;<n;++)q[]=beta*d[];; for=0;<n;++)d[]=-g[]+q[]; alpha=lnmnf,,d); for=0;<n;++)[]+=alpha*d[]; ge=g; j++;++; f>=nn) =0; //terar br en d yaöaç metodu uygulaması fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f f_=new f); double [] r= fletcher_reevesf_,0); s=" çözüm set : \n"+matr.tostrngtr); Strng s="fletcher-reeves ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.5- Fletcher-Reeves metodu, türev fonsyonu sayısal olara hesaplanmış 4.6 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK-FLETCHER-REEVES METODU KONJUGE GRADYEN METODU) VE NELDER VE MEAD SİMPLEKS METODUNUN BİRLEŞTİRİLEREK KULLANILMASI Br Newton-Raphson türü metod olan Fletcher-Reeves le br dre arama metodu olan Nelder-Mead metodunu brleştrere ullanablrz. Nelder-Mead metodu, başlangıç terasyonlarında olduça başarılı en sona doğru ço terasyon geretrr, Fletcher-Reeves veya Newton türü metodlar se bunu tam ters br performans gösterr. Bu yüzden Nelder-Meads metodunu ço daha düşü br dönüşüm oranına adar hesapladıtan sonra Fletcher- Reeves metoduna geçere devam ederse her snden de masmum yararı sağlayablrz. Aslında burada 3 metodu ombne etmş oldu, hatırlarsanız Fletcher-Reeves de l step olara en d tepe metodunu ullanmataydı. Problem 4.6- Kombne Fletcher-Reeves Nelder Mead metodu

151 mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; //ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı publc class OPOE // Nelder ve Mead metodu smples arama metodu) ve Fletcher-Reeves metodu entegrasyonu // publc statc double[] nelder_fletcherf_j fnelder,double a[]) //Nelder-Meads ve Fletcher- Reeves metodlarının ombne ullanımı double 0[]=nelderfnelder,a,.0e-3); return fletcher_reevesfnelder,0); // publc statc double[] nelderf_j fnelder,double a[],double da[],nt materaton,double tolerance,nt prntlst) nt,j; double [][]=new double[a.length+][a.length]; double p[][]=new double[a.length+][a.length+]; for=0;<.length;++) forj=0;j<[0].length;j++) f==j)[][j]=a[j]+da[j];p[][j]=[][j]; else [][j]=a[j];p[][j]=[][j]; p[][j] = fnelder.funcp[]); //System.out.prntln"=\n"+Matr.toStrng)); // Nelder mead ço boyutlu smple mnmzasyon metodu // Nelder & Mead 965 Computer J, v.7, // Grş değşenler tanımlaması // fnelder : abstract ço boyutlu fonsyon f) // : for n boyutlu n+ smle notasını çerr bağımsız değşen set // materaton : mamum terasyon sayısı // tolerance : nt NDIMS =.length-; nt NPTS =.length; nt FUNC = NDIMS; nt ncalls = 0; ////// başlangıç smplen oluştur ////////////////// //double p[][]=new double[npts][npts]; // [row][col] = [whchv][coord,func] double z[]=new double[ndims]; double best = E99; //////////////// l fonsyon değerlern hesapla //////////////// /* for nt =0; <NPTS; ++) for nt j=0; j<ndims; j++) p[][j] = [][j]; p[][ndims] = fnelder.funcp[]); System.out.prntln"="++"p=\n"+Matr.toStrngp)); */ nt ter=0; for ter=; ter<materaton; ter++) System.out.prntln"ter="+ter+"p=\n"+Matr.toStrngp)); /////////// lo, nh, h notalarını tanımla ////////////// nt lo=0, h=0, nh = -; // - means mssng double flo = p[0][func];

152 double fh = flo; double pavg,sterr; for =; <NPTS; ++) f p[][func] < flo) flo=p[][func]; lo=; f p[][func] > fh) fh=p[][func]; h=; double fnh = flo; nh = lo; for =0; <NPTS; ++) f!= h) && p[][func] > fnh)) fnh=p[][func]; nh=; System.out.prntln"büyü y ="+fh+" "+h+" nc büyü y ="+fnh+" "+nh+" üçü y ="+flo+" "+lo); ////////// çıış rter ////////////// f ter % 4*NDIMS) == 0) //y nn standart hata rter set değernden tolerance) // üçü olmalı // ortalama değer hesapla en büyü değer de dahl olma üzere) pavg=0; for=0;<npts;++) pavg+=p[][func]; pavg/=npts; double tot=0; fprntlst!=0) System.out.prntter); for j=0; j<=ndims; j++) System.out.prntp[lo][j]+" "); System.out.prntln""); for=0;<npts;++) tot=p[][func]-pavg)*p[][func]-pavg); sterr=math.sqrttot/npts); fsterr < tolerance) for j=0; j<ndims; j++) z[j]=p[lo][j]; brea; best = p[lo][func]; ///// ave[] vetorünü en büyü değer harç tutara hesapla ////// double ave[] = new double[ndims]; for j=0; j<ndims; j++) ave[j] = 0; for =0; <NPTS; ++) f!= h) for j=0; j<ndims; j++) ave[j] += p[][j]; for j=0; j<ndims; j++) ave[j] /= NPTS-); ///////// yansıt //////////////// double r[] = new double[ndims]; for j=0; j<ndims; j++) r[j] = *ave[j] - p[h][j]; double fr = fnelder.funcr); f flo <= fr) && fr < fnh)) // n zone: accept for j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; f fr < flo) //// genşlet, else abul et double e[] = new double[ndims]; for j=0; j<ndims; j++) e[j] = 3*ave[j] - *p[h][j];

153 double fe = fnelder.funce); f fe < fr) for j=0; j<ndims; j++) p[h][j] = e[j]; p[h][func] = fe; contnue; else for j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; ///////////// daralt: f fr < fh) double c[] = new double[ndims]; for j=0; j<ndims; j++) c[j] =.5*ave[j] - 0.5*p[h][j]; double fc = fnelder.funcc); f fc <= fr) for j=0; j<ndims; j++) p[h][j] = c[j]; p[h][func] = fc; contnue; else /////// daralt for =0; <NPTS; ++) f!= lo) for j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); contnue; f fr >= fh) /// double cc[] = new double[ndims]; for j=0; j<ndims; j++) cc[j] = 0.5*ave[j] + 0.5*p[h][j]; double fcc = fnelder.funccc); f fcc < fh) for j=0; j<ndims; j++) p[h][j] = cc[j]; p[h][func] = fcc; contnue; else ///////// for =0; <NPTS; ++) f!= lo) for j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); return z; publc statc double[] nelderf_j fnelder,double a[],double da[],double tolerance) return nelderfnelder,a,da,500,tolerance,0); publc statc double[] nelderf_j fnelder,double a[],double da[])

154 return nelderfnelder,a,da,500,.0e-5,0); publc statc double[] nelderf_j fnelder,double 0[]) double [] d0=new double[0.length]; fornt =0;<0.length;++) d0[]=0.*0[]; return nelderfnelder,0,d0,500,.0e-5,0); publc statc double[] nelderf_j fnelder,double 0[],double tolerance) double [] d0=new double[0.length]; fornt =0;<0.length;++) d0[]=0.*0[]; return nelderfnelder,0,d0,tolerance); publc statc double[] nelderf_j fnelder,double 0[],nt materaton,double tolerance) double [] d0=new double[0.length]; fornt =0;<0.length;++) d0[]=0.*0[]; return nelderfnelder,0,d0,materaton,tolerance,0); publc statc double VT_Vdouble [] left) //multples a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; System.out.prntln"v=\n"+Matr.toStrngleft)+"carpm="+tot); return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); //=================== publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++)

155 a[]=dfdf,,); return a; publc statc double dfdf_j f,double [],nt ref) nt ; double h=.0e-3; double hh=.0/h; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; for=0;<.length;++) f!=ref) ph[]=[];ph[]=[];mh[]=[];mh[]=[]; else ph[]=[]+.0*h;ph[]=[]+h;mh[]=[]-.0*h;mh[]=[]-h; fph=f.funcph); fph=f.funcph); fmh=f.funcmh); fmh=f.funcmh); return -fph+8.0*fph-8.0*fmh+fmh)/.0*hh; publc statc double dfdf_j f,double [],nt ref,nt jref) //nctürev matrs nt ; double h=.0e-4; double hh=.0/h; nt n=.length; double ff; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; fornt j=0;j<n;j++) fj!=jref) ph[j]=[j];ph[j]=[j];mh[j]=[j];mh[j]=[j]; else ph[j]=[j]+.0*h;ph[j]=[j]+h;mh[j]=[j]-.0*h;mh[j]=[j]-h; fph=dfdf,ph,ref); fph=dfdf,ph,ref); fmh=dfdf,mh,ref); fmh=dfdf,mh,ref); ff=-fph+8.0*fph-8.0*fmh+fmh)/.0*hh; return ff; //=================== publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double [])

156 // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu;

157 System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0)

158 fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; // 4. fletcher Reeves metodu // publc statc double[] fletcher_reeves f_j f,double []) nt,j,,jj,; nt nma=500; double gamma=.0; double tolerance=.0e-; nt n=.length; double alpha; double g[]=new double[n]; double ge[]=new double[n]; double d[]=new double[n]; double beta; double alpha_d; double Q[]=new double[n]; nt nn=5; =0; j=0;=0; whle j < nma && gamma > tolerance ) g=dff,); gamma=normg); f<) for=0;<n;++)d[]=-g[];;ge=g; else beta=vt_vg)/vt_vge); for=0;<n;++)q[]=beta*d[];; for=0;<n;++)d[]=-g[]+q[]; alpha=lnmnf,,d); for=0;<n;++)[]+=alpha*d[]; ge=g; j++;++; f>=nn) =0; //terar br en d yaöaç metodu uygulaması fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0;

159 whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f f_=new f); double [] r= nelder_fletcherf_,0); s=" çözüm set : \n"+matr.tostrngtr); Strng s="fletcher-reeves ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); 4.7 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK NEWTON-RAPHSON METODU VE NELDER VE MEAD SİMPLEKS METODUNUN BİRLEŞTİRİLEREK KULLANILMASI Br üstte belrttğmz gb Newton-Raphson ve Nelder Meads metodlarını da brleştrere ullanablrz. Önce l terasyonları yapma çn Nelder-Meads metodunu devreye aldıtan sonra Newton-Raphson metoduna geçere toplam terasyon steplernn sayısını azaltablrz. // FSCO5H Newton Raphson metoduyla // brden fazla değşenl denlem sstemnn ölern bulma // ve optmzasyon Hessan matrs H sayısal olara hesaplanmış mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; //ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fb etends f_ f_j f; fbf_j f) f=f; publc double[] funcdouble []) // Türev hesabı double h= ; double hh=.0/h; nt,m; nt n=.length; double f; double f; double f3; double f4; double []; =new double[n]; double [];

160 =new double[n]; double 3[]; 3=new double[n]; double 4[]; 4=new double[n]; double f[]=new double[n]; fornt j=0;j<n;j++) for=0;<n;++) []=[]; []=[]; 3[]=[]; 4[]=[]; [j]+=.0*h; [j]+=h; 3[j]-=h; 4[j]-=.0*h; f=f.func); f=f.func); f3=f.func3); f4=f.func4); f[j]=-f+8.0*f-8.0*f3+f4)/.0*hh; return f; publc class OPOE3 // Newton Raphson Metodunu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] nelder_newtonf_j fnelder,double a[]) //Nelder-Meads ve Fletcher- Reeves metodlarının ombne ullanımı double 0[]=nelderfnelder,a,.0e-3); fb f =new fbfnelder); return newtondf,0); publc statc double[] nelderf_j fnelder,double a[],double da[],nt materaton,double tolerance,nt prntlst) nt,j; double [][]=new double[a.length+][a.length]; double p[][]=new double[a.length+][a.length+]; for=0;<.length;++) forj=0;j<[0].length;j++) f==j)[][j]=a[j]+da[j];p[][j]=[][j]; else [][j]=a[j];p[][j]=[][j]; p[][j] = fnelder.funcp[]); //System.out.prntln"=\n"+Matr.toStrng)); // Nelder mead ço boyutlu smple mnmzasyon metodu // Nelder & Mead 965 Computer J, v.7, // Grş değşenler tanımlaması // fnelder : abstract ço boyutlu fonsyon f) // : for n boyutlu n+ smle notasını çerr bağımsız değşen set // materaton : mamum terasyon sayısı // tolerance : nt NDIMS =.length-; nt NPTS =.length; nt FUNC = NDIMS; nt ncalls = 0; ////// başlangıç smplen oluştur ////////////////// //double p[][]=new double[npts][npts]; // [row][col] = [whchv][coord,func] double z[]=new double[ndims]; double best = E99; //////////////// l fonsyon değerlern hesapla ////////////////

161 /* for nt =0; <NPTS; ++) for nt j=0; j<ndims; j++) p[][j] = [][j]; p[][ndims] = fnelder.funcp[]); System.out.prntln"="++"p=\n"+Matr.toStrngp)); */ nt ter=0; for ter=; ter<materaton; ter++) System.out.prntln"ter="+ter+"p=\n"+Matr.toStrngp)); /////////// lo, nh, h notalarını tanımla ////////////// nt lo=0, h=0, nh = -; // - means mssng double flo = p[0][func]; double fh = flo; double pavg,sterr; for =; <NPTS; ++) f p[][func] < flo) flo=p[][func]; lo=; f p[][func] > fh) fh=p[][func]; h=; double fnh = flo; nh = lo; for =0; <NPTS; ++) f!= h) && p[][func] > fnh)) fnh=p[][func]; nh=; System.out.prntln"büyü y ="+fh+" "+h+" nc büyü y ="+fnh+" "+nh+" üçü y ="+flo+" "+lo); ////////// çıış rter ////////////// f ter % 4*NDIMS) == 0) //y nn standart hata rter set değernden tolerance) // üçü olmalı // ortalama değer hesapla en büyü değer de dahl olma üzere) pavg=0; for=0;<npts;++) pavg+=p[][func]; pavg/=npts; double tot=0; fprntlst!=0) System.out.prntter); for j=0; j<=ndims; j++) System.out.prntp[lo][j]+" "); System.out.prntln""); for=0;<npts;++) tot=p[][func]-pavg)*p[][func]-pavg); sterr=math.sqrttot/npts); fsterr < tolerance) for j=0; j<ndims; j++) z[j]=p[lo][j]; brea; best = p[lo][func]; ///// ave[] vetorünü en büyü değer harç tutara hesapla ////// double ave[] = new double[ndims]; for j=0; j<ndims; j++) ave[j] = 0; for =0; <NPTS; ++) f!= h) for j=0; j<ndims; j++) ave[j] += p[][j]; for j=0; j<ndims; j++) ave[j] /= NPTS-); ///////// yansıt //////////////// double r[] = new double[ndims];

162 for j=0; j<ndims; j++) r[j] = *ave[j] - p[h][j]; double fr = fnelder.funcr); f flo <= fr) && fr < fnh)) // n zone: accept for j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; f fr < flo) //// genşlet, else abul et double e[] = new double[ndims]; for j=0; j<ndims; j++) e[j] = 3*ave[j] - *p[h][j]; double fe = fnelder.funce); f fe < fr) for j=0; j<ndims; j++) p[h][j] = e[j]; p[h][func] = fe; contnue; else for j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; ///////////// daralt: f fr < fh) double c[] = new double[ndims]; for j=0; j<ndims; j++) c[j] =.5*ave[j] - 0.5*p[h][j]; double fc = fnelder.funcc); f fc <= fr) for j=0; j<ndims; j++) p[h][j] = c[j]; p[h][func] = fc; contnue; else /////// daralt for =0; <NPTS; ++) f!= lo) for j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); contnue; f fr >= fh) /// double cc[] = new double[ndims]; for j=0; j<ndims; j++) cc[j] = 0.5*ave[j] + 0.5*p[h][j]; double fcc = fnelder.funccc); f fcc < fh) for j=0; j<ndims; j++) p[h][j] = cc[j]; p[h][func] = fcc; contnue; else /////////

163 for =0; <NPTS; ++) f!= lo) for j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); return z; publc statc double[] nelderf_j fnelder,double a[],double da[],double tolerance) return nelderfnelder,a,da,500,tolerance,0); publc statc double[] nelderf_j fnelder,double a[],double da[]) return nelderfnelder,a,da,500,.0e-5,0); publc statc double[] nelderf_j fnelder,double 0[]) double [] d0=new double[0.length]; fornt =0;<0.length;++) d0[]=0.*0[]; return nelderfnelder,0,d0,500,.0e-5,0); publc statc double[] nelderf_j fnelder,double 0[],double tolerance) double [] d0=new double[0.length]; fornt =0;<0.length;++) d0[]=0.*0[]; return nelderfnelder,0,d0,tolerance); publc statc double[] nelderf_j fnelder,double 0[],nt materaton,double tolerance) double [] d0=new double[0.length]; fornt =0;<0.length;++) d0[]=0.*0[]; return nelderfnelder,0,d0,materaton,tolerance,0); publc statc double[] newtond f_ f,double []) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d turev alt programıyla hesaplanır. // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü double t=.0; nt,,jj; nt nma=500; double tolerance=.0e-; nt n=.length; double b[]; b=new double[n]; double dy[][]; dy=new double[n][n]; =0; for=0;<n;++) b[]=.0; whle ++ < nma && Matr.absb) > tolerance ) for=0;<n;++) forjj=0;jj<n;jj++) dy[][jj]=dff,,,jj); b=multplydvdedyf,),hf,)),-t); =add,b);

164 f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double dff_ f,double [],nt denlem_ref,nt _ref) // Türev hesabı double h= ; double hh=.0/h; nt,m; nt n=.length; double f[]; f=new double[n]; double f[]; f=new double[n]; double f3[]; f3=new double[n]; double f4[]; f4=new double[n]; double []; =new double[n]; double []; =new double[n]; double 3[]; 3=new double[n]; double 4[]; 4=new double[n]; for=0;<n;++) []=[]; []=[]; 3[]=[]; 4[]=[]; [_ref]+=.0*h; [_ref]+=h; 3[_ref]-=h; 4[_ref]-=.0*h; f=f.func); f=f.func); f3=f.func3); f4=f.func4); double f=-f[denlem_ref]+8.0*f[denlem_ref]-8.0*f3[denlem_ref]+f4[denlem_ref])/.0*hh; //System.out.prntln"f"+_ref+","+denlem_ref+") = "+f); return f; publc statc double[][] Hf_ f,double []) nt n=.length; double dy[][]=new double[n][n];; fornt =0;<n;++) fornt jj=0;jj<n;jj++) //Hessan matrs dy[][jj]=dff,,,jj); System.out.prntlnMatr.toStrngdy)); return dy; publc statc double[] dyf_ f,double []) //brnc türev nt n=.length; double deltay[]=f.func); System.out.prntlnMatr.toStrngTdeltay)); return deltay; publc statc double[] multplydouble[] left,double rght)

165 //multplyng a vector wth a constant nt ; nt n=left.length; double b[]; b=new double[n]; for=0;<n;++) b[]=rght*left[]; return b; publc statc double[] dvdedouble[] left,double[][] rght) return pvotlugaussrght,left); //en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n;

166 double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) fa f =new fa); double [] 0=vergr); Strng s="newton-raphson ö bulma : "; double [] r= nelder_newtonf,0); Strng s=" ö değerler : \n"+matr.tostrngtr); JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); PROBLEM 4. Br analda rletc derşmnn boyutlu dağılımı C,y)= y y y İfadesyle tanımlanablr. Fonsyon ve tepe notasının -0 <= <= 0 ve 0 <= y <= 0 sınırları arasında aldığı blgs verldğne göre derşlğn tepe notasının gerçe yern belrleynz. a) Nelder-Mead metodunu ullanın b) Fletcher-Reeves metodunu ullanın c) Nelder-Mead, Fletcher-Reeves ombne metodunu ullanın class f etends f_j publc double funcdouble []) double ff; ff= *[0]+0.*[]-0.05*[0]*[0]-0.06*[]*[]-0.007*[0]*[]; return -ff;

167 PROBLEM f 0,,, 3 ) = 0 +0 ) ) + - ) ) 4 fonsyonunun mnmumunu,-,0,) notasından başlayara bulunuz. a) Nelder-Mead metodunu ullanın b) Fletcher-Reeves metodunu ullanın PROBLEM 3

168 Br evn su oluğunu yapma çn düz br metal levha tarafından şelde görüldüğü gb eğlmştr. Oluğun su alma apastes Vd,θ) = Zd snθ cosθ + L-d)dsnθ) şelnde yazılablr. Burada z oluğun boyudur levha alanı zl dr). Oluğun su alma apastesn masmum yapaca d ve θ değerlern bulunuz. L=0 cm olsun. class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=[0]*[0]*math.sn[])*math.cos[])+0.-.0*[0])*[0]*math.sn[]); return -ff; //mnmum değl masmum stendğnden - le çarptı 4.7 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK DAVİDON-FLETCHER-POWELL METODU Newton-Raphson metodunda δ = [ H ] f + [ H ] f + = + şelnde çözüme ulaşablyordu. Bu denleme adım mtarını ayarlayableceğmz en d yamaç metodunda olduğu gb) α fatörünü elerse, genel denlem + + = α H f formunu alır. [ ]

169 n f g n 0,...,, ),...,,, 3 = = ve [ ] g H d = d α = + şelnde yazılablr. Bu metodumuzda nc türev, hessan yerne türev hesaplamadan onun yerne geçeblece br fonsyon oluşturmaya çalışacağız. [ ] 0, = H Q olara tanımlayalım. g Q d = d Q g α α = = + şelnde yazablrz. Davdon Fletcher Powell metodu Q yu hesaplama çn g g g = Δ + g Q r Δ = = = Δ + + δ olara yazarsa n g g r r r Q Q T T T T < Δ Δ Δ Δ + Δ = + 0, ) ) ) ) formülünü ullanır. Program 4.7- de Davdon-Fletcher-Powell metodu algortması verlmştr. Programımımızda Q hesaplanmasında nc br versyon daha ullanılmıştır nc denlemde yen Q değer br önce değer ullanılara modfye edlmetedr. n g g r r r Q Q T T T T < Δ Δ Δ Δ + Δ = + 0, ) ) ] ) ) [ β n g r T T < Δ Δ Δ = 0, ) ) β İteratf çözüm yöntemnde terasyona Q 0 değer brm matrse eşt alınara başlanır. Q 0 =I d g Q α α = = + denlemnde α atsayısı brnc dereceden te boyutlu optmzasyon metodlarından brs ullanılara bulunur. Bzm programımızda brent yöntem ullanılmıştır. Bu brnc step temel olara tepe tırmanma metodudur. Daha sonra Q değerler verlen denlemle hesaplanara Davdon-Fletcher-Powell terasyon stepler hesaplanır. Her n stepte Q=I değerne ger dönülere br step tepe tırmanma metodu ullanılır ve terar Davdon- Fletcher-Powell terasyon steplerne dönülür. ÖRNEK PROBLEM Genel formül : m m m m m H f α + = + En d yamaç formülü : m m m m f α + = + veya yuarıda yazdığımız şelyle m m m m d α + = +, m m d f =

170 f 0, )= fonsyonunun =[-,] notasından başlayara mnmum değerlern bulunuz. g= f 60 4 = = = = 0 + α α = + 5 = - -α 0 = +5α Bu değerler f 0, )= fonsyonunda yerne oyarsa y=3 α) -4- -α) +5α)+ +5α) -- -α)- +5α) y = α+3033 α Brnc derece denlemn buluruz. Bzm optmal notamız brnc dereceye dönüşmüş olan y fonsyonunun mnmum notasıdır. Bu yüzden α nın y y mnmum yapan değern bulacağız. Programda bunun çn brent metodu ullanılmıştır. Burada se analt olara dre çözüm yapalım: y = α = 0 α= Bu değer 0 ve de yerne oyarsa α = çn = olur. Bu l stepmz en d yamaç step d şmd Davdon-Fletcher-Powell d gradyan yöntemn hesaplayablrz g = f = = Δg = g g = = Q = r = Q Δg = Δ = δ = = T T r r ) Δ Δ ) Q = Q + + = T T r ) Δg Δ ) Δg d = Q g =

171 + = + α d = α Bu değerler Bu değerler f 0, )= fonsyonunda yerne oyarsa ve çözerse : α = bulunur. Buradan da : = olara nc terasyon sonuçlarını elde ederz. Program 4.7- Davdon-Fletcher-Powell metodu türev sayısal olara hesaplanıyor) // OPOF Davdon-Fletcher-Powell optmzasyonu // Metod Referansı : Numercal Analyss, 8th edton Rchard L. Burden, J. Douglas Fares 3 // sayfa 67 mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; //ff= *[0]+0.*[]-0.05*[0]*[0]-0.06*[]*[]-0.007*[0]*[]; //ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı publc class OPOF publc statc double VT_Vdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double VT_Xdouble [] left,double [] rght) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++)

172 tot+=left[]*rght[]; return tot; publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); publc statc double turevf_j f,double [],nt denlem_ref,nt _ref) // // verlen fonsyonun nc türevlernn matrs // fonsyon f n denlem_ref sayılı fonsyonununsayılar 0 dan başlar) // [_ref] değşenne göre türev sayılar 0 dan başlar) // df_denlem_ref)/d ref // bu metod newtond metodu çnde ullanılma çndr. double h0= ; nt,m; nt n=7; double f[]; f=new double[.length]; double f[]; f=new double[.length]; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,); for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]* ; f=dff,); f=dff,); T[][0]= f[denlem_ref] - f[denlem_ref])/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-];

173 return ; publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=turevf,,); return a; publc statc double turevf_j f,double [],nt _ref) // df/dj double h0= ; nt,m; nt n=7; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) //h[]=h0*math.powr,); h0/=.0; h[]=h0; //frst turev dfference formula) for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]; T[][0]=f.func)-f.func))/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ;

174 publc statc double[] turevf_j f_derv,double []) // df/dj j=0...length // Ths method calculates turev of a functon wth more than one ndependent varable. // Accuracy of method can be adjusted by changng varables h0 and n // functon nput should be n the form gven n abstract class // f_j,j=0...length = df/d_ref) double a[]=new double[.length]; fornt _ref=0;_ref<.length;_ref++) a[_ref]=turevf_derv,,_ref); return a; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double []) // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn;

175 aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0;

176 fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; publc statc double[][] Int n) //unt matr double b[][]; b=new double[n][n]; fornt =0;<n;++) b[][]=.0;

177 return b; // Davdon - Fletcher-Powell metodu // publc statc double[] davdon_fletcher_powell f_j f,double []) nt,j,; nt nma=500; double gamma=.0; double tolerance=.0e- ; nt n=.length; double alpha; double d[]=new double[n]; double g[] =new double[n]; double ge[]=new double[n]; double dg[]=new double[n]; double d[] =new double[n]; double r[] =new double[n]; double rdg,ddg; double beta; double alpha_d; double Q[][]=In); double Q[][]=new double[n][n]; double Q[][]=new double[n][n]; nt nn=5; =0; j=0;=0; g=turevf,); whle j++ < nma && gamma > tolerance ) fornt =0;<n;++) d[]=0.0; fornt =0;<n;++) d[]=d[]-q[][]*g[]; System.out.prntln"j="+j+"d="+Matr.toStrngd)); alpha=lnmnf,,d); System.out.prntln"alfa="+alpha); falpha==0) brea; for=0;<n;++)d[]=alpha*d[];[]+=d[];ge[]=g[]; System.out.prntln"j="+j+"d=\n"+Matr.toStrngd)); System.out.prntln"j="+j+"=\n"+Matr.toStrng)); g=turevf,); System.out.prntln"j="+j+"g=\n"+Matr.toStrngg)); for=0;<n;++)dg[]=g[]-ge[]; gamma=normg); fornt =0;<n;++) r[]=0.0; fornt =0;<n;++) r[]+=q[][]*dg[]; rdg=vt_xr,dg); ddg=vt_xd,dg); Q=V_VTr); Q=V_VTd); fornt =0;<n;++) fornt jj=0;jj<n;jj++) Q[][jj]=Q[][jj]-Q[][jj]/rdg+Q[][jj]/ddg; gamma=normd); System.out.prntln"j="+j+"Q=\n"+Matr.toStrngQ)); j++;++; f>=nn) =0;Q=In); fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] davdon_fletcher_powell_v f_j f,double []) nt,j,; nt nma=500; double gamma=.0; double tolerance=.0e- ; nt n=.length; double alpha;

178 double d[]=new double[n]; double g[] =new double[n]; double ge[]=new double[n]; double dg[]=new double[n]; double d[] =new double[n]; double r[] =new double[n]; double rdg,ddg; double beta; double alpha_d; double Q[][]=In); double Q[][]=new double[n][n]; double Q[][]=new double[n][n]; nt nn=5; =0; j=0;=0; g=turevf,); whle j++ < nma && gamma > tolerance ) fornt =0;<n;++) d[]=0.0; fornt =0;<n;++) d[]=d[]-q[][]*g[]; alpha=lnmnf,,d); falpha==0) brea; for=0;<n;++)d[]=alpha*d[];[]+=d[];ge[]=g[]; g=turevf,); for=0;<n;++)dg[]=g[]-ge[]; gamma=normg); fornt =0;<n;++) fornt =0;<n;++) r[]=q[][]*dg[]; rdg=vt_xr,dg); ddg=vt_xd,dg); beta=ddg/rdg; Q=V_VTr); Q=V_VTd); fornt =0;<n;++) fornt jj=0;jj<n;jj++) Q[][jj]=beta*Q[][jj]-Q[][jj]/rdg)+Q[][jj]/ddg; gamma=normd); j++;++; f>=nn) =0;Q=In); fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f f_=new f); double [] r= davdon_fletcher_powellf_,0); double [] r= davdon_fletcher_powell_vf_,0); s=" çözüm set DFP : \n"+matr.tostrngtr); s+=" çözüm set düzeltlmş DFP : \n"+matr.tostrngtr); Strng s="davdon - Fletcher - Powell ço değşenl fonsyon optmzasyonu:";

179 JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.7- Davdon-Fletcher-Powell metodu Problem 4.7- Davdon-Fletcher-Powell metodu, türev fonsyonu tanımlanmış, nc türevler sayısal olara hesaplanıyor // OPOF Davdon-Fletcher-Powell optmzasyonu // Metod Referansı : Numercal Analyss, 8th edton Rchard L. Burden, J. Douglas Fares 3 // sayfa 67 mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; //ff= *[0]+0.*[]-0.05*[0]*[0]-0.06*[]*[]-0.007*[0]*[]; //ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fb etends f_ publc double[] funcdouble []) //çözümü stenen fonsyonun türev fonsyonları double ff[]=new double[]; ff[0]=6.0*[0]-4.0*[]-.0; ff[]=-4.0*[0]+4.0*[]-.0; return ff; publc class OPOF publc statc double VT_Vdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; return tot; publc statc double[][] V_VTdouble [] left)

180 //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double VT_Xdouble [] left,double [] rght) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*rght[]; return tot; publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); publc statc double turevf_j f,double [],nt denlem_ref,nt _ref) // // verlen fonsyonun nc türevlernn matrs // fonsyon f n denlem_ref sayılı fonsyonununsayılar 0 dan başlar) // [_ref] değşenne göre türev sayılar 0 dan başlar) // df_denlem_ref)/d ref // bu metod newtond metodu çnde ullanılma çndr. double h0= ; nt,m; nt n=7; double f[]; f=new double[.length]; double f[]; f=new double[.length]; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,);

181 for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]* ; f=dff,); f=dff,); T[][0]= f[denlem_ref] - f[denlem_ref])/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=turevf,,); return a; publc statc double turevf_j f,double [],nt _ref) // df/dj double h0= ; nt,m; nt n=7; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) //h[]=h0*math.powr,); h0/=.0; h[]=h0; //frst turev dfference formula)

182 for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]; T[][0]=f.func)-f.func))/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] turevf_j f_derv,double []) // df/dj j=0...length // Ths method calculates turev of a functon wth more than one ndependent varable. // Accuracy of method can be adjusted by changng varables h0 and n // functon nput should be n the form gven n abstract class // f_j,j=0...length = df/d_ref) double a[]=new double[.length]; fornt _ref=0;_ref<.length;_ref++) a[_ref]=turevf_derv,,_ref); return a; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double []) // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans

183 nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); else d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d));

184 publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu)

185 fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; publc statc double[][] Int n) //unt matr double b[][]; b=new double[n][n]; fornt =0;<n;++) b[][]=.0; return b; // Davdon - Fletcher-Powell metodu // publc statc double[] davdon_fletcher_powell f_j f,f_ df,double []) nt,j,; nt nma=500; double gamma=.0; double tolerance=.0e- ; nt n=.length; double alpha; double d[]=new double[n]; double g[] =new double[n]; double ge[]=new double[n]; double dg[]=new double[n]; double d[] =new double[n]; double r[] =new double[n]; double rdg,ddg; double beta; double alpha_d; double Q[][]=In); double Q[][]=new double[n][n]; double Q[][]=new double[n][n]; nt nn=5; =0; j=0;=0; g=df.func); whle j < nma && gamma > tolerance ) fornt =0;<n;++) d[]=0.0; fornt =0;<n;++) d[]=d[]-q[][]*g[]; System.out.prntln"j="+j+"d="+Matr.toStrngd)); alpha=lnmnf,,d); System.out.prntln"alfa="+alpha); falpha==0) brea; for=0;<n;++)d[]=alpha*d[];[]+=d[];ge[]=g[]; System.out.prntln"j="+j+"d=\n"+Matr.toStrngd)); System.out.prntln"j="+j+"=\n"+Matr.toStrng)); g=df.func); System.out.prntln"j="+j+"g=\n"+Matr.toStrngg)); for=0;<n;++)dg[]=g[]-ge[]; System.out.prntln"j="+j+"dg=\n"+Matr.toStrngdg)); gamma=normg); fornt =0;<n;++) r[]=0.0; fornt =0;<n;++) r[]+=q[][]*dg[]; System.out.prntln"j="+j+"Q=\n"+Matr.toStrngQ)); System.out.prntln"j="+j+"r=\n"+Matr.toStrngr)); rdg=vt_xr,dg);

186 ddg=vt_xd,dg); Q=V_VTr); Q=V_VTd); fornt =0;<n;++) fornt jj=0;jj<n;jj++) Q[][jj]=Q[][jj]-Q[][jj]/rdg+Q[][jj]/ddg; gamma=normd); System.out.prntln"j="+j+"Q=\n"+Matr.toStrngQ)); j++;++; f>=nn) =0;Q=In); fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] davdon_fletcher_powell_v f_j f,f_ df,double []) nt,j,; nt nma=500; double gamma=.0; double tolerance=.0e- ; nt n=.length; double alpha; double d[]=new double[n]; double g[] =new double[n]; double ge[]=new double[n]; double dg[]=new double[n]; double d[] =new double[n]; double r[] =new double[n]; double rdg,ddg; double beta; double alpha_d; double Q[][]=In); double Q[][]=new double[n][n]; double Q[][]=new double[n][n]; nt nn=5; =0; j=0;=0; g=df.func); whle j++ < nma && gamma > tolerance ) fornt =0;<n;++) d[]=0.0; fornt =0;<n;++) d[]=d[]-q[][]*g[]; alpha=lnmnf,,d); falpha==0) brea; for=0;<n;++)d[]=alpha*d[];[]+=d[];ge[]=g[]; g=df.func); for=0;<n;++)dg[]=g[]-ge[]; gamma=normg); fornt =0;<n;++) r[]=0.0; fornt =0;<n;++) r[]+=q[][]*dg[]; rdg=vt_xr,dg); ddg=vt_xd,dg); beta=ddg/rdg; Q=V_VTr); Q=V_VTd); fornt =0;<n;++) fornt jj=0;jj<n;jj++) Q[][jj]=beta*Q[][jj]-Q[][jj]/rdg)+Q[][jj]/ddg; gamma=normd); j++;++; f>=nn) =0;Q=In); fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] vergrstrng s)

187 Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f f_=new f); fb df_=new fb); double [] r= davdon_fletcher_powellf_,df_,0); double [] r= davdon_fletcher_powell_vf_,df_,0); s=" çözüm set DFP : \n"+matr.tostrngtr); s+=" çözüm set düzeltlmş DFP : \n"+matr.tostrngtr); Strng s="davdon - Fletcher - Powell ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.7- Davdon-Fletcher-Powell metodu, türev fonsyonu tanımlanmış, nc türevler sayısal olara hesaplanıyor 4.8 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK DİREK HESSİAN DEĞİŞTİRME METODU : BROYDEN-FLETCHER-GOLDBERG-SHANNO BFGS) Önce onuda d vetör conjuge gradyan) ullanara İnc türev matrsnn Hessan matrs) ters matrsnn döngüsel olara oluşturulmasını vere Fletcher-Reeves, Pola-Rbere ve Davdon-Fletcher-Powell metodlarını ncelemşt. Metodumuzu Hessan matrsnn dre olara yne benzer d vetör döngüsel yöntemleryle hesaplanıp ters matrsnn çözümle hesaplanması şelnde de oluşturablrz. Bu tür metod örneğ olara Broyden-Fletcher-Goldberg ve Shanno metodunu vereblrz. Bu metodu Br algortma olara adım adım tanımlıyalım:. Br l tahmn vetörü, 0) verelm. Hessan matrsnn l tahmn değer olara brm vetörü alalım. H 0) = I. Dönüştürme parametres ε ve masmum döngü terasyon) sayısı nma ı tanımlıyalım. K=0 olara döngüye başlayalım 0) 0) c = f ) brnc türev gradyan) vetörünü hesaplayalım. ) ). Brnc türev gradyan) vetörünün normunu c hesaplayalım. Eğer c < ε se döngüyü durduralım sonuca ulaşmış bulunuyoruz. ) ) ) 3. Yen arama yönü vetörü d y çözme çn H d = c lneer denlem sstemn çözelm. 4. d yönünde optmum değer olan α ) değern f ) + α ) d ) ) te boyutlu fonsyonunun mnmum değern bulara saptayalım. Burada =0 çn olan l çözümün en d yamaç problemne eşdeğer olduğunu not edelm + ) ) ) ) 5. vetörünün yen değern hesaplayalım = + α d 6. Hessan matrsnn yen değern hesaplayalım:

188 + ) ) ) ) H = H + D + E ) ) T ) y y ) c D = E = ) ) y. s ) c s = α d ) ) ) = f ) y = c ) ) c. d ) T ) c ) ) + ) ) + ) + ) c 7. y br arttır =+ ve step ye ger dön. Eğer değer masmum döngü terasyon) sayısı nma a ulaşmışsa uyarı mesajı ver ve en son döngü değerlern çıtı olara ver. Bu algortmada brnc türev gradyan) vetörü dışarıdan grlen br sınıfta tanımlanacağı gb, sayısal türv programları tarafından da hesaplanablr. Örne programımızda durum çn de metod verlmştr. Örne olara yne br önce bölümde nceledğmz f 0, )= fonsyonunun =[-,] notasından başlayara mnmum değerlern bulma problemn rdeleyelm. Brnc ve nc döngü değerlern elde hesaplama ödev olara sze bıraılmıştır. Program 4.9- Broyden - Fletcher-Goldfarb-Shanno BFGS) metodu // Broyden - Fletcher-Goldfarb-Shanno BFGS) metodu // Metod Referansı : Intruducton to Optmum Desgn, Second Edton // Jasbr S. Arora, Elsever, ISBN: mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; //ff=5.0*[0]*[0]+.0*[0]*[]+[]*[]+7.0; return ff; //mnmum değl masmum stendğnden - le çarptı class df etends f_ publc double[] funcdouble []) //çözümü stenen fonsyonun türev fonsyonları double ff[]=new double[]; //ff[0]=0.0*[0]+.0*[]; //ff[]=.0*[0]+.0*[]; ff[0]=6*[0]-4.0*[]-; ff[]=-4.0*[0]+4.0*[]-; return ff; publc class OPOI publc statc double VT_Vdouble [] left) //multplys a vector transpose wth a vector

189 nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double[][] V_VT_y_sdouble [] left,double [] y,double s[]) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; double ss=y_sy,s); double =y_sy,s); fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]/ss; return aa; publc statc double y_sdouble [] y,double [] s) //scalar multply two vectors nt n=y.length; double aa=0; fornt =0;<n;++) aa+=y[]*s[]; return aa; publc statc double VT_Xdouble [] left,double [] rght) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*rght[]; return tot;

190 publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); publc statc double turevf_j f,double [],nt denlem_ref,nt _ref) // // verlen fonsyonun nc türevlernn matrs // fonsyon f n denlem_ref sayılı fonsyonununsayılar 0 dan başlar) // [_ref] değşenne göre türev sayılar 0 dan başlar) // df_denlem_ref)/d ref // bu metod newtond metodu çnde ullanılma çndr. double h0= ; nt,m; nt n=7; double f[]; f=new double[.length]; double f[]; f=new double[.length]; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,); for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]* ; f=dff,); f=dff,);

191 T[][0]= f[denlem_ref] - f[denlem_ref])/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=turevf,,); return a; publc statc double turevf_j f,double [],nt _ref) // df/dj double h0= ; nt,m; nt n=7; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0;

192 h[0]=h0; double r=0.5; for =;<n;++) //h[]=h0*math.powr,); h0/=.0; h[]=h0; //frst turev dfference formula) for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]; T[][0]=f.func)-f.func))/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] turevf_j f_derv,double []) // df/dj j=0...length // Ths method calculates turev of a functon wth more than one ndependent varable. // Accuracy of method can be adjusted by changng varables h0 and n // functon nput should be n the form gven n abstract class // f_j,j=0...length = df/d_ref) double a[]=new double[.length]; fornt _ref=0;_ref<.length;_ref++) a[_ref]=turevf_derv,,_ref); return a; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-0; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0;

193 b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double []) // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-))

194 else else d=cgold*e= >= m? a- : b-)); d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0;

195 double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu;

196 aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; publc statc double[][] Int n) //unt matr double b[][]; b=new double[n][n]; fornt =0;<n;++) b[][]=.0; return b; // Broyden - Fletcher-Goldfarb-Shanno BFGS) metodu // // sadece fonsyon verlmş türev sayısal hesaplanıyor // publc statc double[] BFGS f_j f,double []) nt,j,; nt nma=00; double gamma=.0; double tolerance=.0e-6 ; nt n=.length; double alpha; double s[]=new double[n]; double c[] =new double[n]; double c[] =new double[n]; double d[] =new double[n]; double y[] =new double[n]; double alpha_d; double H[][]=In); double H[][]=In); //double H[][]=,0,0,0; double D[][]=new double[n][n]; double E[][]=new double[n][n]; nt nn=5; j=0;=0; c=turevf,); for=0;<c.length;++) d[]=-c[]; //frst teraton : steepest descent gamma=normc); whle ++ < nma && gamma > tolerance ) alpha=lnmnf,,d); for=0;<n;++) s[]=alpha*d[]; []+=s[]; c=turevf,);

197 for=0;<n;++) y[]=c[]-c[]; D=V_VT_y_sy,y,s); E=V_VT_y_sc,c,d); for=0;<n;++) forj=0;j<n;j++) H[][j]=H[][j]+D[][j]+E[][j]; H[][j]=H[][j]; for=0;<n;++) c[]=c[]; c[]=-c[]; d=pvotlugaussh,c); gamma=normc); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; // fonsyon ve türev fonsyonu verlmş // publc statc double[] BFGS f_j f,f_ df,double []) nt,j,; nt nma=00; double gamma=.0; double tolerance=.0e-6 ; nt n=.length; double alpha; double s[]=new double[n]; double c[] =new double[n]; double c[] =new double[n]; double d[] =new double[n]; double y[] =new double[n]; double alpha_d; double H[][]=In); double H[][]=In); //double H[][]=,0,0,0; double D[][]=new double[n][n]; double E[][]=new double[n][n]; nt nn=5; j=0;=0; c=df.func); for=0;<c.length;++) d[]=-c[]; //frst teraton : steepest descent gamma=normc); whle ++ < nma && gamma > tolerance ) alpha=lnmnf,,d); for=0;<n;++) s[]=alpha*d[]; []+=s[]; c=df.func); for=0;<n;++)

198 y[]=c[]-c[]; D=V_VT_y_sy,y,s); E=V_VT_y_sc,c,d); for=0;<n;++) forj=0;j<n;j++) H[][j]=H[][j]+D[][j]+E[][j]; H[][j]=H[][j]; for=0;<n;++) c[]=c[]; c[]=-c[]; d=pvotlugaussh,c); gamma=normc); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] multplydouble[] left,double rght) //multplyng a vector wth a constant nt ; nt n=left.length; double b[]; b=new double[n]; for=0;<n;++) b[]=rght*left[]; return b; publc statc double[] dvdedouble[] left,double[][] rght) return pvotlugaussrght,left); //en ucu areler metodu publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]);

199 fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[][] adddouble[][] left,double[][] rght) //addton of two matrces nt n=left.length;

200 nt m=left[0].length; nt n=rght.length; nt m=rght[0].length; nt nma,mma; nt,j; fm>=m) mma=m; else mma=m; fn>=n) nma=n; else nma=n; double b[][]; b=new double[nma][mma]; for=0;<n;++) forj=0;j<m;j++) b[][j]=left[][j]+rght[][j]; return b; //end of matr addton method publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f f_=new f); //df df_=new df); //double [] r= BFGSf_,df_,0); double [] r= BFGSf_,0); s=" çözüm set BFGS: \n"+matr.tostrngtr); Strng s="broyden - Fletcher-Goldfarb-Shanno BFGS) ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Program çıtımız : Çıtı 4.9-Broyden - Fletcher-Goldfarb-Shanno BFGS) metodu

201 4.9 ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK SÜREKLİLİK METODU Newton metodundan hatırlayacağımız gb optmzasyon problem : f,, 3,, n ) fonsyon set verldğnde, brnc, nc türevler ve değerler terasyon farları g= = = = )... ) ) ) )... ) ) ) )... ) ) ) ) g g g g f f f f f f f f f n n n ve = )... ) ) ) 3 3 m n m n m m m m m m m δ ve = ] [ n n n n n n n f f f f f f f f f f f f f f f f H şelnde verleblr. m+) nc terasyon çn [ ] m m m H f = + δ şelnde yazılablr. Veya [ ] m m m H f = + δ olara ta yazılablr. Burada [ ] m H Hesan matrsnn ters nverse) matrsdr. Newton-Raphson yöntemnde bu matrs teratf olara çözüyordu. Burada se sürellcontnuty) yöntemn ullanacağız. g)= ) f =0 lneer olmıyan denlem sstemn çözme styoruz. Bulma stedğmz çözüm setne * dyelm. Şmd 0 le arasında br λ değer alan br problem set düşünelm. Bu sette λ=0 değer 0) çözümüne arşı gelsn ve λ= değer )= * çözüm setne arşı gelsn. Gλ,) fonsyonunu Gλ,) = λ ) f + -λ)[ ) f - ) 0 f ) ] olara tanımlayaca olursa, ve bu denlemden Gλ,) = 0 çözümünü elde etme sterse, ö değern veren çözümler çn λ=0 olduğunda 0=G0,) = ) f - ) 0 f ) ] olur. λ= olduğunda se 0=G,) = ) f olur. Bu yüzden )= * çözüm setne eşt olacatır. Öyleyse bu özelller sağlayan br Gλ,) fonsyonu bulablrse bu fonsyonu ) f fonsyonunun çözümü öü)çn ullanablrz. Tanımından dolayı ) f fonsyonunun öü f) fonsyonunun optmum değer olacatır. G fonsyonuna geçş veya sürell fonsyonu adı veryoruzλ=0 dan λ= e geçş)

202 Böyle br fonsyonu oluşturablme çn Gλ,)=0 alınır ve bu fonsyonun λ ya göre ısm türev alınırsa. ) ), ), 0 ' λ λ λ λ G G + = buradan λ) çelrse = λ λ λ λ λ λ )), ), ) ' G G Gλ,) = λ ) f + -λ)[ ) f - ) 0 f ) ] değern bu denlemde yerne oyarsa : ) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) ), λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ J f f f f f f f f f f f f f f f f f f G = = = Jaobyen matrstr. Ve 0)) ), f G = λ λ dferansyel denlem [ ] 0 0)) )) ) ) ' = = λ λ λ λ λ f J d d formunu alır. Bu dferansyel denlem 0) başlangıç değer çn çözülürse, çözümden elde edlen ) değer bze Gλ,) = 0 denlemnn çözümünü verecetr. Bunun çn herhang br dferansyel denlem çözüm yöntemn ullanablrz. Örneğn )), ) λ λ λ λ f d d = denlemnn çözümünü veren Dördüncü dereceden Runge-Kutta yöntem : + = + /6)* )h =fλ, ) =fλ +0.5h, +0.5 h) 3 =fλ +0.5h, +0.5 h) 4 =fλ +h, + 3 h) formüllern ullanara dferansyel denlem step step çözeblr. Burada h step boyutudur. Çözüm λ=0, 0 0) l değern ullanara hesaplamaya başlar, ve her stepte λ değerne h eleyere λ= değerne adar devam eder. 0 ) değer çözüm setmzdr. Dferansyel denlemlern çözümü daha detaylı olara dferansyel denlemler onusunda görülecetr. Dferansyel denlemn çözümü bze çözüm fonsyonunu verdğ çn aynı zamanda denlemn ölern de bulmuş oluruz. Program 4.8- de sürell denlemn 4 dereceden ve 6ıncı dereceden Runge-Kutta formüller yardımı le çözen sürell lneer olmıyan optmzasyon programı verlmştr. Program 4.8- SürellContnuty-homotopy) yöntem ullanara optmzasyon // FSCO5D SürellContnuaton-homotopy) optmzasyon // Metod Referansı : Numercal Analyss, 8th edton Rchard L. Burden, J. Douglas Fares 3 // sayfa 637 // bu versyon fonsyonların türevn sayısal olara almatadır. // ullanıcının türev fonsyonu tanımlaması geremez mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============ Tanımı gereen fonsyon ================ abstract class f_

203 // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func) returns the value of f[0] and f[] // as a two dmensonal vector abstract double[] funcdouble []); abstract class fj_ // multfuncton mult ndependent varable // for n ndependent varable n*n matr of // dependent varables are returned // eample f[0][0]=[0]+math.sn[]) f[0][]=[0]-[] // f[][0]=[0]*[0]-[] f[][]=math.ep[0]+[]*[] // func) returns the value of f[0][0], f[0][] // f[][0], f[][] // as a two dmensonal matr abstract double[][] funcdouble []); //========================= class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; return -ff; //mnmum değl masmum stendğnden - le çarptı //========================= publc class FSCO5D // SürellContnuty-homotopy) metodu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] multplydouble left,double[] rght) //multplyng a vector wth a constant nt ; nt n=rght.length; double b[]; b=new double[n]; for=0;<n;++) b[]=left*rght[]; return b; publc statc double[] multplydouble[][] left,double[] rght) //multplcaton of one matr wth one vector nt,jj,,j,; nt m=left[0].length; nt n=left.length; nt m=rght.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<n;++) b[]+=left[][]*rght[]; return b;

204 //end of multply of a matr and a vector publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[][] nvdouble[][] a) // INVERSION OF A MATRIX // nverson by usng gaussan elmnaton // wth full pvotng nt n=a.length; nt m=a[0].length; double b[][]; b=new double[n][n]; nt ndc[]; nt ndr[]; double pv[]; ndc=new nt[n]; ndr=new nt[n]; pv=new double[n]; nt,j,,l,ll,,jj; nt col=0; nt row=0; double bg,dum,pvnv,temp; fn!=m) System.out.prntln"Matr must be square "); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; for=0;<n;++) forj=0;j<n;j++) b[][j]=a[][j]; for=0;<n;++) bg=0.0; forj=0;j<n;j++) fpv[j]!= ) for=0;<n;++) fpv[] == 0) fmath.absb[j][]) >= bg) bg=math.absb[j][]); row=j; col=; else fpv[] > ) System.out.prntln"error : nverse of the matr : sngular matr-");

205 for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; ++ pv[col]; frow!= col) forl=0;l<n;l++) temp=b[row][l]; b[row][l]=b[col][l]; b[col][l]=temp; ndr[]=row; ndc[]=col; fb[col][col] == 0.0) System.out.prntln"error : nverse of the matr : sngular matr-"); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; pvnv=.0/b[col][col]; b[col][col]=.0; forl=0;l<n;l++) b[col][l] *=pvnv; forll=0;ll<n;ll++) fll!= col) dum=b[ll][col]; b[ll][col]=0.0; forl=0;l<n;l++) b[ll][l]-= b[col][l]*dum; forl=n-;l>=0;l--) fndr[l]!= ndc[l]) for=0;<n;++) temp=b[][ndc[l]]; b[][ndc[l]]=b[][ndr[l]]; b[][ndr[l]]=temp; return b; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=dfdf,,); return a; publc statc double dfdf_j f,double [],nt ref) nt ; double h=.0e-3; double hh=.0/h;

206 double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; for=0;<.length;++) f!=ref) ph[]=[];ph[]=[];mh[]=[];mh[]=[]; else ph[]=[]+.0*h;ph[]=[]+h;mh[]=[]-.0*h;mh[]=[]-h; fph=f.funcph); fph=f.funcph); fmh=f.funcmh); fmh=f.funcmh); return -fph+8.0*fph-8.0*fmh+fmh)/.0*hh; publc statc double dfdf_j f,double [],nt ref,nt jref) //nctürev matrs nt ; double h=.0e-4; double hh=.0/h; nt n=.length; double ff; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; fornt j=0;j<n;j++) fj!=jref) ph[j]=[j];ph[j]=[j];mh[j]=[j];mh[j]=[j]; else ph[j]=[j]+.0*h;ph[j]=[j]+h;mh[j]=[j]-.0*h;mh[j]=[j]-h; fph=dfdf,ph,ref); fph=dfdf,ph,ref); fmh=dfdf,mh,ref); fmh=dfdf,mh,ref); ff=-fph+8.0*fph-8.0*fmh+fmh)/.0*hh; return ff; publc statc double[][]hf_j f,double []) nt n=.length; double dy[][]=new double[n][n];; fornt =0;<n;++) fornt jj=0;jj<n;jj++) //Hessan matrs dy[][jj]=dfdf,,,jj); return dy; publc statc double[] contnuatonrk4f_j f,double [],nt N) //==================================================== // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs J de tanımlanacatır // Homotopy, contnuaton devamlılı) metodu le lneer olmıyan denlem sstem çözümü // 4.derece Runge-Kutta denlem le // y+ = y + /6)* )h // =f,y) // =f+0.5h,y+0.5h) // 3=f+0.5h,y+0.5h) // 4=f+h,y +3h) //=================================================== // : bağımsız değşen vetörü // y : bağımlı değşen vetörü // dy : bağımlı değşenn türev fonsyonları vetörü // N : Runge-Kutta dferansyel denlem notasayısı nt ; nt nma=400; double tolerance=.0e-0;

207 nt n=.length; double h=.0/double)n; double b[]=new double[n]; double []=new double[n]; double [][]=new double[4][n]; double A[][]=new double[n][n]; b=multply-h,dff,)); for=0;<n;++) =; A=Hf,); [0]=multplynvA),b); =add,multply0.5,[0])); A=Hf,); []=multplynva),b); =add,multply0.5,[])); A=Hf,); []=multplynva),b); =add,[]); A=Hf,); [3]=multplynvA),b); fornt j=0;j<n;j++) [j]=[j]+.0/6.0*[0][j]+.0*[][j]+.0*[][j]+[3][j]); return ; publc statc double[] contnuatonrk6f_j f,double [],nt N) //==================================================== // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs J de tanımlanacatır // Homotopy, contnuaton devamlılı) metodu le lneer olmıyan denlem sstem çözümü // 6. derece Runge-Kutta denlem le // y+ = y + /90)* )h // =f,y) // =f+0.5h, y+0.5h) // 3=f+0.5h, y+0.5h+0.5h) // 4=f+0.5h, y - 0.5h+3h) // 5=f+0.75h, y + 3/6)h+9/6)4h) // 6=f+h, y - 3/7)h+/7)h+/7)3h - /7)4h+8/7)5h) //=================================================== // : bağımsız değşen vetörü // y : bağımlı değşen vetörü // dy : bağımlı değşenn türev fonsyonları vetörü // N : Runge-Kutta dferansyel denlem notasayısı nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double h=.0/double)n; double b[]=new double[n]; double []=new double[n]; double [][]=new double[6][n]; double A[][]=new double[n][n]; b=multply-h,dff,)); for=0;<n;++) =; A=Hf,); // =f,y) [0]=multplynvA),b); =add,multply0.5,[0])); A=Hf,); // =f+0.5h, y+0.5h) []=multplynva),b); =add,addmultply0.5,[0]),multply0.5,[]))); A=Hf,); // 3=f+0.5h, y+0.5h+0.5h) []=multplynva),b); =add,addmultply-0.5,[]),[])); A=Hf,); // 4=f+0.5h, y - 0.5h+3h) [3]=multplynvA),b); =add,addmultply3.0/6.0),[0]),multply9.0/6.0),[3]))); A=Hf,);

208 // 5=f+0.75h, y + 3/6)h+9/6)4h) [4]=multplynvA),b); =add, addmultply-3.0/7.0),[0]),addmultply.0/7.0),[]), addmultply.0/7.0),[]), addmultply-.0/7.0),[3]),multply8.0/7.0),[4])))))); A=Hf,); // 6=f+h, y - 3/7)h+/7)h+/7)3h - /7)4h+8/7)5h) [5]=multplynvA),b); // y+ = y + /90)* )h fornt j=0;j<n;j++) [j]=[j]+.0/90.0*7.0*[0][j]+3.0*[][j]+.0*[3][j]+3.0*[4][j]+7.0*[5][j]); return ; publc statc double[] newton_contnuatonrk4f_j f,double [],nt N) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d de tanımlanacatır // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü =contnuatonrk4f,,4); double t=.0; nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double b[]; b=new double[n]; for=0;<n;++) b[]=.0; =0; whle ++ < nma && Matr.absb) > tolerance ) b=matr.multplymatr.dvdedff,),hf,)),-t); =Matr.add,b); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); System.out.prntln); return ; publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) f ff=new f); double [] 0=vergr); double [] r= contnuatonrk4ff,0,4); double [] r= contnuatonrk6ff,0,4); double [] r=newton_contnuatonrk4ff,0,4); Strng s=" optmum sürell RK4 : \n"+matr.tostrngtr); s+=" optmum sürell RK6 : \n"+matr.tostrngtr); s+=" optmum sürell newton-rk4 : \n"+matr.tostrngtr); Strng s="ço değşenl sürell metodu le optmzasyon : "; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0);

209 Çıtı 4.8- SürellContnuty-homotopy) yöntem ullanara optmzasyon ÇOK BİLİNMİYENLİ-LİNEER OLMAYAN-GEOMETRİK SHERMAN MORRISON FORMÜLLÜ BROYDEN KİRİŞ METODU İLE OPTİMİZASYON Bu formül temel olara Krş Secant) ö bulma yöntemnn ço boyutlu br uygulamasıdır. Br optmzasyon problem olara f) fonsyonunun mnmumunu bulma styorsa bu proses daha önce de Newton metodu ve dğer metodlarda brnc türev vetörünün ölern bulma olara tanımlamıştı. Problemmz f) n mnmumunu bulma olsun, burada =,,, n-, n ço boyutlu değşen setdr. Bu durumda rş metodunu uygulayara türev fonsyonunu yalaşı değern oluşturablrz. Hatırlanacağı gb, Newton-Raphson denlemnde f,, 3,, n ) fonsyon set verldğnde, brnc, nc türevler ve değerler terasyon farları 3... n f f g f f f = = ve = )... ) ) ) 3 3 m n m n m m m m m m m δ ve

210 f f f f... g g g g 3... n 3 n f f f f g g g g n 3 n [ H ] = f f f f = g3 g3 g3 g n 3 n f f f f gn gn gn gn... n n 3 n n 3 n şelnde verleblr. m+) nc terasyon çn Newton-Raphson denlem m m+ m [ H ] δ = f =g m şelnde verleblr. Burada [ H ] yerne yalaşı türev formülünden yararlanma sterse ) ) g j g ) ) ) j + e h g j ) h gb br formülle hesaplayablrz. Formülde h üçü br sonlu değşm mtarı, e se nc bleşen dğer bleşenler 0 olan br vetördür. Burada ) terasyon sayısını belrtr. Krş yöntem uygulandığında Newton-raphson formülünün ö cvarında hızlı yaınsaması yern daha yavaş br yaınsama hızına bıraır. Bu yüzden burada standart rş yöntem yerne yaınsama hızı brm hesaplama başına daha etn olan Broyden yöntemn nceleyeceğz. Broyden yöntemnde 0) l terasyonu verlmş se ) terasyonununewton metodunu ullanara hesaplayablrz. Bundan sonra stepler çn şu yalaşımı ullanırız : 0) ) 0) [ H )] = - 0) g denlem ) 0) ) 0) [ A ] = g g şeln alablr. Bu denlemn geçerl olablmes çn [ A ] vetörünün her z vetörü çn 0) ) 0) t [ A ] z = [ g )] z z = 0 tanımlarını gerçeleştrmes gerer. Bu temel tanımdan [ A ] formülünü oluşturablrz. ) 0) 0) ) 0) ) 0) t 0) [ g ) g ) H ) )]* ) [ A ] = H ) + ) 0) burada ) 0) fades normudur. Norm tanımları 3. bölümümüzde verlmşd. [ ] buldutan sonra vetörünün yen değern oluşturablrz. ) ) ) = A g ) ) bulundutan sonra bu değer aynı yolla A değern 3) ü hesaplama çn ullanırız. Genel olara formülümüz ) 0) ) 0) ) 0) [ g ) g ) [ A ] )]* ) [ A] = [ A ] + ) 0) = A g ) + ) ) ) t

211 formunu alır. Bu formülde her sefernde A matrsnn ters matrsn çözme zorunluluğumuz mevcuttur. Bu şlem Gauss eleme yöntem gb br yöntem ullanara gerçeleştreblrz. Anca Gauss yöntemde olduça yüse hesaplama zamanına htyaç gösterr. Daha y br alternatf teratf Sherman-Morrson formülünü ullanmatır. Sherman_Morrson formülü A - değern dre olara A - - değernden hesaplıyablmemz sağlar. Bu formülü şu stepler ullanara oluştururuz: ) ) = s ) ) ) ) y g g = A y A y A A y A t t t ) + = + + = t s s s A y A A t t t t s s s s A y A s A s s s A y A A A + + = t t y A s A s y A s A A ) + = bu denlem sadece matrs çarpımlarını apsadığından toplam şlem olara yapılması ço daha olaydır. Bu denlemler ullanara oluşturulmuş Broyden optmzasyon algortması Program 5.5- de verlmştr. Program 4.9. Sherman-Morrson Formüllü Broyden rş optmzasyon algortması // SCO5E Sherman-Morrson formülü destel broyden seant metoduyla // optmzasyon // Metod Referansı : Numercal Analyss, 8th edton Rchard L. Burden, J. Douglas Fares 3 // sayfa 67 mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //============= Tanımı gereen fonsyon ================ class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; //ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]; ff=3.0*[0]*[0]-4.0*[0]*[]+.0*[]*[]-[0]-[]; return ff; //mnmum değl masmum stendğnden - le çarptı class fb etends f_ publc double[] funcdouble []) //çözümü stenen fonsyonun türev fonsyonları double ff[]=new double[]; ff[0]=6.0*[0]-4.0*[]-.0;

212 ff[]=-4.0*[0]+4.0*[]-.0; return ff; class fb etends fj_ f_ f; publc fbf_ f) f=f; publc double[][] funcdouble []) nt n=.length; double a[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) a[][j]=turev,,j); return a; publc double turevdouble [],nt denlem_ref,nt _ref) // fonsyon f n denlem_ref sayılı fonsyonununsayılar 0 dan başlar) // [_ref değşenne göre türev sayılar 0 dan başlar) // df_denlem_ref)/d ref // bu metod newtond metodu çnde ullanılma çndr. double h0=0.056; nt,m; nt n=7; double f[]; f=new double[.length]; double f[]; f=new double[.length]; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //dervatve of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,); for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]; f=f.func); f=f.func); T[][0]= f[denlem_ref] - f[denlem_ref])/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref];

213 form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc class FSCO5E // SCO5E Sherman-Morrson formülü destel broyden seant metoduyla //denlem sstemlernn ölern çözümünü) bulma publc statc double[] multplydouble left,double[] rght) //multplyng a vector wth a constant nt ; nt n=rght.length; double b[]; b=new double[n]; for=0;<n;++) b[]=left*rght[]; return b; publc statc double[] multplydouble[][] left,double[] rght) //multplcaton of one matr wth one vector nt,jj,,j,; nt m=left[0].length; nt n=left.length; nt m=rght.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<n;++) b[]+=left[][]*rght[]; return b; //end of multply of a matr and a vector publc statc double[] multplydouble[] left,double[][] rght) //multplcaton of one vector wth one matr nt,jj,,j,; nt m=rght[0].length; nt n=rght.length; nt m=left.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0;

214 return b; for=0;<m;++) b[]=0; for=0;<m;++) b[]+=rght[][]*left[]; return b; //end of multply of a vector and a matr publc statc double VT_Xdouble [] left,double [] rght) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*rght[]; return tot; publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[][] multplydouble left,double[][] rght) //multplyng a matr wth a constant nt,j; nt n=rght.length; nt m=rght[0].length; double b[][]; b=new double[n][m]; for=0;<n;++) forj=0;j<m;j++) b[][j]=rght[][j]*left; return b; //end of multplyng a matr wth a constant double publc statc double[][] adddouble[][] left,double[][] rght) //addton of two matrces nt n=left.length; nt m=left[0].length; nt n=rght.length; nt m=rght[0].length; nt nma,mma; nt,j; fm>=m) mma=m; else mma=m; fn>=n) nma=n;

215 else nma=n; double b[][]; b=new double[nma][mma]; for=0;<n;++) forj=0;j<m;j++) b[][j]=b[][j]+left[][j]; for=0;<n;++) forj=0;j<m;j++) b[][j]=b[][j]+rght[][j]; return b; //end of matr addton method publc statc double[] substractdouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]-rght[]; return b; //end of vector addton method publc statc double[][] nvdouble[][] a) // INVERSION OF A MATRIX // nverson by usng gaussan elmnaton // wth full pvotng nt n=a.length; nt m=a[0].length; double b[][]; b=new double[n][n]; nt ndc[]; nt ndr[]; double pv[]; ndc=new nt[n]; ndr=new nt[n]; pv=new double[n]; nt,j,,l,ll,,jj; nt col=0; nt row=0; double bg,dum,pvnv,temp; fn!=m) System.out.prntln"Matr must be square "); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; for=0;<n;++) forj=0;j<n;j++) b[][j]=a[][j]; for=0;<n;++)

216 bg=0.0; forj=0;j<n;j++) fpv[j]!= ) for=0;<n;++) fpv[] == 0) fmath.absb[j][]) >= bg) bg=math.absb[j][]); row=j; col=; else fpv[] > ) System.out.prntln"error : nverse of the matr : sngular matr-"); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; ++ pv[col]; frow!= col) forl=0;l<n;l++) temp=b[row][l]; b[row][l]=b[col][l]; b[col][l]=temp; ndr[]=row; ndc[]=col; fb[col][col] == 0.0) System.out.prntln"error : nverse of the matr : sngular matr-"); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; pvnv=.0/b[col][col]; b[col][col]=.0; forl=0;l<n;l++) b[col][l] *=pvnv; forll=0;ll<n;ll++) fll!= col) dum=b[ll][col]; b[ll][col]=0.0; forl=0;l<n;l++) b[ll][l]-= b[col][l]*dum; forl=n-;l>=0;l--) fndr[l]!= ndc[l]) for=0;<n;++) temp=b[][ndc[l]]; b[][ndc[l]]=b[][ndr[l]]; b[][ndr[l]]=temp; return b; publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); publc statc double[][] multplydouble[] left,double[] rght)

217 //multplcaton of one vector wth one matr nt,jj,,j,; nt m=left.length; nt n=rght.length; nt m=left.length; double[][] b; b=new double[m][n]; for=0;<m;++) for=0;<n;++) b[][]=left[]*rght[]; return b; //end of multply of a vector and a matr publc statc double[] broydenf_ f,double []) //==================================================== // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs J de tanımlanacatır // Sherman-Morrson formülü uygulanmış broyden rş tp) metodu // le lneer olmıyan denlem sstem çözümü fb J=new fbf); nt ; nt nma=400; double tolerance=.0e-5; nt n=.length; double b[]=new double[n]; double v[]=new double[n]; double s[]=new double[n]; double w[]=new double[n]; double y[]=new double[n]; double z[]=new double[n]; double p; double ut[]=new double[n]; double []=new double[n]; double A[][]=new double[n][n]; =; A=J.func); v=f.func); A=nvA); s=multply-.0,multplya,v)); =add,s); nt =; whle<nma) w=v; v=f.func); y=substractv,w); z=multply-.0,multplya,y)); p=-vt_xs,z); ut=multplys,a); //********* A=addA,multply.0/p),multplyadds,z),ut))); s=multply-.0,multplya,v)); =add,s); fnorms)<tolerance) brea; ++; return ; publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue);

218 return a; publc statc vod man Strng args[]) fa f =new fa); fb f=new fb); double [] 0=vergr); double [] r= broydenf,0); Strng s=" ö değerler sürell broyden : \n"+matr.tostrngtr); Strng s="ço değşenl broyden metodu le ö bulma : "; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 4.9. Sherman-Morrson Formüllü Broyden rş optmzasyon algortması PROBLEM Br analda rletc derşmnn boyutlu dağılımı C,y)= y y y İfadesyle tanımlanablr. Fonsyon ve tepe notasının -0 <= <= 0 ve 0 <= y <= 0 sınırları arasında aldığı blgs verldğne göre derşlğn tepe notasının gerçe yern belrleynz. d) Davdon-Fletcher-Powell metodunu ullanara e) SürellContnuty-homotopy) yöntem ullanara f) Sherman-Morrson Formüllü Broyden rş optmzasyon algortması ullanara Çözünüz ÇÖZÜM : class f etends f_j publc double funcdouble []) double ff; ff= *[0]+0.*[]-0.05*[0]*[0]-0.06*[]*[]-0.007*[0]*[]; return -ff; //mnmum değl masmum stendğnden - le çarptı

219 5. GLOBAL ÇÖZÜM METODLARI 5. GENETİK ALGORİTMALAR Genet algortmalar evrm programlaması denlen ve günümüzde sun zea alanında olduça yoğun ullanılan br programlama tenğdr. Adından da anlaşılacağı gb temeln evrm uramından almıştır. Temel olara problemlern evrm prosesnn en ylern hayatta alması prensbne dayanır. Genet algortmalar canlı yapıların Darwn teorsnde belrtldğ gb doğaya uyum meanzması çnde end endlern genlerde değşmeyle değştrmelernn fonsyonlara optmzasyon problem olara uyarlanmış haldr. Darwn teors anne ve babaların özelllernn çoculara geçtğn, bazen de anne ve babada olmayan yen bazı özelllern mutasyon denlen meanzmayla oluştuğunu, bu özelller türün yaşama şansını arttırıyorsa bu breylern çoğalara bu özelller end çocularına geçrdğ, özelller başarısızsa öleceler çn başarısız özelller gelece nesllere geçremeyeceler böylece anca doğaya uyumda başarılı olan özelllern daha sonra nesllerde brmes sonucu doğaya uyum sağlayan türlern oluşableceğn getrmştr. Daha sonra Genet blmnn gelşmesyle bu prensbn altında bomyasal yapılar genler) bulunmuş ve bu sstemn matematsel ve statstsel olara nasıl çalıştığı daha detaylı anlaşılmıştır. Genler 4 amno astn yapısı çnde sıralanması le canlı yapıların özelllernn anahtarını oluştururlar. Bu özelller, anne ve babadan gelen genlerle çoculara atarıldığı gb bu atarma prosesnde zaman zaman oluşablen hatalarda darwnn tanımladığı mutasyon prosesn oluşturmatadır. Evrmsel hesaplama l defa 960 lı yıllarda I Rechenberg n Evolutonsstratege n orgnal evrm statejler çalışmasında yer almıştır. Fr daha sonra başa araştırıcılarca gelştrlmştr. Genet algortmalar John Holland ve öğrencler tarafından l defa bu günü anlamıyla oluşturulmuştur. 975 yılında basılan "Adapton n Natural and Artfcal Systems tabında yazar bu tenğn nasıl ullanılacağını açılamıştır 5.. GENEL KAVRAMLAR Tüm canlı yapılar hücreler çerr. Her hücre br veya daha fazla romozom set barındırır. Kromozomlar DNA dznlerdr. Ve tüm organzmanın modeln çlernde barındırırlar. Kromozom DNA lardan oluşan gen blolarını barındırır. Her genn bell br özellğn odunu taşıdığı söyleneblr, örneğn göz reng gb. Bu özelllern alabldğ değerlere de gen değerler adı verlrörneğn ahvereng göz, yeşl göz). Kromozomların heps br arada canlının areterlern oluşturur, buna cenom denr. Cenomda bell br özellğ oluşturan guruba cenotp sm verlr. Canlıların doğumdan sonra çevresel etler yoluyle oluşan özellerne de fenotp sm verlr. Üreme esnasında önce reombnasyon oluşur, anne ve babaları genler bölünere brleşrler ve yen br gen yapısı oluştururlar. Yen oluşan genlern br ısmı mutasyona da uğrayablr, mutasyon gen DNA dzlmnde anne ve babadan genlern opyelenmes sırasında oluşan hatalardır, bunlar yen br dzlm oluşmasına sebep olurlar. Doğal Uyum organzmanın hayatta alma başarısı le ölçülen ve gen guruplarının dre olara etledğ br olaydır. Şel 5.- DNA yapısı Genet algortmalar yuarda değndğmz meanzmanın yen nesller üretmete ve yen nesllern doğaya uyum meanzmasını açılayan Darwn teorsnden yola çıara oluşturulmuştur. Algortma romozomlardan oluşan br gurup çözüm setnden oluşur. Br gurubun oluşturduğu çözüm setlernden problemn areterstğne göre seçlen çözüm

220 setler üreme yolu le yen nesllere taşınır. Başarılı breylern daha fazla üreme olasılığı olacağından genlernn br sonra nesle geçme olasılığı daha yüsetr. Breylerde aynı zamanda mutasyon yoluyla tamamen yen özelller oluşablr, bu özelller br ısmı bu breylern başarısını azaltıren bazen de daha başarılı yen breyler de oluşablr. Genet algortmaların temel yapıları şu şelde özetleneblr : [BAŞLA] Programe göre n romozondan oluşan br set oluştur [UYUM] genlernden oluşan her romozonun f) uyum değern tüm nüfus çn hesapla [YENİ NESİL] Altta stepler uyarınca yen br nesl oluştur [SEÇİM] Toplam nüfustan uyumları göz önünde bulundurulara br anne baba çft seçn, bu seçmde uyum daha fazla se seçm olasılıları da buna göre fazlalaşsın. [ÜREME] Üreme yoluyla yen br nesl üretp anne babalarıyla bu yen nesl değştrn. Eğer üreme olmadı se es nesl oruyun. [MUTASYON] bell br olasılı çnde mutasyonları oluşturun [KABUL] Yen breyler nüfusa eleyn [DEĞİŞTİRME] yen nesl aynı şelde terar yen nesller elde etme çn ullanın [TEST] eğer stenlen şartlar oluşmuşsa smulasyonu durdurun [DÖNGÜ] Oluşmamışsa ger dönere şleme devam edn. Gen veya romozon genet hesaplamada ullanılan temel elemanlardır. Matematsel olara düşünürse n değşenl br sstemde her değşen br gen olara düşünürüz. Tüm değşen setn bütün olara romozon olara adlandırablrz. Kromozonların yapıları romozom A romozon B romozon C ABDJEIFJDHDIERJFDLDFLFEGT ger), ger), sağ), ler), sol) romozom D + / 5 y ) ) romozom E do_untl step wall ) Gb brbrnden ço farlı eleman tpler ullanılara oluşturulablr. Doğada gerçe genlerde uyum dedğmzde doğada hayatta alablme yeteneğn anlıyoruz. Matematsel olara optmzasyonmasmzasyon) çn bu avramı ullanaca olursa burada fonsyonun değerdr. Daha sonra bu uyum değerler toplanara yüzde şelne çevrleblr. Bu yüzdeye çevrlmş uyum değer fonsyonlarının arasından tesadüf olara seçm yaparsa, tesadüf seçmde sayıların toplanmış yüzde olasılığı daha y uyum gösteren masmum fonsyon değern alan) brey çn daha yüsetr. Uyum gösteren breyler arasından tesadüf olara seçlen ısmının br sonra nesl üretmesneçoğalmasına) zn verlr. Çoğalma proses anne ve baba dyebleceğmz breyn genlernn brleşere yen br brey çocu) oluşturmasıdır. Matematsel olara buna çaprazlama proses denr. Çaprazlama anne ve baba genlernn br ısmının tesadüf olara) seçlere br araya getrlmes le gerçeleşr. Örneğn bnar raamlardan oluşan br gen çn : Eğer te çaprazlama metod ullanırsa, bu metodda te br tesadüf sayı gen gurubunu bell br oranda böler. Aynı oranda bölünen genn br ısmı anneden dğer ısmı da babadan alınır. Ve yen brey oluşturur. Genlern bölme oranı tesadüf olara belrlenr.

221 Örneğn 8 btten oluşan br gurup çn: 8*random0-) = 5 se l 5 btt anneden, son 3 bt babadan alara yen brey oluştururuz = 00 Kromozom Anne) Kromozom Baba) Çocu Çocu Eğer çft çaprazlama uygulama sterse, bu metodda tesadüf sayı gen gurubunu bell br oranda üç parçaya böler. Aynı oranda bölünen genn br ısmı anneden dğer ısmı da babadan sonra ısım terar anneden alınır veya ters yapılır). Ve yen brey oluşturur. Genlern bölme oranı tesadüf olara belrlenr. Örneğn 8 btten oluşan br gurup çn: Random=8*random0-) = Random=8*random0-) = 6 se l bt anneden, 3 den 6ıncı bte adar babadan ve 7 ve 8 nc bt terar bt babadan alara yen brey oluştururuz = 0 Eğer düzenl çaprazlama uyulama sterse, bu metodda her gen tesadüf olara anneden veya babadan seçlere yen breyçocu) oluşturulur. Örneğn 8 btten oluşan br gurup çn: Random=random0-) 0.5 den üçü se nc gen olara annenn gen, 0.5 den büyü se babanın gen seçlr = MÜHENDİSLİK OPTİMİZASYONU Bz burada szlere bu metodun br mühendsl aracı olara optmzasyon mnmzasyon masmzasyon) problemlerne uygulanmasını ve yöntemn temel çalışma prensbn açılamaya çalışacağız. Optmzasyon Mnmzasyon-Masmzasyon) problem Matematsel olara f,,3,..) fonsyonunun masmumunu bulma olara tanımlanablr. Bu şlem oluştururen önce masmum ve mnmum şlemnn aynı şlem olduğunu unutmıyalım ma [ f) ] = mn [- f) ] = mn [ g) ] Fonsyon oluşturmada göz önüne alınması gereen dğer br onu da fonsyon değerne sabt br değer lave ettğmzde mamum değern yernn değşmyeceğdr. ma [ f) ] = ma [ f) + C ] = ma [ g) ] Bu özellğ ullanara fonsyonumuzun çözümünün her zaman poztf bölgeye düşmesn sağlıyablrz.

222 Mühendsl optmzasyonunda çözdüğümüz sayıların çoğu gerçe sayılar olma zorundadır. Anca bu gerçe br sayıyı br bnar sayılar dzn olara fade etme her zaman mümündür. Program optmzasyon problem olara düşündüğümüzde br gurup bağımsız değşenmz mevcuttur 0,,,...n) Genet algortmaları uygulama çn her bağımsız değşenn sınır değerlernn masmum ve mnumum) blnmes zorunludur. Bu yüzden değşen gurubumuz çn o : o_mnmum o_mamum : _mnmum _mamum. : _mnmum _mamum n : n_mnmum n_mamum Tanımları yapılır. Her bağımsız değşen çn ayrıca değşenn bnar eşdeğernn aç br olacağının tanımlanması gerer. Bağımsız değşenmz _mn <= <= _ma N bt bnary Olara tanımlanmış se : Bnary eşdeğer veya bnar olara verlmş sayının gerçe sayı eşdeğer adımlı br prosesle hesaplanablr. N dgtl br bnary gurubu tamsayıya N = 0 bn,bn-,b N-,.b,b0 ) = b ) 0 = ' Denlem le dönüştürüleblr. 0 tabanından br tamsayıdır. Buna arşı gelen gerçe sayı se _ma - _mn = _mn + ' N İfadesyle hesaplanır. Aynı şlem ters olara yapılara da gerçe sayıdan bnar sayıya ulaşılablr Bağımsız değşenler her br br gen olma çn NDEĞİŞKEN apsayan br gurupta genlern te br uzun bnar dzde toplanması le veya gen htva eden sınıfın dzn olara fade edleblr. Dznlerden elde edlen bağımsız değşenler optmzasyonu yapılaca fonsyonda grd olara ullanılara fonsyonun değer hesaplanır. Programlama yapılıren değş fonsyonlar grleblece şelde yapılırsa odlama açısından daha genel br od elde edeblrsnz. class fa etends f_j double func double []) return.5+[0]*math.sn4.0*math.pi*[0])+[]*math.sn0.0*math.pi*[])); Bağımsız değşen ve fonsyonun bu bağımsız değşen çn aldığı değer bütün olara br cenotp oluşturur. Br veya daha fazla cenotp romozomlar olara br araya geleblr. br veya brden fazla fonsyon br arada değerlendrleblr). Kromozon sayılarını da brden fazla düşüneblrz. Bu sstem hep brlte toplumumuzun breylern oluşturur Optmze edlece denlem sstem ve bağımsız değşenler sınır değerler) Programlayıcı veya program ullanıcısı tarafından toplumumuzun aç breyden oluşacağı önceden belrlenr. Bu sayıya eşdeğer brey bağımsız değşen değerler tesadüf sayılardan oluşansayını verlen lmt değerler çnde) br set olara oluşturulur. Fonsyon değerler de her cenotp çn hesaplanır. Mühendsl optmzasyon problemlernde genelde ço değşenl br fonsyon mevcuttur). Bu değerler genn uyum değerlerdr. Tüm toplum breylernn uyum değerler toplanara toplam uyum hesaplanır. Sonra uyum değerler toplam uyuma bölünere görecel uyum değerler elde edlr. Görecel uyum değerler de brnc breyden tbaren her brey çn toplanara toplanmış görecel ümülatf) uyum değerler saptanır. Lstede l breyn toplanmış görecel uyum değer görecel uyum değerne eşttr. Son breyn se br e eşttr. Toplanmış görecel uyum değerler olasılıları, uyumun büyülüğüne göre oluşmuştur. Ve 0 le arasında yer alır. Eğer lstemzden tesadüf raamlar aracılığı le yen br nesl çn seçme yapaca olursa tesadüf raamlar görecel olara eşt dağılacağından, daha yüse uyuma sahp breylern seçlme şansı daha yüsetr. Aynı breyn brden fazla ere seçlmesne de müsaade edlr.

223 Seçlen yen toplum breyler arasında ullanıcılar tarafından belrlenen br yüzde çersnde alan ısmının mutasyon prosesne grmesne zn verlr. Kullanıcı toplumda mutasyon yüzdesn tanımlar. Yne tesadüf sayılar oluşturara bu sayı mutasyon yüzdesnn altında se o breyn genlernn tesadüf seçlen brsnn mutasyona uğraması bnar sstemde seçlen btn değernn değştrlmes sağlanır se 0, 0 se değern alır) Toplum yenden değerlendrlmeye grer ve uyum, görecel uyum değerler saptanır, en y uyum sağlıyan brey seçlr. Bu breyn değer ayrı br yerde tutulara tüm proses boyunca tap edleblr. Eğer stenrse her neslde en başarılı olan brey br sonra nesle atarılablr GENE SINIFI Genet algortmalar doğada bu proses talt ederler. Gen yapısını talt etme çn bzm urduğumuz modelde blgsayar btler ullanılmıştır. Gene sınıfı gerel prosesler bt olara yapar, eşdeğer olara double değern de hesaplayablrz, double-bt değşenn end steğmze göre yapablrz. Değşenn bt uzunluğu da steğe göre değşen olara verlmştr. Gene sınıfı değşen masmum 64 bt 0-63) olma üzere ayarlanablr. Gene sınıfı çersnde çaprazlama ve mutasyon yapma metodlarını da barındırır. Mutasyon çn seçlen tesadüf gen btnn değer değştrlr se 0 0 se yapılır). Çaprazlama olara yuarda belrtlen 3 çeşt çaprazlama mümündür düzenl çarprazlama, te çaprazlama, çft çaprazlama). Sınıf double değerden veya gb br bt Strng değernden de ouma yapablr. Program Gene sınıfı İmport java.utl.*; mport java.o.*; publc class Gene etends Object //Gene class generates dgtalbnary) array to represent a double number //actual bnary defnaton changes depends on number of bts, mn and ma //bnary data stored n b BtSet array nt N; //number of bnary dgtsnumber of bts n a byte) //N should be less than 64 double N;//Lmt value for nteger^n-) double mn,ma;//mamum and mnmum lmts of double number BtSet b; //bnary array that strore the nteger publc Genedouble mn,double ma,nt N) //randomly generate the gene N=N; fn>63) N=63; b=new BtSetN); N=Math.pow.0,N)-; mn=mn; ma=ma; //generate random numbers to fll bnary array setbts); publc GeneStrng s,double mn,double ma) //generate gene equal to a gven strng N=s.length); b=new BtSetN); N=Math.pow.0,N)-; mn=mn; ma=ma; fornt =N-;>=0;--) fs.charat)=='') b.setn--); publc Genedouble number,double mn,double ma,nt N) //Generate a gene from a gven double number N=N;//number of bnary dgtsnumber of bts n a byte) fn>63) N=63; b=new BtSetN); N=StrctMath.pow.0,N)-; mn=mn; ma=ma; //z : nteger equvalent of the double number

224 long z=long)number-mn)/ma-mn)*n); //System.out.prntln"nsde double"+z); long y=long)n; double r=z; fornt =0;<N;++) fz-z/)*)!=0) b.set); z/=; publc Gene) //empty Gene N=; b=new BtSetN); N=StrctMath.pow.0,N)-; mn=0; ma=.0; b.set0); publc GeneGene g) // copy a Gene from another one copygeneg); publc vod copygenegene g) N=g.N; b=btset)g.b.clone); N=Math.pow.0,N)-; mn=g.mn; ma=g.ma; publc Gene copygene) Gene g=new Geneths); return g; publc GeneGene Father,Gene Mother) //crosovertype wll be selected randomly double =Math.random); f<0.) setgenefather,mother,"regular"); else f>0.9) setgenefather,mother,"sngle"); else setgenefather,mother,"double"); publc vod setgenegene Father,Gene Mother,Strng crossovertype) mn=father.mn; ma=father.ma; N=Father.N; N=Father.N; b=new BtSetN); nt r,r,r3; fcrossovertype.equals"regular")) fornt =0;<N;++) fboolean_random)) ffather.b.get)) b.set); else fmother.b.get)) b.set); else fcrossovertype.equals"sngle")) r=nt_random); fboolean_random)) fornt =0;<r;++) ffather.b.get)) b.set); fornt =r;<n;++)

225 fmother.b.get)) b.set); else fornt =0;<r;++) fmother.b.get)) b.set); fornt =r;<n;++) ffather.b.get)) b.set); else fcrossovertype.equals"double")) r=nt_random); r=nt_random); nt ; fr>r) =r;r=r;r=; fboolean_random)) fornt =0;<r;++) ffather.b.get)) b.set); fornt =r;<r;++) fmother.b.get)) b.set); fornt =r;<n;++) ffather.b.get)) b.set); else fornt =0;<r;++) fmother.b.get)) b.set); fornt =r;<r;++) ffather.b.get)) b.set); fornt =r;<n;++) fmother.b.get)) b.set); publc vod crossdouble crossrato,gene Father,Gene Mother) // create gene from two parent genes // crossover process // Genes from Father and Mother should have the same lmt values mn=father.mn; ma=father.ma; N=Father.N; N=Father.N; b=new BtSetN); nt r=nt)crossrato*n+0.5); fornt =0;<r;++) ffather.b.get)) b.set); fornt =r;<n;++) fmother.b.get)) b.set); publc vod crossdouble crossrato,gene Father,Gene Mother) // create gene from two parent genes // crossover process // Genes from Father and Mother should have the same lmt values mn=father.mn; ma=father.ma; N=Father.N; N=Father.N; b=new BtSetN); nt r=nt)crossrato*n+0.5); fornt =0;<r;++) fmother.b.get)) b.set); fornt =r;<n;++) ffather.b.get)) b.set); publc long getxp) //returns ntermedate nteger of double number equvalent long y=; double r=n; long z=0; fornt =0;<N;++) fb.get)) z+=y;

226 y*=; return z; publc double getx) //return double number equvalent of bt set number return mn+ma-mn)/n*getxp)); publc vod clear) //fll the entre populaton wth zero b.clear0,n); publc vod fll) //fll the entre populaton wth ones b.clear0,n);b.flp0,n); publc Strng tobtsetstrng) //return bt set array values as defned n class BtSet return b.tostrng); publc Strng tostrng) // return bt set array values as a bnary number defnton // plus double value of array Strng s=""; fornt =N-;>=0;--) fb.get)) s+=""; else s+="0"; s+=") "+getx); return s; publc boolean boolean_random) fmath.random)<=0.5) return false; else return true; publc nt nt_random) nt =nt)math.random)*n); return ; publc double double_random) return mn+math.random)*ma-mn)); publc vod setbts) b.clear); fornt =0;<N;++) fboolean_random)) b.set); publc vod flpnt ) b.flp); publc vod mutate) //fp one bt of data nt =nt_random); f<0) =0; b.flp);

227 Gene sınıfının braz daha açılablmes çn çeştl örneler verlmştr. İl örneğmzde 63 btl 5 adet Gene tp değşen oluşturuyoruz. Değşen değerler gelşgüzel yülenmetedr. Program genetest sınıfı le çeştl 63 btl Gen ler oluşturma sayı 0 le 0 arası) publc class genetest publc statc vod manstrng arg[]) Gene =new Gene0,0,63); fornt =0;<5;++).setbts);System.out.prntln.toStrng)); Çıtı genetest sınıfı le çeştl 63 btl Geneler oluşturma ) ) ) ) ) Program genetest sınıfı le çeştl 63 btl Gen oluşturara 3. değern yüleme publc class genetest publc statc vod manstrng arg[]) Gene =new Gene3.,0,0,63);System.out.prntln.toStrng)); Çıtı genetest sınıfı le çeştl 63 btl Gen oluşturara Strng den 3. değern yüleme ) 3. Program genetest sınıfı le çeştl 63 btl Gen oluşturara Strng den değern yüleme publc class genetest publc statc vod manstrng arg[]) Gene =new Gene" ",0,0); System.out.prntln.toStrng)); Çıtı genetest sınıfı le çeştl 63 btl Gen oluşturara Strng den değern yüleme ) GENOTYPE SINIFI Genotype sınıfı gen bt-double değşen türünün br anlamda boyutlu değşen gb düşünüleblr. Genet anlamda baıldığında romozona eşdeğerdr. Matemat olara düşünüldüğünde se n boyutlu f,, 3,, n ) fonsyonun tüm değşenlerne arşı gelen br toplam değşen setdr. Fonsyon uyum değerlern ve ümülatf uyum değerlern hesaplar GENETIC SINIFI Genetc algortmanın ana sınıfı Genetc sınıfıdır. Bu sınıfta genet optmzasyon gerçeleştrlmetedr. Burada bazı değşenler ullanıcı tarafından verlmeldr. Bu değşenler : nt POPSIZE; //populasyonu oluşturan brey sayısı nt MAXGENS; // nesl sayısımasmum terasyon?); nt NVARS; //değşen sayısı nt N; //genlern bt eşdeğer boyutu-değşen boyutu double PXOVER; //üreme-çaprazlama olasılığı; double PMUTATION; //mutasyon olasılığı şelndedr. Genetc sınıfı tüm Genet optmzasyon proseslern barındırır. Bu şlemlerden evaluate breylern uyumlarını fonsyon değerlern) hesaplar. Genet algortmalarda fonsyon değerlendrmesnde öneml olan br onuda tüm fonsyon değerlernn poztf olma gerellğdr. olara değerlendrlen fonsyonlar sabt br değer elenere artı olara değerlendrlece fonsyonlara dönüştürüleblr. Bu proses fonsyonun optmum notasını değştrmez. f,, 3,, n ) fonsyonunun masmumu g,, 3,, n ) = f,, 3,, n ) + C fonsyonunun masmumuyla aynıdır.

228 Bu proses ümülatf uyumu hesaplaren br hata olmasını önler. Evaluate proses breylern uyum değerlern ve ümülatf uyum değerlern hesaplar Select metodu ümülatf uyumda başarılı breyler arasından yen nesl üretme haına sahp olacaları tesadüf proses ullanara seçer. Crossover proses select proses tarafından seçlen breylerden yen breyler üretr. Mutate proses verlen bell br yüzdede populasyonu mutasyona uğramasını sağlar Calculate proses tüm üstte prosesler sırayla ve toplam nesl sayısına göre tere edere toplam nesl sayısı sonunda nufusupopulasyonu) elde eder. Program genotype sınıfı ve Genetc sınıfı İmport java.o.*; mport java.tet.*; mport java.utl.locale; abstract class f_j // sngle functon mult ndependent varable // a sngle value s returned ndced to equaton_ref // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func,) returns the value of f[] // func,0) returns the value of f[0] abstract double funcdouble []); class genotype // each genotype s member of the populaton // Genotype s le a chromosone n real lfe genetc systems // t can be thought as an evaluaton pont of a functon wth n varable // f)=f,,3,..,_nvars) publc Gene G[] ; // strng of varables maes a genotype publc double Ftness; // genotype's ftness f) publc double Upper[]; // gene's upper bound; _lower < < _upper publc double Lower[]; // Gene's lower bound; _lower < < _upper publc double RFtness; // the relatve ftness publc double CFtness; // cumulatve ftness publc nt NVARS; // Number of varablesgenes) publc nt N; // Number of bts defnng each gene publc boolean Breeder; publc genotypent NVARS,double low[],double hgh[],nt N,f_j f) setgenotypenvars,low,hgh,n,f); publc vod setgenotypent NVARS,double low[],double hgh[],nt N,f_j f) setnn); setnvarsnvars); G=new Gene[NVARS]; Upper=new double[nvars]; Lower=new double[nvars]; setlowerlow); setupperhgh); setgene); setftnessf); publc genotypegenotype g,f_j f) setgenotypeg,f); publc vod setgenotypegenotype g,f_j f) setng.n); setnvarsg.nvars); G=new Gene[NVARS]; Upper=new double[nvars]; Lower=new double[nvars]; setlowerg.upper); setupperg.lower); fornt =0;<NVARS;++) G[]=g.G[].copyGene);

229 setftnessf); publc genotype copygenotypef_j f) genotype g=new genotypeths,f); return g; publc vod setnnt N) N=N; publc vod setnvarsnt NVARS) NVARS=NVARS; publc vod setlowerdouble lbound[]) fornt =0;<NVARS;++) Lower[]=lbound[]; publc vod setupperdouble ubound[]) fornt =0;<NVARS;++) Upper[]=ubound[]; publc vod setftnessf_j f) Ftness=f.funcgetGene)); publc vod setrftnessdouble sum) RFtness=Ftness/sum; publc vod setcftnessdouble ) CFtness=; publc double getlowernt j) return Lower[j]; publc double getuppernt j) return Upper[j]; publc double getftness) return Ftness; publc double getrftness)return RFtness; publc double getcftness)return CFtness; publc vod breed) Breeder=true; publc vod not_breed) Breeder=false; publc boolean sbreed) return Breeder; publc vod setgenent val) G[val]=new GeneLower[val],Upper[val],N); publc vod setgene) fornt j=0;j<nvars;j++) setgenej); publc double getgenent val) return G[val].getX); publc double[] getgene) double []=new double[nvars]; fornt j=0;j<nvars;j++) [j]=getgenej); return ; publc Strng tostrng) // values, Ftness,relatve ftness and cumulatve ftness Strng s=""; fornt j=0;j<nvars;j++) s+=g[j].tostrng)+" F:"; s+=getftness); s+="rf:"+getrftness); s+="cf:"+getcftness); return s; //end of class genotype publc class Genetc // Mamzng a functon nt POPSIZE; //populaton sze nt MAXGENS; //mamum number of generatons; nt NVARS; //number of ndependent varables of functon nt N; //number of genes n each varable double PXOVER; //probablty of crossover; double PMUTATION; //proporton of mutated varables nt Generaton; //Current generaton number nt NBreeder; //Number of survvors n a generaton nt Best; //The best genotype n the populaton genotype Populaton[]; //f_j f; // functon to be avaluated by genetc algorthm publc Genetcnt POPSIZE,nt MAXGENS,nt NVARS,nt N, double PXOVER,double PMUTATION)

230 POPSIZE=POPSIZE; MAXGENS=MAXGENS; NVARS=NVARS; N=N; PXOVER=PXOVER; PMUTATION=PMUTATION; NBreeder=0; Populaton=new genotype[popsize+]; publc vod setpopulatondouble low[],double up[],f_j f) fornt =0;<POPSIZE+;++) Populaton[]=new genotypenvars,low,up,n,f); publc genotype[] copypopulatonf_j f) genotype Po[]=new genotype[popsize+]; fornt =0;<POPSIZE+;++) Po[]=new genotypepopulaton[],f); Po[].Ftness=Populaton[].Ftness; Po[].RFtness=Populaton[].RFtness; Po[].CFtness=Populaton[].CFtness; return Po; publc vod evaluatef_j f) nt mem; nt j; double []=new double[nvars]; formem=0;mem<popsize;mem++) //System.out.prntlnPopulaton[mem].toStrng)); Populaton[mem].setFtnessf); fpopulaton[mem].getftness) > Populaton[POPSIZE].getFtness)) Best=mem; Populaton[POPSIZE]=Populaton[mem]; forj=0;j<nvars;j++) Populaton[POPSIZE].G[j].copyGenePopulaton[mem].G[j]); //end of forj=0.. //end of f //end of formem=0;.. publc vod setrfcfgenotype P[]) //calculates relatve and cumulatve ftness functons nt mem; nt PN=P.length; double sum=0.0; //total ftness of populaton formem=0;mem<pn;mem++) sum+=p[mem].ftness; //System.out.prntln"sum="+sum); //calculate relatve ftness of each genotype formem=0;mem<pn;mem++) P[mem].setRFtnesssum); //calculate cumulatve ftness P[0].setCFtnessP[0].getRFtness)); formem=;mem<pn;mem++) P[mem].setCFtnessP[mem-].getCFtness)+P[mem].getRFtness)); publc vod tostrnggenotype P[]) nt mem; nt PN=P.length; formem=0;mem<pn;mem++) //lst them

231 System.out.prntln"Populaton["+mem+"]="+P[mem].toStrng)); publc vod selectf_j f) //select the new generaton members of populaton double r; nt mem; setrfcfpopulaton); //create a new populaton; genotype Po[]=copyPopulatonf); setrfcfpo); fornt =0;<POPSIZE;++) mem=0; r=math.random); double gf=populaton[].getcftness); double gf; f gf > r) Po[]=Populaton[mem].copygenotypef); formem=;mem<popsize;mem++) gf=populaton[mem].getcftness); f gf>=r && gf< r ) Po[]=Populaton[mem].copygenotypef);brea; setrfcfpo); Populaton=Po; evaluatef); //tostrngpopulaton); publc vod crossoverf_j f) nt,count; nt mem; nt POne,a; nt PTwo,b; nt pont; //select members for breedng nt select[]=new nt[popsize]; nt counter=0; double r; formem=0;mem<popsize;mem++) r=math.random); fr < PXOVER) select[counter++]=mem; Populaton[mem].breed); NBreeder++; else Populaton[mem].not_breed); //System.out.prntln"select="+Matr.toStrngselect)); //let also best of the populaton to breed Populaton[Best].breed); //loop through the populaton select breedng pars formem=0;mem<popsize;mem++) //select two n popolaton n random a=nt)math.random)*nbreeder)+; b=nt)math.random)*nbreeder)+; count=0; POne=0; PTwo=0; //select two ndvduals for breedng for=0;<popsize;++) fpopulaton[].sbreed)) count++; fcount==a) POne=count; fcount==b) PTwo=count;

232 //perform a crossover; genotype Po[]=new genotype[]; Po[0]=Populaton[POne].copygenotypef); Po[]=Populaton[PTwo].copygenotypef); for=0;<nvars;++) Populaton[POne].G[].crossMath.random),Po[0].G[],Po[].G[]); Populaton[PTwo].G[].crossMath.random),Po[0].G[],Po[].G[]); Populaton[POne].setFtnessf); Populaton[PTwo].setFtnessf); publc vod mutatef_j f) nt ; double lbound,hbound; nt nmutatons; nt member; nt var; nmutatons=nt)double)popsize*nvars*pmutation*n)); for=0;<nmutatons;++) member=nt)math.random)*popsize); var=nt)math.random)*nvars); //replace the old value wth a new mutated one Populaton[member].G[var].mutate); //after mutaton recalculate the functon value Populaton[member].setFtnessf); publc Strng report) Strng s; nt ; double best_value; double avg; double stdev; double sum_square; double square_sum; double sum; double ; sum=0; sum_square=0.0; for=0;<popsize;++) = Populaton[].getFtness); sum+=; sum_square=*; avg=sum/double)popsize; square_sum=sum*sum/double)popsize; stdev=math.sqrtsquare_sum); best_value=populaton[popsize].getftness); double aa[]=new double[nvars+]; for=0; < NVARS;++) aa[]=populaton[popsize].getgene); aa[nvars]=populaton[popsize].getftness); //s="generaton = "+Generaton+"best value = "+Matr.toStrngaa)+"Average = "+avg+"standart Devaton = "+stdev; s="generaton = "+Generaton+"best value = "+Matr.toStrngaa); return s; publc double[] getbest) double aa[]=new double[nvars+]; fornt =0; < NVARS;++) aa[]=populaton[popsize].getgene);

233 aa[nvars]=populaton[popsize].getftness); return aa; publc double[] calculatef_j f,boolean report) evaluatef); Generaton=0; whlegeneraton<maxgens) Generaton++; NBreeder=nt)0.8*POPSIZE); selectf); crossoverf); mutatef); evaluatef); //freport) //System.out.prntlnreport)); return getbest); İl örne fonsyon olara f 0, )= fonsyonuna baalım. bu fonsyon örneğn Program 5.0- da ullanılan f 0, )= fonsyonun aynısıdır, anca burada artı değer her zaman sağlayablme çn fonsyonumuza 0 değer lave edlmştr. Bu tür br fonsyonda geometr metodlarında bze rahatlıla çözüm verebldğn anımsayalım. Program OPO7 örne problem sınıfı blnmyenl fonsyon) İmport java.o.*; class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]+0.0; return ff; //masmum test class OPO7 publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=00; nt MAXGENS=00; nt NVARS=; double PXOVER=0.3; double PMUTATION=0.0; fa f=new fa); Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-.0;hgh[0]=5.0; low[]=-.0;hgh[]=5.0;.setpopulatonlow,hgh,f); System.out.prntln"best=\n"+Matr.toStrngT.calculatef,false))); Çıtı OPO7 örne problem sınıfı Capture Output > "C:\co\java\bn\java.ee" OPO7 best= > Termnated wth et code 0.

234 İnc örne fonsyon olara f 0 )= 0 sn0π )+ fonsyonuna baalım. Bu fonsyonu - le arasında masmum değern bulma styoruz. Fonsyonu değerlendrece olur se değerler - le 3 arasında değştğn görürüz. Dönüşümü garant altına alablme çn fonsyona değer elerse f 0 )= 0 sn0π )+3 şelne dönüşür. Bu fonsyonun geometr metodlarla çözülmes olduça zordur. Çıtı de fonsyonun grafğn görmeteyz. Buradan da görebleceğnz gb bu fonsyonda br ço yerel masmum bulunmatadır. Bu yüzden de geometr algortmalarımız bu yerel masmumlarda taılara bze global çözüm sağlamadan duracalardır. Program OPO7A örne problem sınıfı br blnmeyenl fonsyon) mport java.o.*; class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=[0]*math.sn0.0*math.pi*[0])+3.0; return ff; //masmum test class OPO7A publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=00; nt MAXGENS=00; nt NVARS=; double PXOVER=0.3; double PMUTATION=0.0; fa f=new fa); Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-.0;hgh[0]=.0;.setpopulatonlow,hgh,f); System.out.prntln"best=\n"+Matr.toStrngT.calculatef,false))); Çıtı OPO7A örne problem sınıfı br blnmeyenl fonsyon) Capture Output > "C:\co\java\bn\java.ee" OPO7A best= > Termnated wth et code 0. Çıtı OPO7A örne problem sınıfı graf gösterm br blnmeyenl fonsyon)

235 Bu fonsyonu geometr br arama yöntemnde ullanamaya çalıştığımızda başarılı olamadığımızı göreblrz. Son olara boyutlu omples geometrye sahp br fonsyonu nceleyelm : Program OPO7B örne problem sınıfı blnmeyenl fonsyon) İmport java.o.*; class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=.5+[0]*math.sn4.0*math.pi*[0])+[]*math.sn0.0*math.pi*[]); return ff; //masmum test class OPO7B publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=00; nt MAXGENS=00; nt NVARS=; double PXOVER=0.3; double PMUTATION=0.0; fa f=new fa); Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-3.0;hgh[0]=.; low[]=4.;hgh[]=5.8;.setpopulatonlow,hgh,f); System.out.prntln"best=\n"+Matr.toStrngT.calculatef,false))); Çıtı OPO7B örne problem sınıfı blnmeyenl fonsyon) Capture Output > "C:\co\java\bn\java.ee" OPO7B best= > Termnated wth et code 0. Çıtı OPO7B örne problem sınıfı blnmeyenl fonsyon) üç boyutlu graf çıtısı

236 Bu fonsyonun da geometr optmzasyon metodları le çözümü zor olablr. Btrren son br notaya terar datnz çeme styoruz. Genet algortmaların bulduğu değerler statst proses sonucu bulunduğundan her zaman aynı değer vermeyecetr. Örneğn yuarıda problem çn çıtıyı terar aldığımda : Çıtı OPO7B örne problem sınıfı blnmeyenl fonsyon) Capture Output > "C:\co\java\bn\javaw.ee" OPO7B best= > Termnated wth et code 0. Görüldüğü gb sonuçlar tam olara aynı değldr. Genet algortmaların veya genelde statst yalaşımlı metodların geometr yöntemlerden en öneml farlarından brs de budur. Geometr yöntemler aynı şartlar verldğnde hep aynı sonuca ulaşırlar. Geometr formüllerle çözmes zor olablece br fonsyon daha verelm: Program OPO9C örne problem sınıfı blnmeyenl fonsyon) İmport java.o.*; mport java.swng.*; class fa etends f_j //çözümü stenen fonsyon double funcdouble []) double ff=.0+math.cosmath.pi*[0]-3.0))*math.cos.0*math.pi*[]-.0))/ +[0]-3.0)*[0]-3.0)+[]-.0)*[]-.0)); return ff; //masmum test; class fb etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; fa f=new fa); return -f.func); //masmum test class OPO9C publc statc vod manstrng args[]) throws IOEcepton nt N=63; nt POPSIZE=00;

237 nt MAXGENS=00; nt NVARS=; double PXOVER=0.3; double PMUTATION=0.0; fa fa=new fa); fb fb=new fb); Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-0.0;hgh[0]=0.0; low[]=-0.0;hgh[]=0.0;.setpopulatonlow,hgh,fa); double a[]=.calculatefa,false); double 0[]=new double[nvars]; fornt =0;<NVARS;++) 0[]=a[]; Strng s="genet algortma sonucu =\n"+matr.tostrngta); Strng s="genet algortma ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı OPO9C örne problem sınıfı blnmeyenl fonsyon) Çıtı OPO9C örne problem sınıfı blnmeyenl fonsyon) üç boyutlu graf çıtısı 5..6 GENETİK ALGORİTMANIN GAUSS TESADÜFİ SAYILI GEN YAPISI İLE OLUŞTURULMASI Üstte verdğmz genet algortma modelnde bnary bt modelnden yararlanara temel gen yapımızı oluşturmuştu. Şmd aynıtemelgen avramını farlı br şelde oluşturmaya çalışacağız. Bu versyonumuzda temel olara gauss dağılımlı tesadüf raam avramından yararlanacağız. Şu ana adar eşt dağılımlı tesadüf raam avramından sıça yararlandı. Gauss tesadüf raamları verlen aralıta her nota çn eşt ağırlıta tesadüf sayılar yerne verlen br ortalama değer cvarında daha fazla ümeleşen çan eğrs şelnde dağılım gösteren tesadüf sayılar üretr. Gauss tesadüf dağılımını oluşturan program ve deneme programı P de verlmştr. Oluşturulan raam çn dağılım grafğde şel 5.5- de verlmştr. tesadüg sayının bellbrnotada yoğunlaşması anne ve baba breylernden çocu brey oluştururen anne ve baba breylern özelllernn çoculara geçrlmes yönünde önemldr. Böylece oluşan yentesadüf sayı üretldğ breyn özelllern bell br oranda orur, anca aynı olma veya her zaman ço yaın olma zorunda da değldr. Program Gauss dağılımlı tesadüf raam ontrolu raam oluşturulduğunda dağılım grafğ mport java.o.*; //java grd ct snfn cagr class randeneme

238 publc statc double gaussrandomdouble ort,double r) nt set=0; double gset=0; double fac,rsq,v,v; double aret=0; fset==0) do v=.0*math.random)-.0; v=.0*math.random)-.0; rsq=v*v+v*v; whlersq>=.0 rsq==0.0); fac=math.sqrt-.0*math.logrsq)/rsq); gset=v*fac; set=; aret=v*fac; else set=0; aret=gset; return aret/8.0*r+ort; publc statc vod manstrng args[]) double ort,r; double gr=0; double []=new double[0]; double y[]=new double[0]; ort=0.0; r=.0; fornt =0;<=00;++) []=ort-r/+r*double)/00.0; fornt =0;<= ;++) gr=gaussrandomort,r);fornt j=0;j<00;j++)fgr>=[j] && gr< [j+])y[j]+=.0; Plot pp=new Plot,y); pp.setcolor0,0,5,04); pp.setplottype0,4); pp.plot); Şel 5.5- gaussrandom metodunun atışta oluşturduğu sonuç 5..7 GEN SINIFI Bu tesadüf sayı sstemn ullanara Gen sınıfı gelştrlmştr. Gen sınıfı şlevsel olara, yuarıda oluşturulmuş olan Gene sınıfı le aynı şlev görür. Temel far Gene sınıfında mutasyon çaprazlama şlemler btler üzernden gerçeleştrlren, burada gauss tesedüf sayıları üzernden gerçeleştrlmetedr. Program Gen sınıfı Gauss tesadüf sayı üzernden temel gen şlemlernmutasyon, çaprazlama) hesaplar

239 // Dr. M. Turhan ÇOBAN // EGE Unversty School of Engneerng, Mechancal Engneerng Department // pacage : Numercal analyss pacage // subject : optmzaton // group : Genetc Algorthms gauss random metodu ullanara. // Gen Class // Gen class generates a double number represent a gene mport java.utl.*; mport java.o.*; publc class Gen etends Object publc double mn,ma;//mamum and mnmum lmts of double number publc double ; publc statc double gaussrandomdouble mn,double ma,double ) double d=ma-; double d=-mn; double d=math.absmath.mnd,d)); =gaussrandom,d); return ; publc statc vod gaussrandom) double d=ma-; double d=-mn; double d=math.absmath.mnd,d)); =gaussrandom,d); publc statc double gaussrandomdouble ort,double r) //r yayılma bölges //ort ortalama değer nt set=0; double gset=0; double fac,rsq,v,v; double aret=0; fset==0) do v=.0*math.random)-.0; v=.0*math.random)-.0; rsq=v*v+v*v; whlersq>=.0 rsq==0.0); fac=math.sqrt-.0*math.logrsq)/rsq); gset=v*fac; set=; aret=v*fac; else set=0; aret=gset; return aret/4.0*r+ort; publc Gendouble mn,double ma) //randomly generate the gene mn=mn; ma=ma; =double_random); publc Gendouble s,double mn,double ma) mn=mn; ma=ma; //generate gene equal to a gven strng fs>=mn)&& s<=ma)) =s; else fs<mn) =mn; else fs>ma) =ma;

240 publc Gen) mn=0; ma=.0; =mn+math.random); publc GenGen g) mn=g.mn; ma=g.ma; =g.; publc vod copygengen g) mn=g.mn; ma=g.ma; =g.; publc Gen copygen) Gen g=new Genths); return g; publc GenGen Father,Gen Mother) setgenfather,mother); publc vod setgengen Father,Gen Mother) mn=father.mn; ma=father.ma; double r=ma-mn; double r=math.random); double d=ma-father.; double d=father.-mn; double d=math.absmath.mnd,d)); double r=gaussrandomfather.,d); d=ma-mother.; d=mother.-mn; d=math.absmath.mnd,d)); double r3=gaussrandommother.,d); =r*r+r3*-r); System.out.prntln"r="+r+"r3="+r3+"r="+r); f<mn) =mn; else f>ma) =ma; publc vod crossdouble crossrato,gen Father,Gen Mother) mn=father.mn; ma=father.ma; double r=ma-mn; double d=ma-father.; double d=father.-mn; double d=math.absmath.mnd,d)); double gr=gaussrandomfather.,d); d=ma-mother.; d=mother.-mn; d=math.absmath.mnd,d)); double gr=gaussrandommother.,d); =gr*crossrato+gr*-crossrato); f<mn) =mn; else f>ma) =ma; publc vod crossdouble crossrato,gen Father,Gen Mother) mn=father.mn; ma=father.ma; double r=ma-mn;

241 double d=ma-father.; double d=father.-mn; double d=math.absmath.mnd,d)); double gr=gaussrandomfather.,d); d=ma-mother.; d=mother.-mn; d=math.absmath.mnd,d)); double gr=gaussrandommother.,d); =gr*.0-crossrato)+gr*crossrato; f<mn) =mn; else f>ma) =ma; publc double getx) //return double number equvalent of bt set number return ; publc boolean boolean_random) fmath.random)<=0.5) return false; else return true; publc double double_random) return mn+math.random)*ma-mn)); publc vod mutate) double r=ma-mn); double d=ma-; double d=-mn; double d=math.absmath.mnd,d)); =gaussrandom,d); 5..8 GENTYPE SINIFI İşlev olara yuarda anlattığımız Genotype sınıfının aynı şlev görür. Gen Gauss tesadüf sayı-double değşen türünün br anlamda boyutlu değşen gb düşünüleblr. Genet anlamda baıldığında romozona eşdeğerdr. Matemat olara düşünüldüğünde se n boyutlu f,, 3,, n ) fonsyonun tüm değşenlerne arşı gelen br toplam değşen setdr. Fonsyon uyum değerlern ve ümülatf uyum değerlern hesaplar. Program Gentype sınıfı Gauss tesadüf sayı üzernden temel gen şlemlernmutasyon, çaprazlama) hesaplayan gen sınıfının boyutlu şeln çerr canlılarda romozona eşdeğerdr) mport java.o.*; mport java.tet.*; mport java.utl.locale; abstract class f_j // sngle functon mult ndependent varable // a sngle value s returned ndced to equaton_ref // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func,) returns the value of f[] // func,0) returns the value of f[0] abstract double funcdouble []); class gentype // each genotype s member of the populaton // Genotype s le a chromosone n real lfe genetc systems // t can be thought as an evaluaton pont of a functon wth n varable // f)=f,,3,..,_nvars) publc Gen G[] ; // strng of varables maes a genotype publc double Ftness; // genotype's ftness f) publc double Upper[]; // gene's upper bound; _lower < < _upper publc double Lower[]; // Gene's lower bound; _lower < < _upper publc double RFtness; // the relatve ftness publc double CFtness; // cumulatve ftness publc nt NVARS; // Number of varablesgenes)

242 publc nt N; // Number of bts defnng each gene publc boolean Breeder; publc gentypent NVARS,double low[],double hgh[],nt N,f_j f) setgentypenvars,low,hgh,n,f); publc vod setgentypent NVARS,double low[],double hgh[],nt N,f_j f) setnn); setnvarsnvars); G=new Gen[NVARS]; Upper=new double[nvars]; Lower=new double[nvars]; setlowerlow); setupperhgh); setgen); setftnessf); publc gentypegentype g,f_j f) setgentypeg,f); publc vod setgentypegentype g,f_j f) setng.n); setnvarsg.nvars); G=new Gen[NVARS]; Upper=new double[nvars]; Lower=new double[nvars]; setlowerg.upper); setupperg.lower); fornt =0;<NVARS;++) G[]=g.G[].copyGen); setftnessf); publc gentype copygentypef_j f) gentype g=new gentypeths,f); return g; publc vod setnnt N) N=N; publc vod setnvarsnt NVARS) NVARS=NVARS; publc vod setlowerdouble lbound[]) fornt =0;<NVARS;++) Lower[]=lbound[]; publc vod setupperdouble ubound[]) fornt =0;<NVARS;++) Upper[]=ubound[]; publc vod setftnessf_j f) Ftness=f.funcgetGen)); publc vod setrftnessdouble sum) RFtness=Ftness/sum; publc vod setcftnessdouble ) CFtness=; publc double getlowernt j) return Lower[j]; publc double getuppernt j) return Upper[j]; publc double getftness) return Ftness; publc double getrftness)return RFtness; publc double getcftness)return CFtness; publc vod breed) Breeder=true; publc vod not_breed) Breeder=false; publc boolean sbreed) return Breeder; publc vod setgennt val) G[val]=new GenLower[val],Upper[val]); publc vod setgen) fornt j=0;j<nvars;j++) setgenj); publc double getgennt val) return G[val].getX); publc double[] getgen) double []=new double[nvars]; fornt j=0;j<nvars;j++) [j]=getgenj); return ;

243 publc Strng tostrng) // values, Ftness,relatve ftness and cumulatve ftness Strng s=""; fornt j=0;j<nvars;j++) s+=g[j].tostrng)+" F:"; s+=getftness); s+="rf:"+getrftness); s+="cf:"+getcftness); return s; //end of class gentype 5..9 GENETIC SINIFI Genetc algortmanın Gen ve Gentype gauss tesadüf sayı sstem ullanan versyonunun ana sınıfı Genetc sınıfıdır. Yapı olara Genet sınıfının aynı yapısı orunmuştursadece alt değşen sınıfları değştrlmştr) Bu sınıfta genet optmzasyon gerçeleştrlmetedr. Burada bazı değşenler ullanıcı tarafından verlmeldr. Bu değşenler : nt POPSIZE; //populasyonu oluşturan brey sayısı nt MAXGENS; // nesl sayısımasmum terasyon?); nt NVARS; //değşen sayısı nt N; //genlern bt eşdeğer boyutu-değşen boyutu double PXOVER; //üreme-çaprazlama olasılığı; double PMUTATION; //mutasyon olasılığı şelndedr. Genetc sınıfı tüm Genet optmzasyon proseslern barındırır. Bu şlemlerden evaluate breylern uyumlarını fonsyon değerlern) hesaplar. Genet algortmalarda fonsyon değerlendrmesnde öneml olan br onuda tüm fonsyon değerlernn poztf olma gerellğdr. olara değerlendrlen fonsyonlar sabt br değer elenere artı olara değerlendrlece fonsyonlara dönüştürüleblr. Bu proses fonsyonun optmum notasını değştrmez. f,, 3,, n ) fonsyonunun masmumu g,, 3,, n ) = f,, 3,, n ) + C fonsyonunun masmumuyla aynıdır. Bu proses ümülatf uyumu hesaplaren br hata olmasını önler. Evaluate proses breylern uyum değerlern ve ümülatf uyum değerlern hesaplar Select metodu ümülatf uyumda başarılı breyler arasından yen nesl üretme haına sahp olacaları tesadüf proses ullanara seçer. Crossover proses select proses tarafından seçlen breylerden yen breyler üretr. Mutate proses verlen bell br yüzdede populasyonu mutasyona uğramasını sağlar Calculate proses tüm üstte prosesler sırayla ve toplam nesl sayısına göre tere edere toplam nesl sayısı sonunda nufusupopulasyonu) elde eder. Program Genetc sınıfı temel genet algortma hesaplarını çerr. publc class Genetc // Mamzng a functon nt POPSIZE; //populaton sze nt MAXGENS; //mamum number of generatons; nt NVARS; //number of ndependent varables of functon nt N; //number of genes n each varable double PXOVER; //probablty of crossover; double PMUTATION; //proporton of mutated varables nt Generaton; //Current generaton number nt NBreeder; //Number of survvors n a generaton nt Best; //The best gentype n the populaton gentype Populaton[]; //f_j f; // functon to be avaluated by genetc algorthm publc Genetcnt POPSIZE,nt MAXGENS,nt NVARS,nt N, double PXOVER,double PMUTATION) POPSIZE=POPSIZE; MAXGENS=MAXGENS;

244 NVARS=NVARS; N=N; PXOVER=PXOVER; PMUTATION=PMUTATION; NBreeder=0; Populaton=new gentype[popsize+]; publc vod setpopulatondouble low[],double up[],f_j f) fornt =0;<POPSIZE+;++) Populaton[]=new gentypenvars,low,up,n,f); publc gentype[] copypopulatonf_j f) gentype Po[]=new gentype[popsize+]; fornt =0;<POPSIZE+;++) Po[]=new gentypepopulaton[],f); Po[].Ftness=Populaton[].Ftness; Po[].RFtness=Populaton[].RFtness; Po[].CFtness=Populaton[].CFtness; return Po; publc vod evaluatef_j f) nt mem; nt j; double []=new double[nvars]; formem=0;mem<popsize;mem++) //System.out.prntlnPopulaton[mem].toStrng)); Populaton[mem].setFtnessf); fpopulaton[mem].getftness) > Populaton[POPSIZE].getFtness)) Best=mem; Populaton[POPSIZE]=Populaton[mem]; forj=0;j<nvars;j++) Populaton[POPSIZE].G[j].copyGenPopulaton[mem].G[j]); //end of forj=0.. //end of f //end of formem=0;.. publc vod setrfcfgentype P[]) //calculates relatve and cumulatve ftness functons nt mem; nt PN=P.length; double sum=0.0; //total ftness of populaton formem=0;mem<pn;mem++) sum+=p[mem].ftness; //System.out.prntln"sum="+sum); //calculate relatve ftness of each gentype formem=0;mem<pn;mem++) P[mem].setRFtnesssum); //calculate cumulatve ftness P[0].setCFtnessP[0].getRFtness)); formem=;mem<pn;mem++) P[mem].setCFtnessP[mem-].getCFtness)+P[mem].getRFtness)); publc vod tostrnggentype P[]) nt mem; nt PN=P.length; formem=0;mem<pn;mem++) //lst them System.out.prntln"Populaton["+mem+"]="+P[mem].toStrng));

245 publc vod selectf_j f) //select the new generaton members of populaton double r; nt mem; setrfcfpopulaton); //create a new populaton; gentype Po[]=copyPopulatonf); setrfcfpo); fornt =0;<POPSIZE;++) mem=0; r=math.random); double gf=populaton[].getcftness); double gf; f gf > r) Po[]=Populaton[mem].copygentypef); formem=;mem<popsize;mem++) gf=populaton[mem].getcftness); f gf>=r && gf< r ) Po[]=Populaton[mem].copygentypef);brea; setrfcfpo); Populaton=Po; evaluatef); //tostrngpopulaton); publc vod crossoverf_j f) nt,count; nt mem; nt POne,a; nt PTwo,b; nt pont; //select members for breedng nt select[]=new nt[popsize]; nt counter=0; double r; formem=0;mem<popsize;mem++) r=math.random); fr < PXOVER) select[counter++]=mem; Populaton[mem].breed); NBreeder++; else Populaton[mem].not_breed); //System.out.prntln"select="+Matr.toStrngselect)); //let also best of the populaton to breed Populaton[Best].breed); //loop through the populaton select breedng pars formem=0;mem<popsize;mem++) //select two n popolaton n random a=nt)math.random)*nbreeder)+; b=nt)math.random)*nbreeder)+; count=0; POne=0; PTwo=0; //select two ndvduals for breedng for=0;<popsize;++) fpopulaton[].sbreed)) count++; fcount==a) POne=count; fcount==b) PTwo=count; //perform a crossover;

246 gentype Po[]=new gentype[]; Po[0]=Populaton[POne].copygentypef); Po[]=Populaton[PTwo].copygentypef); for=0;<nvars;++) Populaton[POne].G[].crossMath.random),Po[0].G[],Po[].G[]); Populaton[PTwo].G[].crossMath.random),Po[0].G[],Po[].G[]); Populaton[POne].setFtnessf); Populaton[PTwo].setFtnessf); publc vod mutatef_j f) nt ; double lbound,hbound; nt nmutatons; nt member; nt var; nmutatons=nt)double)popsize*nvars*pmutation*n)); for=0;<nmutatons;++) member=nt)math.random)*popsize); var=nt)math.random)*nvars); //replace the old value wth a new mutated one Populaton[member].G[var].mutate); //after mutaton recalculate the functon value Populaton[member].setFtnessf); publc Strng report) Strng s; nt ; double best_value; double avg; double stdev; double sum_square; double square_sum; double sum; double ; sum=0; sum_square=0.0; for=0;<popsize;++) = Populaton[].getFtness); sum+=; sum_square=*; avg=sum/double)popsize; square_sum=sum*sum/double)popsize; stdev=math.sqrtsquare_sum); best_value=populaton[popsize].getftness); double aa[]=new double[nvars+]; for=0; < NVARS;++) aa[]=populaton[popsize].getgen); aa[nvars]=populaton[popsize].getftness); //s="generaton = "+Generaton+"best value = "+Matr.toStrngaa)+"Average = "+avg+"standart Devaton = "+stdev; s="generaton = "+Generaton+"best value = "+Matr.toStrngaa); return s; publc double[] getbest) double aa[]=new double[nvars+]; fornt =0; < NVARS;++) aa[]=populaton[popsize].getgen); aa[nvars]=populaton[popsize].getftness); return aa;

247 publc double[] calculatef_j f,boolean report) evaluatef); Generaton=0; whlegeneraton<maxgens) Generaton++; NBreeder=nt)0.8*POPSIZE); selectf); crossoverf); mutatef); evaluatef); //freport) //System.out.prntlnreport)); return getbest); Şmd sonuçları görme çn br örne problem verelm. Örne problem olara yuarda bt temell genet algortmada ullandığımız aynı test fonsyonunu aldı. Program Genetc sınıfı test programı. mport java.o.*; class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=.0*[0]*[]+.0*[0]-[0]*[0]-.0*[]*[]+0.0; return ff; //masmum test class OPO7C publc statc vod manstrng args[]) throws IOEcepton nt N=5; nt POPSIZE=400; nt MAXGENS=400; nt NVARS=; double PXOVER=0.3; double PMUTATION=0.0; fa f=new fa); Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-.0;hgh[0]=5.0; low[]=-.0;hgh[]=5.0;.setpopulatonlow,hgh,f); System.out.prntln"best=\n"+Matr.toStrngT.calculatef,false))); Çıtı Genetc sınıfı test programı Capture Output > "C:\co\java\bn\javaw.ee" OPO7C best= > Termnated wth et code 0.

248 Yuarda da ullandığımız bu test fonsyonunun çözüm set ve değerlerdr. ALIŞTIRMA SETİ. Gene sınıfı, genotype, Genetc sınıfı ullanan örneler: OPO7A.java OPO7B.java OPO9C.java H9A.java Hafta 7 ödev problem aynı fonsyon). randeneme.java 3. Gen sınıfı, gentype, Genetc sınıfı ullanan örneler: OPO7C.java H9A.java Hafta 7 ödev problem aynı fonsyon) ÖDEV PROBLEM SETİ. PROBLEM y ) z, y) = y e fonsyonunun 4 4 ve 4 y 4 notaları arasında P3,3) notasından başlayara mnmum değern bulunuz. sn + y + ε ) z, y) = + y + ε fonsyonunun 0 0 ve 0 y 0 notaları arasında ε=e- çn P8,8) notasından başlayara masmum değern bulunuz VİZE İMTİHANI : Borsada hsse senetler alma styoruz. Elmzde geçmş t-dt zamanından şu ana adar t) olan N şretn hsse senetler değerler mevcutbr hsse senednn değernn zaman çnde değşm). Hsse senetlermz t+dt zamanında satacağız, ve satışta masmum arı elde etme styoruz. Bunun çn paramızı bu N hsse sened aradında böleceğz. Vermz farında senz sayısal br ver setdr ve sonuç stedğmz zaman ver aralığımızın dışındadır. Elmzde yatıracağımız mtarı da A YTL olara abul edelm. Genet algortmaları ullanara arımız masmze edece br program gelştrnz. Verlen H) = N t-dt<<t A=y*Ht)+y*Ht)+

249 A<=A alacağımız hsse sened mtarı elmzde paradan fazla olamaz. Ht),Ht) : şu anda hsse senetlernn değer. y: H hsse senednden aldığımız mtarnteger) Masmum olmasını stedğmz fonsyon: B=*Ht+dt)+*Ht+dt)+ OPTIMIZASYON HAFTA 0 GEÇEN HAFTADAN ÇÖZÜMLER mport java.o.*; mport java.swng.*; class fa etends f_j //çözümü stenen fonsyon double funcdouble []) double ff= Math.snMath.sqrt[0]*[0]+[]*[]+.0e-))/Math.sqrt[0]*[0]+[]*[]+.0e-); return ff; //masmum test; class fb etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; fa f=new fa); return -f.func); //mnmum test class OPO9E publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=00; nt MAXGENS=00; nt NVARS=; double PXOVER=0.3; double PMUTATION=0.0; fa fa=new fa); fb fb=new fb); Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-0.0;hgh[0]=0.0; low[]=-0.0;hgh[]=0.0;.setpopulatonlow,hgh,fa); double a[]=.calculatefa,false); double 0[]=new double[nvars]; fornt =0;<NVARS;++) 0[]=a[]; Strng s="genet algortma sonucu =\n"+matr.tostrngta); Strng s="genet algortma ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE);

250 5. GLOBAL ÇÖZÜM METODLARI : MONTE-CARLO OPTİMİZASYONU Monte carlo optmzasyonu yöntem olara olduça basttr, sınırları tanımlanmış olan sınırları çnde alan notalar tesadüf olara seçlr ve değerlendrlr. Nota sayısı ço arttığında statst olara tüm alan taranmuş olur. Bu yöntem temel olara graf yöntemne benzetleblr, anca toplam fonsyon değerlendrme sayısı graf yöntemnden ble ço fazla olmalıdır. Temel olara ço prat br yöntem olmamala brlte yazılması ve ullanılmasında olaylı nedenyle ullanılablr. Program 5.- Monte-Carlo metodu // Dr. M. Turhan ÇOBAN // // EGE Unversty School of Engneerng, Mechancal Engneerng Department // pacage : Numercal analyss pacage // subject : optmzaton // group : Monte-Carlo optmsatonmamum) Algorthms // monte_carlo_opt Class // class selects random ponts at the gven area and selects the best // results found // mport java.utl.*; mport java.o.*; abstract class f_j etends Mathd // sngle functon mult ndependent varable // a sngle value s returned ndced to equaton_ref // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func,) returns the value of f[] // func,0) returns the value of f[0] abstract double funcdouble []); publc class monte_carlo_opt etends Object nt N; publc double ma[]; publc double mn[]; publc double ; publc monte_carlo_optnt N,double mn[],double ma[]) ma=new double[mn.length]; mn=new double[mn.length]; N=N; nt n=mn.length; fornt =0;<n;++) mn[]=mn[];ma[]=ma[]; publc double[] monte_carlo_maf_j f) nt n=mn.length; double []=new double[n]; double ma[]=new double[n]; double ma_number=-e99; double f; fornt =0;<N;++) fornt =0;<n;++) []=mn[]+ma[]-mn[])*math.random); f=f.func); ff>ma_number) ma_number=f; fornt =0;<n;++) ma[]=[]; return ma;

251 Program 5.- Monte-Carlo metodu br boyutlu test programı mport java.o.*; class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; ff=[0]*math.sn0.0*math.pi*[0])+3.0; return ff; //masmum test class OPO7MC publc statc vod manstrng args[]) throws IOEcepton fa f=new fa); double low[]=new double[]; double hgh[]=new double[]; low[0]=-.0;hgh[0]=.0; monte_carlo_opt mco=new monte_carlo_opt00000,low,hgh); double ma[]=mco.monte_carlo_maf); fornt =0;<ma.length;++) System.out.prntlnma[]); Çıtı 5.- Monte-Carlo metodu br boyutlu program Capture Output > "C:\co\java\bn\java.ee" OPO7MC > Termnated wth et code 0. Program 5.-3 Monte-Carlo metodu boyutlu test programı mport java.o.*; class fa etends f_j //çözümü stenen fonsyon double funcdouble []) double ff=.0+math.cosmath.pi*[0]-3.0))*math.cos.0*math.pi*[]-.0))/ +[0]-3.0)*[0]-3.0)+[]-.0)*[]-.0)); return ff; //masmum test; class fb etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; fa f=new fa); return -f.func); //mnmum test class OPO9MC publc statc vod manstrng args[]) throws IOEcepton fb f=new fb); double low[]=new double[]; double hgh[]=new double[]; low[0]=-0.0;hgh[0]=0.0; low[]=-0.0;hgh[]=0.0; //0 mllon teraton monte_carlo_opt mco=new monte_carlo_opt ,low,hgh); double ma[]=mco.monte_carlo_maf);

252 fornt =0;<ma.length;++) System.out.prntlnma[]); Çıtı 5.- Monte-Carlo metodu boyutlu program Capture Output > "C:\co\java\bn\java.ee" OPO9MC > Termnated wth et code GLOBAL ÇÖZÜM METODLARI : İTERASYONLU TEPE TIRMANMA Daha önce en d yamaç metod le geometr arama yöntem le optmzasyon problemn ncelemşt. Global optmumu bulma çn standart tepe tırmanma yöntem yeterl değldr, çün yerel çözüme ulaşınca durur. Eğer global br metod oluşturma ster se yerel en y çözümü buldutan sonra arama bölgesn değştrere şleme devam etme gereldr. İterasyonlu tepe tırmanma metodunu br algortma olara yazaca olursa: İteratf tepe tırmanma algortması başla t=0 whle local=false vc değşenn tesadüf olara seç vc çn fonsyonu hesapla whle vc nn yaınlarında 30 cvarında omşu nota seç ve bu notaları değerlendr. Bu notalar arasında masmumu veren notayı vn çözüm vetörü olara seç f fvc) < fvn) then vc = vn else local=true untl local t=t+ untl t=maximum btr Burada öneml problemlerden brs omşu notalar nasıl tespt edeceğmzdr. Örneğn genet programlamada ullandığımız Gene sınıfından yararlanablrz. Vc Gene sınıfında oluşturulmuşsa br bt değern değştrme omşu br nota elde etmemz sağlayacatır. Program 5.3- İterasyonlu tepe tırmanma gene-genotyoe sınıfını ullanan versyon mport java.o.*; mport java.tet.*; mport java.utl.locale; publc class teratedhllclmber // Mamzng a functon //terated hll clmber // a verson steepest ascent wth statstcal approach to varable endyamaç) genotype Vc; genotype Vn[]; genotype best; nt MAX; double t; boolean local; nt POPSIZE; nt NVARS; nt N;//number of bt representaton for each varable //f_j f; // functon to be avaluated by genetc algorthm publc teratedhllclmbernt POPSIZE,nt NVARS,nt N) POPSIZE=POPSIZE;//Vn sze number of negbour varable f.e. 30 NVARS=NVARS; // number of varables equaton to solve MAX=0; N=N; // number of bts represent each varable for eample 3 Vn=new genotype[popsize+]; t=0;

253 local=false; publc vod setvcdouble low[],double up[],f_j f) //select orgnalgene andomly Vc=new genotypenvars,low,up,n,f); publc vod setbestgenotype g,f_j f) //select orgnalgene andomly best=new genotypeg,f); publc vod setvcgenotype g,f_j f) //select orgnal gene from other gene Vc=new genotypeg,f); publc vod setvnf_j f) //select neghbourng genes smlar to the orgnal one fornt =0;<POPSIZE+;++) Vn[]=new genotypevc,f); mutatef); publc vod evaluatef_j f) nt mem; nt j; double []=new double[nvars]; formem=0;mem<popsize;mem++) //System.out.prntlnVn[mem].toStrng)); Vn[mem].setFtnessf); fvn[mem].getftness) > Vn[POPSIZE].getFtness)) Vn[POPSIZE]=Vn[mem]; forj=0;j<nvars;j++) Vn[POPSIZE].G[j].copyGeneVn[mem].G[j]); //end of forj=0.. //end of f //end of formem=0;.. publc vod tostrnggenotype P[]) nt mem; nt PN=P.length; formem=0;mem<pn;mem++) //lst them System.out.prntln"Vn["+mem+"]="+P[mem].toStrng)); publc vod mutatef_j f) nt ; double lbound,hbound; nt nmutatons; nt member; nt var; nmutatons=nt)double)popsize*nvars*n)); for=0;<nmutatons;++) member=nt)math.random)*popsize); var=nt)math.random)*nvars); //replace the old value wth a new mutated one Vn[member].G[var].mutate); //after mutaton recalculate the functon value Vn[member].setFtnessf);

254 publc double[] getbestgenotype b) double aa[]=new double[nvars+]; fornt =0; < NVARS;++) aa[]=b.getgene); aa[nvars]=b.getftness); return aa; publc double[] calculatedouble low[],double up[],f_j f,boolean report) setvclow,up,f);// new set of random selecton n each tme setbestvc,f); do local=true; do setvnf); evaluatef); fvn[popsize].getftness) > Vc.getFtness)) setvcvn[popsize], f); fvn[popsize].getftness) > best.getftness)) setbestvn[popsize],f); else local=false; whlelocal); t++; setvclow,up,f); //new random value freport) System.out.prntlnMatr.toStrnggetBestbest))); whlet<max); return getbestbest); Şel 5.3- Program 5.3- de örne fonsyonun graf çıtısı Program 5.3- İterasyonlu tepe tırmanma gene sınıfını ullanan versyon çıtı programı //terated hllclmber //terasyonlu en d yamaç tırmanıcı mport java.o.*; mport java.swng.joptonpane; class fa etends f_j //çözümü stenen fonsyon

255 double funcdouble []) double ff=.5+[0]*math.sn4.0*math.pi*[0])+[]*math.sn0.0*math.pi*[]); return ff; //masmum test class fb etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; fa f=new fa); return -f.func); //masmum test class OPO0 publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=40; nt MAXGENS=400; nt NVARS=; fa fa=new fa); fb fb=new fb); teratedhllclmber =new teratedhllclmberpopsize,nvars,n); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-3.0;hgh[0]=.; low[]=4.;hgh[]=5.8; double a[]=.calculatelow,hgh,fa,false); double 0[]=new double[nvars]; fornt =0;<NVARS;++) 0[]=a[]; Strng s="teratv tepe tırmanma sonucu =\n"+matr.tostrngta); Strng s="genet algortma ve newton ço değşenl fonsyon optmzasyonun brlte ullanımı:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı 5.3- İterasyonlu tepe tırmanma gene sınıfını ullanan versyon çıtı programı Program İterasyonlu tepe tırmanma double sınıfını ve Gauss tesadüf fonsyonlarını ullanan versyon mport java.o.*; mport java.tet.*; mport java.utl.locale; publc class IHC // Mamzng a functon // terated Hll clmber // a statstcal approach double T; double Vc[]; double Vn[][]; double best[]; nt MAX;//number nt GLIMIT;//ara araya başarılı steplern sayısı

256 boolean local; nt NVARS;//numberof varables nt N;//number of bt representaton for each varable double T0; double,0;//tme nde nt POPSIZE; double low[]; double hgh[]; nt t; //f_j f; // functon to be avaluated by genetc algorthm publc IHCnt POPSIZE,nt NVARS,nt N,double T) T=T; T0=T; POPSIZE=POPSIZE; NVARS=NVARS; // number of varables equaton to solve MAX=00; N=N; // number of bts represent each varable for eample 3 local=false; t=0; Vc=new double[nvars]; Vn=new double[popsize+][nvars]; best=new double[nvars]; low=new double[nvars]; hgh=new double[nvars]; local=true; publc statc double gaussrandomdouble ort,double r) nt set=0; double gset=0; double fac,rsq,v,v; double aret=0; fset==0) do v=.0*math.random)-.0; v=.0*math.random)-.0; rsq=v*v+v*v; whlersq>=.0 rsq==0.0); fac=math.sqrt-.0*math.logrsq)/rsq); gset=v*fac; set=; aret=v*fac; else set=0; aret=gset; return aret/4.0*r+ort; publc vod setvcdouble low[],double hgh[],f_j f) //select orgnal gene randomly fornt =0;<NVARS;++) low[]=low[];hgh[]=hgh[];vc[]=hgh[]-low[])*math.random); publc vod setbestdouble g[],f_j f) //select orgnalgene andomly fornt =0;<NVARS;++) best[]=g[]; publc vod setvcdouble g[],f_j f) //select orgnal gene from other gene fornt =0;<NVARS;++) Vc[]=g[];

257 publc vod setvnf_j f) //select neghbourng genes smlar to the orgnal one fornt =0;<POPSIZE;++) fornt j=0;j<nvars;j++) Vn[][j]=Vc[j]; mutatef); publc vod mutatef_j f) nt ; double lbound,hbound; nt nmutatons; nt member; nt var; nmutatons=nt)double)popsize*nvars*n)); for=0;<nmutatons;++) member=nt)math.random)*popsize); var=nt)math.random)*nvars); //replace the old value wth a new mutated one //negborng factor double d=hgh[var]-vn[member][var]; double d=vn[member][var]-low[var]; double d=math.absmath.mnd,d)); double R=gaussrandomVn[member][var],d); Vn[member][var] = R; //System.out.prntln"R="+R+"d="+d+"d="+d+"d="+d+"var = "+var+" "+Vn[member][var]); fvn[member][var]>hgh[var]) Vn[member][var]=hgh[var]-d*Math.random)*0.5646; else f Vn[member][var]<low[var]) Vn[member][var]=low[var]+d*Math.random)*0.5646;; //after mutaton recalculate the functon value publc vod evaluatef_j f) nt mem; nt j; double []=new double[nvars]; formem=0;mem<popsize;mem++) //System.out.prntlnVn[mem].toStrng)); fgetftnessvn[mem],f) > getftnessvn[popsize],f)) //Vn[POPSIZE]=Vn[mem]; forj=0;j<nvars;j++) Vn[POPSIZE][j]=Vn[mem][j]; //end of forj=0.. //end of f //end of formem=0;.. publc vod tostrnggenotype P[]) nt mem; nt PN=P.length; formem=0;mem<pn;mem++) //lst them System.out.prntln"Vn["+mem+"]="+P[mem].toStrng)); publc double[] getbestdouble[] b,f_j f) double aa[]=new double[nvars+]; fornt =0; < NVARS;++) aa[]=b[]; aa[nvars]=getftnessb,f); return aa;

258 publc double getftnessdouble [],f_j f) return f.func); publc double[] calculatedouble low[],double up[],f_j f,boolean report) local=true; setvclow,up,f); //new random value t=0; do do setvnf); evaluatef); fgetftnessvn[popsize],f) > getftnessvc,f)) setvcvn[popsize], f); fgetftnessvn[popsize],f) > getftnessbest,f)) setbestvn[popsize],f); else local=false; whlelocal); freport) System.out.prntlnMatr.toStrnggetBestbest,f))); t++; whlet<max); return getbestbest,f); Program İterasyonlu tepe tırmanma double sınıfını ullanan versyon // terated hll clmbng // mport java.o.*; mport java.swng.joptonpane; class fa etends f_j //çözümü stenen fonsyon double funcdouble []) double ff=.5+[0]*math.sn4.0*math.pi*[0])+[]*math.sn0.0*math.pi*[]); return ff; //masmum test class fb etends f_j publc double funcdouble []) //çözümü stenen fonsyon // newton metodu mnmumaçalışıyor bu yüzden //- şarettanımladı. double ff; fa f=new fa); return -f.func); //masmum test class OPO3 publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=30; nt MAXGENS=400; nt NVARS=; fa fa=new fa); fb fb=new fb); IHC =new IHCPOPSIZE,NVARS,N,0); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-3.0;hgh[0]=.;

259 low[]=4.;hgh[]=5.8; double a[]=.calculatelow,hgh,fa,false); double 0[]=new double[nvars]; fornt =0;<NVARS;++) 0[]=a[]; Strng s="terasyonlu tepe tırmanma metodu sonucu =\n"+matr.tostrngta); Strng s="terasyonlu tepe tırmanma ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı 5.3- terasyonlu tepe tırmanma metodu çıtısı Üçüncü olara omşu notalar oluşturma çn Gene3 sınıfını ullanan br versyon veryoruz : 5.4 GLOBAL ÇÖZÜM METODLARI : TAVLAMA SİMULASYONU SIMULATED ANNEALING) Termodnam analojden elde edlen alternatf br yalaşım statstsel optmzasyona uygulanablr. Br metal ergme sıcalığının üzerne ısıtıldığında atomları yüse enerjl gelşgüzel hareete başlar. Sıcalı düşürüldüğünde atomların hareetler daha az enerjl hale dönüşür ve düşü enej sevyesne ayar. En sonunda atomlar mnmum enerj sevyesnde hal durumlarını oluşturaca rstal yapılar halnde endlern organze ederler. Bu proses tavlama olara blnr. Tavlanmış metaln enerj durumunu Bolzman dağılımı gösterr. e p e) = α ep ) T burada e>=0 enerj sevyes, T sıcalı, α=/t), boltzman sabt pe) olasılı dağılım fonsyonudur. Tavlama doğal br optmzasyon olayı olara abul edleblr ve bu olay blgsayar programlamasında talt edleblr. f,, 3,, n ) fonsyonunu mnmze etme problemn göz önüne alalım. Bu tür br model oluşturablme çn T değernn sun olara oluşturulan br sıcalı fatörü olduğunu düşünelm. T nn büyü br değernden optmzasyona başlıyablrztavlamanın başında metaln sıcalığı yüsetr). Başlangıç çn 0 =,, 3,, n ) 0 vetörünü alalım. Eğer vetöründe Δ tesadüf hareetn yapar se, bu Δ notası etrafında gauss değşm le dağılan br tasadüf dağılımla dağıldığını abul edeblrz 0 ve törüne omşu br vetörünü bununla = 0 + Δ yen vetörünü elde etmş< oluyoruz. Δf=f )-f 0 )). Gauss dağılımı Δ j p Δ j ) = ep j n T T, π eğer Δf<0 olursa bunun anlamı mnmuma yalaştı demetr ve yen vetör yen değer olara abul edlr. Eğer Δf>=0 se bu otomat olara red edlmes anlamına gelmez. Yne de abul edleblmes mümündür. Bunun çn Boltzman dağılımına baarız. Δf p Δf ) = ep T T abul ve red onusunda arar verme çn [0,/T)] aralığında sabt dağılımlı br tesadüf sayı z oluştururuz. Eğer pδf) > z se değer yen değer olara abul edlr. Değl se reddedlr, ve yen br doğrultu oluşturma çn yen br Δ hesaplanır. Zaman çnde T sıcalı fonsyonu azaltılır. İterasyonun başlangıcında T değer büyü olduğundan Δf>=0 ın abul olasılığı büyütür. T üçüldüçe arama Δf>=0 durumlarının abulünde daha tutucu hale gelr. Bu proses br algortma halnde yazarsa : Tavlama smulasyonu smulated annealng) algortması başla t=0

260 T sıcalığının değern oluştur. v c değşenn tesadüf olara seç v c çn fonsyonu hesapla whle whle v c notası omşu bölgesnde v n yen vetörünü seç f fv c ) < fv n ) then v c = v n yen notayı abul et) else f tesadüf sayı0-) < ep[fv n )-fv c ))/T] then v c = v n yen notayı fv c ) >= fv n ) olamasına rağmen abul et) untl çıış şartı) t=t+ untl btrme şartı) btr T fonsyonunun değerlendrlmes çeştl şellerde olablr. Braç örne verece olursa T0 T = + log + t) log t T = T 0 t log t) ) T0 T = + t program olara versyon gelştrlmştr. Brnc versyonda yen seçlen notanın br önce notanın omşu bölgesnde olmasını sağlama çn genet algortmada ullandığımız genotype sınıfından yararlandı bt yapısında bt tesadüf olara değştrd) Program 5.4- Tavlama smulasyonu smulated annealng) metodu genotype mettodu le) İmport java.o.*; mport java.tet.*; mport java.utl.locale; publc class smulatedannealng // Mamzng a functon //smulated annealng // a verson of smulated annealng statstcal approach double T; //Temperature genotype Vc; genotype Vn[]; genotype best; genotype oldbest; nt MAX;//number nt GLIMIT;//ara araya başarılı steplern sayısı boolean local; nt NVARS;//numberof varables nt N;//number of bt representaton for each varable double T0; double,0;//tme nde nt POPSIZE; nt BESTLIMIT; nt bestcounter; //f_j f; // functon to be avaluated by genetc algorthm publc smulatedannealngnt POPSIZE,nt NVARS,nt N,double T) T=T; T0=T; POPSIZE=POPSIZE; NVARS=NVARS; // number of varables equaton to solve MAX=0; N=N; // number of bts represent each varable for eample 3 Vn=new genotype[popsize+];

261 local=false; GLIMIT=0; BESTLIMIT=3; =00.0; 0=; bestcounter=0; publc vod setvcdouble low[],double up[],f_j f) //select orgnalgene andomly Vc=new genotypenvars,low,up,n,f); publc vod setbestgenotype g,f_j f) //select orgnalgene andomly best=new genotypeg,f); publc vod setoldbestf_j f) //select orgnalgene andomly oldbest=new genotypebest,f); publc vod setvcgenotype g,f_j f) //select orgnal gene from other gene Vc=new genotypeg,f); publc vod setvnf_j f) //select neghbourng genes smlar to the orgnal one fornt =0;<POPSIZE+;++) Vn[]=new genotypevc,f); mutatef); publc vod evaluatef_j f) nt mem; nt j; double []=new double[nvars]; formem=0;mem<popsize;mem++) //System.out.prntlnVn[mem].toStrng)); Vn[mem].setFtnessf); fvn[mem].getftness) > Vn[POPSIZE].getFtness)) Vn[POPSIZE]=Vn[mem]; forj=0;j<nvars;j++) Vn[POPSIZE].G[j].copyGeneVn[mem].G[j]); //end of forj=0.. //end of f //end of formem=0;.. publc vod setrfcfgenotype P[]) //calculates relatve and cumulatve ftness functons nt mem; nt PN=P.length; double sum=0.0; //total ftness of Vn formem=0;mem<pn;mem++) sum+=p[mem].ftness; //System.out.prntln"sum="+sum); //calculate relatve ftness of each genotype formem=0;mem<pn;mem++) P[mem].setRFtnesssum); //calculate cumulatve ftness P[0].setCFtnessP[0].getRFtness)); formem=;mem<pn;mem++) P[mem].setCFtnessP[mem-].getCFtness)+P[mem].getRFtness));

262 publc vod tostrnggenotype P[]) nt mem; nt PN=P.length; formem=0;mem<pn;mem++) //lst them System.out.prntln"Vn["+mem+"]="+P[mem].toStrng)); publc vod mutatef_j f) nt ; double lbound,hbound; nt nmutatons; nt member; nt var; nmutatons=nt)double)popsize*nvars*n)); for=0;<nmutatons;++) member=nt)math.random)*popsize); var=nt)math.random)*nvars); //replace the old value wth a new mutated one Vn[member].G[var].mutate); //after mutaton recalculate the functon value Vn[member].setFtnessf); publc double[] getbestgenotype b) double aa[]=new double[nvars+]; fornt =0; < NVARS;++) aa[]=b.getgene); aa[nvars]=b.getftness); return aa; publc double[] calculatedouble low[],double up[],f_j f,boolean report) nt good_swap=0; setvclow,up,f);// new set of random selecton n each tme setbestvc,f); do setoldbestf); do setvnf); evaluatef); fvn[popsize].getftness) > Vc.getFtness)) setvcvn[popsize], f); fvn[popsize].getftness) > best.getftness)) setbestvn[popsize],f); foldbest.getftness) == best.getftness)) bestcounter++; fbestcounter>bestlimit) brea; good_swap++; else fmath.random)<math.epvn[0].getftness)-vc.getftness))/t)) setvcvn[popsize],f); freport) System.out.prntlnMatr.toStrnggetBestbest))); whlegood_swap<glimit); +=.0; double l=math.log); T=T-Math.log0)/*l*l); setvclow,up,f); //new random value whle<max); return getbestbest);

263 Program 5.4- Tavlama smulasyonu çıtı programı metodu genotype mettodu le) // smulated annealng // mport java.o.*; mport java.swng.joptonpane; class fa etends f_j //çözümü stenen fonsyon double funcdouble []) double ff=.5+[0]*math.sn4.0*math.pi*[0])+[]*math.sn0.0*math.pi*[]); return ff; //masmum test class fb etends f_j publc double funcdouble []) //çözümü stenen fonsyon // newton metodu mnmumaçalışıyor bu yüzden //- şarettanımladı. double ff; fa f=new fa); return -f.func); //masmum test class OPO publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=; nt MAXGENS=400; nt NVARS=; fa fa=new fa); fb fb=new fb); smulatedannealng =new smulatedannealngpopsize,nvars,n,0); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-3.0;hgh[0]=.; low[]=4.;hgh[]=5.8; double a[]=.calculatelow,hgh,fa,false); double 0[]=new double[nvars]; fornt =0;<NVARS;++) 0[]=a[]; Strng s="smulated annealng tavlama smulasyonu)metodu sonucu =\n"+matr.tostrngta); Strng s="smulated annealng ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı 5.4- Tavlama smulasyonu çıtı programı metodu genotype mettodu le) İnc program versyonumuzda se double sayıları gauss tesadüf sayılarını ullanara omşu bölgeler oluşturdu. Program Tavlama smulasyonusmulated annealng) programı metodu double vetör le) mport java.o.*;

264 mport java.tet.*; mport java.utl.locale; publc class SA // Mamzng a functon //smulated annealng // a verson of smulated annealng statstcal approach double T; //Temperature double Vc[]; double Vn[][]; double best[]; nt MAX;//number nt GLIMIT;//ara araya başarılı steplern sayısı boolean local; nt NVARS;//numberof varables nt N;//number of bt representaton for each varable double T0; double,0;//tme nde nt POPSIZE; double low[]; double hgh[]; //f_j f; // functon to be avaluated by genetc algorthm publc SAnt POPSIZE,nt NVARS,nt N,double T) T=T; T0=T; POPSIZE=POPSIZE; NVARS=NVARS; // number of varables equaton to solve MAX=0; N=N; // number of bts represent each varable for eample 3 local=false; GLIMIT=30; =00.0; 0=; Vc=new double[nvars]; Vn=new double[popsize+][nvars]; best=new double[nvars]; low=new double[nvars]; hgh=new double[nvars]; publc statc double gaussrandomdouble ort,double r) nt set=0; double gset=0; double fac,rsq,v,v; double aret=0; fset==0) do v=.0*math.random)-.0; v=.0*math.random)-.0; rsq=v*v+v*v; whlersq>=.0 rsq==0.0); fac=math.sqrt-.0*math.logrsq)/rsq); gset=v*fac; set=; aret=v*fac; else set=0; aret=gset; return aret/4.0*r+ort; publc vod setvcdouble low[],double hgh[],f_j f) //select orgnal gene randomly fornt =0;<NVARS;++) low[]=low[];hgh[]=hgh[];vc[]=hgh[]-low[])*math.random);

265 publc vod setbestdouble g[],f_j f) fornt =0;<NVARS;++) best[]=g[]; publc vod setvcdouble g[],f_j f) //select orgnal gene from other gene fornt =0;<NVARS;++) Vc[]=g[]; publc vod setvnf_j f) //select neghbourng genes smlar to the orgnal one fornt =0;<POPSIZE+;++) fornt j=0;j<nvars;j++) Vn[][j]=Vc[]; mutatef); publc vod mutatef_j f) nt ; double lbound,hbound; nt nmutatons; nt member; nt var; nmutatons=nt)double)popsize*nvars*n)); for=0;<nmutatons;++) member=nt)math.random)*popsize); var=nt)math.random)*nvars); //replace the old value wth a new mutated one //negborng factor double d=hgh[var]-vn[member][var]; double d=vn[member][var]-low[var]; double d=math.mnd,d); double R=gaussrandomVn[member][var],d*Math.random)); Vn[member][var]= R; fvn[member][var]>hgh[var]) Vn[member][var]=hgh[var]-Math.random)*0.5646; else f Vn[member][var]<low[var]) Vn[member][var]=low[var]+Math.random)*0.5646;; //after mutaton recalculate the functon value publc vod evaluatef_j f) nt mem; nt j; double []=new double[nvars]; formem=0;mem<popsize;mem++) //System.out.prntlnVn[mem].toStrng)); fgetftnessvn[mem],f) > getftnessvn[popsize],f)) //Vn[POPSIZE]=Vn[mem]; forj=0;j<nvars;j++) Vn[POPSIZE][j]=Vn[mem][j]; //end of forj=0.. //end of f //end of formem=0;.. publc vod tostrnggenotype P[]) nt mem; nt PN=P.length; formem=0;mem<pn;mem++) //lst them

266 System.out.prntln"Vn["+mem+"]="+P[mem].toStrng)); publc double[] getbestdouble[] b,f_j f) double aa[]=new double[nvars+]; fornt =0; < NVARS;++) aa[]=b[]; aa[nvars]=getftnessb,f); return aa; publc double getftnessdouble [],f_j f) return f.func); publc double[] calculatedouble low[],double up[],f_j f,boolean report) nt good_swap=0; setvclow,up,f);// new set of random selecton n each tme setbestvc,f); do do setvnf); evaluatef); fgetftnessvn[popsize],f) > getftnessvc,f)) setvcvn[popsize], f); fgetftnessvn[popsize],f) > getftnessbest,f)) setbestvn[popsize],f); good_swap++; else fmath.random)<math.epgetftnessvn[0],f)-getftnessvc,f))/*t))) setvcvn[popsize],f); freport) System.out.prntlnMatr.toStrnggetBestbest,f))); whlegood_swap<glimit); +=.0; double l=math.log); T=T-Math.log0)/*l*l); setvclow,up,f); //new random value whle<max); return getbestbest,f); Program Tavlama smulasyonusmulated annealng) çıtı metodu double vetör le) // smulated annealng // mport java.o.*; mport java.swng.joptonpane; class fa etends f_j //çözümü stenen fonsyon double funcdouble []) double ff=.5+[0]*math.sn4.0*math.pi*[0])+[]*math.sn0.0*math.pi*[]); return ff; //masmum test class fb etends f_j publc double funcdouble []) //çözümü stenen fonsyon // newton metodu mnmumaçalışıyor bu yüzden //- şarettanımladı. double ff; fa f=new fa);

267 return -f.func); //masmum test class OPO publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=; nt MAXGENS=400; nt NVARS=; fa fa=new fa); fb fb=new fb); SA =new SAPOPSIZE,NVARS,N,0); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=-3.0;hgh[0]=.; low[]=4.;hgh[]=5.8; double a[]=.calculatelow,hgh,fa,false); double 0[]=new double[nvars]; fornt =0;<NVARS;++) 0[]=a[]; Strng s="smulated annealng tavlama smulasyonu)metodu sonucu =\n"+matr.tostrngta); Strng s="smulated annealng ve newton ço değşenl fonsyon optmzasyonun brlte ullanımı:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı Tavlama smulasyonusmulated annealng) programı metodu double vetör le) 6. SINIRLAMALI LİNEER OLMAYAN OPTİMİZASYON Bu notada braz daha genel br problem olan sınırlamalı optmzasyon problemn rdeleyelm. Sınırlamalı optmzasyon problem genel olara Mnmum f) Sınır şartları : p)=0 q) 0 olara tanımlanablr. Genelde bu tür sınır şartlarını denleme elyere yen br denlem oluştururuz. Brnc denlem p)=0 r 0 = 0 İçn P ) = P,,..) = p ) olara tanımlansın İnc denlem q) 0 çn Q ) = Q 0,,..) = mn 0, q ) r = 0 burada mn fonsyonu 0 le q ) n mnmum olanını seçer. Mnmumunu bulmamız gereen fonsyon F ) = f ) + μ [ P ) + Q )] şeln alır. Denlemde μ ceza atsayısı smn alır. İnc denlem q) 0 çn Q) denlemmz

268 r Q ) = Q 0,,..) = mn 0,[ q ) ε ] şelnde değştrere de ullanablrz. Burada ε >0 ço = 0 üçü br sayıdır. Bu üçü değşlle optmal değern tam sınıra gelmes durumunda orjnal fonsyonun çözümü reddetmesn engelleyc br et yaratmış oluruz. Örne problemde Fletcher-Reeves metodu ullanılmıştır, doğal olara sınırlandırılmış optmzasyon hesaplarında gördüğümüz tüm optmzasyon metodlarından yararlanablrz. Program 6.- Fletcher-Reeves optmzasyon metodu ullanılara Sınırlandırılmış optmzasyon İmport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; //SINIRLAMALI OPTİMİZASYON class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; double mu=00.0; ff=[0]-.0)*[0]-.0)+[]-.0)*[]-.0)+[]-3.0)*[]-3.0)+mu*p)+q)); return ff; publc double Pdouble []) // p)=0 sınırlama durumu nt n=.length; return [0]+[]-.0)*[0]+[]-.0); publc double Qdouble []) // p)=0 sınırlama durumu double eps=.0e-6; nt n=.length; double a=[]-[]-3.0-eps; double b=0; fa<0) b=a*a; return b; publc class OPOH publc statc double VT_Vdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double normdouble v[]) // vector norm

269 double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal); publc statc double turevf_j f,double [],nt denlem_ref,nt _ref) // // verlen fonsyonun nc türevlernn matrs // fonsyon f n denlem_ref sayılı fonsyonununsayılar 0 dan başlar) // [_ref] değşenne göre türev sayılar 0 dan başlar) // df_denlem_ref)/d ref // bu metod newtond metodu çnde ullanılma çndr. double h0= ; nt,m; nt n=7; double f[]; f=new double[.length]; double f[]; f=new double[.length]; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,); for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]* ; f=dff,); f=dff,); T[][0]= f[denlem_ref] - f[denlem_ref])/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length

270 // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=turevf,,); return a; publc statc double turevf_j f,double [],nt _ref) // df/dj double h0= ; nt,m; nt n=7; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) //h[]=h0*math.powr,); h0/=.0; h[]=h0; //frst turev dfference formula) for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]; T[][0]=f.func)-f.func))/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] turevf_j f_derv,double []) // df/dj j=0...length // Ths method calculates turev of a functon wth more than one ndependent varable. // Accuracy of method can be adjusted by changng varables h0 and n // functon nput should be n the form gven n abstract class // f_j,j=0...length = df/d_ref) double a[]=new double[.length];

271 fornt _ref=0;_ref<.length;_ref++) a[_ref]=turevf_derv,,_ref); return a; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double []) // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r);

272 else f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-)); else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum)

273 dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc); aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; // 4. fletcher Reeves metodu // publc statc double[] fletcher_reeves f_j f,double []) nt,j,,jj,; nt nma=500; double gamma=.0; double tolerance=.0e-4; nt n=.length; double alpha; double g[]=new double[n]; double ge[]=new double[n]; double d[]=new double[n]; double beta; double alpha_d; double Q[]=new double[n];

274 nt nn=5; =0; j=0;=0; whle j++ < nma && gamma > tolerance ) g=turevf,); gamma=normg); f<) for=0;<n;++)d[]=-g[];;ge=g; else beta=vt_vg)/vt_vge); for=0;<n;++)q[]=beta*d[];; for=0;<n;++)d[]=-g[]+q[]; alpha=lnmnf,,d); for=0;<n;++)[]+=alpha*d[]; j++;++; f>=nn) =0; fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); f f_=new f); double [] r= fletcher_reevesf_,0); s=" çözüm set : \n"+matr.tostrngtr); Strng s="fletcher-reeves ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.out.prntln"y="+f_.funcr)); System.et0); Çıtı 6.- f)= 0 -) + -) + 3-3) fonsyonunun sınır şartı olmadan optmzasyonu, y= e-3 Çıtı 6.- f)= 0 -) + -) + 3-3) fonsyonunun p)= + -=0 sınır şartıyla optmzasyonu, y=

275 Çıtı 6.-3 f)= 0 -) + -) + 3-3) fonsyonunun q)= sınır şartıyla optmzasyonu, y= Çıtı 6.-4 f)= 0 -) + -) + 3-3) fonsyonunun p)= + -=0 ve q)= sınır şartıyla optmzasyonu, y= Şmd de aynı problem genet algortmalara uyarlanmış br versyon olara verelm. Program 6.- Genet algortma ullanara optmzasyon metodu ullanılara Sınırlandırılmış optmzasyon mport java.o.*; class fa etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff; double mu=0.0; double mu=0.0; ff=[0]-.0)*[0]-.0)+[]-.0)*[]-.0)+[]-3.0)*[]-3.0)+mu*p)+mu*q); return 400-ff; publc double Pdouble []) // p)=0 sınırlama durumu nt n=.length; return [0]+[]-.0)*[0]+[]-.0); publc double Qdouble []) // p)=0 sınırlama durumu

276 double eps=.0e-6; nt n=.length; double a=[]-[]-3.0-eps; double b=0; fa<0) b=a*a; return b; class OPO7H publc statc vod manstrng args[]) throws IOEcepton nt N=8; nt POPSIZE=00; nt MAXGENS=00; nt NVARS=3; double PXOVER=0.3; double PMUTATION=0.0; fa f=new fa); Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=0.0;hgh[0]=0.0; low[]=0.0;hgh[]=0.0; low[]=0.0;hgh[]=0.0;.setpopulatonlow,hgh,f); System.out.prntln"best=\n"+Matr.toStrngT.calculatef,false))); Çıtı 6.-5 f)= 0 -) + -) + 3-3) fonsyonunun sınır şartı olmadan genet algortmalar ullanılara optmzasyonu, Capture Output > "C:\co\java\bn\java.ee" OPO7H best= > Termnated wth et code 0. Çıtı 6.-6 f)= 0 -) + -) + 3-3) fonsyonunun p)= + -=0 sınır şartıyla genet algortmalar ullanılara optmzasyonu, Capture Output > "C:\co\java\bn\java.ee" OPO7H best= > Termnated wth et code 0. Çıtı 6.-7 f)= 0 -) + -) + 3-3) fonsyonunun q)= sınır şartıyla genet algortmalar ullanılara optmzasyonu, Capture Output > "C:\co\java\bn\java.ee" OPO7H best= > Termnated wth et code 0.

277 Çıtı 6.-8 f)= 0 -) + -) + 3-3) fonsyonunun p)= + -=0 ve q)= sınır şartıyla genet algortmalar ullanılara optmzasyonu Capture Output > "C:\co\java\bn\java.ee" OPO7H best= > Termnated wth et code 0. ÖDEV PROBLEM SETİ. PROBLEM y ) z, y) = y e fonsyonunun 4 4 ve 4 y 4 notaları arasında mnmum değern bulunuz Yöntem a) terasyonlu tepe tırmanma b) tavlama smulasyonu. sn + y + ε ) z, y) = + y + ε fonsyonunun 0 0 ve 0 y 0 notaları arasında ε=e- çn değern bulunuz Yöntem a) terasyonlu tepe tırmanma b) tavlama smulasyonu 7. BİRDEN FAZLA BOYUTLU FONKSİYONLARA EĞRI UYDURMA LINEER OLMIYAN FONKSİYONLARA EĞRI UYDURMA 7. GENEL EN KÜÇÜK KARELER METODU İLE BİRDEN FAZLA DEĞİŞKENLİ FONKSİYONLARIN EĞRİ UYDURMASI Ço değşenl br fonsyonu en üçü areler metoduna uydurma temel olara te değşenl fonsyonu uydurma le aynıdır, sadece ullanılan fonsyonun tanımını ço boyutlu olara yapmamız gerer. m ) 0 n n j j 0 n n j= 0 m) f,,...,, ) = a φ,,...,, j nc derece polnomu verlmş olsun. Bu polnoma 0,,,, n,f, =0...n versn uydurma styoruz. Bu ver set çn en uygun a j m) değerlern bulma styoruz. Bunun çn

278 n m m) m) = m) H a 0,..., am ) w 0,,..., n, n ) f a j φ j 0,,..., n, n ) fonsyonunun mnmum değern = j= 0 bulmamız gerer. Fonsyonda w,,..., n, ) ağırlı fonsyonu adını alır ve 0 n w 0,,..., n, n ) 0 =,..., n olmalıdır. Fonsyonun mnmum notası türevnn 0 a eşt olduğu nota olacatır. m) H a0,..., a m) a m) m ) n = w,,...,, ) f n m 0 n = j= 0 a m j ) φ,,..., j 0 n, ) φ,,..., n 0 n, ) = 0 n = 0,..., m n m) [ a ] = w,,...,, ) φ,,...,, ) f 0,.., m m w,,..., n, n ) j,,..., n, n ),,..., n, n ) 0 φ 0 φ 0 j 0 n n 0 n n = j= 0 = Ağırlı fonsyonunu olara alalım. Bu durumda temel denlem m n m j,,..., n, n ),,..., n, n ) ) a j,,..., n, n ) f φ 0 φ 0 = φ 0 = 0,.., j= 0 = [ ] m şeln alır. Örne genel fonsyon olara boyutlu 4üncü derecen polnom denlemn alalım f,y) = a 0 + a + a y + a 3 + a 4 y + a 5 y + a a 7 y 3 + a 8 y + a 9 y + a a y 4 + a y + a 3 3 y + a 4 y Problem 7.- Genel en üçü areler metodu le nc derece polnom eğr uydurma İmport java.o.*; mport java.utl.*; mport java.swng.*; mport java.awt.event.*; mport vsad.*; mport vsad.java3d.dsplayimplj3d; mport vsad.javad.dsplayimpljd; mport java.rm.remoteecepton; //yüzey eğr uydurma //f,y)=a0+a*+a*y+a3*^+a4*y^+a5*y+a6*^3+a7*y^3+a8*^y // +a9*y^+a0*^4+a*y^4+a*^y^+a3^3y+a4*y^3 abstract class f_r abstract double funcdouble [],nt equaton_ref); class fa etends f_r double funcdouble [],nt ) //genel br yüzey model double =0.0; //densty functon f==0) =.0; else f ==) =[0]; else f ==) =[]; else f ==3) =[0]*[0]; else f ==4) =[]*[]; else f ==5) =[0]*[]; else f ==6) =[0]*[0]*[0]; else f ==7) =[]*[]*[]; else f ==8) =[0]*[0]*[]; else f ==9) =[0]*[]*[]; else f ==0)=[0]*[0]*[0]*[0]; else f ==)=[]*[]*[]*[]; else f ==)=[0]*[0]*[]*[]; else f ==3)=[0]*[0]*[0]*[]; else f ==4)=[0]*[]*[]*[]; return ; class SCOG5 // Genel en üçü areler metodu en ucu areler metodu publc statc double[][] Transposedouble [][] left)

279 //transpose matr f A=a,j) TransposeA)=aj,) nt,j; nt n=left.length; nt m=left[0].length; double b[][]; b=new double[m][n]; for=0;<n;++) forj=0;j<m;j++) b[j][]=left[][j]; return b; publc statc double[] pvotlugaussdouble a[][],double b[]) //ısm pvotlu gauss eleme yöntem nt n=b.length; double []=new double[n]; double carpan=0; double toplam=0; double buyu; double dummy=0; //gauss eleme nt,j,,p,,jj; for=0;<n-);++) //pvotlama p=; buyu=math.absa[][]); for=+;<n;++) dummy=math.absa[][]); fdummy > buyu) buyu=dummy;p=; fp!=) forjj=;jj<n;jj++) dummy=a[p][jj]; a[p][jj]=a[][jj]; a[][jj]=dummy; dummy=b[p]; b[p]=b[]; b[]=dummy; //gauss elemey çözme for=+;<n;++) carpan=a[][]/a[][]; a[][]=0; forj=+;j<n;j++) a[][j]-=carpan*a[][j]; b[] =b[] -carpan*b[]; //gerye doğru yerne oyma [n-]=b[n-]/a[n-][n-]; for=n-;>=0;--) toplam=0; forj=+;j<n;j++) toplam+=a[][j]*[j]; []=b[]-toplam)/a[][]; return ; publc statc double[] EKKgeneldouble c[][],nt n) nt n=c.length; nt n=c[0].length-; System.out.prntln"n="+n+"n="+n); double [][]=new double[n][n]; double y[]=new double[n]; fornt =0;<n;++)fornt j=0;j<n;j++)[][j]=c[][j];;y[]=c[][n]; return EKKgenel,y,n); publc statc double[] EKKgeneldouble [][],double y[],nt n) // n boyutlu yüzey eğr uydurma // yüzey EKK atsayılarını hesaplar fa f=new fa); nt l=.length;

280 nt,j,; nt np=n+; double A[][]; A=new double[np][np]; double B[]; B=new double[np]; double X[]; X=new double[np]; for=0;<n+;++) B[]=0; forj=0;j<np;j++) A[][j]=0.0; for=0;<l;++) A[][j]+=f.func[],)*f.func[],j); for=0;<l;++) B[]+= f.func[],)*y[]; //System.out.prntln"A = \n"+matr.tostrnga)); //System.out.prntln"B = \n"+matr.tostrngtb)); X=pvotlugaussA,B); //X=B/A; double ma=0; for=0;<n+;++) fmath.absx[]) > ma) ma = Math.absX[]); for=0;<n+;++) fmath.absx[]/ma) > 0) && Math.absX[]/ma) <.0e-00)) X[]=0; Tet.prntTX); return X; publc statc double funcekkgeneldouble e[],double []) // te br nota çn ço boyutlu eğr değer hesaplar fa f=new fa); nt n=e.length; double ff=0; fn!=0.0) fornt =n-;>=0;--) ff+=e[]*f.func,); return ff; publc statc double[] funcekkgeneldouble e[],double [][]) // te br nota çn ço boyutlu eğr değer hesaplar fa f=new fa); nt n=e.length; double ff[]=new double[.length]; fornt =0;<.length;++) fn!=0.0) fornt =n-;>=0;--) ff[]+=e[]*f.func[],); return ff; publc statc double[][] ctdouble c[][],nt polnomatsays,nt aradegersays) nt n=c.length; nt n=c[0].length-; double [][]=new double[n][n]; double y[]=new double[n]; fornt =0;<n;++)fornt j=0;j<n;j++)[][j]=c[][j];;y[]=c[][n]; return ct,y,polnomatsays,aradegersays); publc statc double[][] ctdouble [][],double y[],nt polnomatsays,nt aradegersays) nt n=.length; nt n=[0].length;

281 nt nn=n-)*aradegersays+)+; double E[]=EKKgenel,y,polnomatsays); double [][]=new double[nn][n]; double c[][]=new double[nn][n+]; double yy[]=new double[nn]; double d[]=new double[n]; nt =0; nt,j,w; for=0;<n-);++) forw=0;w<n;w++)[][w]=[][w];d[w]=[+][w]-[][w])/double)aradegersays+.0);;++; forj=0;j<aradegersays;j++) forw=0;w<n;w++)[][w]=[-][w]+d[w];;++; forw=0;w<n;w++)[][w]=[][w]; yy=funcekkgenele,); for=0;<.length;++) forw=0;w<n;w++) c[][w]=[][w]; c[][n]=yy[]; return c; publc statc double funcekkgeneldouble e[],double,double y) // yüzey uydurma fonsyonu // te br nota çn boyutlu eğr değer hesaplar double []=new double[]; [0]=; []=y; return funcekkgenele,); publc statc double hatadouble c[][],double e[]) nt n=c.length; nt n=c[0].length-; System.out.prntln"n="+n+"n="+n); double [][]=new double[n][n]; double y[]=new double[n]; fornt =0;<n;++)fornt j=0;j<n;j++)[][j]=c[][j];;y[]=c[][n]; return hata,y,e); publc statc double hatadouble [][],double y[],double e[]) //calculates absolute square root error of a least square approach double n=.length; nt ; double total=0; for=0;<n;++) total+=y[]-funcekkgenele,[]))*y[]-funcekkgenele,[])); total=math.sqrttotal); return total; publc statc vod manstrng[] args) throws RemoteEcepton, VsADEcepton Strng s=joptonpane.showinputdalog"dosya adı : "); double c[][]=tet.readdoubles); Tet.prntc); double b[]=ekkgenelc,0); double [][]=ctc,0,5); System.out.prntln"ct \n"+matr.tostrng)); System.out.prntln"hata \n"+matr.tostrnghatac,b))); Grd 7.- Problem 7.-) Genel en üçü areler metodu le nc derece polnom eğr uydurma

282 Örne vermz atsayılar matrs olaca şelde oluşturulmuştur. Bu verye eğr uydurduğumuzda : Çıtı 7.- Problem 7.-) Genel en üçü areler metodu le nc derece polnom eğr uydurma Çözüm atsayılar vetörü Çıtı 7.- Problem 7.-) Genel en üçü areler metodu le nc derece polnom eğr uydurma Çözüm atsayılar vetörü ulanılara uydurulmuş eğr

283

284 LİNEER OLMAYAN KATSAYILI BİR VE ÇOK BOYUTLU BAĞIMSIZ DEĞİŞKENLİ FONKSİYONLARA EĞRİ UYDURMA Lneer olmayan atsayıları olan f;a) fonsyonuna y = f a; ) genel fonsyonu verldğnde, bu polnoma,f, =0...n versn uydurma styoruz. Burada a atsayıları fonsyonda lneer olmayan br formda yer almatadır. En üçü areler hata fonsyonunu en genel formunda H a m) m) [ y f a,..., a,,,..., ] n m) m),..., a ) = w,,..., ) ) 0 m 0 0 m 0 = şelnde yazablrz. Anca bu durumda lneer sstemlerde olduğu gb atsayılardan bağımsız br türev denlem oluşturmamız mümün olamaz. Programmz hata denlemnn mnmzasyonu olduğu çn bu denlem optmzasyon onusunda gördüğümüz metodları ullanara mnmze edeblrz. Örne programda Nelder-Mead mnmzasyon metodu ullanılmıştır. Önce fonsyonlarımızı br boyutlu bağımsız değşenl) olara rdeleyelm. Örnete ullandığımız ver : a.tt) Eğr uydurma stedğz lneer olmıyan fonsyon : double p=a[0]*.0-math.ep-a[]*)); şelndedr. burada a atsayılar de bağımsız değşendr. Program 7.- Lneer olmayan eğr uydurma örneğ, Nelder-Mead Smples metodu mport java.o.*; mport java.swng.*; abstract class f_j // sngle functon mult ndependent varable // a sngle value s returned // eample f=[0]+sn[]) // func) returns the value of f abstract publc double funcdouble []);

285 class yy etends f_j double []; // ndependent varable data set double y[]; //dependent varable data set double a[]; //ft functon coeffcent set nt nn; publc yystrng flename,double a[]) //read the data to curveft //get the data fle and ntal ft coeffcent when class s defned =new double[500]; y=new double[500]; nt n=a.length; a=new double[n]; setaa); nt =-; try BufferedReader fn=new BufferedReadernew FleReaderflename)); try whlefn!= null) ++; []=Tet.readDoublefn); y[]=tet.readdoublefn); catcheofecepton e_eof) System.out.prntln"end of fle"); catchioecepton e_o) System.out.prntln"dosya bulunamadı"); nn=; a=a; publc vod setadouble a[]) //assgn new ft coeffcent set fornt =0;<nn;++) a[]=a[]; publc double[] geta) // return ft coeffcent set return a; double Psdouble,double a[]) //sample specfc functon // saturaton pressure as a functon of saturaton temperature a=a; double p=a[0]*.0-math.ep-a[]*)); return p; //Pa publc double funcdouble a[]) double ff=0; double w; double yy; fornt =0;<nn;++) w=ps[],a); yy=y[]; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); w-=yy; ff+=w*w; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); return ff; class zz etends yy publc zzstrng flename,double a[]) superflename,a); publc double funcdouble a[])

286 return -super.funca); publc class SCOH //. Nelder ve Mead metodu smples arama metodu) // publc statc double[] nelderf_j fnelder,double a[],double da[],nt materaton,double tolerance,nt prntlst) double [][]=new double[a.length+][a.length]; fornt =0;<.length;++) fornt j=0;j<[0].length;j++) f==j)[][j]=a[j]+da[j]; else [][j]=a[j]; // Nelder mead ço boyutlu smple mnmzasyon metodu // Nelder & Mead 965 Computer J, v.7, // Grş değşenler tanımlaması // fnelder : abstract ço boyutlu fonsyon f) // : for n boyutlu n+ smle notasını çerr bağımsız değşen set // materaton : mamum terasyon sayısı // tolerance : nt NDIMS =.length-; nt NPTS =.length; nt FUNC = NDIMS; nt ncalls = 0; ////// başlangıç smplen oluştur ////////////////// double p[][]=new double[npts][npts]; // [row][col] = [whchv][coord,func] double z[]=new double[ndims]; double best = E99; //////////////// l fonsyon değerlern hesapla //////////////// for nt =0; <NPTS; ++) for nt j=0; j<ndims; j++) p[][j] = [][j]; p[][ndims] = fnelder.funcp[]); nt ter=0; for ter=; ter<materaton; ter++) /////////// lo, nh, h notalarını tanımla ////////////// nt lo=0, h=0, nh = -; // - means mssng double flo = p[0][func]; double fh = flo; double pavg,sterr; for nt =; <NPTS; ++) f p[][func] < flo) flo=p[][func]; lo=; f p[][func] > fh) fh=p[][func]; h=; double fnh = flo; nh = lo; for nt =0; <NPTS; ++) f!= h) && p[][func] > fnh)) fnh=p[][func]; nh=; ////////// çıış rter ////////////// f ter % 4*NDIMS) == 0) //y nn standart hata rter set değernden tolerance) // üçü olmalı // ortalama değer hesapla en büyü değer de dahl olma üzere) pavg=0; fornt =0;<NPTS;++) pavg+=p[][func]; pavg/=npts; double tot=0; fprntlst!=0) System.out.prntter); for nt j=0; j<=ndims; j++) System.out.prntp[lo][j]+" "); System.out.prntln"");

287 fornt =0;<NPTS;++) tot=p[][func]-pavg)*p[][func]-pavg); sterr=math.sqrttot/npts); //fsterr < tolerance) for nt j=0; j<ndims; j++) z[j]=p[lo][j]; //brea; best = p[lo][func]; ///// ave[] vetorünü en büyü değer harç tutara hesapla ////// double ave[] = new double[ndims]; for nt j=0; j<ndims; j++) ave[j] = 0; for nt =0; <NPTS; ++) f!= h) for nt j=0; j<ndims; j++) ave[j] += p[][j]; for nt j=0; j<ndims; j++) ave[j] /= NPTS-); ///////// yansıt //////////////// double r[] = new double[ndims]; for nt j=0; j<ndims; j++) r[j] = *ave[j] - p[h][j]; double fr = fnelder.funcr); f flo <= fr) && fr < fnh)) // n zone: accept for nt j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; f fr < flo) //// genşlet, else abul et double e[] = new double[ndims]; for nt j=0; j<ndims; j++) e[j] = 3*ave[j] - *p[h][j]; double fe = fnelder.funce); f fe < fr) for nt j=0; j<ndims; j++) p[h][j] = e[j]; p[h][func] = fe; contnue; else for nt j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; ///////////// daralt: f fr < fh) double c[] = new double[ndims]; for nt j=0; j<ndims; j++) c[j] =.5*ave[j] - 0.5*p[h][j]; double fc = fnelder.funcc); f fc <= fr) for nt j=0; j<ndims; j++) p[h][j] = c[j]; p[h][func] = fc; contnue;

288 else /////// daralt for nt =0; <NPTS; ++) f!= lo) for nt j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); contnue; f fr >= fh) /// double cc[] = new double[ndims]; for nt j=0; j<ndims; j++) cc[j] = 0.5*ave[j] + 0.5*p[h][j]; double fcc = fnelder.funccc); f fcc < fh) for nt j=0; j<ndims; j++) p[h][j] = cc[j]; p[h][func] = fcc; contnue; else ///////// for nt =0; <NPTS; ++) f!= lo) for nt j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); return z; publc statc double[] nelderf_j fnelder,double a[],double da[],double tolerance) return nelderfnelder,a,da,300,tolerance,0); publc statc double[] nelderf_j fnelder,double a[],double da[]) return nelderfnelder,a,da,500,.0e-0,0); publc statc vod manstrng args[]) throws IOEcepton //Strng n_name=joptonpane.showinputdalog" ver dosyasının smngrnz : "); Strng n_name="a.tt"; double a[]; a=new double[]; a[0] = 30.0; a[] =.0; double da[]; da=new double[]; da[0] =.0; da[] =0.; yy f=new yyn_name,a); nt =0; fordouble t=-00;t<0;t+=) System.out.prntln"t="+t+"t="+f.[]+"P="+f.y[]+"P="+f.Pst,a));++;; System.out.prntln"f grş = "+f.funca)); double p[]=nelderf,a,da,000,e-0,); Strng s=" optmzasyon değer : \n"+matr.tostrngtp)+"\n"; s+="orjnal fonsyon değer = "+f.funca)+"\n"; s+="fonsyon değer = "+f.funcp); Strng s="nelder-mead en üçü areler lneer olmyan eğr uydurma : "; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE);

289 Çıtı 7.- Lneer olmayan eğr uydurma örneğ Aynı problem değş yöntemler ullanara ta çözeblrz, Örneğn Davdon-Fletcher-Powell yöntemn ullanırsa: Program 7.- Lneer olmayan eğr uydurma, Davdon-Fletcher-Powell metodu // OPOF Davdon-Fletcher-Powell optmzasyonu // Metod Referansı : Numercal Analyss, 8th edton Rchard L. Burden, J. Douglas Fares 3 // sayfa 67 mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; mport java.o.*; class fa etends f_j double []; // ndependent varable data set double y[]; //dependent varable data set double a[]; //ft functon coeffcent set nt nn; publc fastrng flename,double a[]) //read the data to curveft //get the data fle and ntal ft coeffcent when class s defned =new double[500]; y=new double[500]; nt n=a.length; a=new double[n]; setaa); nt =-; try BufferedReader fn=new BufferedReadernew FleReaderflename)); try whlefn!= null) ++; []=Tet.readDoublefn); y[]=tet.readdoublefn); catcheofecepton e_eof) System.out.prntln"end of fle"); catchioecepton e_o) System.out.prntln"dosya bulunamadı"); nn=; a=a; publc vod setadouble a[]) //assgn new ft coeffcent set fornt =0;<nn;++) a[]=a[]; publc double[] geta) // return ft coeffcent set return a; double Psdouble,double a[])

290 //sample specfc functon // saturaton pressure as a functon of saturaton temperature a=a; double p=a[0]*.0-math.ep-a[]*)); //p=math.pow0.0,p); return p; //Pa publc double funcdouble a[]) double ff=0; double w; double yy; fornt =0;<nn;++) w=ps[],a); yy=y[]; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); w-=yy; ff+=w*w; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); return ff; publc class OPOF publc statc double VT_Vdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*left[]; return tot; publc statc double[][] V_VTdouble [] left) //multplys a vector transpose wth a vector nt n=left.length; double aa[][]=new double[n][n]; fornt =0;<n;++) fornt j=0;j<n;j++) aa[][j]=left[]*left[j]; return aa; publc statc double VT_Xdouble [] left,double [] rght) //multplys a vector transpose wth a vector nt n=left.length; double tot=0; fornt =0;<n;++) tot+=left[]*rght[]; return tot; publc statc double normdouble v[]) // vector norm double total=0;; fornt =0;<v.length;++) total+=v[]*v[]; return Math.sqrttotal);

291 publc statc double turevf_j f,double [],nt denlem_ref,nt _ref) // // verlen fonsyonun nc türevlernn matrs // fonsyon f n denlem_ref sayılı fonsyonununsayılar 0 dan başlar) // [_ref] değşenne göre türev sayılar 0 dan başlar) // df_denlem_ref)/d ref // bu metod newtond metodu çnde ullanılma çndr. double h0= ; nt,m; nt n=7; double f[]; f=new double[.length]; double f[]; f=new double[.length]; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; //vector<double> hn,0); for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) h[]=h0*math.powr,); for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]* ; f=dff,); f=dff,); T[][0]= f[denlem_ref] - f[denlem_ref])/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. //

292 double a[]=new double[.length]; fornt =0;<.length;++) a[]=turevf,,); return a; publc statc double turevf_j f,double [],nt _ref) // df/dj double h0= ; nt,m; nt n=7; double []; =new double[.length]; double []; =new double[.length]; for=0;<.length;++) []=[]; []=[]; //turev of a smple functon double T[][]; T=new double[n][n]; double h[]; h=new double[n]; for=0;<n;++) h[]=0; fornt j=0;j<n;j++) T[][j]=0; h[0]=h0; double r=0.5; for =;<n;++) //h[]=h0*math.powr,); h0/=.0; h[]=h0; //frst turev dfference formula) for=0;<n;++) [_ref]+=h[]; [_ref]-=h[]; T[][0]=f.func)-f.func))/.0*h[]); [_ref]=[_ref]; [_ref]=[_ref]; form=;m<n;m++) for=0;<n-m;++) T[][m]=h[]*h[]*T[+][m-] - h[+m]*h[+m]*t[][m-])/h[]*h[] - h[+m]*h[+m]); double =T[0][n-]; return ; publc statc double[] turevf_j f_derv,double []) // df/dj j=0...length // Ths method calculates turev of a functon wth more than one ndependent varable. // Accuracy of method can be adjusted by changng varables h0 and n // functon nput should be n the form gven n abstract class // f_j,j=0...length = df/d_ref) double a[]=new double[.length]; fornt _ref=0;_ref<.length;_ref++) a[_ref]=turevf_derv,,_ref); return a;

293 publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double lnmnf_j f,double p[],double []) double tol=.0e-4; nt n=p.length; double pcom[],com[]; nt j; double,mn,b,a; fdm f=new fdmf,p,); a=0.0; =.0; b=.0; double aa[]=mnbraf,a,,b); a=aa[0]; =aa[]; b=aa[]; mn=brentf,a,,b,tol); return mn; publc statc double[][] lnmnterf_j f,double p[],double []) // yen terasyon notasını verr nt n=p.length; double mn=lnmnf,p,); double aa[][]=new double[][n]; for nt j=0;j<n;j++) [j] *= mn; p[j] += [j]; aa[0][j]=p[j]; aa[][j]=[j]; return aa; publc statc double[] brentff_ f,double a,double b,double c,double tol) // a,b,c üç adet tahmn notası ba le c arasında yer almalıdır) // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double CGOLD=3.0-Math.sqrt5))/.0; //altın oran double ZEPS=.0e-0; double mn; double aa[]=new double[]; // SHFTdouble a,double b,double c,d) a)=b);b)=c);c)=d); nt ter; double a,b,d,etemp,fu,fv,fw,f,p,q,r,tol,tol,u,v,w,,m; double e=0.0; d=0.0; a=a < c)? a : c); b=a > c)? a : c); =w=v=b; fw=fv=f=f.func); for ter=;ter<=itmax;ter++) m=0.5*a+b); tol=.0*tol=tol*math.abs)+zeps); f Math.abs-m) <= tol-0.5*b-a))) mn=; aa[0]=mn; aa[]=f; return aa; f Math.abse) > tol) r=-w)*f-fv); q=-v)*f-fw); p=-v)*q--w)*r; q=.0*q-r); f q > 0.0) p = -p; q=math.absq); etemp=e; e=d; f Math.absp) >= Math.abs0.5*q*etemp) p <= q*a-) p >= q*b-)) d=cgold*e= >= m? a- : b-));

294 else else d=p/q; u=+d; f u-a < tol b-u < tol) d=signtol,m-); d=cgold*e= >= m? a- : b-)); u=math.absd) >= tol? +d : +SIGNtol,d)); fu=f.funcu); f fu <= f) f u >= ) a=; else b=; v=w;w=;=u; fv=fw;fw=f;f=fu; else f u < ) a=u; else b=u; f fu <= fw w == ) v=w; w=u; fv=fw; fw=fu; else f fu <= fv v == v == w) v=u; fv=fu; System.out.prntln"BRENT metodunda masmum terasyon sayısı aşıldı"); mn=; //mnumum değer a[0] le fonsyon değer a[] le gerdöndürülmetedr aa[0]=mn; aa[]=f; return aa; publc statc double[] mnbraf_ f,double a,double d) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçlen uzalı return mnbraf,a,a-d),a+d)); publc statc double[] mnbraf_ f,double a) // d nc derece polnom çn gerel e notayı oluşturma çn // ana notadan seçln uzalı return mnbraf,a,a-0.),a+0.)); publc statc double[] mnbraf_ f,double a,double b,double c) // a,b,c üç adet tahmn notası verldğnde çnde mnmum bulunan a,b,c üç adetnotayı bze arama // sonucu bulur // f : fonsyon f_ abstract sınıfında tanımlanmış) // tol tolerans nt ITMAX=00; double mn; double GOLD=Math.sqrt5.0)+.0)/.0;; double GLIMIT=00.0; double TINY=.0e-0; double fa,fb,fc; fa=0; fb=0; fc=0; double ulm,u,r,q,fu,dum; double aa[]=new double[3]; fa=f.funca); fb=f.funcb); f fb > fa) //SHFTdum,*a,*b,dum) dum=a;a=b;b=dum; //SHFTdum,*fb,*fa,dum) dum=fb;fb=fa;fa=dum; c=b)+gold*b-a); fc=f.funcc);

295 aa[0]=a; aa[]=b; aa[]=c; whle fb > fc) r=b-a)*fb-fc); q=b-c)*fb-fa); u=b)-b-c)*q-b-a)*r)/.0*signmaxmath.absq-r),tiny),q-r)); ulm=b)+glimit*c-b); f b-u)*u-c) > 0.0) fu=f.funcu); f fu < fc) a=b; b=u; fa=fb; fb=fu; return aa; else f fu > fb) c=u; fc=fu; return aa; u=c)+gold*c-b); fu=f.funcu); else f c-u)*u-ulm) > 0.0) fu=f.funcu); f fu < fc) //SHFTb,c,u,c+GOLD*c-b)) b=c;c=u;u=c+gold*c-b); //SHFTfb,fc,fu,f.funcu)) fb=fc;fc=fu;fu=f.funcu); else f u-ulm)*ulm-c) >= 0.0) u=ulm; fu=f.funcu); else u=c+gold*c-b); fu=f.funcu); //SHFTa,b,c,u) a=b;b=c;c=u; //SHFTfa,fb,fc,fu) fa=fb;fb=fc;fc=fu; aa[0]=a; aa[]=b; aa[]=c; return aa; publc statc double brentf_ f,double a,double b,double c,double tol) double aa[]=brentff,a,b,c,tol); return aa[0]; publc statc double[][] Int n) //unt matr double b[][]; b=new double[n][n]; fornt =0;<n;++) b[][]=.0; return b; // Davdon - Fletcher-Powell metodu // publc statc double[] davdon_fletcher_powell f_j f,double []) nt,j,; nt nma=500; double gamma=.0; double tolerance=.0e- ; nt n=.length; double alpha; double d[]=new double[n]; double g[] =new double[n];

296 double ge[]=new double[n]; double dg[]=new double[n]; double d[] =new double[n]; double r[] =new double[n]; double rdg,ddg; double beta; double alpha_d; double Q[][]=In); double Q[][]=new double[n][n]; double Q[][]=new double[n][n]; nt nn=5; =0; j=0;=0; g=turevf,); whle j++ < nma && gamma > tolerance ) fornt =0;<n;++) d[]=0.0; fornt =0;<n;++) d[]=d[]-q[][]*g[]; System.out.prntln"j="+j+"d="+Matr.toStrngd)); alpha=lnmnf,,d); System.out.prntln"alfa="+alpha); falpha==0) brea; for=0;<n;++)d[]=alpha*d[];[]+=d[];ge[]=g[]; System.out.prntln"j="+j+"d=\n"+Matr.toStrngd)); System.out.prntln"j="+j+"=\n"+Matr.toStrng)); g=turevf,); System.out.prntln"j="+j+"g=\n"+Matr.toStrngg)); for=0;<n;++)dg[]=g[]-ge[]; gamma=normg); fornt =0;<n;++) r[]=0.0; fornt =0;<n;++) r[]+=q[][]*dg[]; rdg=vt_xr,dg); ddg=vt_xd,dg); Q=V_VTr); Q=V_VTd); fornt =0;<n;++) fornt jj=0;jj<n;jj++) Q[][jj]=Q[][jj]-Q[][jj]/rdg+Q[][jj]/ddg; gamma=normd); System.out.prntln"j="+j+"Q=\n"+Matr.toStrngQ)); j++;++; f>=nn) =0;Q=In); fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] davdon_fletcher_powell_v f_j f,double []) nt,j,; nt nma=500; double gamma=.0; double tolerance=.0e- ; nt n=.length; double alpha; double d[]=new double[n]; double g[] =new double[n]; double ge[]=new double[n]; double dg[]=new double[n]; double d[] =new double[n]; double r[] =new double[n]; double rdg,ddg; double beta; double alpha_d; double Q[][]=In); double Q[][]=new double[n][n]; double Q[][]=new double[n][n]; nt nn=5; =0;

297 j=0;=0; g=turevf,); whle j++ < nma && gamma > tolerance ) fornt =0;<n;++) d[]=0.0; fornt =0;<n;++) d[]=d[]-q[][]*g[]; alpha=lnmnf,,d); falpha==0) brea; for=0;<n;++)d[]=alpha*d[];[]+=d[];ge[]=g[]; g=turevf,); for=0;<n;++)dg[]=g[]-ge[]; gamma=normg); fornt =0;<n;++) r[]=0.0; fornt =0;<n;++) r[]+=q[][]*dg[]; rdg=vt_xr,dg); ddg=vt_xd,dg); beta=ddg/rdg; Q=V_VTr); Q=V_VTd); fornt =0;<n;++) fornt jj=0;jj<n;jj++) Q[][jj]=beta*Q[][jj]-Q[][jj]/rdg)+Q[][jj]/ddg; gamma=normd); j++;++; f>=nn) =0;Q=In); fj >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); return ; publc statc double[] vergrstrng s) Strng s=joptonpane.showinputdalogs); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) Strng s="ö tahmn değerlern arada br boşlu bıraara grnz: "; double [] 0=vergrs); fa f_=new fa"a.tt",0); double [] r= davdon_fletcher_powellf_,0); double [] r= davdon_fletcher_powell_vf_,0); s=" çözüm set DFP : \n"+matr.tostrngtr); s+=" çözüm set düzeltlmş DFP : \n"+matr.tostrngtr); Strng s="davdon - Fletcher - Powell ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 7.- Lneer olmayan eğr uydurma örneğ

298 Sürell metodu ullanara : Program 7.-3 Lneer olmayan eğr uydurma, Sürell metodu // FSCO5D SürellContnuaton-homotopy) optmzasyon // Metod Referansı : Numercal Analyss, 8th edton Rchard L. Burden, J. Douglas Fares 3 // sayfa 637 // bu versyon fonsyonların türevn sayısal olara almatadır. // ullanıcının türev fonsyonu tanımlaması geremez mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; mport java.o.*; //============= Tanımı gereen fonsyon ================ abstract class f_ // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func) returns the value of f[0] and f[] // as a two dmensonal vector abstract double[] funcdouble []); abstract class fj_ // multfuncton mult ndependent varable // for n ndependent varable n*n matr of // dependent varables are returned // eample f[0][0]=[0]+math.sn[]) f[0][]=[0]-[] // f[][0]=[0]*[0]-[] f[][]=math.ep[0]+[]*[] // func) returns the value of f[0][0], f[0][] // f[][0], f[][] // as a two dmensonal matr abstract double[][] funcdouble []); class fa etends f_j double []; // ndependent varable data set double y[]; //dependent varable data set double a[]; //ft functon coeffcent set nt nn; publc fastrng flename,double a[]) //read the data to curveft //get the data fle and ntal ft coeffcent when class s defned =new double[500]; y=new double[500]; nt n=a.length; a=new double[n]; setaa); nt =-; try BufferedReader fn=new BufferedReadernew FleReaderflename)); try

299 whlefn!= null) ++; []=Tet.readDoublefn); y[]=tet.readdoublefn); catcheofecepton e_eof) System.out.prntln"end of fle"); catchioecepton e_o) System.out.prntln"dosya bulunamadı"); nn=; a=a; publc vod setadouble a[]) //assgn new ft coeffcent set fornt =0;<nn;++) a[]=a[]; publc double[] geta) // return ft coeffcent set return a; double Psdouble,double a[]) //sample specfc functon // saturaton pressure as a functon of saturaton temperature a=a; double p=a[0]*.0-math.ep-a[]*)); //p=math.pow0.0,p); return p; //Pa publc double funcdouble a[]) double ff=0; double w; double yy; fornt =0;<nn;++) w=ps[],a); yy=y[]; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); w-=yy; ff+=w*w; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); return ff; publc class FSCO5D // SürellContnuty-homotopy) metodu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] multplydouble left,double[] rght) //multplyng a vector wth a constant nt ; nt n=rght.length; double b[]; b=new double[n]; for=0;<n;++) b[]=left*rght[]; return b; publc statc double[] multplydouble[][] left,double[] rght) //multplcaton of one matr wth one vector nt,jj,,j,; nt m=left[0].length;

300 nt n=left.length; nt m=rght.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<n;++) b[]+=left[][]*rght[]; return b; //end of multply of a matr and a vector publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method publc statc double[][] nvdouble[][] a) // INVERSION OF A MATRIX // nverson by usng gaussan elmnaton // wth full pvotng nt n=a.length; nt m=a[0].length; double b[][]; b=new double[n][n]; nt ndc[]; nt ndr[]; double pv[]; ndc=new nt[n]; ndr=new nt[n]; pv=new double[n]; nt,j,,l,ll,,jj; nt col=0; nt row=0; double bg,dum,pvnv,temp; fn!=m) System.out.prntln"Matr must be square "); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; for=0;<n;++) forj=0;j<n;j++) b[][j]=a[][j];

301 for=0;<n;++) bg=0.0; forj=0;j<n;j++) fpv[j]!= ) for=0;<n;++) fpv[] == 0) fmath.absb[j][]) >= bg) bg=math.absb[j][]); row=j; col=; else fpv[] > ) System.out.prntln"error : nverse of the matr : sngular matr-"); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; ++ pv[col]; frow!= col) forl=0;l<n;l++) temp=b[row][l]; b[row][l]=b[col][l]; b[col][l]=temp; ndr[]=row; ndc[]=col; fb[col][col] == 0.0) System.out.prntln"error : nverse of the matr : sngular matr-"); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; pvnv=.0/b[col][col]; b[col][col]=.0; forl=0;l<n;l++) b[col][l] *=pvnv; forll=0;ll<n;ll++) fll!= col) dum=b[ll][col]; b[ll][col]=0.0; forl=0;l<n;l++) b[ll][l]-= b[col][l]*dum; forl=n-;l>=0;l--) fndr[l]!= ndc[l]) for=0;<n;++) temp=b[][ndc[l]]; b[][ndc[l]]=b[][ndr[l]]; b[][ndr[l]]=temp; return b; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü

302 // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=dfdf,,); return a; publc statc double dfdf_j f,double [],nt ref) nt ; double h=.0e-3; double hh=.0/h; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; for=0;<.length;++) f!=ref) ph[]=[];ph[]=[];mh[]=[];mh[]=[]; else ph[]=[]+.0*h;ph[]=[]+h;mh[]=[]-.0*h;mh[]=[]-h; fph=f.funcph); fph=f.funcph); fmh=f.funcmh); fmh=f.funcmh); return -fph+8.0*fph-8.0*fmh+fmh)/.0*hh; publc statc double dfdf_j f,double [],nt ref,nt jref) //nctürev matrs nt ; double h=.0e-4; double hh=.0/h; nt n=.length; double ff; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; fornt j=0;j<n;j++) fj!=jref) ph[j]=[j];ph[j]=[j];mh[j]=[j];mh[j]=[j]; else ph[j]=[j]+.0*h;ph[j]=[j]+h;mh[j]=[j]-.0*h;mh[j]=[j]-h; fph=dfdf,ph,ref); fph=dfdf,ph,ref); fmh=dfdf,mh,ref); fmh=dfdf,mh,ref); ff=-fph+8.0*fph-8.0*fmh+fmh)/.0*hh; return ff; publc statc double[][]hf_j f,double []) nt n=.length; double dy[][]=new double[n][n];; fornt =0;<n;++) fornt jj=0;jj<n;jj++) //Hessan matrs dy[][jj]=dfdf,,,jj); return dy; publc statc double[] contnuatonrk4f_j f,double [],nt N)

303 //==================================================== // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs J de tanımlanacatır // Homotopy, contnuaton devamlılı) metodu le lneer olmıyan denlem sstem çözümü // 4.derece Runge-Kutta denlem le // y+ = y + /6)* )h // =f,y) // =f+0.5h,y+0.5h) // 3=f+0.5h,y+0.5h) // 4=f+h,y +3h) //=================================================== // : bağımsız değşen vetörü // y : bağımlı değşen vetörü // dy : bağımlı değşenn türev fonsyonları vetörü // N : Runge-Kutta dferansyel denlem notasayısı nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double h=.0/double)n; double b[]=new double[n]; double []=new double[n]; double [][]=new double[4][n]; double A[][]=new double[n][n]; b=multply-h,dff,)); for=0;<n;++) =; A=Hf,); [0]=multplynvA),b); =add,multply0.5,[0])); A=Hf,); []=multplynva),b); =add,multply0.5,[])); A=Hf,); []=multplynva),b); =add,[]); A=Hf,); [3]=multplynvA),b); fornt j=0;j<n;j++) [j]=[j]+.0/6.0*[0][j]+.0*[][j]+.0*[][j]+[3][j]); return ; publc statc double[] contnuatonrk6f_j f,double [],nt N) //==================================================== // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs J de tanımlanacatır // Homotopy, contnuaton devamlılı) metodu le lneer olmıyan denlem sstem çözümü // 6. derece Runge-Kutta denlem le // y+ = y + /90)* )h // =f,y) // =f+0.5h, y+0.5h) // 3=f+0.5h, y+0.5h+0.5h) // 4=f+0.5h, y - 0.5h+3h) // 5=f+0.75h, y + 3/6)h+9/6)4h) // 6=f+h, y - 3/7)h+/7)h+/7)3h - /7)4h+8/7)5h) //=================================================== // : bağımsız değşen vetörü // y : bağımlı değşen vetörü // dy : bağımlı değşenn türev fonsyonları vetörü // N : Runge-Kutta dferansyel denlem notasayısı nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double h=.0/double)n; double b[]=new double[n]; double []=new double[n]; double [][]=new double[6][n]; double A[][]=new double[n][n];

304 b=multply-h,dff,)); for=0;<n;++) =; A=Hf,); // =f,y) [0]=multplynvA),b); =add,multply0.5,[0])); A=Hf,); // =f+0.5h, y+0.5h) []=multplynva),b); =add,addmultply0.5,[0]),multply0.5,[]))); A=Hf,); // 3=f+0.5h, y+0.5h+0.5h) []=multplynva),b); =add,addmultply-0.5,[]),[])); A=Hf,); // 4=f+0.5h, y - 0.5h+3h) [3]=multplynvA),b); =add,addmultply3.0/6.0),[0]),multply9.0/6.0),[3]))); A=Hf,); // 5=f+0.75h, y + 3/6)h+9/6)4h) [4]=multplynvA),b); =add, addmultply-3.0/7.0),[0]),addmultply.0/7.0),[]), addmultply.0/7.0),[]), addmultply-.0/7.0),[3]),multply8.0/7.0),[4])))))); A=Hf,); // 6=f+h, y - 3/7)h+/7)h+/7)3h - /7)4h+8/7)5h) [5]=multplynvA),b); // y+ = y + /90)* )h fornt j=0;j<n;j++) [j]=[j]+.0/90.0*7.0*[0][j]+3.0*[][j]+.0*[3][j]+3.0*[4][j]+7.0*[5][j]); return ; publc statc double[] newton_contnuatonrk4f_j f,double [],nt N) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d de tanımlanacatır // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü //dy bağımlı değşenn türev fonsyonları vetörü =contnuatonrk4f,,4); double t=.0; nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double b[]; b=new double[n]; for=0;<n;++) b[]=.0; =0; whle ++ < nma && Matr.absb) > tolerance ) b=matr.multplymatr.dvdedff,),hf,)),-t); =Matr.add,b); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); System.out.prntln); return ; publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0;

305 whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) double [] 0=vergr); fa ff=new fa"a.tt",0); double [] r= contnuatonrk6ff,0,4); Strng s=" optmum sürell RK6 : \n"+matr.tostrngtr); Strng s="ço değşenl sürell metodu le optmzasyon : "; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 7.-3 Lneer olmayan eğr uydurma örneğ, Sürell metodu ullanılara Genet algortmalar optmzasyon metodu ullanara : Program 7.-4 Lneer olmayan eğr uydurma, Genet algortma metodu mport java.o.*; mport java.swng.*; class fa etends f_j double []; // ndependent varable data set double y[]; //dependent varable data set double a[]; //ft functon coeffcent set nt nn; publc fastrng flename,double a[]) //read the data to curveft //get the data fle and ntal ft coeffcent when class s defned =new double[500]; y=new double[500]; nt n=a.length; a=new double[n]; setaa); nt =-; try BufferedReader fn=new BufferedReadernew FleReaderflename)); try whlefn!= null) ++; []=Tet.readDoublefn); y[]=tet.readdoublefn); catcheofecepton e_eof) System.out.prntln"end of fle"); catchioecepton e_o) System.out.prntln"dosya bulunamadı"); nn=; a=a; publc vod setadouble a[]) //assgn new ft coeffcent set fornt =0;<nn;++) a[]=a[];

306 publc double[] geta) // return ft coeffcent set return a; double Psdouble,double a[]) //sample specfc functon // saturaton pressure as a functon of saturaton temperature a=a; double p=a[0]*.0-math.ep-a[]*)); //p=math.pow0.0,p); return p; //Pa publc double funcdouble a[]) double ff=0; double w; double yy; fornt =0;<nn;++) w=ps[],a); yy=y[]; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); w-=yy; ff+=w*w; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); return ff; class fb etends fa publc fbstrng flename,double a[]) superflename,a); publc double funcdouble a[]) return -super.funca); class OPO9D publc statc vod manstrng args[]) throws IOEcepton nt N=63; nt POPSIZE=00; nt MAXGENS=00; nt NVARS=; double PXOVER=0.3; double PMUTATION=0.0; Strng n_name="a.tt"; Genetc =new GenetcPOPSIZE,MAXGENS,NVARS,N,PXOVER,PMUTATION); double low[]=new double[nvars]; double hgh[]=new double[nvars]; low[0]=30.0;hgh[0]=50.0; low[]=0.0;hgh[]=.0; double a[]=new double[nvars]; fb fb=new fb"a.tt",a);.setpopulatonlow,hgh,fb); a=.calculatefb,false); double 0[]=new double[nvars]; fornt =0;<NVARS;++) 0[]=a[]; Strng s="genet algortma sonucu =\n"+matr.tostrngta); Strng s="genet algortma ço değşenl fonsyon optmzasyonu:"; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı 7.-4 Lneer olmayan eğr uydurma, Genet algortma metodu

307 Genet algortma metodunun masmum bulan br metod olduğunu, ve bu yüzden de şaretyle ters olara çağrıldığını burada terar hatırlatma styoruz. Bu bölümde son olara ço değşenl ve atsayıları lneer olmıyan fonsyonlara eğr uydurmamız geretğnde e yapacağımıza değnelm. Lneer fonsyonlarda hatırlıyacağınız gb genel en üçü areler metodunu metodu dwğştrmeden sadece fonsyonların oluşum prosesn ullanara ço boyutlu fonsyonlar çn de ullanableceğmz anlatmıştı. Aynı şelde lneer olmıyan metodlarımızı da ço boyutlu fonsyonların eğr uydurmasında sadece fonsyonu oluşturma sstemn değştrere olşturablrz. Örne olara Versn alalım. Eğr uydurma stedğmz fonson da : double p=[]*a[0]*.0-math.ep-a[]*[0])); şelnde olsun. burada a atsayılar vetörü [0] ve [] bağımsız değşenlerdr. Verye nceledğmzde üstte örnelerle aynı atsayıları vermes geretğn göreblrz. Örneğmz sürell optmzasyon metoduyla vereceğz, ama daha önce de belrttğmz gb tüm optmzasyon metodlarını ullanablrz. Program 7.-5 Lneer olmayan eğr uydurma, brden fazla bağımsız değşen çn olan versyon, Sürell optmzasyon metodu ullanılara çözüm // FSCO5D SürellContnuaton-homotopy) optmzasyon // Metod Referansı : Numercal Analyss, 8th edton Rchard L. Burden, J. Douglas Fares 3 // sayfa 637 // bu versyon fonsyonların türevn sayısal olara almatadır. // ullanıcının türev fonsyonu tanımlaması geremez mport java.utl.*; mport java.awt.*; mport java.applet.applet; mport java.awt.event.*; mport java.swng.*; mport java.o.*; //============= Tanımı gereen fonsyon ================ abstract class f_ // multfuncton mult ndependent varable // vector of dependent varables are returned // eample f[0]=[0]+sn[]) // f[]=[0]*[0]-[] // func) returns the value of f[0] and f[] // as a two dmensonal vector abstract double[] funcdouble []); abstract class fj_

308 // multfuncton mult ndependent varable // for n ndependent varable n*n matr of // dependent varables are returned // eample f[0][0]=[0]+math.sn[]) f[0][]=[0]-[] // f[][0]=[0]*[0]-[] f[][]=math.ep[0]+[]*[] // func) returns the value of f[0][0], f[0][] // f[][0], f[][] // as a two dmensonal matr abstract double[][] funcdouble []); // class fa etends f_j double [][]; // m ndependent varable data set double y[]; //dependent varable data set double a[]; //ft functon coeffcent set nt nn;//number of data nt m; //number of dependent varables publc fastrng flename,double a[]) //read the data to curveft //last column s treated as ndependent data set //get the data fle and ntal ft coeffcent when class s defned nt n=a.length; a=new double[n]; setaa); double b[][]=tet.readdoubletflename); m=b.length-; y=b[m]; nn=y.length; //System.out.prntln"m="+m); =new double[m][nn]; fornt =0;<m;++) []=b[]; y=b[m]; //System.out.prntln"b=\n"+Matr.toStrngMatr.Tb))); //System.out.prntln"=\n"+Matr.toStrng)); //System.out.prntln"y=\n"+Matr.toStrngy)); nn=y.length; a=a; publc vod setadouble a[]) //assgn new ft coeffcent set fornt =0;<nn;++) a[]=a[]; publc double[] geta) // return ft coeffcent set return a; double Psdouble [],double a[]) // sample specfc functon m dmensonal ndependent varable // ndependent varables : [0],[]...[m-] a=a; double p=[]*a[0]*.0-math.ep-a[]*[0])); return p; //Pa publc double funcdouble a[]) double ff=0; double w; double yy; double []=new double[.length]; fornt =0;<nn;++) fornt j=0;j<m;j++) [j]=[j][]; w=ps,a); yy=y[]; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); w-=yy;

309 ff+=w*w; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); return ff; publc class FSCO5D // SürellContnuty-homotopy) metodu ullanara denlem sstemnn ölern bulma // Bu metod denlem sstem çözümü çn Matr.java programını // ullanmatadır. publc statc double[] multplydouble left,double[] rght) //multplyng a vector wth a constant nt ; nt n=rght.length; double b[]; b=new double[n]; for=0;<n;++) b[]=left*rght[]; return b; publc statc double[] multplydouble[][] left,double[] rght) //multplcaton of one matr wth one vector nt,jj,,j,; nt m=left[0].length; nt n=left.length; nt m=rght.length; double[] b; b=new double[m]; fn!= m) System.out.prntln"nner matr dmensons must agree"); for=0;<n;++) b[]=0; return b; for=0;<m;++) b[]=0; for=0;<n;++) b[]+=left[][]*rght[]; return b; //end of multply of a matr and a vector publc statc double[] adddouble[] left,double[] rght) //addton of two vectors nt n=left.length; nt n=rght.length; nt nma; nt ; fn>=n) nma=n; else nma=n; double b[]; b=new double[nma]; for=0;<n;++) b[]=b[]+left[]; for=0;<n;++) b[]=b[]+rght[]; return b; //end of vector addton method

310 publc statc double[][] nvdouble[][] a) // INVERSION OF A MATRIX // nverson by usng gaussan elmnaton // wth full pvotng nt n=a.length; nt m=a[0].length; double b[][]; b=new double[n][n]; nt ndc[]; nt ndr[]; double pv[]; ndc=new nt[n]; ndr=new nt[n]; pv=new double[n]; nt,j,,l,ll,,jj; nt col=0; nt row=0; double bg,dum,pvnv,temp; fn!=m) System.out.prntln"Matr must be square "); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; for=0;<n;++) forj=0;j<n;j++) b[][j]=a[][j]; for=0;<n;++) bg=0.0; forj=0;j<n;j++) fpv[j]!= ) for=0;<n;++) fpv[] == 0) fmath.absb[j][]) >= bg) bg=math.absb[j][]); row=j; col=; else fpv[] > ) System.out.prntln"error : nverse of the matr : sngular matr-"); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b; ++ pv[col]; frow!= col) forl=0;l<n;l++) temp=b[row][l]; b[row][l]=b[col][l]; b[col][l]=temp; ndr[]=row; ndc[]=col; fb[col][col] == 0.0) System.out.prntln"error : nverse of the matr : sngular matr-"); for=0;<n;++) forjj=0;jj<n;jj++) b[][jj]=0.0; return b;

311 pvnv=.0/b[col][col]; b[col][col]=.0; forl=0;l<n;l++) b[col][l] *=pvnv; forll=0;ll<n;ll++) fll!= col) dum=b[ll][col]; b[ll][col]=0.0; forl=0;l<n;l++) b[ll][l]-= b[col][l]*dum; forl=n-;l>=0;l--) fndr[l]!= ndc[l]) for=0;<n;++) temp=b[][ndc[l]]; b[][ndc[l]]=b[][ndr[l]]; b[][ndr[l]]=temp; return b; publc statc double SIGNdouble a,double b) return b > 0.0? Math.absa) : -Math.absa)); publc statc double MAXdouble a,double b) return a > b? a : b); publc statc double[] dff_j f,double []) //Gredyen vetörü // f0,,,...n) founsyonunun türev vetörü // [df/d0, df/d,df/d,...,df/dn] // df/dj j=0...length // // bu fonsyon blgsayar tarafından hesaplanmatadır // ullanıcı tarafından tanımlanan f) fonsyonunun // sayısal olara alınan türevdr. // double a[]=new double[.length]; fornt =0;<.length;++) a[]=dfdf,,); return a; publc statc double dfdf_j f,double [],nt ref) nt ; double h=.0e-3; double hh=.0/h; double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; for=0;<.length;++) f!=ref) ph[]=[];ph[]=[];mh[]=[];mh[]=[]; else ph[]=[]+.0*h;ph[]=[]+h;mh[]=[]-.0*h;mh[]=[]-h; fph=f.funcph); fph=f.funcph); fmh=f.funcmh); fmh=f.funcmh); return -fph+8.0*fph-8.0*fmh+fmh)/.0*hh; publc statc double dfdf_j f,double [],nt ref,nt jref) //nctürev matrs nt ; double h=.0e-4; double hh=.0/h; nt n=.length; double ff;

312 double ph[]=new double[.length]; double ph[]=new double[.length]; double mh[]=new double[.length]; double mh[]=new double[.length]; double fph,fph,fmh,fmh; fornt j=0;j<n;j++) fj!=jref) ph[j]=[j];ph[j]=[j];mh[j]=[j];mh[j]=[j]; else ph[j]=[j]+.0*h;ph[j]=[j]+h;mh[j]=[j]-.0*h;mh[j]=[j]-h; fph=dfdf,ph,ref); fph=dfdf,ph,ref); fmh=dfdf,mh,ref); fmh=dfdf,mh,ref); ff=-fph+8.0*fph-8.0*fmh+fmh)/.0*hh; return ff; publc statc double[][]hf_j f,double []) nt n=.length; double dy[][]=new double[n][n];; fornt =0;<n;++) fornt jj=0;jj<n;jj++) //Hessan matrs dy[][jj]=dfdf,,,jj); return dy; publc statc double[] contnuatonrk4f_j f,double [],nt N) //==================================================== // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs J de tanımlanacatır // Homotopy, contnuaton devamlılı) metodu le lneer olmıyan denlem sstem çözümü // 4.derece Runge-Kutta denlem le // y+ = y + /6)* )h // =f,y) // =f+0.5h,y+0.5h) // 3=f+0.5h,y+0.5h) // 4=f+h,y +3h) //=================================================== // : bağımsız değşen vetörü // y : bağımlı değşen vetörü // dy : bağımlı değşenn türev fonsyonları vetörü // N : Runge-Kutta dferansyel denlem notasayısı nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double h=.0/double)n; double b[]=new double[n]; double []=new double[n]; double [][]=new double[4][n]; double A[][]=new double[n][n]; b=multply-h,dff,)); for=0;<n;++) =; A=Hf,); [0]=multplynvA),b); =add,multply0.5,[0])); A=Hf,); []=multplynva),b); =add,multply0.5,[])); A=Hf,); []=multplynva),b); =add,[]); A=Hf,); [3]=multplynvA),b); fornt j=0;j<n;j++) [j]=[j]+.0/6.0*[0][j]+.0*[][j]+.0*[][j]+[3][j]); return ;

313 publc statc double[] contnuatonrk6f_j f,double [],nt N) //==================================================== // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs J de tanımlanacatır // Homotopy, contnuaton devamlılı) metodu le lneer olmıyan denlem sstem çözümü // 6. derece Runge-Kutta denlem le // y+ = y + /90)* )h // =f,y) // =f+0.5h, y+0.5h) // 3=f+0.5h, y+0.5h+0.5h) // 4=f+0.5h, y - 0.5h+3h) // 5=f+0.75h, y + 3/6)h+9/6)4h) // 6=f+h, y - 3/7)h+/7)h+/7)3h - /7)4h+8/7)5h) //=================================================== // : bağımsız değşen vetörü // y : bağımlı değşen vetörü // dy : bağımlı değşenn türev fonsyonları vetörü // N : Runge-Kutta dferansyel denlem notasayısı nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double h=.0/double)n; double b[]=new double[n]; double []=new double[n]; double [][]=new double[6][n]; double A[][]=new double[n][n]; b=multply-h,dff,)); for=0;<n;++) =; A=Hf,); // =f,y) [0]=multplynvA),b); =add,multply0.5,[0])); A=Hf,); // =f+0.5h, y+0.5h) []=multplynva),b); =add,addmultply0.5,[0]),multply0.5,[]))); A=Hf,); // 3=f+0.5h, y+0.5h+0.5h) []=multplynva),b); =add,addmultply-0.5,[]),[])); A=Hf,); // 4=f+0.5h, y - 0.5h+3h) [3]=multplynvA),b); =add,addmultply3.0/6.0),[0]),multply9.0/6.0),[3]))); A=Hf,); // 5=f+0.75h, y + 3/6)h+9/6)4h) [4]=multplynvA),b); =add, addmultply-3.0/7.0),[0]),addmultply.0/7.0),[]), addmultply.0/7.0),[]), addmultply-.0/7.0),[3]),multply8.0/7.0),[4])))))); A=Hf,); // 6=f+h, y - 3/7)h+/7)h+/7)3h - /7)4h+8/7)5h) [5]=multplynvA),b); // y+ = y + /90)* )h fornt j=0;j<n;j++) [j]=[j]+.0/90.0*7.0*[0][j]+3.0*[][j]+.0*[3][j]+3.0*[4][j]+7.0*[5][j]); return ; publc statc double[] newton_contnuatonrk4f_j f,double [],nt N) // lneer olmıyan denlem stemnn öler // fj)=0 lneer olmıyan denlem sstem çn çözüm matrs // türev matrs dfj/d de tanımlanacatır // Newton-Raphson metodu le lneer olmıyan denlem sstem çözümü //t :önem atsayısı // bağımsız değşen vetörü //y bağımlı değşen vetörü

314 //dy bağımlı değşenn türev fonsyonları vetörü =contnuatonrk4f,,4); double t=.0; nt ; nt nma=400; double tolerance=.0e-0; nt n=.length; double b[]; b=new double[n]; for=0;<n;++) b[]=.0; =0; whle ++ < nma && Matr.absb) > tolerance ) b=matr.multplymatr.dvdedff,),hf,)),-t); =Matr.add,b); f >= nma) JOptonPane.showMessageDalognull,"Uyarı mamum terasyon sayısı aşıldı \n"+ " çözüm geçerl olmıyablr","maksimum ITERASYON SAYISI UYARISI",JOptonPane.WARNING_MESSAGE); System.out.prntln); return ; publc statc double[] vergr) Strng s=joptonpane.showinputdalog"ö tahmn değerlern arada br boşlu bıraara grnz: "); StrngToenzer toen=new StrngToenzers); nt n=toen.counttoens)-; nt m=n+; double a[]=new double[m]; nt j=0; whletoen.hasmoretoens)) Double a=new Doubletoen.netToen)); a[j++]=a.doublevalue); return a; publc statc vod man Strng args[]) double [] 0=vergr); fa ff=new fa"a.tt",0); double [] r= contnuatonrk6ff,0,4); Strng s=" optmum sürell RK6 : \n"+matr.tostrngtr); Strng s="ço değşenl sürell metodu le optmzasyon : "; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); System.et0); Çıtı 7.-5 Lneer olmayan eğr uydurma, brden fazla bağımsız değşen çn olan versyon, Sürell optmzasyon metodu ullanılara çözüm Aynı programı Nelder-Mead optmzasyon metodu ullanara oluşturaca olursa : Program 7.-6 Lneer olmayan eğr uydurma, brden fazla bağımsız değşen çn olan versyon, Nelder- Mead optmzasyon metodu ullanılara çözüm mport java.o.*; mport java.swng.*;

315 class fa etends f_j double [][]; // m ndependent varable data set double y[]; //dependent varable data set double a[]; //ft functon coeffcent set nt nn;//number of data nt m; //number of dependent varables publc fastrng flename,double a[]) //read the data to curveft //last column s treated as ndependent data set //get the data fle and ntal ft coeffcent when class s defned nt n=a.length; a=new double[n]; setaa); double b[][]=tet.readdoubletflename); m=b.length-; y=b[m]; nn=y.length; //System.out.prntln"m="+m); =new double[m][nn]; fornt =0;<m;++) []=b[]; y=b[m]; //System.out.prntln"b=\n"+Matr.toStrngMatr.Tb))); System.out.prntln"=\n"+Matr.toStrng)); System.out.prntln"y=\n"+Matr.toStrngy)); nn=y.length; a=a; publc vod setadouble a[]) //assgn new ft coeffcent set fornt =0;<nn;++) a[]=a[]; publc double[] geta) // return ft coeffcent set return a; double Psdouble [],double a[]) // sample specfc functon m dmensonal ndependent varable // ndependent varables : [0],[]...[m-] a=a; double p=[]*a[0]*.0-math.ep-a[]*[0])); return p; //Pa publc double funcdouble a[]) double ff=0; double w; double yy; double []=new double[.length]; fornt =0;<nn;++) fornt j=0;j<m;j++) [j]=[j][]; w=ps,a); yy=y[]; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); w-=yy; ff+=w*w; //System.out.prntln"="+[]+"w="+w+"yy="+yy+"ff="+ff); return ff; publc class SCOH //. Nelder ve Mead metodu smples arama metodu) // publc statc double[] nelderf_j fnelder,double a[],double da[],nt materaton,double tolerance,nt prntlst)

316 double [][]=new double[a.length+][a.length]; fornt =0;<.length;++) fornt j=0;j<[0].length;j++) f==j)[][j]=a[j]+da[j]; else [][j]=a[j]; // Nelder mead ço boyutlu smple mnmzasyon metodu // Nelder & Mead 965 Computer J, v.7, // Grş değşenler tanımlaması // fnelder : abstract ço boyutlu fonsyon f) // : for n boyutlu n+ smle notasını çerr bağımsız değşen set // materaton : mamum terasyon sayısı // tolerance : nt NDIMS =.length-; nt NPTS =.length; nt FUNC = NDIMS; nt ncalls = 0; ////// başlangıç smplen oluştur ////////////////// double p[][]=new double[npts][npts]; // [row][col] = [whchv][coord,func] double z[]=new double[ndims]; double best = E99; //////////////// l fonsyon değerlern hesapla //////////////// for nt =0; <NPTS; ++) for nt j=0; j<ndims; j++) p[][j] = [][j]; p[][ndims] = fnelder.funcp[]); nt ter=0; for ter=; ter<materaton; ter++) /////////// lo, nh, h notalarını tanımla ////////////// nt lo=0, h=0, nh = -; // - means mssng double flo = p[0][func]; double fh = flo; double pavg,sterr; for nt =; <NPTS; ++) f p[][func] < flo) flo=p[][func]; lo=; f p[][func] > fh) fh=p[][func]; h=; double fnh = flo; nh = lo; for nt =0; <NPTS; ++) f!= h) && p[][func] > fnh)) fnh=p[][func]; nh=; ////////// çıış rter ////////////// f ter % 4*NDIMS) == 0) //y nn standart hata rter set değernden tolerance) // üçü olmalı // ortalama değer hesapla en büyü değer de dahl olma üzere) pavg=0; fornt =0;<NPTS;++) pavg+=p[][func]; pavg/=npts; double tot=0; fprntlst!=0) System.out.prntter); for nt j=0; j<=ndims; j++) System.out.prntp[lo][j]+" "); System.out.prntln""); fornt =0;<NPTS;++) tot=p[][func]-pavg)*p[][func]-pavg); sterr=math.sqrttot/npts); //fsterr < tolerance) for nt j=0; j<ndims; j++) z[j]=p[lo][j]; //brea; best = p[lo][func];

317 ///// ave[] vetorünü en büyü değer harç tutara hesapla ////// double ave[] = new double[ndims]; for nt j=0; j<ndims; j++) ave[j] = 0; for nt =0; <NPTS; ++) f!= h) for nt j=0; j<ndims; j++) ave[j] += p[][j]; for nt j=0; j<ndims; j++) ave[j] /= NPTS-); ///////// yansıt //////////////// double r[] = new double[ndims]; for nt j=0; j<ndims; j++) r[j] = *ave[j] - p[h][j]; double fr = fnelder.funcr); f flo <= fr) && fr < fnh)) // n zone: accept for nt j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; f fr < flo) //// genşlet, else abul et double e[] = new double[ndims]; for nt j=0; j<ndims; j++) e[j] = 3*ave[j] - *p[h][j]; double fe = fnelder.funce); f fe < fr) for nt j=0; j<ndims; j++) p[h][j] = e[j]; p[h][func] = fe; contnue; else for nt j=0; j<ndims; j++) p[h][j] = r[j]; p[h][func] = fr; contnue; ///////////// daralt: f fr < fh) double c[] = new double[ndims]; for nt j=0; j<ndims; j++) c[j] =.5*ave[j] - 0.5*p[h][j]; double fc = fnelder.funcc); f fc <= fr) for nt j=0; j<ndims; j++) p[h][j] = c[j]; p[h][func] = fc; contnue; else /////// daralt for nt =0; <NPTS; ++) f!= lo) for nt j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]);

318 contnue; f fr >= fh) /// double cc[] = new double[ndims]; for nt j=0; j<ndims; j++) cc[j] = 0.5*ave[j] + 0.5*p[h][j]; double fcc = fnelder.funccc); f fcc < fh) for nt j=0; j<ndims; j++) p[h][j] = cc[j]; p[h][func] = fcc; contnue; else ///////// for nt =0; <NPTS; ++) f!= lo) for nt j=0; j<ndims; j++) p[][j] = 0.5*p[lo][j] + 0.5*p[][j]; p[][func] = fnelder.funcp[]); return z; publc statc double[] nelderf_j fnelder,double a[],double da[],double tolerance) return nelderfnelder,a,da,300,tolerance,0); publc statc double[] nelderf_j fnelder,double a[],double da[]) return nelderfnelder,a,da,500,.0e-0,0); publc statc vod manstrng args[]) throws IOEcepton //Strng n_name=joptonpane.showinputdalog" ver dosyasının smngrnz : "); Strng n_name="a.tt"; double a[]; a=new double[]; a[0] = 40.0; a[] =.0; double da[]; da=new double[]; da[0] =.0; da[] =0.; fa f=new fan_name,a); nt =0; double p[]=nelderf,a,da,000,e-0,); Strng s=" optmzasyon değer : \n"+matr.tostrngtp)+"\n"; s+="orjnal fonsyon değer = "+f.funca)+"\n"; s+="fonsyon değer = "+f.funcp); Strng s="nelder-mead en üçü areler lneer olmyan eğr uydurma : "; JOptonPane.showMessageDalognull,s,s,JOptonPane.PLAIN_MESSAGE); Çıtı 7.-6 Lneer olmayan eğr uydurma, brden fazla bağımsız değşen çn olan versyon, Nelder- Mead optmzasyon metodu ullanılara çözüm

319 Bu bölümde metodlarımıza lneer olmıyan atsayılı genel en üçü areler metodu smn de vereblrz, temel olara eğr uydurma çn mümün olan en genel br tanımı vermş oldu. Lneer olmıyan atsayılı eğr uydurma metodlarımızla sterse lneer atsayılı problemler de çözebleceğmz de hatırlatalım, anca lneer olara tanımlanmış br setn dre olara çözülmesnden dolayı tanımı daha olaydır, lneer olmıyan metodlar yapısı cabı genelde teratf prosesler ullanır. 8 LİNEER OPTİMİZASYON, SİMPLEKS METODU Optmzasyonun son onusu olara lneer optmzasyona göz atacağız. Nspeten olay olan lneer optmzasyon metodları, br ço lneer optmzasyon problemyle arşılaştığımız çn önemldr. Lneer problemler tanımı cabı sadece sınırlar le beraber anlam taşırlar sınırsız lneer optmzasyon tanımlı değldr. Lneer optmzasyon problemn en genel olara Masmum Z=a a + a + a a n n Sınır şartları : b b b b b 0n 0 <= A 0 b b 0 + b 0 + b b n 0 <= A b b 0 + b 0 + b b n 0 <= A b n0 0 + b n, 0 + b n 0 + b n b nn 0 <= A n şelnde tanımlıyablrz. Sstemde masmum yerne mnmum olduğunda veya <= yerne >= gb değş şartların gelmesn şaret değştrere çözeblrz. Br örne yazarsa problem : Masmum Z=60+50y Sınır şartları : +4y<=80 3+y<=60 şelnde verleblr. Denlem smples metodu le çözme çn önce formunda değşl yapma gerer. denlem Z-a a - a - a a n n = 0 Sınır şartları : b b 0 + b 0 + b b 0n n + W 0 = A 0 b b + b + b b n n + W = A b b + b + b b n n + W = A b n0 0 + b n, + b n + b n b nn n + W n = A n şelne getrlr. Denlem matrs formunda yazılırsa

320 0 a0 a a... an b00 b0 b0... b0 n A0 n b = 0 b b... b n A W W... bn 0 bn bn... bnn An W... W n şeln alır. Görüldüğü gb matrsn satır ve sütun sayıları uymadığından dre br denlem çözme sstem e çözülmes mümün değldr. Bunun yerne Smples metodu sm verlen br metod ullanacağız. Bu metodun uygulanması temel olara şu şelde yapılır :. Ana denlemde atsayıları negatf olara en büyü olan sütun seçlr. Bu sütuna rt sütun adı verlr.. Şart denlemlernn nc tarafı rt sütunda değere bölünere değerler bulunur. Değer en üçü olan sütun rt sütun olara alınır. 3. rt sütunla rt satırın esm notasına rt eleman adı verlr. 4. rt satır, rt elemana bölünere normalze edlr 5. rt satır dışında satırlar yen değer = es değer [rt sütunda aynı satıra gelen değer]*[rt satırda aynı sütuna gelen değer]/rt eleman formülü ullanılara hesaplanır. 6. teratf olara den 5 e adar olan stepler tüm ana denlemde tüm değerler 0 veya postf olana adar terarlanır. Şmd örne problem üzernde bu şlemler yneleyelm : Masmum Z=60+50y Sınır şartları : +4y<=80 3+y<=60 şelnde verlen örne problem smples formuna getrlrse : Z-60-50y+0W A +0W B = 0 +4y + W A +0W B = 80 3+y +0W A + W B =60 matr formunda : şelnde tanımlanablr.. terasyonda anahtar sütunun -60 ın yer aldığı sütun olduğu görülür. Anahtar satırı bulma çn t=80/=40 t=60/3=0 arşılaştırılır, 0 daha üçü olduğundan 3 satır anahtar satır olara seçlr. 3 satır anahtar eleman olara bulunan 3 değerne bölünere 0 0 şelne dönüştürülür rt satır dışında satırlarda rt sütunda değerler atsayıları) 3 3 elmne edlece şelde rt olon sabt br sayıyla çarpılara şlem yapılaca değerle toplanır. Örneğn 0 ıncı sütunda değern 0 yapma çn 3 satırrt sayır) 60 le çarpılara o satırla toplanır. Bu durumda değerler olacatır. brnc sütunda değern 0 yapma çn 3 satırrt sayır) - le çarpılara. satırla toplanır. Bu durumda değerler olur bu durumda matrs

321 formunu alır. Aynı teratf şlem br daha terarlarız. Bu sefer anahtar sütun anahtar satır olacatır. Anahtar eleman 8/3 tür. Elmne proses sonucunda matrs formunu alır. Bu forma geldten sonra W A ve W B değerler yerne 0 oyulursa =0 y=5 ve fonsyon değer 350 olara bulunur. Şmd aynı örne problem blgsayar ortamında çözerse : Program 8- Lneer smples optmzasyonu class smple publc statc double[] smpledouble[][] a) nt n=a.length; //satır nt m=a[0].length; //sütun System.out.prntln"m="+m+"n="+n); nt m=m-;//,y lern sayısı nt n=n-; nt m=m+n; nt m3=m+; nt eyrow=0; nt eycolumn=0; double eynumber=0.0; double rato=.0; double b[][]=new double[n][m3]; double d[]=new double[m]; Strng s[]=new Strng[m]; fornt =0;<n;++) b[][m]=a[][m]; fornt =0;<n-;++) fornt j=0;j<m;j++) b[][j]=a[][j]; fornt j=m;j<m;j++) f==j-m)) b[+][j]=.0;system.out.prntln"="++"j="+j+"bj="+b[+][j]); double ma; double mn; System.out.prntlnMatr.toStrngb)); fornt =0;<n;++) ma=-9.999e30; mn=9.999e30; fornt j=0;j<m;j++) f b[0][j]<0) && Math.absb[0][j])>ma) ma=math.absb[0][j]);eycolumn=j; fornt =;<n;++) rato=b[][m]/b[][eycolumn]; frato<mn) mn=rato;eyrow=; eynumber=b[eyrow][eycolumn]; double c[][]=new double[n][m3]; fornt =0;<n;++) fornt j=0;j<m3;j++) c[][j]=b[][j]; fornt =0;<n;++) f!=eyrow) fornt j=0;j<m3;j++) b[][j]=c[][j]-c[eyrow][j]*c[][eycolumn]/eynumber; else fornt j=0;j<m3;j++) b[][j]=c[][j]/eynumber; System.out.prntln"eynumber = "+eynumber); System.out.prntln"eyrow = "+eyrow+" eycolumn = "+eycolumn); System.out.prntlnMatr.toStrngb));

322 d[m]=b[0][m]; s[m]="y=f)"; fornt j=0;j<m;j++) s[j]="["+j+"]"; fornt =;<n;++) fornt j=0;j<m;j++) fb[][j]==.0)&& b[0][j]==0.0)) d[j]=b[][m]; Tet.prntd,s,"Smple algorthm"); return d; publc statc vod manstrng arg[]) double a[][]=tet.readdouble_tetarea); double d[]=smplea); System.out.prntlnMatr.toStrngd)); Grd 8- Lneer smples optmzasyonu Çıtı 8- Lneer smples optmzasyonu Capture Output > "C:\co\java\bn\java.ee" OPO eynumber = 3.0 eyrow = eycolumn = eynumber = eyrow = eycolumn = Çıtı 8- Lneer smples optmzasyonu İnc br örne problem : Br spor malzemes üreten şretn tens raetler üreten 3 fabrası bulunmatadır. Tens raetlernn Ağır, orta ve haff olara 3 türü bulunmatadır. Bu üç türün heps de 3 fabrada da üretleblmetedr. Fabraların

323 apasteler günde 550, 650 ve 300 raetle sınırlıdır. Her tür raetn fabraya göre ar oranları değş prosesler ullanıldığından farlıdır. Fabralara göre raetlern ar oranları aşağıda tabloda verlmştr. Raet tp Fabra Fabra Fabra Ağır 0 TL 8 TL TL Orta 7 TL 9 TL 8 TL Haff 8 TL 5 TL 4 TL Satış bölümü yıllı satış tahmnlern ağır raetler çn 700 brm, orta raetler çn 850 brm ve haff raetler çn 750 brm olara vermştr. En fazla ar etme çn Karı masmze etme çn) her fabrada hang türden aç raet üreteceğmz bulunuz. Denlem set Mamum : 0h+8h+h3+7m+9m+8m3+8l+5l+4l3 Sınır şartları : h+m+l<=550 h+m+l<=650 h3+m3+l3<=300 h+h+h3<=700 m+m+m3<=850 l+l+l3<=750 olara verlr. Denlem smples fromunda yazarsa: z-0h-8h-h3-7m-9m-8m3-8l-5l-4l3=0 h+m+l+w=550 h+m+l+w=650 h3+m3+l3+w3=300 h+h+h3+w4=700 m+m+m3+w5=850 l+l+l3+w6=750 şmd atsayılar matrsn programımıza grelm :

324 Smples algortması çözüm stepler : Capture Output > "D:\java\bn\javaw.ee" OPO5 m=0n= eynumber =.0 eyrow = 3 eycolumn = eynumber =.0 eyrow = 4 eycolumn = eynumber =.0 eyrow = eycolumn =

325 eynumber =.0 eyrow = eycolumn = eynumber =.0 eyrow = eycolumn = eynumber =.0 eyrow = eycolumn = Sonuçlar : Not: [0]=h, []=h, []=h3, [3]=m, [4]=m, [5]=m3, [6]=l, [7]=l, [8]=l3 toplam ar=4650 TL smple vers ço büyüdüğünde very dosyadan ouma daha olay olablr. Very dosyadan ouyan, hesaplamayı üstte smples programında metodla yapan üçü br ana program altta verlmştr : Program 8- Lneer smples optmzasyonu dosyadan ouyan versyonu mport java.o.*; mport java.swng.*; class smple publc statc vod manstrng arg[]) Strng s="smple.tt"; JFleChooser fc=new JFleChooser); f fc.showopendalognull) == JFleChooser.APPROVE_OPTION) Fle fle = fc.getselectedfle);s=fle.getname); double a[][]=tet.readdoubles); double d[]=smple.smplea); System.out.prntlnMatr.toStrngd));

326 9. GEZGİN SATICI PROBLEMİ Satıcı problem br ço yönler le özel olan br optmzasyon problemdr. Herşeyden önce günümüzde olduça yoğun ullanılan br problem olması lgnçlğn arttırır. Problem görecel olara basttr. Br satıcı n şehre uğrayara mallarını satacatır. Şehrlern oordnatları belldr. Satıcı en ısa yolu gdere bu turu nasıl yapalr. Problem temel alt versyona ayırablrz. Brnc versyonda başlangıç ve btş notaları belrlenmş olablr. Örneğn şehr arasında br telefon veya nternet) bağlantısı urulacasa bu versyon geçerldr. İnc versyonda başlangıç ve btş notaları verlen lsteden en ısa yolu oluşturaca şelde seçleblr. Formülle tanım yapma sterse Mesafe = n [ ) + y y ) ] = / burada ve y nc şehrn oordnatlarıdır. Aynı formülü sabt başlangıç vebtş oordnatları çn yazarsa: Mesafe [ ] / n ) + y y ) + [ ) + y y ) ] = 0 b 0 b = [ ) + y y ) ] / btş n btş n Olur. Burada b, y b ) seyahatn başlama oordnatları, btş, y btş ) seyahatn btş notalarıdır. Gezgn satıcı Travellng Salesman Problem- ısaca TSP) problemnn normal versyonunda aynı şehrn sadece br ere zyaret edlmes zorunluğu vardır, anca bazı gerçe problemlerde bu zorunlu mevcut değldr. Bu problemn çözümünde her şehr çn ger alan şehrlern uzalılarını hesap edere en yaı olanını seçme ullanılablece br yalaşım gb görülsede şehr sayısı 0 lern üzerne çıtığında olasılılar ço büyüdüğünden ullanılablr b metod oluşturmaz. Şmd değş Gezgn satıcı problem çözümlerne göz atalım. İl önce Genet algortmalara göz atacağız. 9. GENETİK ALGORİTMA GEOMETRİK OLMAYAN) ÇÖZÜMÜ Genet algortmalar Gezgn satıcı TSP) problemnn çözümünde olduça yararlı görülmetedr. Anca bu problem çn endne özgü şartlar altında gelştrlmeldr. Burada vereceğmz örnelerde temel gen gelştrme çn javada ArrayLst yapısını ullanara verlen şehrlern sıralanma sırasını oluşturur. Bunun çn önce seyehat edlece şehrlern oordatları lste olara verlr. Örneğn altta sehrler.tt dosyasında olduğu gb E E E Burada l satır başlama notası oordnatlarını, nc satır se son varılaca şehrn oordnatlarını vermetedr. Sonra oordnatlar zyaret edleblece şehrlern oordnatlarıdır. Dosyada nc sıradan sonra şehr oordnatları aynı zamanda sıralamayı vermetedr. Örneğn dosyada üçüncü sırada şehrn numarası 0 / +

327 dördüncü satırda şehrn numarası, beşnc satırda şehrn numarası dr. Eğer ArayLst değşennde lstede gb br lste mevcutsa zyaret Başlangıç şehr btş şehr şelnde olacatır. Lstenn programda düzenleme şel aynı şehrn ere terarlamasını engellemetedr. Programımız satc_gen ve satc_genet olara sınıftan oluşmatadır.. Sınıf yuarda verdğmz en yapısını tanımlar, bu genn çoğalması anne ve baba breylerden çocu breynn gen yapısını-araylst dzgsn oluşturma) ve mutasyon oluştuğunda oluşaca yapıları oluşturma görevn üstlenmştr. Her breyn sadece gen vardır. İnc programımız satc_genet verlen nüfus çn yen breyler oluşturmaa, gererse olasılılara göre mutasyona zn vermete ve stenlen adar yen nesl üretmetedr. Her neslde en y çözüm yen nesle değşmeszn atarılmatadır. Seyahat daha y zleyeblme çn satc_gen programına plot) metodu da elenmştr. GA nın statsel areterstğnden dolayı sonucun en y sonucayalaşacağını umablrz, anca her zaman en y sonucu yaalayamıyacağımızı hatta her zaman aynı sonucu yaalayamıyacağımızı hatırlatmata yarar görüyoruz. Alta l lstede satc_gen.java programı, İnc lstede satc_genet.java programı verlmştr. Program 9-. satc_gen.java programı gezgn satıcı GA algortması çn gen yapısını oluşturur. mport java.utl.*; mport java.awt.*; mport java.swng.*; mport java.awt.event.*; //çıış ve varış notaları belrlenmş tur publc class satc_gen publc nt n; publc double clan,yclan; publc double varlan,yvarlan; publc double [],y[]; publc double Ftness; // uyum değer publc double RFtness; // relatf uyum publc double CFtness; // ümülatf uyum publc boolean Breeder; ArrayLst<Strng> v; Strng dz; publc satc_gendouble [],double y[]) n=.length-; v=new ArrayLst<Strng>n); =new double[n]; y=new double[n]; clan=[0]; yclan=y[0]; varlan=[]; yvarlan=y[]; Breeder=false; fornt =0;<n;++) []=[+];y[]=y[+];v.add""+); Collectons.shufflev); //swap); mesafe); publc vod mutate) nt n=nt)n*math.random)); nt n=nt)n*math.random)); //System.out.prntln"n="+n+"n="+n+"n="+n); fn!=n) Collectons.swapv, n, n); publc vod swap) nt pos[]=new nt[n]; nt ey[]=new nt[n]; nt p,; nt n=0; fornt =0;<n;++) p=collectons.bnarysearchv,""+); fp==) pos[]=p;n++;

328 fornt =0;<n;+=) Collectons.swapv,pos[],pos[+]); publc satc_gensatc_gen anne) n=anne.n; v=opyeanne.v); clan=anne.clan; yclan=anne.yclan; varlan=anne.varlan; yvarlan=anne.yvarlan; =new double[n]; y=new double[n]; fornt =0;<n;++) []=anne.[];y[]=anne.y[]; mesafe); publc satc_gennt a[],double [],double y[]) ArrayLst<Strng> anne=adda); v=opyeanne); Collecton torba=v; n=.length-; clan=[0]; yclan=y[0]; varlan=[]; yvarlan=y[]; =new double[n]; y=new double[n]; fornt =0;<n;++) []=[+];y[]=y[+]; mesafe); publc satc_genstrng dosya) double a[][]=tet.readdoubledosya); n=a[0].length-; v=new ArrayLst<Strng>n); =new double[n]; y=new double[n]; clan=a[0][0]; yclan=a[][0]; varlan=a[0][]; yvarlan=a[][]; fornt =0;<n;++) []=a[0][+];y[]=a[][+];v.add""+); Collectons.shufflev); mesafe); publc satc_gensatc_gen anne, satc_gen baba) n=anne.n; clan=anne.clan; yclan=anne.yclan; varlan=anne.varlan; yvarlan=anne.yvarlan; =new double[n]; y=new double[n]; fornt =0;<n;++) []=anne.[];y[]=anne.y[]; ArrayLst<Strng> cocu=s_cocuanne.v,baba.v); v=opyecocu); mesafe); publc satc_genarraylst<strng> anne,double [],double y[]) v=opyeanne); Collecton torba=v; n=.length-; clan=[0]; yclan=y[0]; varlan=[]; yvarlan=y[]; =new double[n]; y=new double[n]; fornt =0;<n;++) []=[+];y[]=y[+]; mesafe);

329 publc vod plot) double []=new double[n+]; double y[]=new double[n+]; nt a=0; nt b=0; Strng s=""; Strng s=""; Iterator =v.terator); nt j=0; double mesafe; dz="0"; s=strng).net); a=integer.parseints); mesafe=math.sqrt[a]-clan)*[a]-clan)+y[a]-yclan)*y[a]-yclan)); [j]=clan; y[j]=yclan; j++; [j]=[a]; y[j]=y[a]; j++; whle.hasnet)) s=strng).net); b=integer.parseints); mesafe+=math.sqrt[a]-[b])*[a]-[b])+y[a]-y[b])*y[a]-y[b])); [j]=[b]; y[j]=y[b]; j++; a=b; [j]=varlan; y[j]=yvarlan; mesafe+=math.sqrt[b]-varlan)*[b]-varlan)+y[b]-yvarlan)*y[b]-yvarlan)); Ftness=.0/mesafe; Plot pp=new Plot,y); double w[]=new double[]; double wy[]=new double[]; w[0]=[0]; wy[0]=y[0]; w[]=[n+]; wy[]=y[n+]; pp.adddataw,wy); pp.adddata,y); pp.setplottype,3); pp.setplottype,); pp.setplabel"genet satıcı problem mesafe = "+mesafe); pp.setxlabel", m"); pp.setylabel"y, m"); pp.plot); publc double mesafe) nt a=0; nt b=0; Strng s=""; Strng s=""; Iterator =v.terator); nt j=0; double mesafe; dz="0"; s=strng).net); a=integer.parseints); mesafe=math.sqrt[a]-clan)*[a]-clan)+y[a]-yclan)*y[a]-yclan)); whle.hasnet)) s=strng).net); b=integer.parseints); mesafe+=math.sqrt[a]-[b])*[a]-[b])+y[a]-y[b])*y[a]-y[b])); a=b; mesafe+=math.sqrt[b]-varlan)*[b]-varlan)+y[b]-yvarlan)*y[b]-yvarlan));

330 Ftness=.0/mesafe; return mesafe; publc vod setftness) Ftness=.0/mesafe); publc double getftness) return Ftness; publc vod setrftnessdouble RFtness) RFtness=RFtness; publc double getrftness) return RFtness; publc vod setcftnessdouble CFtness) CFtness=CFtness; publc double getcftness) return CFtness; publc statc Strng prntcollecton c) Strng s=""; Iterator =c.terator); whle.hasnet)) s+=.net)+"\n"; return s; publc Strng dz) return prntv); publc ArrayLst<Strng>opyeArrayLst<Strng>lst) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); return blesmvectoru; publc statc ArrayLst<Strng> addnt a[]) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s; fornt =0;<a.length;++) s=""+a[]; f!blesmvectoru.contanss)) blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> blesmarraylst<strng>lst, nt a) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); Strng b=new Strng""+a); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); s=strng)b; f!blesmvectoru.contanss)) blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> blesmarraylst<strng> lst, ArrayLst<Strng> lst)

331 ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); Iterator n=lst.terator); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); whlen.hasnet)) s=strng)n.net); f!blesmvectoru.contanss)) blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> altümearraylst<strng> lst, nt nn) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); fornt =0;<nn;++) s=strng)n.net); blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> alanümearraylst<strng> lst, nt nn) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); fornt =0;<nn;++) s=strng)n.net); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> s_cocuarraylst<strng> anne, ArrayLst<Strng> baba) nt nn=nt)n*math.random))+; //System.out.prntln"nn="+nn); ArrayLst<Strng> anne=altümeanne,nn); ArrayLst<Strng> anne=alanümeanne,nn); ArrayLst<Strng> baba=altümebaba,nn); ArrayLst<Strng> baba=alanümebaba,nn); ArrayLst<Strng> cocu=blesmanne,baba); ArrayLst<Strng> cocu=blesmcocu,anne); ArrayLst<Strng> cocu=blesmcocu,baba); return cocu; publc Strng cts) Iterator enm = v.terator); Strng s=" "+clan+","+yclan+")\n"; Strng s=""; nt a=0; whleenm.hasnet)) s=strng)enm.net); a=integer.parseints); s+=s+" "+[a]+","+y[a]+") \n"; s+=" "+varlan+","+yvarlan+") \n"; return s;

332 publc Strng[] ctsa) Iterator enm = v.terator); Strng s[]=new Strng[n]; nt =0; whleenm.hasnet)) s[]= Strng)enm.net)+" ";++; return s; publc Strng tostrng) Strng s=cts)+" mesafe = "+mesafe); return s; Program 9-. satc_genet.java programı gezgn satıcı GA algortmasını çözer. Başlangıç ve btş notaları sabtlenmştr. mport java.o.*; mport java.tet.*; mport java.utl.locale; class satc_genet publc satc_gen G[]; // strng of varables maes a genotype publc boolean Breeder; // publc nt POPSIZE; // populaton sze nt MAXGENS; // mamum number of generatons; double PMUTATION; // proporton of mutated varables double PXOVER; // probablty of crossover; nt Generaton; // Current generaton number nt NBreeder; // Number of survvors n a generaton nt Best; //The best genotype n the populaton double toplameny=0; double nesleny=0; double [],y[]; //şehr adresler publc satc_genetstrng name,nt POPSİZE,nt MAXGENS,double PXOVER,double PMUTATION ) double a[][]=tet.readdoubletname); double []=a[0]; double y[]=a[]; nt best; POPSIZE=POPSİZE; PXOVER=PXOVER; MAXGENS=MAXGENS; PMUTATION=PMUTATION; G=new satc_gen[popsize+]; double totalftness=0; fornt =0;<POPSIZE+);++) G[]=new satc_gen,y);g[].setftness);totalftness+=g[].getftness); double R,C=0; fornt =0;<POPSIZE+);++) R=G[].getRFtness)/totalftness;C+=R;G[].setRFtnessR);G[].setCFtnessC); publc vod setpopulaton) double totalftness=0; fornt =0;<POPSIZE;++) G[]=new satc_gen,y); evaluate); publc vod evaluate) nesleny=0; double totalftness=0; fornt =0;<POPSIZE+;++) G[].setFtness); double mesafe=.0/g[].getftness); fmesafe>nesleny) nesleny=mesafe;

333 fmesafe>toplameny) toplameny=mesafe; totalftness+=g[].getftness); double R=0,C=0,RP=G[POPSIZE].getFtness)/totalftness; fornt =0;<POPSIZE;++) R=G[].getFtness)/totalftness;C+=R;G[].setRFtnessR);G[].setCFtnessC); fr > RP) Best=; G[POPSIZE]=new satc_geng[]); RP=G[POPSIZE].getFtness)/totalftness; publc satc_gen[] copypopulaton) satc_gen Po[]=new satc_gen[popsize+]; fornt =0;<POPSIZE+);++) Po[]=new satc_geng[]); Po[].Ftness=G[].Ftness; Po[].RFtness=G[].RFtness; Po[].CFtness=G[].CFtness; return Po; publc vod select) double r,r,r,gf0,gf; evaluate); //anne baba aday adaylarını seç satc_gen Po[]=new satc_gen[popsize+]; NBreeder=0; nt,j; for=0;<popsize+);++) r=math.random); gf0=0; forj=0;j<popsize;j++) gf=g[j].getcftness); fr>=gf0) && r<=gf)) Po[NBreeder]=new satc_geng[j]); //System.out.prntln"j= "+j+"gf0="+gf0+"gf="+gf+"r="+r+"nbreeder="+nbreeder); NBreeder++;brea; gf0=gf; // seçlen anne, baba aday adaylarının yen çocu yapmalarına olana ver nt breed=nt)popsize*pxover); for=0;<breed;++) nt a=nt)math.random)*nbreeder); nt b=nt)math.random)*nbreeder); G[]=new satc_genpo[a],po[b]); //System.out.prntln"a="+a+"b="+b+"cocu="+G[].toStrng)); r=math.random); //mutasyon olasılığı : PMUTATION fr < PMUTATION) G[].mutate); //System.out.prntlnNBreeder+" "+G[POPSIZE].mesafe)); //lstenn gersn seçlen anne baba adaylarıyla doldur for=breed;<popsize;++) nt a=nt)math.random)*nbreeder); G[]=new satc_genpo[a]); publc vod nesller) fornt =0;<MAXGENS;++) select); publc satc_gen seclms_nesl) nesller); G[POPSIZE].plot);

334 return G[POPSIZE]; publc statc vod manstrng arg[]) satc_genet sg=new satc_genet"sehrler.tt",000,000,.0,0.05 ); System.out.prntln"seçlmş nesl : "+sg.seclms_nesl).tostrng)); İl sonucumuz tam doğru br sonuç vermetedr, çünü test vermz br darenn etrafında aynı şehrde başlayan vebten br turu gösteryordu. Şel 9.- Gezgn satıcı problem GA satc_genet çözüm graf çıtı sabt başlangıç ve btş şehrler verlmş. Şel 9.- Gezgn satıcı problem GA satc_genet çözüm raamsal çıtı Capture Output > "D:\java\bn\javaw.ee" satc_genet seçlmş nesl : 00.0,0.0) , ) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) , E-4) , ) , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) 00.0,0.0) mesafe =

335 Şel 9.-3 Gezgn satıcı problem GA satc_genet çözüm graf çıtı sabt başlangıç ve btş şehrler Şel 9.-4 Gezgn satıcı problem GA satc_genet çözüm raamsal çıtı sabt başlangıç ve btş şehrler Capture Output > "D:\java\bn\javaw.ee" satc_genet seçlmş nesl : 00.0,0.0) , ) , ) , ) , ) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) , E-4) , ) , ) , ) , ) E-4,-00.0) , ) 00.0,0.0) mesafe = Eğer gezgn satıcı problemnde başlangıç ve btş notaları sabtlenmemşse, yan tura herhang br şehrden başlanablyorsa ve tur herhang br şehrde bteblyorsa programlama odu br üsttene benzer anca braz değştr. İl ve son şehr oordnatları hem ounan lsteden hem de program odundan aldırılara hesaplamalar gerçeleştrlr. Program odları satc_gen ve satc_genet altta verlmştr. Program 9-.3 satc_gen.java programı gezgn satıcı GA algortması çn gen yapısını oluşturur. Başlangıç ve btş notaları sabtlenmemştr. mport java.utl.*; mport java.awt.*; mport java.swng.*; mport java.awt.event.*; //çıış ve varış notaları belrlenmemş tur publc class satc_gen publc nt n; publc double [],y[]; publc double Ftness; // uyum değer publc double RFtness; // relatf uyum publc double CFtness; // ümülatf uyum publc boolean Breeder;

336 ArrayLst<Strng> v; Strng dz; publc satc_gendouble [],double y[]) n=.length; v=new ArrayLst<Strng>n); =new double[n]; y=new double[n]; Breeder=false; fornt =0;<n;++) []=[];y[]=y[];v.add""+); Collectons.shufflev); mesafe); publc vod mutate) nt n=nt)n*math.random)); nt n=n+)%n; //nt n=nt)n*math.random)); Collectons.swapv, n, n); publc vod swap) nt pos[]=new nt[n]; nt ey[]=new nt[n]; nt p,; nt n=0; fornt =0;<n;++) p=collectons.bnarysearchv,""+); fp==) pos[]=p;n++; fornt =0;<n;+=) Collectons.swapv,pos[],pos[+]); publc satc_gensatc_gen anne) n=anne.n; v=opyeanne.v); =new double[n]; y=new double[n]; fornt =0;<n;++) []=anne.[];y[]=anne.y[]; mesafe); publc satc_gennt a[],double [],double y[]) ArrayLst<Strng> anne=adda); v=opyeanne); Collecton torba=v; n=.length; =new double[n]; y=new double[n]; fornt =0;<n;++) []=[];y[]=y[]; mesafe); publc satc_genstrng dosya) double a[][]=tet.readdoubledosya); n=a[0].length; v=new ArrayLst<Strng>n); =new double[n]; y=new double[n]; fornt =0;<n;++) []=a[0][];y[]=a[][];v.add""+); Collectons.shufflev); mesafe); publc satc_gensatc_gen anne, satc_gen baba) n=anne.n; =new double[n]; y=new double[n]; fornt =0;<n;++) []=anne.[];y[]=anne.y[]; ArrayLst<Strng> cocu=s_cocuanne.v,baba.v);

337 v=opyecocu); mesafe); publc satc_genarraylst<strng> anne,double [],double y[]) v=opyeanne); Collecton torba=v; n=.length; =new double[n]; y=new double[n]; fornt =0;<n;++) []=[];y[]=y[]; mesafe); publc vod plot) double []=new double[n]; double y[]=new double[n]; nt a=0; nt b=0; Strng s=""; Strng s=""; Iterator =v.terator); nt j=0; double mesafe=0; dz="0"; s=strng).net); a=integer.parseints); [j]=[a]; y[j]=y[a]; j++; whle.hasnet)) s=strng).net); b=integer.parseints); mesafe+=math.sqrt[a]-[b])*[a]-[b])+y[a]-y[b])*y[a]-y[b])); [j]=[b]; y[j]=y[b]; j++; a=b; Plot pp=new Plot,y); double w[]=new double[]; double wy[]=new double[]; w[0]=[0]; wy[0]=y[0]; w[]=[n-]; wy[]=y[n-]; pp.adddataw,wy); pp.adddata,y); pp.setplottype,3); pp.setplottype,); pp.setplabel"genet satıcı problem mesafe = "+mesafe); pp.setxlabel", m"); pp.setylabel"y, m"); pp.plot); publc double mesafe) nt a=0; nt b=0; Strng s=""; Strng s=""; Iterator =v.terator); nt j=0; double mesafe; dz="0"; s=strng).net); a=integer.parseints); mesafe=0.0; whle.hasnet)) s=strng).net); b=integer.parseints);

338 mesafe+=math.sqrt[a]-[b])*[a]-[b])+y[a]-y[b])*y[a]-y[b])); a=b; Ftness=.0/mesafe; return mesafe; publc vod setftness) Ftness=.0/mesafe); publc double getftness) return Ftness; publc vod setrftnessdouble RFtness) RFtness=RFtness; publc double getrftness) return RFtness; publc vod setcftnessdouble CFtness) CFtness=CFtness; publc double getcftness) return CFtness; publc statc Strng prntcollecton c) Strng s=""; Iterator =c.terator); whle.hasnet)) s+=.net)+"\n"; return s; publc Strng dz) return prntv); publc ArrayLst<Strng>opyeArrayLst<Strng>lst) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); return blesmvectoru; publc statc ArrayLst<Strng> addnt a[]) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s; fornt =0;<a.length;++) s=""+a[]; f!blesmvectoru.contanss)) blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> blesmarraylst<strng>lst, nt a) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); Strng b=new Strng""+a); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); s=strng)b; f!blesmvectoru.contanss)) blesmvectoru.adds); return blesmvectoru;

339 publc ArrayLst<Strng> blesmarraylst<strng> lst, ArrayLst<Strng> lst) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); Iterator n=lst.terator); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); whlen.hasnet)) s=strng)n.net); f!blesmvectoru.contanss)) blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> altümearraylst<strng> lst, nt nn) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); fornt =0;<nn;++) s=strng)n.net); blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> alanümearraylst<strng> lst, nt nn) ArrayLst<Strng> blesmvectoru = new ArrayLst<Strng>); Strng s,s; Iterator n=lst.terator); fornt =0;<nn;++) s=strng)n.net); whlen.hasnet)) s=strng)n.net); blesmvectoru.adds); return blesmvectoru; publc ArrayLst<Strng> s_cocuarraylst<strng> anne, ArrayLst<Strng> baba) nt nn=nt)n*math.random))+; //System.out.prntln"nn="+nn); ArrayLst<Strng> anne=altümeanne,nn); ArrayLst<Strng> anne=alanümeanne,nn); ArrayLst<Strng> baba=altümebaba,nn); ArrayLst<Strng> baba=alanümebaba,nn); ArrayLst<Strng> cocu=blesmanne,baba); ArrayLst<Strng> cocu=blesmcocu,anne); ArrayLst<Strng> cocu=blesmcocu,baba); return cocu; publc Strng cts) Iterator enm = v.terator); Strng s=""; nt a=0; Strng s=""; whleenm.hasnet)) s=strng)enm.net); a=integer.parseints); s+=s+" "+[a]+","+y[a]+") \n";

340 return s; publc Strng[] ctsa) Iterator enm = v.terator); Strng s[]=new Strng[n]; nt =0; whleenm.hasnet)) s[]= Strng)enm.net)+" ";++; return s; publc Strng tostrng) Strng s=cts)+" mesafe = "+mesafe); return s; Program 9-.4 satc_genet.java programı gezgn satıcı GA algortmasını çözer. Başlangıç ve btş notaları sabtlenmemştr. mport java.o.*; mport java.tet.*; mport java.utl.locale; // class satc_genet publc satc_gen G[]; // strng of varables maes a genotype publc boolean Breeder; // publc nt POPSIZE; // populaton sze nt MAXGENS; // mamum number of generatons; double PMUTATION; // proporton of mutated varables double PXOVER; // probablty of crossover; nt Generaton; // Current generaton number nt NBreeder; // Number of survvors n a generaton nt Best; //The best genotype n the populaton double toplameny=0; double nesleny=0; double [],y[]; //şehr adresler publc satc_genetstrng name,nt POPSİZE,nt MAXGENS,double PXOVER,double PMUTATION ) double a[][]=tet.readdoubletname); double []=a[0]; double y[]=a[]; nt best; POPSIZE=POPSİZE; PXOVER=PXOVER; MAXGENS=MAXGENS; PMUTATION=PMUTATION; G=new satc_gen[popsize+]; double totalftness=0; fornt =0;<POPSIZE+);++) G[]=new satc_gen,y);g[].setftness);totalftness+=g[].getftness); double R,C=0; fornt =0;<POPSIZE+);++) R=G[].getRFtness)/totalftness;C+=R;G[].setRFtnessR);G[].setCFtnessC); publc vod setpopulaton) double totalftness=0; fornt =0;<POPSIZE;++) G[]=new satc_gen,y); evaluate); publc vod evaluate) nesleny=0; double totalftness=0; fornt =0;<POPSIZE+;++) G[].setFtness);

341 double mesafe=.0/g[].getftness); fmesafe>nesleny) nesleny=mesafe; fmesafe>toplameny) toplameny=mesafe; totalftness+=g[].getftness); double R=0,C=0,RP=G[POPSIZE].getFtness)/totalftness; fornt =0;<POPSIZE;++) R=G[].getFtness)/totalftness;C+=R;G[].setRFtnessR);G[].setCFtnessC); fr > RP) Best=; G[POPSIZE]=new satc_geng[]); RP=G[POPSIZE].getFtness)/totalftness; publc satc_gen[] copypopulaton) satc_gen Po[]=new satc_gen[popsize+]; fornt =0;<POPSIZE+);++) Po[]=new satc_geng[]); Po[].Ftness=G[].Ftness; Po[].RFtness=G[].RFtness; Po[].CFtness=G[].CFtness; return Po; publc vod select) double r,r,r,gf0,gf; evaluate); //anne baba aday adaylarını seç satc_gen Po[]=new satc_gen[popsize+]; NBreeder=0; nt,j; for=0;<popsize+);++) r=math.random); gf0=0; forj=0;j<popsize;j++) gf=g[j].getcftness); fr>=gf0) && r<=gf)) Po[NBreeder]=new satc_geng[j]); //System.out.prntln"j= "+j+"gf0="+gf0+"gf="+gf+"r="+r+"nbreeder="+nbreeder); NBreeder++;brea; gf0=gf; // seçlen anne, baba aday adaylarının yen çocu yapmalarına olana ver nt breed=nt)popsize*pxover); for=0;<breed;++) nt a=nt)math.random)*nbreeder); nt b=nt)math.random)*nbreeder); G[]=new satc_genpo[a],po[b]); //System.out.prntln"a="+a+"b="+b+"cocu="+G[].toStrng)); r=math.random); //mutasyon olasılığı : PMUTATION fr < PMUTATION) G[].mutate); //System.out.prntlnNBreeder+" "+G[POPSIZE].mesafe)); //lstenn gersn seçlen anne baba adaylarıyla doldur for=breed;<popsize;++) nt a=nt)math.random)*nbreeder); G[]=new satc_genpo[a]); publc vod nesller) fornt =0;<MAXGENS;++) select); publc satc_gen seclms_nesl)

342 nesller); G[POPSIZE].plot); return G[POPSIZE]; publc statc vod manstrng arg[]) satc_genet sg=new satc_genet"sehrler.tt",000,000,.0,0.03 ); //sg.nesller); //System.out.prntln"en y mesafe = "+sg.toplameny); System.out.prntln"seçlmş nesl : "+sg.seclms_nesl).tostrng)); Capture Output > "D:\java\bn\javaw.ee" satc_genet seçlmş nesl : , ) , E-4) , ) , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) ,0.0) , ) , ) , ) , ) E-5,00.0) , ) , ) , ) mesafe = GEZGİN SATICI PROBLEMİ MONTE CARLO ALGORİTMASI GEOMETRİK OLMAYAN) ÇÖZÜMÜ Monte arlo algortmaları brço problemde alternatf olara önem taşır. Anca Gezgn satıcı problem çn ço y br alternatf oluşturmaz. Burada bu yöntem özellle geçerl çözüme ulaşamadığımız gösterme amacıyla verlmştr. Temel olara genet algortmada ullandığımız satc_gen sınıfından yararlanılmıştır. Programımızda 00 mlyon tesadüf yol oluşturulmuş ve bu yollardan en ısası seçlmştr.

343 Program 9-. satc_montecarlo.java programı gezgn satıcı montecarlo algortmasını çözer. Başlangıç ve btş notaları sabtlenmştr. mport java.o.*; mport java.tet.*; mport java.utl.locale; class satc_montecarlo publc satc_gen G; // strng of varables maes a genotype publc nt POPSIZE; // populaton sze double [],y[]; //şehr adresler publc satc_montecarlostrng name,nt POPSİZE) double a[][]=tet.readdoubletname); double []=a[0]; double y[]=a[]; POPSIZE=POPSİZE; satc_gen G=new satc_gen,y); double toplameny=e0; double mesafe; nt counter; fornt =0;<POPSIZE;++) G=new satc_gen,y); mesafe=g.mesafe); counter=%000000; fcounter==0) System.out.prntln"="+); fmesafe < toplameny) toplameny=mesafe;g=new satc_geng);system.out.prntln"="++"\n"+g.tostrng)); publc statc vod manstrng arg[]) satc_montecarlo sg=new satc_montecarlo"sehrler.tt", ); //System.out.prntln"seçlmş nesl : "+sg.g.tostrng)); sg.g.plot); Çıtı 9-. satc_montecarlo.java programı gezgn satıcı montecarlo algortması çözüm stepler. Başlangıç ve btş notaları sabtlenmştr Capture Output > "D:\java\bn\javaw.ee" satc_montecarlo =0 =0 00.0,0.0) , ) , ) , ) , ) E-5,00.0) , ) , ) E-4,-00.0) , ) , ) , ) , E-4) , ) , ) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = =8 00.0,0.0) , ) , ) , )

344 , ) , ) , ) , ) , ) , ) , ) E-5,00.0) , ) E-4,-00.0) , ) , ) , ) , E-4) , ) , ) 00.0,0.0) mesafe = =3 00.0,0.0) , ) , ) , ) , ) , E-4) E-5,00.0) , ) , ) , ) , ) , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) E-5,00.0) , ) , ) , ) , ) , ) , E-4) , ) , ) , ) , ) , ) , ) , ) , ) E-4,-00.0) , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) , ) , ) , ) , ) , ) , ) , ) , ) , )

345 , ) , ) , ) , E-4) E-5,00.0) , ) E-4,-00.0) , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) , ) , ) E-4,-00.0) , ) , ) , E-4) , ) , ) , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) , ) , ) , ) , E-4) , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) , ) , ) , ) , ) E-5,00.0) , ) 00.0,0.0) mesafe = = ,0.0) E-4,-00.0) , ) , E-4) , ) , ) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) , ) , ) , ) , )

346 , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) , E-4) , ) E-5,00.0) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) E-4,-00.0) 00.0,0.0) mesafe = = ,0.0) , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) , E-4) E-5,00.0) , ) , ) , ) , ) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = =7 00.0,0.0) E-4,-00.0) , ) , ) , ) , ) , ) , ) , ) , ) , ) , E-4) , ) E-5,00.0) , ) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = = ,0.0) , )

347 , ) , ) E-5,00.0) , ) , ) , E-4) , ) , ) , ) , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = = ,0.0) E-5,00.0) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , E-4) E-4,-00.0) , ) , ) , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) , ) , ) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) , ) , E-4) , ) , ) , ) E-4,-00.0) , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) , ) , ) , ) , ) , ) , ) , E-4)

348 , ) , ) , ) E-5,00.0) , ) E-4,-00.0) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = = ,0.0) , ) , ) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) E-4,-00.0) , E-4) , ) , ) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = = = = ,0.0) , ) , ) E-5,00.0) , ) , E-4) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) E-4,-00.0) , ) , ) 00.0,0.0) mesafe = = = ,0.0) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) , ) , E-4) , ) , )

349 E-4,-00.0) , ) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = = = ,0.0) , ) , ) E-4,-00.0) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , E-4) , ) E-5,00.0) , ) , ) , ) 00.0,0.0) mesafe = = = = = = ,0.0) , ) , ) , ) E-5,00.0) , ) , ) , ) , ) , ) , E-4) , ) , ) , ) , ) , ) , ) E-4,-00.0) , ) , ) 00.0,0.0) mesafe = = = = = ,0.0) , ) , ) , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) , )

350 9-00.0, E-4) , ) , ) , ) E-5,00.0) , ) , ) , ) 00.0,0.0) mesafe = = = = = = = = = ,0.0) , ) , ) E-4,-00.0) , ) , ) , ) , ) , ) , ) , ) , E-4) , ) , ) , ) , ) , ) , ) E-5,00.0) , ) 00.0,0.0) mesafe = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ,0.0) , )

351 , ) , ) , ) E-4,-00.0) , ) , ) , ) , ) , ) , ) E-5,00.0) , ) , E-4) , ) , ) , ) , ) , ) 00.0,0.0) mesafe = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

352 Çıtı 9-. satc_montecarlo.java programı gezgn satıcı montecarlo algortması Fnal çözüm graf formatı. Başlangıç ve btş notaları sabtlenmştr. Graf 9.3 GEZGIN SATICI PROBLEMİ, KARINCA GEOMETRİK OLMIYAN) ÇÖZÜMÜ Satıcı problem olara blnen n nota arasında en ısa yolu tüm n notaya uğrama şartı le) bulma problem günlü hayatta sıça arşımıza çıablr. Günümüzde en yaygın ullanım alanları, telefon nternet gb eletron bağlantıları en ısa yol üzernden yapma eylemdr. Burada bu problemn özel br çözümü üzernde duracağız. Karınca smulasyonu. Karınca smulasyon yöntem, yaın zamanda gelştrlmş olan 90 ların sonları ); br tür stoast tesadüf sayı sstemler ullanan) ombnasyonal optmzasyon yöntemdr. Özellle; TSP Travellng Salesman Program, MST Mnmum Spannng Tree, ş programı yapma problemler gb onularda uygulama alanı bulmuştur. Temel özelller; poztf gerbesleme postve feedbac ), dağıtılmış hesaplama dstrbuted computng), ve üreten açgözlü sezgsellğn constructve greedy heurstc) ullanımıdır. Poztf gerbesleme, uygun sonuçların çabu bulunmasında; dağıtılmış hesaplama, eren usurlu) yaınsamanın engellenmesnde; açgözlü sezgsell se, arama şlemnn l ademelernde abul edleblr sonuçlar bulunmasında etldr. Bu smulasyonun temel gerçe dünyadan, arıncaların yyeceğe gden yolu bulma prensbnden ortaya çımıştır. Karıncalar yuvalarından yyece bulduları yere gderen feremon denen ou salan br myasal madde yayarlar. Dğer arıncalar bu ouyu algılayablr. Kounun varlığı ve şddet, dğer arıncaların yol terchnde etl olur. Anca myasal madde zamanla uçtuğundan ou zaman çnde yo olur. Bu şelde arıncaların tapettğ br ouz oluşur. Bu şelde yengelen arıncalar yyece aynağına daha olaylıla bu ou yolunu zleyere ulaşablrler. Her geçen arınca da yen feromen bıraacağından ço ullanılan yolun ouyoğunluğu artaren ullanılmayan yollarda olan feromen de uçacağından ou yo olur. Eğer br yol daha ısa se o yol üzernde bren feromen mtarı da arıncalar yuvaya daha hızlı dönebldler de hesaba atılırsa daha yoğun olacatır.

353 Şel 5.- Karıncaların br engel arşısında davranışı yol seçm) Şmd bu prensb blgsayar algortmasına nasıl çevrebleceğmz rdeleyelm : Karıncaların ve gb değş yoldan yyece aynağına ulaştılarını varsayalım. Bu durumda t zamanında m+) nc arıncanın brnc yolu seçme olasılığ : olara yazılablr. Burada m ve m brnc yolu ullanan ve nc yolu ullanan arınca sayısıdır. ve h sabtlerdr. m+) nc arıncanın nc yolu seçme olasılığı da : P m+) = P m+ Şelnde yazılablr. Blgsayar smulasyonunda ullanılan ajan arıncalar, gerçe hayatta arıncalara göre belrl farlılılar gösterrler. Bunlar;. Ajan arıncaların hafızası vardır. Örneğn; gezgn satıcı problemnde daha önce gttler yerler br Tabu lstesnde salarlar, hatırlarlar.. Tamamyle ör değllerdr. Örneğn; seçtler yolu, uzunluğuna göre de rdelerler. 3. Zamanın ayrı olduğu br çevrede yaşarlar. Şel 5.- Karıncaların yol problemlernde yol seçmnn zaman çnde dağılımı Şel 5.0- de ajan arıncaların nasıl br davranış çnde olduları zleneblr: t = 0 anında; E den A ya doğru, A dan da E ye doğru 30 ar arınca yola çımatadır. Henüz yollarda feramon brmes olmadığı çn, arıncalar eşt olasılıta B ve D şehrlernden H ve C şehrlerne doğru yönlecelerdr. Bu durumda 5 er l grup oluşacatır. B C D yolu daha ısa olduğu çn, burada daha fazla feramon brecetr. t = anında; B C D yolunda daha fazla feramon brtğ çn, arıncalar ağırlılı olara bu güzergahı terch edecetr. Karınca Kolonlernn Gezgn Satıcı Programne Uygulaması Blndğ üzere; gezgn satıcı problem, verlen n tane şehrden oluşan ümede her şehre br ez uğrayara oluşturulan en ısa yolun bulunmasını apsar. Tanımlar : Şehrlern bulunduğu uzayı, Öld uzayı olara abul ederse; n d j b t) m : Şehr sayısı : le j numaraları brbrne brleştren Öld mesafes : t anında, şehrde arınca sayısı : Toplam arınca sayısı n m = = ) b t

354 j ) t τ : t anında; j yolunda zn yoğunluğu ρ : Buharlaşma oranı; sonsuz feramon brmesn ve yerel mnmalara taılmayı engelleme çn den üçü olmalıdır. Δ τ j : j yolunda, ıncı arınca tarafından bıraılmış zn, yol uzunluğuna oranı Δ τ j = Q L Eğer ıncı arınca bu yolu ullandıysa Δ τ j = 0 Eğer ıncı arınca bu yolu ullanmadıysa L ; ıncı arıncanın toplam atettğ yol Q; bıraılan sabt feramon mtarı Tabu η j : ıncı arıncanın gttğ şehrlern lstes : Görünürlü η j = d j p ) t j : nc şehrden j nc şehre geçş olasılığı Eğer j şehr tabu lstesnde yosa; α β [ τ j ) t ] [ η ] j p j ) t = α ve β; görünürlü le feramon mtarı arasında önem ontrol α β [ τ ) t ] [ η ] eden değşenlerdr Eğer j şehr tabu lstesnde var se; p j ) t = 0 Algortma :. Başlangıç : a. t = 0 t : zaman sayacı b. NC = 0 NC : çevrm sayacı c. Her yol çn; başlangıç feramon değerlern belrler; d. m tane arıncayı n tane düğüme yerleştr. s = 0 s : tabu lstes sayacı = den m ye adar; ıncı arınca çn tabu s) lstesnde l şehrler yerleştr. 3. Lste dolana adar terarla; a. s = s + b. = den m ye adar; p j t olasılığına bağlı olara seç. j nc gdlece şehr; ). ıncı arıncayı j nc şehre götür. j nc şehr tabu lstesne ele 4. = den m ye adar a. ıncı arıncayı tabu n) den tabu ) e götür b. ıncı arınca tarafından atedlen mesafey hesapla; L c. bulunan en ısa mesafey güncelle d. her j yolu çn;. = den m ye adar Eğer ıncı arınca bu yolu ullandıysa Δ τ j = Q L

355 Eğer ıncı arınca bu yolu ullanmadıysa Δ τ j = 0 Δ τ j = Δτ j + Δτ j 5. Her j yolu çn; t n) 6. τ t + n τ değern hesapla; j + = ρτ a. j ) j ) j t + Δτ b. t = t + n c. NC = NC + d. Her j yolu çn = 0 τ Δ j a. Eğer NC < NC mas ; bütün tabu lstelern temzle ve. maddeye gt; b. Değlse; en ısa mesafey yaz ve dur. tıanma davranışı / stagnaton behavour) Lteratürde; farlı arınca olonler algortmaları mevcuttur. Bazıları sadece feramon bıraılış şelne alternatf getrren bazıları olon şeln değştrmetedr. Bunlardan bazıları :. Karınca Döngüsü Ant Cycle ) : Bu br önce sayfada açılanmış algortmadır.. Karınca Yoğunluğu Ant densty ) : Bu metoda farlılı; feramonlar güncellenren, arıncanın toplam atettğ yola baılmaz. Eğer ıncı arınca bu yolu ullandıysa Eğer ıncı arınca bu yolu ullanmadıysa Δ τ j = Q Δ τ j = 0 3. Karınca Sayı Ant Quantty ) : Bu metodda se; feramonlar güncellenren, arıncanın toplam atettğ yol yerne, j şehrler arasında mesafe ullanılır. Eğer ıncı arınca bu yolu ullandıysa Eğer ıncı arınca bu yolu ullanmadıysa Δ τ j = Q d j Δ τ j = 0 Bu yöntem arasında far, brnde arıncanın bıratığı feramon mtarında artış, şehrler arasında mesafeyle ters orantılı en; dğernde mesafeden bağımsızdır. 4. Ardışı Karınca Kolons Sequental Ant Colony Optmzaton ) : Bu metodda; sadece te arınca bütün düğümler, br olasılısal geçş uralına göre gezer[]. 5. Eltst Karınca Kolons Eltst Strategy ) : Bu yöntem genet algortmalarında, eltst stratejye benzer. En y yola, o yola doğru gdş arttırma açısından e*q/l mtarında feramon elenr. Burada; e, en y arınca sayısı; L se en ısa tur mesafesdr. Satıcı problem çn arınca optmzasyonu Program 5.9- de verlmştr. Örne test ver grds olara br çembern üzerne dzlmş notalar aldı. Grd,y oordnat verler dosya sehrler.tt de verlmştr. Sonuçta şehrlern grd vetörü sırasına göre sıralaması verlmetedr. Program 9-3. Satıcı problem çözüm yöntem olara arınca optmzasyonu mport java.o.*; mport java.math.*; class harta double[][] sehrler; publc double mesafedouble,double,double y,double y)

356 double mesafe; mesafe=math.powmath.pow-),)+math.powy-y),)),0.5); return mesafe; publc hartasehrou ) sehrler=new double[.sehrsays][.sehrsays+3]; fornt =0;<.sehrsays;++) sehrler[][0]=; //?ehrn ID s sehrler[][]=.sehrler[][0]; //?ehrn oordnat? sehrler[][]=.sehrler[][]; //?ehrn y oordnat? fornt =3;<.sehrsays+3);++) sehrler[][]=mesafe.sehrler[][0],.sehrler[-3][0],.sehrler[][],.sehrler[-3][]); class sehrou Strng dosyasm=new Strng" "); double[][] sehrler; nt sehrsays; publc sehroustrng ) dosyasm=; sehrler=tet.readdouble); sehrsays=sehrler.length; publc class ant double mnmesafe; publc statc vod qucsortdouble[][],nt y,nt z) double[] md=new double[3]; double[] temp=new double[3]; nt,j; =y; j=z; md[0]=[y+z)/][0]; md[]=[y+z)/][]; md[]=[y+z)/][]; do whle[][] < md[] & < z) ++; whle[j][] > md[] & j > y) j--; f<=j) temp[]=[][]; temp[]=[][]; temp[0]=[][0]; [][]=[j][]; [][]=[j][]; [][0]=[j][0]; [j][]=temp[]; [j][]=temp[]; [j][0]=temp[0]; ++; j--; whle<=j); fy<j) qucsort,y,j); f<z) qucsort,,z); publc double readmesafe) return mnmesafe; publc nt[] ant_optmzatonstrng dosya,double vaporzaron,double feramon,nt narnca ) double tolerans=.0e-5; double d=0.; //vaporzaton 0- double buharlasmaoran=vaporzaron; //feramonun buharlasma oranı //feramon=5 örneğn) double feramon=feramon; //feramon double beta=3; // double alfa=; // double baslangcferamonu=; //t=0 annda yolda feramon mtar? //nt saarnca=0; //terasyon aras? orunaca masmum ar?nca say?s? //nt sas; //salanaca arınca şaret

357 sehrou sehr=new sehroudosya); //şehrlern ounması harta bolge=new hartasehr); //hartanın hazırlanması double[][] feramondurumu=new double[sehr.sehrsays][sehr.sehrsays]; //yolların feramon durumunun aydedleceğ double[][] deltaferamon=new double[sehr.sehrsays][sehr.sehrsays]; //nt arncasays=000; //olon büyülüğü nt arncasays=narnca; nt t=0; nt mat=0; //masmum terasyon says nt lsehr; nt yolsays; double toplamolasl=0; double[][] olasllar=new double[sehr.sehrsays][sehr.sehrsays]; double mnolasl=0; double maolasl=0; double tolasl=0; double mesafe; mnmesafe=0; double mnmesafees=0.; d=math.absmnmesafe-mnmesafees); nt mnd=0; nt[] mnguzergah=new nt[sehr.sehrsays]; arncaorj[] arncaordusu=new arncaorj[arncasays]; //arncaorj[] saar=new arncaorj[saarnca]; yolsays=0; //yolsaysnn hesaplanması whle t<mat && d>tolerans) mnmesafees=mnmesafe; yolsays=0; fornt =;<sehr.sehrsays-;++) yolsays=yolsays+sehr.sehrsays-; yolsays=yolsays+; //System.out.prntlnyolsays); double[][] olaslpasta=new double[yolsays][3]; //t=0 anında feramonun yollara onulması ft==0) fornt =0;<sehr.sehrsays-);++) fornt j=+;j<sehr.sehrsays);j++) f==j) feramondurumu[][j]=0; else feramondurumu[][j]=baslangcferamonu; //olasl pastasnn hesaplanmas //toplam olaslgn hesaplanmas fornt =0;<sehr.sehrsays-;++) fornt j=+;j<sehr.sehrsays);j++) f!=j) toplamolasl=math.powferamondurumu[][j]),alfa)*math.powbolge.sehrler[][j+3],-beta); //toplamolasl=toplamolasl/; //pastann hesaplanması fornt =0;<sehr.sehrsays-;++) fornt j=+;j<sehr.sehrsays);j++) f!=j) olasllar[][j]=math.powferamondurumu[][j]),alfa)*math.powbolge.sehrler[][j+3],-beta))/toplamolasl; fbolge.sehrler[][j+3]==0) f==0 & j==) maolasl=olasllar[][j]; mnolasl=olasllar[][j]; olaslpasta[0][]=mnolasl; olaslpasta[0][0]=; olaslpasta[0][]=j; olaslpasta[yolsays-][]=maolasl; olaslpasta[yolsays-][0]=; olaslpasta[yolsays-][]=j; else fmaolasl<olasllar[][j]) maolasl=olasllar[][j];

358 olaslpasta[yolsays-][]=maolasl; olaslpasta[yolsays-][0]=; olaslpasta[yolsays-][]=j; else fmnolasl>olasllar[][j]) mnolasl=olasllar[][j]; olaslpasta[0][0]=; olaslpasta[0][]=j; else olasllar[][j]=0; fornt =;<yolsays-;++) olaslpasta[][]=mnolasl; //pastann sralanmas nt l=0; fornt =0;<sehr.sehrsays-;++) fornt j=+;j<sehr.sehrsays);j++) f!=j) olaslpasta[l][]=olasllar[][j]; olaslpasta[l][0]=; olaslpasta[l][]=j; l++; //olasllar sralama qucsortolaslpasta,0,yolsays-); //t=0 anında l arncaların yerleştrlmes fornt =0;<arncasays;++) double ; arncaordusu[]=new arncaorj,sehr.sehrsays,feramon); =Math.random)*sehr.sehrsays; lsehr=nt) ; arncaordusu[].gyol[0]=lsehr; //Karncaların yürümes fornt =;<sehr.sehrsays;++) fornt j=0;j<arncasays;j++) arncaordusu[j].yurubolge,olaslpasta,,yolsays); mnmesafe=arncaordusu[0].mesafe; mnguzergah=arncaordusu[0].gyol; fornt j=0;j<arncasays;j++) farncaordusu[j].mesafe<mnmesafe) mnmesafe=arncaordusu[j].mesafe; mnguzergah=arncaordusu[j].gyol; fornt j=0;j<arncasays;j++) arncaordusu[j].fergunceldeltaferamon); fornt =0;<sehr.sehrsays-);++) fornt j=+;j<sehr.sehrsays);j++) f==j) feramondurumu[][j]=0; else feramondurumu[][j]=feramondurumu[][j]*buharlasmaoran+deltaferamon[][j]; t++; d=math.absmnmesafe-mnmesafees); return mnguzergah;

359 Program 9-3. Satıcı problem çözüm yöntem olara arınca optmzasyonu, test programı publc class anttest publc statc vod manstrng args[]) double buharlasmaoran=0.90; //feramonun buharlasma oran? double feramon=5; //feramon nt toplamarnca=000; ant =new ant); nt[] tur=.ant_optmzaton"sehrler.tt",buharlasmaoran,feramon,toplamarnca); fornt =0;<tur.length;++)System.out.prnttur[]+" "); System.out.prntln"\nmnmum mesafe = "+.readmesafe)); Program 5. Satıcı problem çözüm yöntem olara arınca optmzasyonu, test vers E E E E-4 Çıtı 5.- Satıcı problem çözüm yöntem olara arınca optmzasyonu, test çıtısı Capture Output > "C:\co\java\bn\javaw.ee" anttest mnmum mesafe = > Termnated wth et code PROBLEMLER PROBLEM Çürü buharla çalışan br damıtma tanında benzen ve tolüen ayıştırılmatadır. Sıvı fazda en yüse tolüen saflığı elde etme çn arışımda tolüen oranını masmze etme çn)tan hang sıcalıtaçalıştırılmalıdır? tolüen P doyma_tolüen + benzen P doyma_benzen = P = 760 mmhg log 0 P doyma_ benzen ) =6.905 /T+) log 0 P doyma_tolüen ) = /T+9)

360 sıcalı C, basınç mmhg PROBLEM Karıştırılan adet reatör tanında A maddes B ye dönüştürülecetr.ürün B ve reasyon grds A br ayırıcıda saflaştırılmatadır. Reasyona grmemş A reatöre ger beslenmetedr. Br süreç mühends sstemn l yatırım malyetnn brnc ve nc reatörler çn dönüşüm oranları A ve A nn fonsyonu olduğunu bulmuştur. Sstemn toplam malyetn mnmum yapaca şelde her reatörün de dönüşümünü A ve A ) bulun. PROBLEM 3 Br analda rletc derşmnn boyutlu dağılımı C,y)= y y y İfadesyle tanımlanablr. Fonsyon ve tepe notasının -0 <= <= 0 ve 0 <= y <= 0 sınırları arasında aldığı blgs verldğne göre derşlğn tepe notasının gerçe yern belrleynz. PROBLEM 4 Br petro-mya şret tcar uçalar çn yen br yaıt atısı gelştrmetedr. Katı malzemes X,Y ve Z gb üç bleşenden oluşmatadır. En y performans çn yaıta elenen atı en az 6 ml/l olmalıdır. Güvenl nedenyle ço yanıcı olan X ve Y bleşenlernn toplamı 3 ml/l y geçmemeldr.ayrıca X bleşennn mtarı dama Y ye eşt veya daha fazla, Z de Ynn yarısından fazla olmalıdır. X,Y ve Z bleşenlernn malyetler sırasıyla 0.5,0.05 ve 0.05 YTL se, her ltre yaıt çn en düşü malyetl atıyı belrleyn PROBLEM 5 Büyü br onserve şret onserve çnde gıdayı masmuma çıarıren malzeme malyetn mnmuma ndren yen br utu tasarımı yapmaya çalışmatadır. 30 cm 3 hacm stenmete ve estet ısıtlar çapın 3 le 0 cm arasında yüselğn de le 0 cm arasında olmasını geretrmetedr. Kutunun et alınlığı 0.4 mm olup, yoğunluğu 7800 g/m 3 ve utu malzemesnn lo malyet 37 YTL dr. Kutunun üst ve altapa dahl aynı alınlıta aynı malzemeden yapıldığını varsayara malyet mnmum yapaca boyutu ve utu başına malyet bulunuz. PROBLEM 6 3 ademel hava ompresör sstemne hava bar 300K de grmetedr.her ademeden sonra hava orjnal 300K değerne br ara soğutucu ullanılara soğutulmatadır. Kompresör çıışı 7 bardır. Kompresör ş grşn mnmze eden ara basınç değerlern hesaplayınız Her ademe çn ş: W=C p T T e )=C p T -T e /T )=RT /-)*[-P e /P ) -)/ ] Üç ademe çn toplam ş W=RT /-)*[-P /P ) -)/ ]+ RT /-)*[-P 3 /P ) -)/ ]+ RT /-)*[-P 4 /P 3 ) -)/ ] W= RT /-)*[3-P /P ) -)/ -P 3 /P ) -)/ -P 4 /P 3 ) -)/ ]

361 P /P ) *P 3 /P )*P 4 /P 3 )= P 4 /P )=7 =.4 C p =.005 KJ/g K java dlnde çözüm fonsyonu : class f etends f_j publc double funcdouble []) //çözümü stenen fonsyon double ff=.4*8.345*300/.4-)*-[0]*.4-)/.4)+.4*8.345*300/.4-)*-[]/[0])*.4-)/.4) +.4*8.345*300/.4-)*-7/[])*.4-)/.4); return ff; //mnmum değl masmum stendğnden - le çarptı cevap : 3 bar ve 9 bar PROBLEM 7 Aşağıda very ullanara masmum notayı bulunuz. İpucu : nterpolasyon polnomları ulanara br fonsyon tanımına gdeblrsnz. X Y PROBLEM 8 double funcdouble []) double ff= 34+[0]*Math.sn3.0*Math.PI*[0]-[]))+[]*Math.sn0.0*Math.PI*[])); return ff; //masmum test Fonsyonu verlmştr. Masmumunu bulunuz. PROBLEM 9 Antbyot üreten br mayanın özgül çoğalma hızıg) besn derşlğ c) nn br fonsyonudur. g = *c/4+0.8c+c +0.c 3 ) çoğalmanın masmum olduğu c değern bulunuz. Besn sınırlaması nedenyle düşü derşllerde büyüme hızı 0 a düşmetedr. Aynı şelde yüse derşllerde de besn zehrlenmes sebebyle 0 a düşmetedr. bu yüzden c = 0 mg/l den büyü değerler ncelemeye gere yotur. Not: stedğnz yöntem ullanablrsnz anca çözüme başlamadan önce fonsyon değerlendrmes le masmumun olduğu bölgey sınırlandırablrsnz, bu sze şlem olaylığı sağlayacatır. PROBLEM 0 f)=-.0/-0.3)*-0.3)+0.0)+.0/-0.9)*-0.9)+0.04)) fonsyonunun mnmum değern bulunuz.

362 PROBLEM sn + y + ε ) z, y) = + y + ε fonsyonunun 0 0 ve 0 y 0 notaları arasında ε=e- çn P8,8) notasından başlayara masmum değern bulunuz PROBLEM z, y) = y e fonsyonunun 4 4 ve 4 y 4 notaları arasında P3,3) notasından başlayara mnmum değern bulunuz y )

363 PROBLEM 3 Br evn su oluğunu yapma çn düz br metal levha tarafından şelde görüldüğü gb eğlmştr. Oluğun su alma apastes Vd,θ) = Zd snθ cosθ + L-d)dsnθ) şelnde yazılablr. Burada z oluğun boyudur levha alanı zl dr). Oluğun su alma apastesn masmum yapaca d ve θ değerlern bulunuz. L=0 cm olsun. PROBLEM 4 f) = fonsyonunun 0 =0.8, =. arasında mnmum değern bulunuz. PROBLEM 5 Şehr, A,B,C, ve D 0,0),,5),5,) ve 7,3) notalarındadır. Tüm şehrlerden çıan yollar P orta notasında brleşmetedr. Toplam yol uzunluğunu mnmum yapan P notasını bulunuz. PROBLEM 6 f 0,,, 3 ) = 0 +0 ) ) + - ) ) 4 fonsyonunun mmumunu,-,0,) notasından başlayara bulunuz. PROBLEM 7 f 0, ) = ) + -) 0 -) -)+ - ) 4 fonsyonunun mnumunu,) notasındadır. Üç boyutlu grafte bu notayı görünüz, sonra 0,0) notasından başlayara mnmum bulma metodlarıyla mnmumu bulunuz.

364 PROBLEM 8 ) = ) f fonsyonunun masmumunu 0 le 0 aralığında bulunuz. PROBLEM 9 En temel optmzasyon problemlernden brs bell br hacm çnde barındıracağımız utuyu en ucuza mal etmetr. Kutu malyetler temel olara yüzey alanının fonsyonudur. Bu yüzden verlen hacm çn yüzey alanını mnmze etmemz gerer. Örne olara utu hacmn V=0.5 ltre= m 3 olara alırsa : πd 4V Hacm V = h veya buradan h yüsel termn çeerse h = olur. 4 πd πd πd 4V Slndrn yüzey alanı : A = + πdh = + olur. 4 D Mnmzasyon problemnn analt çözümü brnc türevnn öünü bulma şlem olduğundan da 4V = π D = 0 dd D 4V π D = 3 olara bulunur. Buradan çözüm = 3 D 4*0.5 π 0 3 = m dr. 3 4*0.50 Bu değer h termnde yerne oyarsa h = = m olara bulunur. πd Şmd bu değerler blgsayar ortamında sayısal yöntemlerle çözelm : 0.0<=D<=0. arasında m) Graf yöntemle çözüm graf çözüm : PlotT0.java n) Altın oran fbonnach yöntem) : FOPO.java o) Newton-Raphson ö bulma yöntem : FOPO3.java p) İye bölme ö bulma yöntem : FOPO3Cjava q) Newton-Raphson-ye bölme entegre ö bulma yöntem : FOPO3A.java r) Seantrş) ö bulma yöntem : FOPO3B.java s) Brent ö bulma yöntem : FOPO3D.java t) İnc derece polnom geometr arama optmzasyon yöntem : FOPO.java u) Üçüncü derece polnom geometr arama optmzasyon yöntem : FSCO4E.java v) Brent optmzasyon yöntem : OPO9.java Ktapta bu entegre yöntemlern heps verlmemştr, anca ö bulma yöntemlernde tanımlanmıştır, programları gelştrnz.

365 PROBLEM 0 Eletr aım taşıyan br tel etrafında yarıçapı r olan plast br zolasyon bulunmatadır. Telde eletrsel drenç ısı oluşturmatadır. Bu ısı plast zolasyondan ısı letm meanzmalarıyla amata ve ısı taşınımıyla T sıcalığında çevre havasına taşınmatadır. Teln sıcalığı : q ln r / a) T = + + T denlemyle verlr. Burada π hr q = telde ısı oluşumu = 50 W/m a = teln çapı = 5 mm = 50-3 m = ısıl letm atsayısı = 0. W/mK) h=hava çn taşınım atsayısı = 30 W/m K) T = çevre sıcalığı = 300 K olara verlmştr. T sıcalığını mnmum yapaca r yarıçapını bulunuz. PROBLEM Muavva utu yapılma çn şelde görüldüğü gb ıvrılmatadır. Kıvrıldıtan sonra utu hacm m 3 olacatır. En az mtarda muavva harcama çn a ve b boyutlarının ne olması geretğn hesaplayınız. PROBLEM Slndr şelnde br abın ütles M ve boş ağırlı merez C=0.43H dr. Kabın çnde suyun dernlğ h se su ve abın orta ağırlı mereznn mümün olduğu adar aşağıda olması çn değernn ne olması geretğn hesaplayınız. PROBLEM 3 değş çapta slndr estl br rş şelde gb yerleştrlmştr. Krşn mümün olan en düşü est alanına sahp olması stenmetedr. İşletme şartları

366 σ 80 MPa, σ 80 MPa, ve δ 5 mm dr 3 8PL σ = =sol ısımda masmum gerlm π r 8PL σ = =sağ ısımda masmum gerlm π r 3 3 4PL 7 δ = + =uç notada eğlme mtarı 4 4 3π E r r ve E =Young modülü=00 GPa dır. r ve r y hesaplayınız. PROBLEM 4 Şelde görülen on tabanlı açı üst taraflı slndr abın V hacmnn m 3 olması stenmetedr. Yüzey alanı S y mnmze eden r,h ve b boyutlarını bulunuz. b V = π r + h 3 h + b r ) S = π r + PROBLEM 5 İ moleül arasında Lennard-Jones potansyel V = 4 σ r 6 σ r σ r ε denlemyle tanımlanır. Burada ε ve σ sabt değerlerdr. V potansyeln mnmum yapan değern bulunuz. PROBLEM 6 Hdrojen atomu çn dalga fonsyonu σ / 3 ψ = C 7 8σ + σ ) e fonsyonu le tanımlanablr. Burada σ = zr / a 0 / 3 z C = 8 3 π a0 z = çerde yü mtarı a 0 = Bohr yarıçapı r =radyal mesafedr. ψ dalga fonsyonunu mnmum yapan σ değern bulunuz. PROBLEM 7 f e = = fonsyonunun g = 0 h = 0 sınır şartlarıyla optmum değern bulunuz.

367 PROBLEM 8 f = ) + y ) fonsyonunun mnmum notalarını bulunuz. PROBLEM f = 5 + 6y + 5y 4 y y fonsyonunun mnmum notasını bulunuz.

SABİT-KUTUP YAKLAŞIMI KULLANILARAK TELEKONFERANSTA ODA AKUSTİK EKO YOK ETME

SABİT-KUTUP YAKLAŞIMI KULLANILARAK TELEKONFERANSTA ODA AKUSTİK EKO YOK ETME SABİ-KUUP YAKLAŞIMI KULLAILARAK ELEKOFERASA ODA AKUSİK EKO YOK EME uğba Özge ÖZDİÇ Rıfat HACIOĞLU Eletr-Eletron Mühendslğ Bölümü Mühendsl Faültes Zongulda Karaelmas Ünverstes, 671, Zongulda ozdnc_ozge@hotmal.com

Detaylı

ANOVA. CRD (Completely Randomized Design)

ANOVA. CRD (Completely Randomized Design) ANOVA CRD (Completely Randomzed Desgn) Örne Problem: Kalte le blgnn, ortalama olara, br urumun üç farlı şehrde çalışanları tarafından eşt olara algılanıp algılanmadığını test etme amacıyla, bu üç şehrde

Detaylı

ÇOKLU REGRESYON MODELİ, ANOVA TABLOSU, MATRİSLERLE REGRESYON ÇÖZÜMLEMESİ,REGRES-YON KATSAYILARININ YORUMU

ÇOKLU REGRESYON MODELİ, ANOVA TABLOSU, MATRİSLERLE REGRESYON ÇÖZÜMLEMESİ,REGRES-YON KATSAYILARININ YORUMU 6.07.0 ÇOKLU REGRESON MODELİ, ANOVA TABLOSU, MATRİSLERLE REGRESON ÇÖZÜMLEMESİ,REGRES-ON KATSAILARININ ORUMU ÇOKLU REGRESON MODELİ Ekonom ve şletmeclk alanlarında herhang br bağımlı değşken tek br bağımsız

Detaylı

HATA VE HATA KAYNAKLARI...

HATA VE HATA KAYNAKLARI... İÇİNDEKİLER 1. GİRİŞ... 1 1.1 Giriş... 1 1.2 Sayısal Analizin İlgi Alanı... 2 1.3 Mühendislik Problemlerinin Çözümü ve Sayısal Analiz... 2 1.4 Sayısal Analizde Bilgisayarın Önemi... 7 1.5 Sayısal Çözümün

Detaylı

BÖLÜM 5 İNCE PROFİLLER İÇİN SAYISAL UYGULAMALAR

BÖLÜM 5 İNCE PROFİLLER İÇİN SAYISAL UYGULAMALAR BÖLÜM 5 İE PROFİLLER İÇİ SAYISAL UYGULAMALAR 5. Grş 5. İne profl teors 5.. Analt çözümler 5.. Kamburlu eğrsne polnom şelnde eğr uydurulması 5.. Fourer ntegrallernn sayısal hesabı 5. Kümelenmş-grdaplar

Detaylı

BÖLÜM CROSS METODU (HARDY CROSS-1932)

BÖLÜM CROSS METODU (HARDY CROSS-1932) Bölüm Cross Yöntem 5.1. CROSS ETODU (HARDY CROSS-193) BÖÜ 5 Hperstat sstemlern çözümünde ullanılan cross yöntem açı yöntemnn özel br hal olup moment dağıtma (terasyon) metodu olara da ullanılmatadır. Açı

Detaylı

Standart Model (SM) Lagrange Yoğunluğu. u, d, c, s, t, b. e,, Şimdilik nötrinoları kütlesiz Kabul edeceğiz. Kuark çiftlerini gösterelim.

Standart Model (SM) Lagrange Yoğunluğu. u, d, c, s, t, b. e,, Şimdilik nötrinoları kütlesiz Kabul edeceğiz. Kuark çiftlerini gösterelim. SM de yer alacak fermyonlar Standart Model (SM) agrange Yoğunluğu u s t d c b u, d, c, s, t, b e e e,, Şmdlk nötrnoları kütlesz Kabul edeceğz. Kuark çftlern gösterelm. u, c ve t y u (=1,,) olarak gösterelm.

Detaylı

PARAMETRİK OLMAYAN HİPOTEZ TESTLERİ. χ 2 Kİ- KARE TESTLERİ. Doç.Dr. Ali Kemal ŞEHİRLİOĞLU Araş.Gör. Efe SARIBAY

PARAMETRİK OLMAYAN HİPOTEZ TESTLERİ. χ 2 Kİ- KARE TESTLERİ. Doç.Dr. Ali Kemal ŞEHİRLİOĞLU Araş.Gör. Efe SARIBAY PARAMETRİK OLMAYAN HİPOTEZ TESTLERİ Kİ- KARE TESTLERİ Doç.Dr. Al Kemal ŞEHİRLİOĞLU Araş.Gör. Efe SARIAY Populasyonun nceledğmz br özellğnn dağılışı blenen dağılışlardan brsne, Normal Dağılış, t Dağılışı,

Detaylı

ALTIN ORAN ARAMA (GOLDEN SECTION SEARCH) METODU

ALTIN ORAN ARAMA (GOLDEN SECTION SEARCH) METODU ALTIN ORAN ARAMA (GOLDEN SECTION SEARCH) METODU Tek değişkenli bir f(x) fonksiyonunu ele alalım. [Bazı x ler için f (x) bulunamayabilir.] Aşağıdaki DOP modelini çözmek istediğimizi var sayalım. Max f(x)

Detaylı

Mühendislikte Sayısal Çözüm Yöntemleri NÜMERİK ANALİZ. Prof. Dr. İbrahim UZUN

Mühendislikte Sayısal Çözüm Yöntemleri NÜMERİK ANALİZ. Prof. Dr. İbrahim UZUN Mühendislikte Sayısal Çözüm Yöntemleri NÜMERİK ANALİZ Prof. Dr. İbrahim UZUN Yayın No : 2415 İşletme-Ekonomi Dizisi : 147 5. Baskı Eylül 2012 - İSTANBUL ISBN 978-605 - 377-438 - 9 Copyright Bu kitabın

Detaylı

Sayısal Yöntemler (MFGE 301) Ders Detayları

Sayısal Yöntemler (MFGE 301) Ders Detayları Sayısal Yöntemler (MFGE 301) Ders Detayları Ders Adı Ders Kodu Dönemi Ders Saati Uygulama Saati Laboratuar Saati Kredi AKTS Sayısal Yöntemler MFGE 301 Güz 2 2 0 3 4 Ön Koşul Ders(ler)i MATH 275 Lineer

Detaylı

Düşük Hacimli Üretimde İstatistiksel Proses Kontrolü: Kontrol Grafikleri

Düşük Hacimli Üretimde İstatistiksel Proses Kontrolü: Kontrol Grafikleri Düşü Hacml Üretmde İstatstsel Proses Kontrolü: Kontrol Grafler A. Sermet Anagün ÖZET İstatstsel Proses Kontrolu (İPK) apsamında, proses(ler)de çeştl nedenlerden aynalanan değşenlğn belrlenere ölçülmes,

Detaylı

) ( k = 0,1,2,... ) iterasyon formülü kullanılarak sabit

) ( k = 0,1,2,... ) iterasyon formülü kullanılarak sabit Karadez Te Üverstes Blgsayar Mühedslğ Bölümü 5-6 Güz Yarıyılı Sayısal Çözümleme Ara Sıav Soruları Tarh: Kasım 5 Perşembe Süre: daa. f ( ( + a e fosyouu sabt otası olmadığı bldğe göre, a 'ı alableceğ e

Detaylı

SAYISAL ANALİZ. Doç. Dr. Cüneyt BAYILMIŞ. Sayısal Analiz. Doç.Dr. Cüneyt BAYILMIŞ

SAYISAL ANALİZ. Doç. Dr. Cüneyt BAYILMIŞ. Sayısal Analiz. Doç.Dr. Cüneyt BAYILMIŞ SAYISAL ANALİZ Doç. Dr. Cüneyt BAYILMIŞ 1 SAYISAL ANALİZ 1. Hafta SAYISAL ANALİZE GİRİŞ 2 AMAÇ Mühendislik problemlerinin çözümünde kullanılan sayısal analiz yöntemlerinin algoritmik olarak çözümü ve bu

Detaylı

Deney No: 2. Sıvı Seviye Kontrol Deneyi. SAKARYA ÜNİVERSİTESİ Dijital Kontrol Laboratuvar Deney Föyü Deneyin Amacı

Deney No: 2. Sıvı Seviye Kontrol Deneyi. SAKARYA ÜNİVERSİTESİ Dijital Kontrol Laboratuvar Deney Föyü Deneyin Amacı SRY ÜNİVERSİESİ Djtal ontrol Laboratuvar Deney Föyü Deney No: 2 Sıvı Sevye ontrol Deney 2.. Deneyn macı Bu deneyn amacı, doğrusal olmayan sıvı sevye sstemnn belrlenen br çalışma noktası cvarında doğrusallaştırılmış

Detaylı

1. Hafta SAYISAL ANALİZE GİRİŞ

1. Hafta SAYISAL ANALİZE GİRİŞ SAYISAL ANALİZ 1. Hafta SAYISAL ANALİZE GİRİŞ 1 AMAÇ Mühendislik problemlerinin çözümünde kullanılan sayısal analiz yöntemlerinin algoritmik olarak çözümü ve bu çözümlemelerin MATLAB ile bilgisayar ortamında

Detaylı

TRANSPORT PROBLEMI için GELIsTIRILMIs VAM YÖNTEMI

TRANSPORT PROBLEMI için GELIsTIRILMIs VAM YÖNTEMI Yönetm, Yl 9, Say 28, Ekm - 1997,5.20-25 TRANSPORT PROBLEMI ÇIN GELIsTIRILMIs VAM YÖNTEMI Dr. Erhan ÖZDEMIR I.Ü. Teknk Blmler M.Y.O. L.GIRIs V AM transport problemlerne en düsük malyetl baslangç çözüm

Detaylı

4.5. SOĞUTMA KULELERİNİN BOYUTLANDIRILMASI İÇİN BİR ANALIZ

4.5. SOĞUTMA KULELERİNİN BOYUTLANDIRILMASI İÇİN BİR ANALIZ Ünsal M.; Varol, A.: Soğutma Kulelernn Boyutlandırılması İçn Br Kuramsal 8 Mayıs 990, S: 8-85, Adana 4.5. SOĞUTMA KULELERİNİN BOYUTLANDIRILMASI İÇİN BİR ANALIZ Asaf Varol Fırat Ünverstes, Teknk Eğtm Fakültes,

Detaylı

Altın Oran Arama Metodu(Golden Search)

Altın Oran Arama Metodu(Golden Search) Altın Oran Arama Metodu(Golden Search) Bir f(x) (tek değişkenli) fonksiyonunu ele alalım. [Bazı x ler için f (x) bulunamayabilir.] Aşağıdaki DOP modelini çözmek istediğimizi var sayalım. Max f(x) a x b

Detaylı

Yük Yoğunluğu ve Nokta Yük İçeren Elektrik Alan Problemlerinin Sınır Elemanları Yöntemiyle İncelenmesi

Yük Yoğunluğu ve Nokta Yük İçeren Elektrik Alan Problemlerinin Sınır Elemanları Yöntemiyle İncelenmesi Fırat Ünv. Fen ve Müh. Bl. Dergs cence and Eng. J of Fırat Unv. (), 99-, (), 99-, Yü Yoğunluğu ve Nota Yü İçeren Eletr Alan Problemlernn ınır Elemanları Yöntemyle İncelenmes Hüseyn ERİŞTİ ve elçu YILDIRIM

Detaylı

Ders 2 : MATLAB ile Matris İşlemleri

Ders 2 : MATLAB ile Matris İşlemleri Ders : MATLAB ile Matris İşlemleri Kapsam Vetörlerin ve matrislerin tanıtılması Vetör ve matris operasyonları Lineer denlem taımlarının çözümü Vetörler Vetörler te boyutlu sayı dizileridir. Elemanlarının

Detaylı

UYUM ĐYĐLĐĞĐ TESTĐ. 2 -n olup. nin dağılımı χ dir ve sd = (k-1-p) dir. Burada k = sınıf sayısı, p = tahmin edilen parametre sayısıdır.

UYUM ĐYĐLĐĞĐ TESTĐ. 2 -n olup. nin dağılımı χ dir ve sd = (k-1-p) dir. Burada k = sınıf sayısı, p = tahmin edilen parametre sayısıdır. UYUM ĐYĐLĐĞĐ TESTĐ Posson: H o: Ver Posson dağılıma sahp br ktleden gelmektedr. H a : Ver Posson dağılıma sahp br ktleden gelmemektedr. Böyle br hpotez test edeblmek çn, önce Posson dağılım parametres

Detaylı

( ) 3.1 Özet ve Motivasyon. v = G v v Operasyonel Amplifikatör (Op-Amp) Deneyin Amacı. deney 3

( ) 3.1 Özet ve Motivasyon. v = G v v Operasyonel Amplifikatör (Op-Amp) Deneyin Amacı. deney 3 Yıldız Teknk Ünverstes Elektrk Mühendslğ Bölümü Deneyn Amacı İşlemsel kuvvetlendrcnn çalışma prensbnn anlaşılması le çeştl OP AMP devrelernn uygulanması ve ncelenmes. Özet ve Motvasyon.. Operasyonel Amplfkatör

Detaylı

Güvenlik Stokları. Tedarik Zincirlerinde Belirsizlik Yönetimi: Güvenlik Stokları. Güvenlik Stokları Belirlenirken Sorulması gereken sorular

Güvenlik Stokları. Tedarik Zincirlerinde Belirsizlik Yönetimi: Güvenlik Stokları. Güvenlik Stokları Belirlenirken Sorulması gereken sorular Güvenl Stoları Tedar Zncrlernde Belrszl Yönetm: Güvenl Stoları Güvenl Stoğu: Herhang br dönemde, talebn tahmn edlen mtarın üzernde gerçeleşen mtarını arşılama çn elde bulundurulan sto mtarıdır Q Çevrm

Detaylı

PARABOLİK KISMİ DİFERANSİYEL DENKLEMLER İÇİN İKİ ZAMAN ADIMLI YAKLAŞIMLAR ÜZERİNE BİR ÇALIŞMA. Gamze YÜKSEL 1, Mustafa GÜLSU 1, *

PARABOLİK KISMİ DİFERANSİYEL DENKLEMLER İÇİN İKİ ZAMAN ADIMLI YAKLAŞIMLAR ÜZERİNE BİR ÇALIŞMA. Gamze YÜKSEL 1, Mustafa GÜLSU 1, * Ercyes Ünverses Fen Blmler Ensüsü Dergs 5 - - 45 9 p://fbe.ercyes.ed.r/ ISS -54 PARABOLİK KISMİ DİFERASİYEL DEKLEMLER İÇİ İKİ ZAMA ADIMLI YAKLAŞIMLAR ÜZERİE BİR ÇALIŞMA Gamze YÜKSEL Msafa GÜLS * Mğla Ünverses

Detaylı

ENERJİ. Isı Enerjisi. Genel Enerji Denklemi. Yrd. Doç. Dr. Atilla EVCİN Afyon Kocatepe Üniversitesi 2007

ENERJİ. Isı Enerjisi. Genel Enerji Denklemi. Yrd. Doç. Dr. Atilla EVCİN Afyon Kocatepe Üniversitesi 2007 Yrd. Doç. Dr. Atlla EVİN Afyon Kocatepe Ünverstes 007 ENERJİ Maddenn fzksel ve kmyasal hal değşm m le brlkte dama enerj değşm m de söz s z konusudur. Enerj değşmler mler lke olarak Termodnamğn Brnc Yasasına

Detaylı

Lineer Denklem Sistemleri Kısa Bilgiler ve Alıştırmalar

Lineer Denklem Sistemleri Kısa Bilgiler ve Alıştırmalar Lineer Denklem Sistemleri Kısa Bilgiler ve Alıştırmalar Bir Matrisin Rankı A m n matrisinin determinantı sıfırdan farklı olan alt kare matrislerinin boyutlarının en büyüğüne A matrisinin rankı denir. rank(a)

Detaylı

SAYISAL YÜKSEKLİK MODELLERİNDE KLASİK VE ESNEK HESAPLAMA YÖNTEMLERİNİN KARŞILAŞTIRILMASI

SAYISAL YÜKSEKLİK MODELLERİNDE KLASİK VE ESNEK HESAPLAMA YÖNTEMLERİNİN KARŞILAŞTIRILMASI TMMOB Harta ve Kadastro Mühendsler Odası, 15. Türye Harta Blmsel ve Ten Kurultayı, 5 8 Mart 015, Anara. SAYISAL YÜKSEKLİK MODELLERİNDE KLASİK VE ESNEK HESAPLAMA YÖNTEMLERİNİN KARŞILAŞTIRILMASI Leyla ÇAKIR*

Detaylı

ITAP Fizik Olimpiyat Okulu

ITAP Fizik Olimpiyat Okulu Eylül Deneme Sınavı (Prof.Dr.Ventsslav Dmtrov) Konu: Elektrk Devrelernde İndüktans Soru. Şekldek gösterlen devrede lk anda K ve K anahtarları açıktır. K anahtarı kapatılıyor ve kondansatörün gerlm U ε/

Detaylı

4. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

4. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI. 4. HAFTA BLM33 SAYISAL ANALİZ Okt. Yasin ORTAKCI yasinortakci@karabuk.edu.tr Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi BLM33 DOĞRUSAL OLMAYAN (NONLINEAR) DENKLEM SİSTEMLERİ Mühendisliğin

Detaylı

A İSTATİSTİK. 4. X kesikli rasgele (random) değişkenin moment çıkaran. C) 4 9 Buna göre, X in beklenen değeri kaçtır?

A İSTATİSTİK. 4. X kesikli rasgele (random) değişkenin moment çıkaran. C) 4 9 Buna göre, X in beklenen değeri kaçtır? . Br torbada 6 syah, 4 beyaz top vardır. Bu torbadan yerne koyarak top seçlyor. A İSTATİSTİK KPSS/-AB-PÖ/006. Normal dağılıma sahp br rasgele (random) değşkenn varyansı 00 dür. Seçlen topların ksnn de

Detaylı

MAK 210 SAYISAL ANALİZ

MAK 210 SAYISAL ANALİZ MAK 210 SAYISAL ANALİZ BÖLÜM 5- SONLU FARKLAR VE İNTERPOLASYON TEKNİKLERİ Doç. Dr. Ali Rıza YILDIZ MAK 210 - Sayısal Analiz 1 İNTERPOLASYON Tablo halinde verilen hassas sayısal değerler veya ayrık noktalardan

Detaylı

DOĞU AKDENİZ ÜNİVERSİTESİ MATEMATİK BÖLÜMÜ 23. LİSELERARASI MATEMATİK YARIŞMASI

DOĞU AKDENİZ ÜNİVERSİTESİ MATEMATİK BÖLÜMÜ 23. LİSELERARASI MATEMATİK YARIŞMASI DOĞU AKDENİZ ÜNİVERSİTESİ MATEMATİK BÖLÜMÜ 23. LİSELERARASI MATEMATİK YARIŞMASI BİREYSEL YARIŞMA SORULARI CEVAPLARI CEVAP KAĞIDI ÜZERİNE YAZINIZ. SORU KİTAPÇIĞINI KARALAMA MAKSATLI KULLANABİLİRSİNİZ 1

Detaylı

ALTERNATİF AKIM DEVRE YÖNTEM VE TEOREMLER İLE ÇÖZÜMÜ

ALTERNATİF AKIM DEVRE YÖNTEM VE TEOREMLER İLE ÇÖZÜMÜ BÖLÜM 6 ALTERNATİF AKIM DEVRE ÖNTEM VE TEOREMLER İLE ÇÖZÜMÜ 6. ÇEVRE AKIMLAR ÖNTEMİ 6. SÜPERPOZİSON TEOREMİ 6. DÜĞÜM GERİLİMLER ÖNTEMİ 6.4 THEVENİN TEOREMİ 6.5 NORTON TEOREMİ Tpak GİRİŞ Alternatf akımın

Detaylı

YÖNEYLEM ARAŞTIRMASI - III

YÖNEYLEM ARAŞTIRMASI - III YÖNEYLEM ARAŞTIRMASI - III Prof. Dr. Cemalettin KUBAT Yrd. Doç. Dr. Özer UYGUN İçerik İkiye Bölme / Yarılama Yöntemi Genel olarak f x = 0 gerek şartını sağlamak oldukça doğrusal olmayan ve bu sebeple çözümü

Detaylı

SEK Tahmincilerinin Arzulanan Özellikleri. SEK Tahmincilerinin Arzulanan Özellikleri. Ekonometri 1 Konu 9 Sürüm 2,0 (Ekim 2011)

SEK Tahmincilerinin Arzulanan Özellikleri. SEK Tahmincilerinin Arzulanan Özellikleri. Ekonometri 1 Konu 9 Sürüm 2,0 (Ekim 2011) SEK Tahmnclernn Arzulanan Özellkler İk Değşkenl Bağlanım Model SEK Tahmnclernn Arzulanan Özellkler Ekonometr 1 Konu 9 Sürüm 2,0 (Ekm 2011) http://www.ackders.org.tr SEK Tahmnclernn Arzulanan Özellkler

Detaylı

ÖZEL EGE LİSESİ 13. OKULLAR ARASI MATEMATİK YARIŞMASI 8. SINIF ELEME SINAVI TEST SORULARI

ÖZEL EGE LİSESİ 13. OKULLAR ARASI MATEMATİK YARIŞMASI 8. SINIF ELEME SINAVI TEST SORULARI 1. x,y,z pozitif tam sayılardır. 1 11 x + = 8 y + z olduğuna göre, x.y.z açtır? 3 B) 4 C) 6 D)1 3 1 4. {,1,1,1,...,1 } 1 ümesinin en büyü elemanının diğer 1 elemanın toplamına oranı, hangi tam sayıya en

Detaylı

Bu dersi aşarı ile ta a laya öğre iler:

Bu dersi aşarı ile ta a laya öğre iler: GİRNE ÜNİVERSİTESİ DENİZCİLİK YÜKSEKOKULU GEMİ MAKİNELERİ İŞLETME MÜHENDİSLİĞİ DERS TANITIM KATALOĞU Dersi Adı : Mühe disler içi Sayısal A aliz Dersin Uygula ası Saat/Hafta DersinKodu Yıl Dönem Kredi AKTS

Detaylı

bir yol oluşturmaktadır. Yine i 2 , de bir yol oluşturmaktadır. Şekil.DT.1. Temel terimlerin incelenmesi için örnek devre

bir yol oluşturmaktadır. Yine i 2 , de bir yol oluşturmaktadır. Şekil.DT.1. Temel terimlerin incelenmesi için örnek devre Devre Analz Teknkler DEE AAĐZ TEKĐKEĐ Bu zamana kadar kullandığımız Krchoffun kanunları ve Ohm kanunu devre problemlern çözmek çn gerekl ve yeterl olan eştlkler sağladılar. Fakat bu kanunları kullanarak

Detaylı

Doç. Dr. Metin Özdemir Çukurova Üniversitesi

Doç. Dr. Metin Özdemir Çukurova Üniversitesi FİZİKTE SAYISAL YÖNTEMLER Doç. Dr. Metin Özdemir Çukurova Üniversitesi Fizik Bölümü 2 ÖNSÖZ Bu ders notları Fizik Bölümünde zaman zaman seçmeli olarak vermekte olduǧum sayısal analiz dersinin hazırlanması

Detaylı

VEKTÖRLER VE VEKTÖREL IŞLEMLER

VEKTÖRLER VE VEKTÖREL IŞLEMLER VEKTÖRLER VE VEKTÖREL IŞLEMLER 1 2.1 Tanımlar Skaler büyüklük: Sadece şddet bulunan büyüklükler (örn: uzunluk, zaman, kütle, hacm, enerj, yoğunluk) Br harf le sembolze edleblr. (örn: kütle: m) Şddet :

Detaylı

TÜRKİYE DEKİ 380 kv LUK 14 BARALI GÜÇ SİSTEMİNDE EKONOMİK YÜKLENME ANALİZİ

TÜRKİYE DEKİ 380 kv LUK 14 BARALI GÜÇ SİSTEMİNDE EKONOMİK YÜKLENME ANALİZİ TÜRİYE DEİ 38 kv LU 4 BARALI GÜÇ SİSTEMİDE EOOMİ YÜLEME AALİZİ Mehmet URBA Ümmühan BAŞARA 2,2 Elektrk-Elektronk Mühendslğ Bölümü Mühendslk-Mmarlık Fakültes Anadolu Ünverstes İk Eylül ampüsü, 2647, ESİŞEHİR

Detaylı

Adi Diferansiyel Denklemler NÜMERİK ANALİZ. Adi Diferansiyel Denklemler. Adi Diferansiyel Denklemler

Adi Diferansiyel Denklemler NÜMERİK ANALİZ. Adi Diferansiyel Denklemler. Adi Diferansiyel Denklemler 6.4.7 NÜMERİK ANALİZ Yrd. Doç. Dr. Hatce ÇITAKOĞLU 6 Müendslk sstemlernn analznde ve ugulamalı dsplnlerde türev çeren dferansel denklemlern analtk çözümü büük öneme saptr. Sınır değer ve/vea başlangıç

Detaylı

UÇAK ÇİZELGELEME PROBLEMİNİN KARINCA KOLONİLERİ OPTİMİZASYONU İLE ÇÖZÜMÜ

UÇAK ÇİZELGELEME PROBLEMİNİN KARINCA KOLONİLERİ OPTİMİZASYONU İLE ÇÖZÜMÜ Uça Çzelgeleme roblemnn Karınca Kolonler Optmzasyonu le Çözümü HAVACILIK VE UZAY TEKNOLOJİLERİ DERGİSİ OCAK 2005 CİLT 2 SAYI 1 (87-95) UÇAK ÇİZELGELEME ROBLEMİNİN KARINCA KOLONİLERİ OTİMİZASYONU İLE ÇÖZÜMÜ

Detaylı

BÖLÜM 4 4. AÇI METODU

BÖLÜM 4 4. AÇI METODU Açı etodu Bölüm. AÇ ETODU BÖÜ Hperstat sstemlern çözümü sstem hperstat yapan blnmeyenlern uvvet ve şel değştrme olmasına göre değşr. Ço açılılı br mütemad rş hperstat yapan mesnet tep uvvetler en atlı

Detaylı

MAK 210 SAYISAL ANALİZ

MAK 210 SAYISAL ANALİZ MAK 210 SAYISAL ANALİZ BÖLÜM 6- İSTATİSTİK VE REGRESYON ANALİZİ Doç. Dr. Ali Rıza YILDIZ 1 İSTATİSTİK VE REGRESYON ANALİZİ Bütün noktalardan geçen bir denklem bulmak yerine noktaları temsil eden, yani

Detaylı

DEĞİŞKENLİK (YAYIKLIK) ÖLÇÜLERİ

DEĞİŞKENLİK (YAYIKLIK) ÖLÇÜLERİ SAÜ 6. BÖLÜM DEĞİŞKELİK (YAYIKLIK) ÖLÇÜLERİ PROF. DR. MUSTAFA AKAL İÇİDEKİLER 1. DEĞİŞKELİĞİ TAIMI VE ÇEŞİTLERİ. AALATİK OLMAYA DEĞİŞKELİK ÖLÇÜLERİ 3. ORTALAMA MUTLAK SAPMA 3.1. Bast Serde Ortalama Mutla

Detaylı

KIRIKKALE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ ENDÜSTRİ MÜHENDİSLİĞİ ÇOK KRİTERLİ KARAR VERME YÖNTEMLERİNDEN AHP VE TOPSIS İLE KAMP YERİ SEÇİMİ

KIRIKKALE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ ENDÜSTRİ MÜHENDİSLİĞİ ÇOK KRİTERLİ KARAR VERME YÖNTEMLERİNDEN AHP VE TOPSIS İLE KAMP YERİ SEÇİMİ KIRIKKALE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ ENDÜSTRİ MÜHENDİSLİĞİ ÇOK KRİTERLİ KARAR VERME YÖNTEMLERİNDEN AHP VE TOPSIS İLE KAMP YERİ SEÇİMİ Burak KARAHAN Burak PEKEL Neşet BEDİR Cavt CAN Kırıkkale -2014-

Detaylı

SAYISAL ANALİZ. Doç.Dr. Cüneyt BAYILMIŞ. Sayısal Analiz. Doç.Dr. Cüneyt BAYILMIŞ

SAYISAL ANALİZ. Doç.Dr. Cüneyt BAYILMIŞ. Sayısal Analiz. Doç.Dr. Cüneyt BAYILMIŞ SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ Doç.Dr. Cüneyt BAYILMIŞ Sayısal Analz SAYISAL ANALİZ SAYISAL TÜREV Numercal Derentaton Doç.Dr. Cüneyt BAYILMIŞ Sayısal Analz İÇİNDEKİLER Sayısal Türev Ger Farklar

Detaylı

Deprem Tepkisinin Sayısal Metotlar ile Değerlendirilmesi (Newmark-Beta Metodu) Deprem Mühendisliğine Giriş Dersi Doç. Dr.

Deprem Tepkisinin Sayısal Metotlar ile Değerlendirilmesi (Newmark-Beta Metodu) Deprem Mühendisliğine Giriş Dersi Doç. Dr. Deprem Tepksnn Sayısal Metotlar le Değerlendrlmes (Newmark-Beta Metodu) Sunum Anahat Grş Sayısal Metotlar Motvasyon Tahrk Fonksyonunun Parçalı Lneer Interpolasyonu (Pecewse Lnear Interpolaton of Exctaton

Detaylı

DOKUZ EYLÜL ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ DEKANLIĞI DERS/MODÜL/BLOK TANITIM FORMU. Dersin Kodu: MMM 2014

DOKUZ EYLÜL ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ DEKANLIĞI DERS/MODÜL/BLOK TANITIM FORMU. Dersin Kodu: MMM 2014 Dersi Veren Birim: Metalurji ve Malzeme Mühendisliği Dersin Türkçe Adı: MÜHENDİSLİK MATEMATİĞİ Dersin Orjinal Adı: MÜHENDİSLİK MATEMATİĞİ Dersin Düzeyi:(Ön lisans, Lisans, Yüksek Lisans, Doktora) Lisans

Detaylı

Sayısal Yöntemler (COMPE 350) Ders Detayları

Sayısal Yöntemler (COMPE 350) Ders Detayları Sayısal Yöntemler (COMPE 350) Ders Detayları Ders Adı Sayısal Yöntemler Ders Kodu COMPE 350 Dönemi Ders Uygulama Saati Saati Laboratuar Saati Kredi AKTS Bahar 2 2 0 3 5.5 Ön Koşul Ders(ler)i Dersin Dili

Detaylı

MAK 210 SAYISAL ANALİZ

MAK 210 SAYISAL ANALİZ MAK 210 SAYISAL ANALİZ BÖLÜM 4- LİNEER OLMAYAN DENKLEMLERİN ÇÖZÜMÜ Doç. Dr. Ali Rıza YILDIZ MAK 210 - Sayısal Analiz 1 LİNEER OLMAYAN DENKLEMLERİN ÇÖZÜMÜ Matematikte veya hidrolik, dinamik, mekanik, elektrik

Detaylı

BAŞKENT ÜNİVERSİTESİ MAKİNE MÜHENDİSLİĞİ BÖLÜMÜ MAK MAKİNE MÜHENDİSLİĞİ LABORATUVARI DENEY - 8

BAŞKENT ÜNİVERSİTESİ MAKİNE MÜHENDİSLİĞİ BÖLÜMÜ MAK MAKİNE MÜHENDİSLİĞİ LABORATUVARI DENEY - 8 BAŞKENT ÜNİVERSİTESİ MAKİNE MÜHENDİSLİĞİ BÖLÜMÜ MAK - 402 MAKİNE MÜHENDİSLİĞİ LABORATUVARI DENEY - 8 FARKLI YÜZEY ÖZELLİKLERİNE SAHİP PLAKALARIN ISIL IŞINIM YAYMA ORANLARININ HESAPLANMASI BAŞKENT ÜNİVERSİTESİ

Detaylı

EKSTREMUM PROBLEMLERİ. Örnek: Çözüm: Örnek: Çözüm:

EKSTREMUM PROBLEMLERİ. Örnek: Çözüm: Örnek: Çözüm: EKSTREMUM PROBLEMLERİ Ekstremum Problemleri Bu tür problemlerde bir büyüklüğün (çokluğun alabileceği en büyük (maksimum değer ya da en küçük (minimum değer bulunmak istenir. İstenen çokluk bir değişkenin

Detaylı

JFM316 Elektrik Yöntemler ( Doğru Akım Özdirenç Yöntemi)

JFM316 Elektrik Yöntemler ( Doğru Akım Özdirenç Yöntemi) JFM316 Elektrk Yöntemler ( Doğru Akım Özdrenç Yöntem) yeryüzünde oluşturacağı gerlm değerler hesaplanablr. Daha sonra aşağıdak formül kullanılarak görünür özdrenç hesaplanır. a K I K 2 1 1 1 1 AM BM AN

Detaylı

3. Telin kesit alanı, 4. lsıtılan telin diren ci, R = R o. 5. Devreden geçen proton sayısı, q = (N e. 6. X ve Y ilet ken le ri nin di renç le ri,

3. Telin kesit alanı, 4. lsıtılan telin diren ci, R = R o. 5. Devreden geçen proton sayısı, q = (N e. 6. X ve Y ilet ken le ri nin di renç le ri, . ÖÜ EETİ ODE SOU - DEİ SOUN ÇÖZÜEİ. Teln kest alanı, 400 mm 4.0 4 m. a a a a n boyu,, a n kest alanı, a.a a a a Teln drenc se, ρ., 500 4.0 6. 4 5 Ω dur. 40. Telden geçen akım, ohm kanunundan, 40 48 amper

Detaylı

ZKÜ Mühendislik Fakültesi - Makine Mühendisliği Bölümü ISI VE TERMODİNAMİK LABORATUVARI Sudan Suya Türbülanslı Akış Isı Değiştirgeci Deney Föyü

ZKÜ Mühendislik Fakültesi - Makine Mühendisliği Bölümü ISI VE TERMODİNAMİK LABORATUVARI Sudan Suya Türbülanslı Akış Isı Değiştirgeci Deney Föyü ZKÜ Müendslk Fakültes - Makne Müendslğ Bölümü Sudan Suya Türbülanslı Akış Isı Değştrge Deney Föyü Şekl. Sudan suya türbülanslı akış ısı değştrge (H950 Deneyn adı : Boru çnde sudan suya türbülanslı akışta

Detaylı

30 %30iskonto oranı bulunur.

30 %30iskonto oranı bulunur. Örne 9: 900 TL re eğerl ve 80 gün vael br senen peşn eğer, ç soo üzernen 8000 TL olara hesaplanığına göre uygulanan soo oranı ner? çözü:.yol: =900 TL n=80 gün P 8000TL t=? P..900 8000 80t 8000( 80t).900

Detaylı

DENKLEM DÜZENEKLERI 1

DENKLEM DÜZENEKLERI 1 DENKLEM DÜZENEKLERI 1 Dizey kuramının önemli bir kullanım alanı doğrusal denklem düzeneklerinin çözümüdür. 2.1. Doğrusal düzenekler Doğrusal denklem düzeneği (n denklem n bilinmeyen) a 11 x 1 + a 12 x

Detaylı

10. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

10. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI. . HAFTA BLM323 SAYISAL ANALİZ Okt. Yasin ORTAKCI yasinortakci@karabuk.edu.tr Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 2 2- İTERATİF YÖNTEMLER Doğrusal denklem sistemlerinin çözümünde

Detaylı

Polinomlar, Temel Kavramlar, Polinomlar Kümesinde Toplama, Çıkarma, Çarpma TEST D 9. E 10. C 11. B 14. D 16. D 12. C 12. A 13. B 14.

Polinomlar, Temel Kavramlar, Polinomlar Kümesinde Toplama, Çıkarma, Çarpma TEST D 9. E 10. C 11. B 14. D 16. D 12. C 12. A 13. B 14. 1. Ünite: Polinomlar Polinomlar, Temel Kavramlar, Polinomlar Kümesinde Toplama, Çıkarma, Çarpma 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Polinomlarda Bölme, Bölüm ve Kalan Bulma 1 1 1 1 1 1 1 1 1

Detaylı

m=n şeklindeki matrislere kare matris adı verilir. şeklindeki matrislere ise sütun matrisi denir. şeklindeki A matrisi bir kare matristir.

m=n şeklindeki matrislere kare matris adı verilir. şeklindeki matrislere ise sütun matrisi denir. şeklindeki A matrisi bir kare matristir. Matrisler Satır ve sütunlar halinde düzenlenmiş tabloya matris denir. m satırı, n ise sütunu gösterir. a!! a!" a!! a!" a!! a!! a!! a!! a!" m=n şeklindeki matrislere kare matris adı verilir. [2 3 1] şeklinde,

Detaylı

Fizik 101: Ders 20. Ajanda

Fizik 101: Ders 20. Ajanda Fzk 101: Ders 20 = I konusunda yorumlar Ajanda Br sstemn açısal momentumu çn genel fade Kayan krş örneğ Açısal momentum vektörü Bsklet teker ve döner skemle Jroskobk hareket Hareketl dönme hakkında yorum

Detaylı

Bilgisayarla Görüye Giriş

Bilgisayarla Görüye Giriş Blgsayarla Görüye Grş Ders 8 Görüntü Eşleme Alp Ertürk alp.erturk@kocael.edu.tr Panorama Oluşturma Görüntüler eşlememz / çakıştırmamız gerekmektedr Panorama Oluşturma İk görüntüden özntelkler çıkar Panorama

Detaylı

İÇİNDEKİLER İÇİNDEKİLER KODLAB

İÇİNDEKİLER İÇİNDEKİLER KODLAB İÇİNDEKİLER IX İÇİNDEKİLER 1 GİRİŞ 1 Kitabın Amacı 1 Algoritmanın Önemi 2 Bilgisayarın Doğuşu ve Kullanım Amaçları 3 Programlama Dili Nedir? 3 Entegre Geliştirme Ortamı (IDE) Nedir? 4 2 ALGORİTMA VE AKIŞ

Detaylı

Okut. Yüksel YURTAY. İletişim : (264) Sayısal Analiz. Giriş.

Okut. Yüksel YURTAY. İletişim :  (264) Sayısal Analiz. Giriş. Okut. Yüksel YURTAY İletişim : Sayısal Analiz yyurtay@sakarya.edu.tr www.cs.sakarya.edu.tr/yyurtay (264) 295 58 99 Giriş 1 Amaç : Mühendislik problemlerinin bilgisayar ortamında çözümünü mümkün kılacak

Detaylı

İÇİNDEKİLER ÖNSÖZ Bölüm 1 SAYILAR 11 Bölüm 2 KÜMELER 31 Bölüm 3 FONKSİYONLAR

İÇİNDEKİLER ÖNSÖZ Bölüm 1 SAYILAR 11 Bölüm 2 KÜMELER 31 Bölüm 3 FONKSİYONLAR İÇİNDEKİLER ÖNSÖZ III Bölüm 1 SAYILAR 11 1.1. Sayı Kümeleri 12 1.1.1.Doğal Sayılar Kümesi 12 1.1.2.Tam Sayılar Kümesi 13 1.1.3.Rasyonel Sayılar Kümesi 14 1.1.4. İrrasyonel Sayılar Kümesi 16 1.1.5. Gerçel

Detaylı

ENDÜSTRİNİN DEĞİŞİK İŞ KOLLARINDA İHTİYAÇ DUYULAN ELEMANLARIN YÜKSEK TEKNİK EĞİTİM MEZUNLARINDAN SAĞLANMASINDAKİ BEKLENTİLERİN SINANMASI

ENDÜSTRİNİN DEĞİŞİK İŞ KOLLARINDA İHTİYAÇ DUYULAN ELEMANLARIN YÜKSEK TEKNİK EĞİTİM MEZUNLARINDAN SAĞLANMASINDAKİ BEKLENTİLERİN SINANMASI V. Ulusal Üretm Araştırmaları Sempozyumu, İstanbul Tcaret Ünverstes, 5-7 Kasım 5 ENDÜSTRİNİN DEĞİŞİK İŞ KOLLARINDA İHTİYAÇ DUYULAN ELEMANLARIN YÜKSEK TEKNİK EĞİTİM MEZUNLARINDAN SAĞLANMASINDAKİ BEKLENTİLERİN

Detaylı

ÖZDEĞERLER- ÖZVEKTÖRLER

ÖZDEĞERLER- ÖZVEKTÖRLER ÖZDEĞERLER- ÖZVEKTÖRLER GİRİŞ Özdeğerler, bir matrisin orijinal yapısını görmek için kullanılan alternatif bir yoldur. Özdeğer kavramını açıklamak için öncelikle özvektör kavramı ele alınsın. Bazı vektörler

Detaylı

MECHANICS OF MATERIALS

MECHANICS OF MATERIALS Ffth E CHPTER MECHNICS OF MTERILS Ferdnand P. eer E. Russell Johnston, Jr. John T. DeWolf Davd F. Mazurek Lecture Notes: J. Walt Oler Texas Tech Unversty. Eksenel Yüklemede Toplam uzama-hperstatk problemler-termal

Detaylı

6. NORMAL ALT GRUPLAR

6. NORMAL ALT GRUPLAR 6. ORMAL ALT GRUPLAR G br grup ve olsun. 5. Bölümden çn eştlğnn her zaman doğru olamayacağını blyoruz. Fakat bu özellğ sağlayan gruplar, grup teorsnde öneml rol oynamaktadır. Bu bölümde bu tür grupları

Detaylı

ĐZENCE Temel Kavram ve Prenspler Tez Problem Sınır Değer Problem Green Fonsyonu Tanımı Çözüm Yalaşımları Sonuçlar

ĐZENCE Temel Kavram ve Prenspler Tez Problem Sınır Değer Problem Green Fonsyonu Tanımı Çözüm Yalaşımları Sonuçlar YÜKSEK ĐSANS TEZ SUNUŞU Çf Yay - Küle Ssemyle Brbrne Bağlanmış Çubuların Eğlme Treşmler Hazırlayan : a. üh. Güran Erdoğan ĐZENCE Temel Kavram ve Prenspler Tez Problem Sınır Değer Problem Green Fonsyonu

Detaylı

Direct Decomposition of A Finitely-Generated Module Over a Principal Ideal Domain *

Direct Decomposition of A Finitely-Generated Module Over a Principal Ideal Domain * BİR ESAS İDEAL BÖLGESİ ÜZERİNDEKİ SONLU DOĞURULMUŞ BİR MODÜLÜN DİREK PARÇALANIŞI * Drec Decompoon of A Fnely-Generaed Module Over a Prncpal Ideal Doman * Zeynep YAPTI Fen Blmler Enüü Maemak Anablm Dalı

Detaylı

MAK 212 - TERMODİNAMİK 19.04.2010 (CRN: 22594, 22599, 22603, 22608 ) 2009-2010 BAHAR YARIYILI ARA SINAV-2

MAK 212 - TERMODİNAMİK 19.04.2010 (CRN: 22594, 22599, 22603, 22608 ) 2009-2010 BAHAR YARIYILI ARA SINAV-2 MAK - ERMODİNAMİK 9.04.00 (CRN: 594, 599, 60, 608 ) 009-00 BAAR YARIYII ARA SINAV- Sru -) Br ısı pmpası sstem ışın br evn ısıtılmasında, yazın sğutulmasında ullanılacatır. Evn ç sıcalığının (ışın ve yazın)

Detaylı

Bağımsız Model Blok Dengeleme için Model Oluşturma ve Ön Sayısal Bilgi İşlemleri

Bağımsız Model Blok Dengeleme için Model Oluşturma ve Ön Sayısal Bilgi İşlemleri Bağımsız Model Blok Dengeleme çn Model Oluşturma ve Ön Sayısal Blg İşlemler Emnnur AYHAN* 1. Grş Fotogrametrk nreng çeştl ölçütlere göre sınıflandırılablr. Bu ölçütler dengelemede kullanılan brm, ver toplamada

Detaylı

BÖLÜNMÜŞ FARKLAR (DİVİDED DİFFERENCES)

BÖLÜNMÜŞ FARKLAR (DİVİDED DİFFERENCES) BÖLÜNMÜŞ FARKLAR (DİVİDED DİFFERENCES) Lagrange ve Neville yöntemlerinin bazı olumsuz yanları vardır: İşlem sayısı çok fazladır (bazı başka yöntemlere kıyasla) Data setinde bir nokta ilavesi veya çıkartılması

Detaylı

AJANDA LİTERATÜR TARAMASI

AJANDA LİTERATÜR TARAMASI AJANDA İSTANBUL DAKİ HASTANELERDEN TIBBİ ATIKLARIN TOPLANMASI İÇİN ARA TESİSE UĞRAMALI BİR ARAÇ ROTALAMA MODELİ Denz Asen Koç Ünverstes İtsad ve İdar Blmler Faültes Müge Güçlü Koç Ünverstes Endüstr Mühendslğ

Detaylı

MATLAB a GİRİŞ. Doç. Dr. Mehmet İTİK. Karadeniz Teknik Üniversitesi Makine Mühendisliği Bölümü

MATLAB a GİRİŞ. Doç. Dr. Mehmet İTİK. Karadeniz Teknik Üniversitesi Makine Mühendisliği Bölümü MATLAB a GİRİŞ Doç. Dr. Mehmet İTİK Karadeniz Teknik Üniversitesi Makine Mühendisliği Bölümü İçerik: MATLAB nedir? MATLAB arayüzü ve Bileşenleri (Toolbox) Değişkenler, Matris ve Vektörler Aritmetik işlemler

Detaylı

KARMAŞIK SAYILAR. Derse giriş için tıklayın...

KARMAŞIK SAYILAR. Derse giriş için tıklayın... KARMAŞIK SAYILAR Derse grş çn tıklayın A Tanım B nn Kuvvetler C İk Karmaşık Sayının Eştlğ D Br Karmaşık Sayının Eşlenğ E Karmaşık Sayılarda Dört İşlem Toplama - Çıkarma Çarpma Bölme F Karmaşık Dülem ve

Detaylı

PERGEL YAYINLARI LYS 1 DENEME-6 KONU ANALİZİ SORU NO LYS 1 MATEMATİK TESTİ KAZANIM NO KAZANIMLAR

PERGEL YAYINLARI LYS 1 DENEME-6 KONU ANALİZİ SORU NO LYS 1 MATEMATİK TESTİ KAZANIM NO KAZANIMLAR 2013-2014 PERGEL YAYINLARI LYS 1 DENEME-6 KONU ANALİZİ SORU NO LYS 1 MATEMATİK TESTİ A B KAZANIM NO KAZANIMLAR 1 1 / 31 12 32173 Üslü İfadeler 2 13 42016 Rasyonel ifade kavramını örneklerle açıklar ve

Detaylı

bir sonraki deneme değerinin tayin edilmesi için fonksiyonun X e göre türevi kullanılır. Aşağıdaki şekil X e karşı f(x) i göstermektedir.

bir sonraki deneme değerinin tayin edilmesi için fonksiyonun X e göre türevi kullanılır. Aşağıdaki şekil X e karşı f(x) i göstermektedir. 37 Newton-Raphson Yöntemi İle Çözüme Ulaşma Bu yöntem özellikle fonksiyonun türevinin analitik olarak elde edilebildiği durumlarda kullanışlıdır. Fonksiyonel ilişkinin ifade edilmesinde daha uygun bir

Detaylı

YÖNEYLEM ARAŞTIRMASI - III

YÖNEYLEM ARAŞTIRMASI - III YÖNEYLEM ARAŞTIRMASI - III Prof. Dr. Cemalettin KUBAT Yrd. Doç. Dr. Özer UYGUN İçerik Bu bölümde eşitsizlik kısıtlarına bağlı bir doğrusal olmayan kısıta sahip problemin belirlenen stasyoner noktaları

Detaylı

3. BÖLÜM MATRİSLER 1

3. BÖLÜM MATRİSLER 1 3. BÖLÜM MATRİSLER 1 2 11 21 1 m1 a a a v 12 22 2 m2 a a a v 1 2 n n n mn a a a v gibi n tane vektörün oluşturduğu, şeklindeki sıralanışına matris denir. 1 2 n A v v v Matris A a a a a a a a a a 11 12

Detaylı

MAK354 Isı Mühendisliği Genel Sınav Soru ve Cevapları Mustafa Eyriboyun

MAK354 Isı Mühendisliği Genel Sınav Soru ve Cevapları Mustafa Eyriboyun 1) Br yoğuşturucunun 25,4 çapında nce cdarlı boruları çnden 1.2 /s hızla su aatadır. Boru yüzey sıcalığı 350 K de sabt tutulatadır. Su grş sıcalığı 17 C ve borular 5 uzunlutadır. Buna göre suyun çıış sıcalığı

Detaylı

İleri Diferansiyel Denklemler

İleri Diferansiyel Denklemler MIT AçıkDersSistemi http://ocw.mit.edu 18.034 İleri Diferansiyel Denklemler 2009 Bahar Bu bilgilere atıfta bulunmak veya kullanım koşulları hakkında bilgi için http://ocw.mit.edu/terms web sitesini ziyaret

Detaylı

BETONARME YAPI TASARIMI

BETONARME YAPI TASARIMI BETONARME YAPI TASARIMI DEPREM HESABI Doç. Dr. Mustafa ZORBOZAN Mart 008 GENEL BİLGİ 18 Mart 007 ve 18 Mart 008 tarhler arasında ülkemzde kaydedlen deprem etknlkler Kaynak: http://www.koer.boun.edu.tr/ssmo/map/tr/oneyear.html

Detaylı

HİPERSTATİK SİSTEMLER

HİPERSTATİK SİSTEMLER HİPERSTATİK SİSTELER Tanım: Bütün kest zorlarını ve bunlara bağlı olarak şekl değştrmelern ve yer değştrmelern hesabı çn denge denklemlernn yeterl olmadığı sstemlere Hperstatk Sstemler denr. Hperstatk

Detaylı

TRANSFORMATÖRLER. 4. a) Pri mer dev re ye uy gu la nan al ter na tif ge ri li min et kin de ğe ri; 1. İdeal transformatörler için,

TRANSFORMATÖRLER. 4. a) Pri mer dev re ye uy gu la nan al ter na tif ge ri li min et kin de ğe ri; 1. İdeal transformatörler için, 7. BÖÜ TRAFORATÖRER AIŞTIRAAR ÇÖZÜER TRAFORATÖRER. İdeal transformatörler çn, eştlğn kullanırsak, 0 00 & 0 0. 0 A 800 400 Transformatör deal olduğundan, 400 8 800 4A A ampermetresnn gösterdğ değer 4A A

Detaylı

DALGACIK DÖNÜŞÜMÜ İLE EEG İŞARETLERİNDEN ÇIKARILAN ÖZNİTELİK VEKTÖRLERİ ÜZERİNDE İSTATİSTİKSEL İŞLEMLERİN GERÇEKLEŞTİRİLMESİ

DALGACIK DÖNÜŞÜMÜ İLE EEG İŞARETLERİNDEN ÇIKARILAN ÖZNİTELİK VEKTÖRLERİ ÜZERİNDE İSTATİSTİKSEL İŞLEMLERİN GERÇEKLEŞTİRİLMESİ DALGACI DÖNÜŞÜMÜ İLE EEG İŞARETLERİNDEN ÇIARILAN ÖZNİTELİ VETÖRLERİ ÜZERİNDE İSTATİSTİSEL İŞLEMLERİN GERÇELEŞTİRİLMESİ Elf Derya ÜBEYLİ İnan GÜLER TOBB Eonom ve Tenoloj Ünverstes, Mühendsl Faültes, Eletr-Eletron

Detaylı

ITAP Fizik Olimpiyat Okulu

ITAP Fizik Olimpiyat Okulu TAP Fzk Olmpyat Okulu Eylül Deneme Sınavı (Prof.Dr.Ventsslav Dmtrov Konu: Elektrk Devrelernde İndüktans Soru. Şekldek gösterlen devrede lk anda K ve K anahtarları açıktır. K anahtarı kapatılıyor ve kondansatörün

Detaylı

YÖNETİM VE EKONOMİ Yıl:2006 Cilt:13 Sayı:1 Celal Bayar Üniversitesi İ.İ.B.F. MANİSA

YÖNETİM VE EKONOMİ Yıl:2006 Cilt:13 Sayı:1 Celal Bayar Üniversitesi İ.İ.B.F. MANİSA YÖNETİM VE EKONOMİ Yıl:2006 Clt:3 Sayı: Celal Bayar Ünverstes İ.İ.B.F. MANİSA Bulanık Araç Rotalama Problemlerne Br Model Öners ve Br Uygulama Doç. Dr. İbrahm GÜNGÖR Süleyman Demrel Ünverstes, İ.İ.B.F.,

Detaylı

Matris Cebiriyle Çoklu Regresyon Modeli

Matris Cebiriyle Çoklu Regresyon Modeli Matris Cebiriyle Çoklu Regresyon Modeli Hüseyin Taştan Mart 00 Klasik Regresyon Modeli k açıklayıcı değişkenden oluşan regresyon modelini her gözlem i için aşağıdaki gibi yazabiliriz: y i β + β x i + β

Detaylı

DENEY 4: SERİ VE PARALEL DEVRELER,VOLTAJ VE AKIM BÖLÜCÜ KURALLARI, KIRCHOFF KANUNLARI

DENEY 4: SERİ VE PARALEL DEVRELER,VOLTAJ VE AKIM BÖLÜCÜ KURALLARI, KIRCHOFF KANUNLARI A. DNYİN AMACI : Bast ser ve bast paralel drenç devrelern analz edp kavramak. Voltaj ve akım bölücü kurallarını kavramak. Krchoff kanunlarını deneysel olarak uygulamak. B. KULLANILACAK AAÇ V MALZML : 1.

Detaylı

18.034 İleri Diferansiyel Denklemler

18.034 İleri Diferansiyel Denklemler MIT AçıkDersSistemi http://ocw.mit.edu 18.034 İleri Diferansiyel Denklemler 2009 Bahar Bu bilgilere atıfta bulunmak veya kullanım koşulları hakkında bilgi için http://ocw.mit.edu/terms web sitesini ziyaret

Detaylı

MAK 210 SAYISAL ANALİZ

MAK 210 SAYISAL ANALİZ MAK 210 SAYISAL ANALİZ BÖLÜM 3- LİNEER DENKLEM SİSTEMLERİNİN ÇÖZÜMÜ Doç. Dr. Ali Rıza YILDIZ 1 LİNEER DENKLEM SİSTEMLERİ Bilimsel ve teknolojik çalışmalarda karşılaşılan matematikle ilgili belli başlı

Detaylı

DETERMINATION OF THE ECONOMIC DISPATCH IN ELECTRIC POWER SYSTEMS USING SIMULATED ANNEALING(SA) ALGORITHM

DETERMINATION OF THE ECONOMIC DISPATCH IN ELECTRIC POWER SYSTEMS USING SIMULATED ANNEALING(SA) ALGORITHM 5 Uluslararası İler Teknolojler Sempozyumu (IATS 09), 3-5 Mayıs 2009, Karabük, Türkye ELEKTRİK GÜÇ SİSTEMİNDE OPTİMAL YAKIT MALİYETİNİN BENZETİM TAVLAMA (BT) ALGORİTMASI İLE BELİRLENMESİ DETERMINATION

Detaylı

1. ÜNİTE: MODERN ATOM TEORİSİ

1. ÜNİTE: MODERN ATOM TEORİSİ . ÜNİTE: MODERN ATOM TEORİSİ.4. Elektron Dizilimi ve Periyodik Sisteme Yerleşim Atomun Kuantum Modeli oluşturulduktan sonra Bohr, yaptığı çalışmalarda periyodik cetvel ile kuantum teorisi arasında bir

Detaylı

Anahtar Kelimeler: Newton, En-dik iniș, Eșlenik Gradyen, Gauss-Newton ve Sönümlü En-küçük Kareler Ters-çözüm Yöntemleri, Tikhonov Düzgünleștiricisi.

Anahtar Kelimeler: Newton, En-dik iniș, Eșlenik Gradyen, Gauss-Newton ve Sönümlü En-küçük Kareler Ters-çözüm Yöntemleri, Tikhonov Düzgünleștiricisi. ÜREV ABANLI PARAMERE KESİRİM YÖNEMLERİ (DERIVAIVE BASED PARAMEER ESIMAION MEHODS) Ahmet uğrul BAȘOKUR Ankara Ünverstes Mühendslk Fakültes Jeofzk Müh. Bölümü, andoğankampusu, 61 Ankara basokur@eng.ankara.edu.tr

Detaylı

KİNETİK MODELLERDE OPTİMUM PARAMETRE BELİRLEME İÇİN BİR YAZILIM: PARES

KİNETİK MODELLERDE OPTİMUM PARAMETRE BELİRLEME İÇİN BİR YAZILIM: PARES KİNETİK MODELLERDE OPTİMUM PARAMETRE BELİRLEME İÇİN BİR YAZILIM: PARES Mehmet YÜCEER, İlnur ATASOY, Rıdvan BERBER Anara Üniversitesi Mühendisli Faültesi Kimya Mühendisliği Bölümü Tandoğan- 0600 Anara (berber@eng.anara.edu.tr)

Detaylı