ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta:
[email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
sn o
em de r
Ahmet TOPÇU
tla
Ders notları 2014
a12 a22 . an 2
... a1m ... a2 m ... . ... anm
A 10x10
− 5 7.7 26 3 − 3 16 12 8 3 6 6.9 11.8 4 4.1 2 − 6 − 6 11 0 5 4 7 6 99 − 4 − 3 2 = 9.1 9 44.7 1 5 2 1 5 22 9 9 1 3 3.3 11 8 4 8 3 11 2 9 9 10
w
w
w .e
A=
a11 a 21 . an1
Bant matris
Matris
1 GİRİŞ Matrisler, tanımlar
1. GİRİŞ: Matrisler, tanımlar
6
1. GİRİŞ: Matrisler, tanımlar Nümerik analiz nedir?
• • • •
m
Nümerik analiz, ya da diğer adıyla sayısal analiz, klasik matematiğin bir dalıdır. Matematiğin analitik çözüm (formül) üretemediği veya ürettiği çözümün uygulama açısından çok karmaşık olduğu durumlarda veya deneye-ölçüme dayalı problemlerde nümerik analiz yöntemlerine başvurulur. Temel ilkeler
ri. co
Karmaşık yerine basit Doğrusal olmayan yerine doğrusal Sonsuz bilinmeyen yerine sonlu bilinmeyen Kesin çözüm yerine yaklaşık çözüm
ile yetinmekten ibarettir. Birkaç örnek:
− b − b 2 − 4ac − b + b 2 − 4ac , x2 = 2a 2a
sn o
x1 =
tla
1. ax2+bx+c=0 ikinci derece polinomunun kökleri (denklemi sağlayan x değerleri) iki tane ve
dir. Üçüncü ve dördüncü derece polinomların çözümü için de formüller vardır, fakat kullanışsızdır. n. dereceden olan a0+a1 x+a2x2+…+ an xn = 0 denkleminin n tane kökü vardır. Fakat n≥5 durumunda x1, x2, …, xn köklerinin formülü yoktur ve olamayacağı Norveçli matematikçi N. H. Abel1 tarafından 1824 yılında ispatlanmıştır. Çözüm sadece nümerik yöntemlerle bulunabilir.
b
−x ∫ e dx , 2
a
b
Sin x ∫a x dx ,
b
∫
b
3
Sin x dx ,
a
b
2 ∫ Sin x dx,
∫
a
a
1 dx, x
n l
em de r
2. Klasik matematik integral hesabı için çok sayıda yöntem sunar, fakat b
∫
b
1 + x 4 dx,
a
∫ a
dx 1+ x 4
gibi çok basit görünen bazı fonksiyonların integrali bilinen klasik yöntemlerle alınamaz. Tek çare nümerik çözümdür.
w
w
w .e
3. Sağdaki şekilde görülen tarlanın alanını integral alarak bulmak için tarlayı sınırlayan çevre eğrisinin fonksiyonunun bilinmesi gerekir. Fakat böyle bir fonksiyon yoktur. Çevre üzerinde alınan noktaların koordinatları ölçülür ve alan nümerik olarak hesaplanır. Ne kadar çok nokta ölçülürse alan o denli gerçeğe yakın olur. 4. 2x1+6x2=-32 -7x1+4x2=37
gibi iki bilinmeyen ve iki doğrusal denklemden oluşan sistemi formüllerle çözerek x1=-7 ve x2=-3 bulabiliriz. Bilinmeyen ve denklem sayısı çok fazla ise, diyelim 1000000 denklem ve 1000000 bilinmeyen, formül kullanılamayacağı gibi elle çözüm için insan ömrü de yetmez. 5. İnşaat, makina, elektrik, elektronik, kimya gibi mühendislik dallarında, tıpta ve meteorolojide x, y, z koordinat eksenlerini ve t zaman değişkenini içeren kısmi türevli diferansiyel denklemlerin çözülmesi (zamana bağlı olarak cismin yer değiştirmesinin, şekil değiştirmesinin, iç kuvvet dağılımının belirlenmesi) matematikte bilinen diferansiyel denklem çözüm yöntemleri ile yapılamaz. Çözüm için nümerik yöntemler kullanılır. Modern yöntemler, problemin matematik modelinin kurulmasından çözümüne kadar yoğun olarak matrisler ile çalışır. Problem, bilinmeyen sayısı çok büyük olan bir doğrusal denklem sistemine dönüştürülür. Bu amaca yönelik nümerik yöntemlerden biri, günümüzde hemen her alanda yaygın olarak kullanılan, “Sonlu Elemanlar Metodu” dur.
1
Niels Henrik Abel (1802 –1829) , Norveçli matematikçi Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
6
1. GİRİŞ: Matrisler, tanımlar
.Nümerik
7
metotların dezavantajları
1. Nümerik analiz sayılar ile bir nevi oyun oynayarak çözüm üretmektir, denilebilir. Oyun genelde kazanılır, fakat kaybedilebilir de! Söylenmek istenen şudur: Çözüm genelde bulunur, ancak bulunamayabilir de.
tla
ri. co
m
2. Nümerik metotların çoğu belli bir hesap kuralının, belki yüzlerce binlerce kez, tekrarlanması ile adım adım sonuca varırlar(iterasyon). Bir tek sayının hesaplanabilmesi için binlerce hatta milyonlarca dört işlem (toplama, çıkarma, çarpma, bölme) gerekir. Bu nedenle el hesaplarına uygun değildir. Bilgisayar, uygun yöntem ve program kullanımı zorunludur. Direkt çözümler bile milyarlarca dört işlem gerektirir. Örneğin, n=10000 bilinmeyenli bir denklem sisteminin Gauss indirgeme yöntemi ile çözümünde yaklaşık 2n3/3≈7x1011 (700 milyar!) dört işlem vardır. Sayıların bu denli çok dört işleme tabi tutulması yuvarlama hatalarının giderek büyümesine neden olur. Peki, bu kadar büyük denklem sistemi uygulamada karşımıza çıkar mı? Evet, hatta çok daha büyükleri! Hemen söyleyelim n=374000000 (üç yüz yetmiş dört milyon) bilinmeyenli denklem sistemi günümüzde çözülebilmiştir. Hem de Türkiye’de: http://www.cem.bilkent.edu.tr/world_record 3. Nümerik çözüm yaklaşıktır, bir miktar kabul edilebilir hata içerir. 4. Aynı problemin çözümünde nümerik metotların bazıları veremeyebilir.
sonuç verebilir, bazıları
em de r
sn o
5. Nümerik metotları öğrenmek ve çözüm üretmek için temel matematik ve mekanik bilgisi yanında bilgisayar, programlama ve paket yazılım kullanma becerisi de gerekir. Hem nümerik analiz hem de bilgisayar ve programlama dilleri yoğun olarak matrisler ile çalıştığından matris matematiği öğrenilmek zorundadır. Bir yapının nümerik metotlar ile hesabı için mukavemet, yapı statiği ve dinamiği gibi bilgiler de gerekir. Kısacası nümerik metotlar klasik bilgiler üzerine inşa edilmiş pratik bir çözüm yoludur, temel bilgiler olmadan bir işe yaramaz.
Tarihçe
Bugünkü bulgulara göre, nümerik analiz metotlarının tarihi yaklaşık 3650 yıl önce başlar. M.Ö. 1650 yıllarına ait bir papirüs (Rhind (veya Ahmes) papirüsü) basit bir denklemin kökünün nümerik çözümünü açıklamaktadır. Milat öncesinin en büyük matematikçisi kabul edilen Arşimet (Yaklaşık M.Ö 287- M.Ö. 212) eğrisel yüzeyli cisimlerin alanını, hacmini ve π sayısını hesaplamış, nümerik en küçük kavramını kullanmıştır.
w
w
w .e
M.Ö. 200 civarına ait Chiu Chang Suan Shu (aritmetik hakkında dokuz bölüm) adlı Çince kitapta aşağıdaki soru yer almaktadır: http://meyer.math.ncsu.edu/Meyer/PS_Files/GaussianEliminationHistory.pdf Üç demet iyi kalite ekin mahsulü, iki demet orta kalite ekin mahsulü ve bir demet kötü kalite ekin mahsulü 39 dou’ya satılıyor. İki demet iyi, üç demet orta ve bir demet kötü 34 dou’ya; ve bir iyi, iki orta ve üç kötü 26 dou’ya satılıyor. Her bir iyi kalite, orta kalite ve kötü kalite ekin mahsulü için alınan fiyat nedir?
x iyi, y orta ve z kötü kalitedeki mahsulün birim fiyatı(dou) olmak üzere, cevabın üç bilinmeyenli denklem sisteminin çözümü olduğu anlaşılıyor: 3x+2y+z=39 2x+3y+z=34 X+2y+3z=26
Çözüm: x=9.25, y=4.25, z=2.75 dou
O çağda +, -, x, ÷ gibi dört işlem operatörleri, eşitlik işareti, değişken kavramı ve 0 rakamı henüz yoktu2. Çinliler bu doğrusal denklem sistemini, sayıları bambu çöpleri ile temsil ederek, çözmüşlerdi. Günümüzde Gauss indirgeme yöntemi veya benzeri birçok yöntem çözüm için kullanılmaktadır.
2
Sıfır rakamını ilk kez 628 yılında Hintli matematikçi Brahmagupta (598-668 ) kullanmıştır. + ve – işareti 1489, = işareti 1557, x
işareti 1628,
÷ işareti 1659 yıllarında kullanılmaya başlamıştır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
7
1. GİRİŞ: Matrisler, tanımlar
8
Nümerik analizin temellerini atanlar John Napier (1550-1617), Isaac Newton (1643-1727), Gottfried Leibniz (1646–1716), Leonhard Euler (1707-1783), JosephLouis Lagrange (1736-1813), Pierre-Simon-Marquis de Laplace(1749-1827), Karl Friedrich Gauss (1777-1855), James Joseph Sylvester(1814 -1897).
m
Nümerik analiz yöntemlerinde adı sıkça geçenler
ri. co
Niels Henrik Abel (1802-1829), Alexander Craig Aitken (1895 - 1967), Bernard Bolzano(1781-1848) George Boole(1815-1864), Isaac Barrow(1630-1677), Leonard Bairstow(1880-1963), Augustin Louis Cauchy(1789-1857), Pafnuty Lvovich Chebyshev(1821-1894) , Prescott Duran Crout (1907-1984), Mayric Hascall Doolittle(1830-1913), André-Louis Cholesky(1875-1918), Gabriel Cramer(1704-1752), Roger Cotes(1682-1716), Arthur Cayley(1821-1895), Ferdinand Georg Frobenius(1849-1917), Leonardo Fibonacci(1170-1250), Joseph Fourier(1768-1830), Jørgen Pedersen Gram(1850-1916), Hermann Grassmann(1809-1877), Charles Hermite(1822-1901), David Hilbert(1862-1943), Alston Scott Householder(1904– 1993), C. A. R. Hoare(1934 - ), Carl Gustav Jacob Jacobi(1804-1851), Marie Ennemond Camille Jordan(1838-1922), Wilhelm Jordan(1842-1899), Martin Wilhelm Kutta(1867-1944) , Joseph-Louis Lagrange (1736 –1813), Adrien Marie Legendre(17521833), Cornelius Lanczos(1893-1974), Richard Edler von Mises(1883-1953), David E. Müller(1924 ), Lewis Fry Richardson(1881-1953), Carl David Tolmé Runge(1856-1927), Werner Romberg(1909-2003), Thomas Simpson(1710-1761), Ludwig von Seidel(1821-1896), Erhard Schmidt(1876-1959), Johan Frederik Steffensen (1873–1961), James Hardy Wilkinson(1919-1986).
sn o
tla
1930-1945 li yıllarda ilk bilgisayarların ortaya çıkmasıyla nümerik analiz yöntemleri önem kazanmaya başladı. Modern nümerik analizin 1947 yılında John Neumann ve Herman Goldstine tarafından yayınlanan “Numerical Inverting of Matrices of High Order , Bulletin of the AMS, Nov. 1947” ile başladığı kabul edilir. Bu yayında yuvarlama hataları ilk kez araştırılmıştır. Günümüzde kullanılan nümerik analiz yöntemlerinin çoğu 1950-1970 yıllarında geliştirilmiştir. Bilgisayarların ve programlama dillerinin giderek gelişmesi, devrim yaratan ve günümüz vazgeçilmez nümerik metodu olan, “Sonlu Elemanlar Metodu-SEM” nun 1960 lı yıllarda doğmasına neden oldu. Bu konudaki ilk yayın: “M. J. Turner, R. W. Clough, H. C. Martin and L. J. Topp, "Stiffness and Deflection Analysis of Complex Structures," J. of Aero. Sci., 23 (9), Sept. 1956”. Finite Element Method(Sonlu Elemanlar Metodu) adının ilk kullanıldığı yayın: “Clough, Ray W.: The
em de r
finite element method in plane stress analysis. Proceedings, 2nd Conference on Electronic Computation, A.S.C.E. Structural Division, Pittsburgh, Pennsylvania, Sept. 1960”. İlk Sonlu elemanlar kitabı: O. C. Zienkiewicz, The Finite Element Method, 1967.
Sonlu Elemanlar Metodunun ilkleri
Lord Rayleigh(1842-1919), Boris Grigorievich Galerkin(1871-1945), Walther Ritz(1878-1909), Richard Courant(1888-1972), Alexander Hrennikoff(1896-1984), John Argyris(1913-2004), James Hardy Wilkinson(1919-1986), Olgierd Cecil Zienkiewicz(1921-2009), Ray W. Clough, 1920- ), William Prager( 1903-1980).
İnşat mühendisliği yapı statiği dersinin bilgisayar öncesi vazgeçilmez nümerik metotları: Cross metodu: Hardy Cross(1885-1959), Kani Metodu: Gaspar Kani(1910-1968),
Ders notunun kapsamı ve amacı
w
w
w .e
İnşaat mühendisliği lisans ve lisansüstü programlarında verilen derslerin birleştirilmesi ve gözden geçirilmesiyle oluşan bu ders notları öncelikle inşaat mühendisliği dalında okuyan öğrencilere yöneliktir. Bu bir kısıtlama ya da diğer dalların işine yaramaz anlamında değildir. Yoğun teori yerine öz ve pratik bilgiler içerir: Matris cebiri, ters matris, denklem sistemi çözümü, en küçük kareler metodu, standart ve genel özdeğer problemi. Ayrıca, doğrusal olmayan fonksiyonların kökleri, Min-Max belirleme, eğri uydurma, belirli integral, sıralamaarama teknikleri konularında yazarın hazırladığı veya başka kaynaklardan edinilmiş çok sayıda, BASIC programlama dilinde kodlanmış programa ve test örneklerine yer verilmiştir. Açık kodlu bu programların bazılarını lisansüstü öğrencilerinin istedikleri bir güncel görsel programlama diline çevirmeleri, gerekli teorik bilgileri araştırmaları istenmektedir. Bunun amacı; öğrenciyi araştırmaya, yoğun bilgisayar kullanmaya, görsel bir programlama dilini öğrenmeye ve nihayet her zaman kullanabileceği kendi eseri nümerik analiz kitapçığını oluşturmaya zorlamaktır. Öğrencinin ayrıca kendi sonuçlarını, sadece bu ders notlarındaki sonuçlar ile değil, Mathematica, MATLAB, Mathcad, Maple, REDUCE, Sage gibi profesyonel yazılımlardan biri ile de doğrulaması istenmektedir. Bundan amaç, öğrencinin konuya yönelik profesyonel yazılımları tanımasını ve kullanım becerisi edinmesini sağlamaktır. Ders notlarında zaman zaman iyileştirme yapılmaktadır. Güncel olanı aşağıdaki adresten indirilebilir: http://mmf2.ogu.edu.tr/atopcu/index_dosyalar/BilgisayarDestekliNumerikAnaliz.htm Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
8
1. GİRİŞ: Matrisler, tanımlar
9
Güncel yaşamımızda tablolar veya çizelgeler kullanırız. Örnek: Satranç tahtası, ders çizelgesi, yıllık takvim, bir ayın günleri, spor toto ve sayısal loto kuponu gibi. Tablonun satırları ve kolonları vardır. Bir satır ve kolonun kesiştiği noktada bir nesne (eleman) vardır.
ri. co
Satranç tahtası 8 satırlı ve 8 kolonlu bir tablodur, Her satır ve kolonun kesiştiği noktada bir eleman (fil, kale, at, piyon, boş, …) vardır. Bu ve benzeri tablolara matematikte matris adı verilir. Bu ders kapsamında matrislerin elemanları genelde sabit sayılardan ve değişkenlerden oluşacaktır. O halde; matris birçok sayının veya değişkenin bir araya getirildiği bir tablodur, bir şemadır, matrisin sayısal bir değeri yoktur.
m
MATRİSLER
tla
Bilgisayarların 1945 li yıllardan itibaren gelişimine paralel olarak, gerçekte asırlar önce temelleri atılmış olan sayısal yöntemler, özellikle, 1960 lı yıllarda yeniden ele alınarak geliştirilmişlerdir. Bu yöntemlerin gerektirdiği milyonlarca verinin derli-toplu ifadesinin, teori ve bilgisayarda işlenmesinin en modern ve kolay yolu matris3 notasyonunu kullanmaktır.
sn o
Matris notasyonu
m bilinmeyen ve n denklemli doğrusal bir denklem sistemi klasik matematikte
a11 x1 + a12 x 2 + ... + a1m x m = b1 a 21 x1 + a 22 x 2 + ... + a 2 m x m = b2 ...
6 x1 + 22.5 x 2 + 5.6 x3 = 18.3
(1.1)
2.2 x1 − 2 x 2 + 15.4 x3 = 23.8
em de r
a n1 x1 + a n 2 x 2 + ... + a nm x m = bn
n = m = 3 için Örnek :
16 x1 − 2 x 2 + 1.5 x3 = −9.7
şeklinde yazılır. Burada x1, x2, ..., xm bilinmeyenleri, b1, b2, ..., bn denklemlerin karşı tarafındaki terimleri, aij terimi i. denklemdeki xj bilinmeyeninin katsayısını göstermektedir. Aynı türden olan büyüklükleri tablo(matris) olarak bir araya getirirsek
a11 a 21 aij katsayılarının tablosu(matrisi): . a n1
a12
a 22 .
a n2
... a1m ... a 2 m ... . ... a nm
16 Örnek : 6 2.2
x1 x Bilinmeyenlerin tablosu(matrisi): 2 . xm
x1 Örnek : x 2 x 3
w .e
w
w
-2 1.5 22.5 5.6 - 2 15.4
b1 b 2 Karşı taraftaki terimlerin tablosu(matrisi): . bn
- 9.7 Örnek : 18.3 23.8
1.1 bağıntısı Katsayılar matrisi
a11 a12 a 21 a22 . . a a n1 n 2
3
Bilinmeyenler matrisi(vektör)
... a1m x1 b1 ... a2 m x2 b2 = ... . . . ... anm xm bm
Örnek :
Karşı taraf matrisi(vektör)
16 6 2.2
-2 1.5 x 1 - 9.7 22.5 5.6 x 2 = 18.3 - 2 15.4 x 3 23.8
(1.2)
Matris kelimesi ilk kez 1850 yılında İngiliz James Joseph Sylvester (1814-1897) tarafından kullanıldı. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
9
1. GİRİŞ: Matrisler, tanımlar
10
Şeklinde yazılabilir. 1.1 ile 1.2 in aynı anlamda olabilmesi için bir çarpım kuralı koymak gerekir: Katsayılar matrisinin bir satırındaki terimler bilinmeyenler matrisindeki terimler ile sırasıyla çarpılıp toplanacaktır. Bu toplam karşı taraf matrisinin aynı satırındaki değere eşitlenecektir.
a12 a 22 . an2
... a1m ... a 2 m , ... . ... a nm
x1 b1 x b 2 x= , b = 2 . . xm bn
Bu tanımlamaya bağlı olarak 1.2 bağıntısı kısaca
(1.3)
tla
A x=b
ri. co
a11 a A = 21 . a n1
m
1.2 bağıntısı 1.1 denklem sisteminin matris notasyonunda yazılmış açık şeklidir. Daha az yer tutması ve daha kısa yazılması için matrislere ad verilir:
(1.4)
sn o
Şeklinde yazılır. Bu bağıntı 1.1 bağıntısındaki doğrusal cebirsel denklem sisteminin matris notasyonunda yazılmış en kısa şeklidir. A denklem sisteminin katsayılar matrisi, x bilinmeyenler matrisi(vektörü), b karşı taraf matrisi(vektörü) adını alır. Dikkat edilirse; A, x ve b büyüklüklerinin altı çizilidir. Bunun nedeni, matrisleri sayısal büyüklüklerden ayırabilmektir. A bir matris, A ise bir sayıdır.
em de r
Matrisleri sayısal büyüklüklerden ayırabilmek için kaynaklarda farklı farklı gösterim kullanılır. Bazı yazarlar matrislerin altını çizer, bazıları koyu harf kullanır, bazıları köşeli parantez, bazıları yuvarlak parantez kullanır. Aşağıda sıkça kullanılan notasyonlar verilmiştir:
A = A nxm = A = A nxm
a11 a = [A] = 21 . a n1
a12 a 22 . an2
... a1m a11 ... a 2 m a = ( A) = 21 ... . . ... a nm a n1
a12 a 22 . an2
... a1m ... a 2 m ... . ... a nm
Matris tipleri Herhangi bir matrisin elemanları gerçek(reel) ve karmaşık(kompleks) sayılardan oluşabilir. Bu ders notu kapsamında, aksi söylenmedikçe, sadece gerçek elemanlı matrisler ele alınacaktır. Uygulamada sıkça karşılaşılan matris tipleri ve özellikleri aşağıda özetlenmiştir. Dikdörtgen matris: Satır ve kolon sayısı farklı, nxm elemanı olan matristir.
w
w
w .e
nxm indisine matrisin boyutu denir. Matrisin n satırlı, m kolonlu ve nxm elemanlı olduğunu belirtir. aij, matrisin i. satır ve j. kolonundaki elemandır. Bu ders notunda, yazım ve çizim kolaylığı nedeniyle, matrisler altı çizilerek ve köşeli parantez kullanılarak vurgulanacaktır. Gerekli olduğunda matrisin boyutu indis olarak yazılacaktır.
A nxm
a11 a = 21 . a n1
a12 a 22 . an2
... a1m ... a 2 m ... . ... a nm
7 -5 -6.9 Örnek: A = 6.1 0 13
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
10
1. GİRİŞ: Matrisler, tanımlar
11
A nxn
a11 a = 21 . a n1
... a1n ... a 2 n ... . ... a nn
a12 a 22 . an2
-5 6.9 7 Örnek: A = 6.1 0 13 22.6 5.5 10
m
Kare matris: n satır, n kolon ve nxn elemanlı matristir.
A1 xn = [a11
ri. co
Satır matrisi veya satır vektörü: Tek bir satırı, n kolonu ve n elemanı olan matristir. Satır vektörü de denir.
. a1n ]
a12
Örnek: A = [-9.73 0.964 -5.55 8]
a 21
. a n1 }
46.32 9 = {46.32 9 -109.4 86} Örnek: A = -109.4 86
sn o
A nx1
a11 a = 21 = {a11 . a n1
tla
Kolon matris veya kolon vektörü: Tek bir kolonu, n satırı ve n elemanı olan matristir. Kolon vektörü de denir. Yer kazanmak amacıyla { ve } parantezleri kullanılarak satır şeklinde de yazılır. Burada dikkat edilmesi gereken nokta { ve } parantezleri kullanılarak yazılmış matrisin bir satır matrisi değil kolon matrisi olduğudur.
em de r
Diyagonal (köşegen) matris: Bir kare matrisin satır ve kolon numaraları eşit olan a11, a22, …, ann elemanlarına diyagonal veya köşegen eleman ve bu elemanların yer aldığı hatta ana diyagonal veya ana köşegen denir. Köşegen elemanları dışındaki tüm elemanları sıfır olan matrise diyagonal veya köşegen matris denir. Hepsi olmamak kaydıyla, Köşegen elemanlardan bazıları da sıfır olabilir. Yer kazanmak ve köşegen dışındaki sıfırları yazmamak için diag[…] veya … şeklinde de yazılır. Kaynaklarda genellikle D harfi ile gösterilir.
D nxn
d 11 0 = . 0
0
...
d 22
... .
0
...
d 22
. d nn ] = d11 d22 … dnn
Ana köşegen
w .e
w
w
0 0 = diag [d 11 . d nn
0 -33.3 0 0 1 . 9 0 Örnek: D = 0 0 72 0 0 0
0 0 = diag [-33.3 1.9 0 0.87
72
0.87 ] = -33.3 1.9 72 0.87
Alt üçgen matris: Diyagonalin üstündeki tüm elemanları sıfır olan kare matristir. Tümü olmamak kaydıyla, diyagonal ve altındaki elemanlardan bazıları da sıfır olabilir. Kaynaklarda çoğunlukla L (Lower) harfi ile gösterilir.
L nxn
l11 l = 21 . l n1
0 l 22 l n2
0 ... 0 ... . ... l nn ...
0 0 3 0 5.5 13 0 0 Örnek : L = 16 7 − 7 0 -4 22 0 13.2
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
11
1. GİRİŞ: Matrisler, tanımlar
12
... u1n ... u 2 n ... . ... u nn
u12 u 22 . 0
3 5.5 16 - 4 0 13 7 22 Örnek: U = 0 0 − 7 0 0 13.2 0 0
ri. co
U nxn
u11 0 = . 0
m
Üst üçgen matris: Diyagonalin altındaki tüm elemanları sıfır olan kare matristir. Tümü olmamak kaydıyla, diyagonal ve üstündeki elemanlardan bazıları da sıfır olabilir. Kaynaklarda çoğunlukla U (Upper) harfi ile gösterilir.
Alt köşegenler= alt bant
sn o
tla
Bant matris: Matrisin sıfırdan farklı elemanları ana köşegen civarında toplanmış matristir. Ana köşegenine paralel köşegenlerine yan köşegen denir. Ana köşegenin altındakilere alt köşegen, üstündekilere üst köşegen de denir. m1 alt ve m2 üst köşegeni olan bir matrisin Ana bant genişliği m=m1+m2+1 olur. m1 e alt bant m2 ye üst bant genişliği de denir. Ana bant dışındaki tüm elemanları sıfır olan matrislere bant matris denir. Aşağıdaki şekilde 10x10 boyutlu, m1=2 alt ve m2=3 üst bant genişlikli bir matris ve örneği görülmektedir. Bant içindeki her bir eleman x ile gösterilmiştir. Ana bant genişliği m=m1+m2+1=2+3+1=6 ve i>j+m1 veya j>i+m2 için aij=0 dır. Bant dışındaki sıfır elemanlar yazılmamıştır.
Üst köşegenler=üst bant
m2=3
x
x
x
x x
x x
x x
x x
x
x
x x
x x x
x x x
x x x
x x x
x
x x
x x x
x x x x
em de r
x x m1=2 x A10 x10 = Ana bant
Örnek:
m=6
x
x x x x
x x x x
A 10 x10
3 − 5 7.7 26 − 3 16 12 8 3 6 6.9 11.8 4 4.1 2 − 6 − 6 11 0 5 4 7 6 99 − 4 − 3 2 = 9.1 9 44.7 1 5 2 1 5 22 9 9 1 3 3.3 11 8 4 8 3 11 2 9 9 10
w .e
Ana köşegen
Üçlü köşegen matris: Bir alt ve bir üst köşegeni olan bant matristir. Uygulamada doğrudan karşılaşılabildiği gibi tam dolu matrisler bir takım işlemler sonucu bazen üçlü köşegen matrise dönüştürülür. Aşağıdaki örnekte gösterilmeyen elemanlar sıfırdır.
w
w
x x
Bant matris
A8 x8
x x =
x x x
x x x
x x x
x x x
x x x
x x x
x x
Örnek: A 8 x8
12 8 − 8 20 6 3 18 − 3 0 33 7 = − 4 40 0 9 22 2.7 8 20 9.1 5 10
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
12
1. GİRİŞ: Matrisler, tanımlar
13
ri. co
Seyrek matris
tla
A10 x10
2 6 6 1 2 7 2 4 = 8 −9 2 3 3 − 6 3 1 − 4
m
Seyrek matris: Uygulamada karşılaşılan matrisler çok büyük boyutlu, 1000000x1000000, 100000000 x100000000 gibi, fakat çoğu kez çok seyrek elemanlı olurlar. Elemanların %9599 u sıfırdır. Bu matrislere seyrek (İngilizce: Sparse) matris denir. Bu tür matrisler ile çalışılırken, çok özel yöntemler kullanılarak, sıfırların depolanmasından ve sıfır sayısı ile gereksiz dört işlem yapmaktan kaçınılır. Aşağıdaki örnekte sıfır elemanlar yazılmamıştır.
Sıfır matris
em de r
Örnek:
0 0 0 O = 0 0 0 0 0 0
sn o
Sıfır matris ve birim matris: Tüm elemanları 0 (sıfır) olan matrise sıfır matris, diyagonal elemanları 1 (bir) olan kare matrise de birim matris denir. Genellikle, sıfır matris O ile, birim matris I ile gösterilir. Aşağıdaki birim matrisin sıfırları yazılmamıştır.
1 1 I= 1 1
Birim matris
Bölünmüş matris ve alt matris: Bir Anxm matrisi yatay ve düşey çizgilerle daha küçük matrislere bölünebilir. Bu durumda A matrisi elemanları da matris olan bir matris olur. Bu elemanlara alt matris, matrisin kendisine de bölünmüş veya bloklanmış matris denir. Örnek:
-1 0 0 0 a A = 0 1 2 3 = 11 a 0 1 -2 3 21
a 12 a 22
a 13 a 23
Bölünmüş matris
w
w
w .e
Alt matris
Alt matrisler:
a 11 = [− 1] ,
a 12 = [0 0] ,
a 13 = [0]
0 1 2 3 a 21 = , a 22 = , a 23 = 3 0 1 − 2
Matris neden bölünür?
•
Çok sayıda sıfırları alt matrislere toplamak ve sıfır alt matrisler ile işlemleri önlemek için.
•
Sıfır alt matrisleri depolamamak için.
•
Matris işlemlerini eleman- eleman değil, blok-blok yapabilmek için.
•
Çok büyük matrislerin işlemlerini taksit-taksit yapabilmek için.
Çok büyük matrisleri depolamak için hiçbir bilgisayarın ana belleği yetmez. Büyük matris uygun alt matrislere bölünür, alt matrisler çevre birimlerinde (hard disk) depolanır. Ana belleğe sığacak kadar alt matris hard diskten okunur, matris işlemleri taksit-taksit yapılır. Yılın günlerini gösteren takvim bölünmüş matrise ve alt matrislere bir örnektir. Her ay bir alt matristir.
Bölünmüş matris Alt matris Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
13
1. GİRİŞ: Matrisler, tanımlar
14
Büyük matris nedir?
m
Basit bir tanımla, büyük matris kullanılan bilgisayarın, işletim sisteminin ve programlama dilinin üstesinden gelemediği matristir(bilgisayarın çok belleği olması tamamının kullanılabileceği anlamına gelmez. İşletim sistemi ve programa dili kullanılabilir bellek miktarını sınırlar). 1950 li yıllarda 20x20 boyutlu matris büyük sayılırdı. 1960 lı yıllarda 100x100 boyutlu, 1970 li yıllarda 1000x1000 boyutlu, 1980 li yıllarda 10000x10000 boyutlu, 1990 lı yıllarda 100000x100000 boyutlu matris büyük idi. Günümüzde 1000000x1000000 boyutlu matris büyük, 100000000x100000000 boyutlu matris çok büyüktür denilebilir. Matris büyüdükçe bellek ve işlemci gücü yetmez olur, yuvarlama hataları büyür, sonuç güvensiz olur. Çok büyük denklem sistemlerini çözmek için çok özel çözüm yöntemlerine, çok özel(yüzlerce-binlerce işlemcili, birkaç terabyte ana bellekli) ve pahalı(birkaç milyon dolar) bilgisayara gereksinim olur.
ri. co
Çok büyük denklem sistemi ile çok özel alanlarda karşılaşılır: uzay, fizik, tıp, biyoloji, meteoroloji, askeri, benzetim araştırmaları. 374 milyon bilinmeyenli denklem sistemi(matrisin boyutu: 374000000x374000000) Bilkent üniversitesinde 2009 yılında çözülerek dünya rekoru kırılmıştır: http://www.cem.bilkent.edu.tr/world_record
tla
Kullanılabilir ana belleği 4 Gigabyte varsayımıyla, 1000-2000 $ fiyatındaki bir dizüstü bilgisarla kaç denklem çözülebilir? Yaklaşık bir hesap yapalım. Bir Gigabyte belleğin donanım, işletim sistemi ve yazılımlar tarafından kullanıldığını varsayarsak, matrisi depolamak için 3 Gigabyte boş ana bellek kalır. 1 Gigabyte=bir milyar byte demektir, boş bellek=3 milyar byte=3x109 byte. Ondalık bir sayıyı bilgisayarda depolamak için en az 8 byte kullanılır. Depolanabilecek ondalık sayı sayısı=3x109/8=375x106 adet olur. Depolanabilecek matrisin boyutu nxn=375x106 n≈19000 civarında olacaktır.
sn o
19000x19000 boyutlu matrisin tamamı ana bellekte depolanabilir. Matris simetrik ise, yarısının depolanması, bant ve simetrik ise sadece yarı bantın depolanması yeterli olduğundan matris çok daha büyük olabilir. Bölünmüş ve alt matris tekniği ve hard disk kullanılması durumunda çözülebilecek denklem sayısı daha da artar. Ancak, hatırlatmakta yarar var: Matris büyüdükçe ondalık sayı için sadece 8 byte kullanmak yuvarlama hatalarını artırır, azaltmak için 10-16 byte kullanmak gerekecektir. Her biri 100 m2 4 daireli ve 10 katlı bir apartmanın Sonlu Elemanlar Metodu ile statik hesapları yaklaşık 500020000 bilinmeyenli bir denklem sisteminin çözümünü gerektirir, bir dizüstü ile rahatlıkla çözülebilir. Bundan şu sunuca varabiliriz. Günümüzde kullanılan 1000-2000 dolarlık dizüstü bilgisayar 1970-1980 lı yılların bir kaç milyon Amerikan dolarlık süper bilgisayarlarından çok daha güçlüdürler.
em de r
Simetrik matris ve ters simetrik matris: Bir kare matrisin tüm elemanları için aij=aji ise bu matrise simetrik matris denir. Bir kare matriste i≠j için aij=-aji ise ve aii=0 ise bu matrise ters simetrik matris denir.
Örnek: A =
1 2 3 -3
2 3 -3 1 2 3 -3 1 0 0 1 0 0 = , Sim 0 5 -1 5 -1 0 -1 7 7
Ters simetrik matris
6 3 0 A = − 6 0 5 − 3 − 5 0
Simetrik matris
w
w
w .e
Simetrik bant matris: Uygulamada sıkça karşılaşılan bir matris tipidir. Sonlu elemanlar metodunun denklem sisteminin katsayılar matrisi bu türdendir. Bu nedenle çok önemlidir. Alt bant genişliği
m2=2
Üst bant genişliği
23 5 − 1 5 20 6 − 4 m1=2 − 1 6 18 3 − 3 − 4 3 42 11 A= − 3 11 33 3 4 Ana bant genişliği=5 2
Yarı bant genişliği
b=3
3 4 19 0 4
23 = 2 0 4 Sim 10 − 4 − 4 16
5
−1
20
6 18
−4 3 42
−3 11 33
3 4 19
2 0 10
4 − 4 16
Simetrik bant matrisin üst ve alt köşegen sayısı aynıdır, m1=m2. Ana bant genişliği m=2m1+1 dir. b=m1+1 değerine özel olarak yarı bant genişliği denir. Yukarıdaki örnekte m1=m2=2, bant genişliği m=5 ve yarı bant genişliği b=3 tür. Simetrik bant matrislerin sadece yarı bant genişliği içinde kalan elemanları bilgisayarda depolanarak bellekten, işlem sayısından ve hesap zamanından tasarruf edilir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
14
1. GİRİŞ: Matrisler, tanımlar
15
Bazı önemli özellikler:
Bir kolon matrisin(kolon vektörün) transpozu satır matrisi, bir satır matrisin(satır vektörün) transpozu kolon matrisidir.
•
− 7 → A = 9.6 2 T
Anxm matrisin transpozunun transpozu yine aynı Anxm matrisidir (AT)T= A
-5 5.7 − 5 − 3 7.7 T → A = -3 3 5 . 7 3 2 7.7 2
Örnek: A 2x3 =
− 5 − 3 7.7 T → ( A ) T = A 2x3 = 2 5.7 3
Simetrik Anxn matrisinin tarnspozu gene Anxn matrisidir: AT = A
em de r
•
A 1x 3 = [− 7 9.6 2]
tla
Örnek: A 3 x1
4.83 T = -16.72 → A = [4.83 -16.72 19.07] , 19.07
sn o
•
ri. co
m
Transpoz matris: Anxm matrisinin satırları yeni bir matrisin kolonları olarak yazılırsa bu yeni matrise A nın transpoz matrisi denir ve yeni matris AT ile veya A’ gösterilir. Transpoz matrisin boyutu mxn olur. Bazı Türkçe kaynaklar Tranpoz matrisi devrik matris olarak isimlendirmektedirler. - 3 6 9.4 − 3 7.1 0 5.5 7.1 3.3 2.9 Örnek : A 3x 4 = 6 3.3 11 − 8 ⇒ A T4x3 = 0 11 16 9.4 2.9 16 1 5.5 - 8 1
Örnek:
A 3 x3
5 1 3 5 1 3 T = 1 7 − 1 → A 3 x 3 = A 3 x 3 = 1 7 − 1 3 − 1 4 3 − 1 4
Bu nedenle AT = A simetriklik koşulu olarak kullanılır.
w .e
Bölünmüş matrisin transpozu: Elemanları alt matris olan bölünmüş bir matrisin transpozu alt matrislerin de transpozu alınarak oluşturulur.
T a 11 -1 0 0 0 a 12 a 13 T a T A = 0 1 2 3 = 11 , A = a 12 a a 22 a 23 a T 0 1 -2 3 21 13 Alt matris
a21
w
w
Bölünmüş matris
a22
-1 T a 21 0 T a 22 = 0 T a 23 0
0 1 2 3
0 1 - 2 3
(1.5)
İki matrisin Eşitliği: Bir A matrisi ile bir B matrisinin eşit olabilmesi için her iki matrisin boyutların aynı olması ve karşılıklı elemanlarının eşit olması gerekir. Anxm=Bnxm ise aij=bij dir.
2 A= 9
0 4
1 , 0.25
x B= 2 z
0 x
y , − 2t
A =B
olduğu biliniyorsa x=4, y=1, z=±3, t=-0.125 olmak zorundadır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
15
1. GİRİŞ: Matrisler, tanımlar
16
Simetrik pozitif tanımlı matris: Simetrik bir A matrisi (A=AT ) ile elemanlarının en az biri sıfırdan farklı olan, bunun dışında tamamen keyfi bir x ≠0 kolon vektörü verilmiş olsun. P = xT A x
ri. co
P>0 ise A pozitif tanımlıdır (positive definit) P<0 ise A negatif tanımlıdır (negative definit) P≥0 ise A yarı pozitif tanımlıdır (positive semidefinit) P≤0 ise A yarı negatif tanımlıdır (negative semidefinit)
m
çarpımı sabit bir sayı olur. Eğer
denir. Simetrik matrisler uygulamada sıkça görülür. Matrisin hem simetrik hem de pozitif tanımlı olması denklem sistemlerinin çözümünde önemli rol oynar, kolaylık sağlar.
tla
Herhangi bir matrisin pozitif tanımlı olup olmadığını anlamak genelde basit değildir. Çoğu kez matrisin fiziksel anlamı yorumlanarak karar verilir. Fiziksel anlamı nedir? İlerleyen konularda tekrar ele alınarak açıklanacaktır. Şimdilik, iki basit örnek ile açıklayalım. Örnekler:
1 0 x1 2 2 x 2 ] x = x1 + x 2 0 1 2
sn o
x 1 0 A= , x = 1 , p = x T A x = [x1 0 1 x2
olduğundan, x1≠0 veya x2≠0 olduğu sürece p>0 dır, dolayısıyla A pozitif tanımlıdır.
x 0 1 B= , x = 1 , p = x T B x = [x1 1 0 x2
0 1 x1 x 2 ] = x1 x 2 + x1 x 2 1 0 x 2
em de r
dır. x1 ≤ 0 ve x 2 ≥ 0 için p≤0 olacağından B pozitif tanımlı değildir. Diyagonal ağırlıklı(diagonal dominant) matris: Bir kare matrisin i. satırındaki diyagonal elemanının mutlak değeri aynı satırdaki diğer elemanların mutlak değerlerinin toplamına eşit veya büyükse n
a ii ≥
∑a
ij
, (bütün i = 1, 2, ..., n ve i ≠ j için)
j=1
matris diyagonal ağırlıklıdır(İngilizce diagonal dominant: diyagonal ağırlıklı, egemen, baskın) denir. Eğer n
∑a
, (bütün i = 1, 2, ..., n ve i ≠ j için)
w
w
w .e
a ii >
ij
j=1
sağlanıyorsa matris kesin diyagonal ağırlıklı (İng. strictly diagonal dominant: kesin diyagonal ağırlıklı, egemen, baskın) denir. Kesin diyagonal ağırlıklı matrisin determinantı4 sıfırdan farklıdır. Örnekler: − 6 A = 4 1 − 7 B = − 2 1
4
3 8 3 3 8 3
− 3 − 3 5
|-6|=|3|+|-3| |8|>|4|+|-3| |5|>|1|+|3|
olduğundan A diyagonal ağırlıklıdır, det A≠0 veya det A=0 olabilir.
− 3 − 3 5
|-7|>|3|+|-3| |8|>|-2|+|-3 |5|>|1|+|3|
olduğundan B kesin diyagonal ağırlıklıdır, det B≠0 dır.
Determinant kavramı bir sonraki bölümde verilecektir. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
16
1. GİRİŞ: Matrisler, tanımlar
Matrisin kesin diyagonal dominant çözümünde, önemli rol oynar.
olması,
17
özellikle
iterasyon
ile
denklem
sistemi
Matrislerin bilgisayar belleğinde depolanma biçimleri
m
Bilgisayar belleği tek boyutlu bir dizidir, byte-byte i izler. Matrisler bu diziye, programlama tekniğine bağlı olarak, tek veya iki boyutlu olarak depolanabilir. Farklı tipte matrislerin depolama biçimleri aşağıda özetlenmiştir.
Vektör:
[ a1 a2 ... an ]
Dikdörtgen veya kare matris:
Bilgisayarda iki boyutlu depolanır
teori
... a1m a11 a12 a a ... a2m → 21 22 . ... . . ... anm an1 an2
Diyagonal matris:
a11 a22 A= . .
.
→ [ a a ... a ] 11 22 1n . ann
Tek boyutlu ve satır-satır depolama
[ a11 a12 ...a1m | a21 a22 ... a2 m | ... | an1 an 2 ... anm ]
veya
[ a11 a21 ...an1 | a12 a22 ... an 2 | ... | a1m a2 m ... anm ] Tek boyutlu ve kolon-kolon depolama
Bilgisayarda sadece diyagonal elemanlar tek boyutlu depolanır
em de r
teori
... a1m ... a2m ... . ... anm
sn o
a11 a12 a a A = 21 22 . . an1 an2
ri. co
Bilgisayarda tek boyutlu depolanır
tla
teori a1 a A = 2 veya A = [a1 a2 . an ] . an
Alt üçgen matris:
teori
w
w
w .e
a11 a a22 L = 21 . . an1 an 2
a11 → a21 a22 . . . . ... ann an1 an 2
Bilgisayarda iki boyutlu depolanır (üçgen depolama mümkün değil!)
. ... ann
[a11| a21 a22| ... |an1 an 2 ... ann ]
veya
[a11 a21 ...an1| a22 ... an 2|...| ann ] Tek boyutlu ve kolon-kolon depolama
Tek boyutlu ve satır-satır
Üst üçgen matris:
a11 a12 ... a1n a11 a12 a22 ... a2 n a22 U = → . . . . . . a nn
Tek boyutlu ve satır-satır depolama
... a1n ... a2 n . . ann
[a11 a12 ...a1n| a 22 ... a 2 n|...| a nn ] veya
[a11 |a12 a22| ... |a1n a 2 n ... ann ] Tek boyutlu ve kolon-kolon depolama
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
17
1. GİRİŞ: Matrisler, tanımlar
18
Simetrik olmayan bant matris: teori
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x x
x x
x x
x x
x x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
bant
bant
x x x
x x x
x x x
x
x
x
x x x
x x x
x x x
x x
x x x 0
x x x x x x x 0 0 0
0
Model
x 0 0
x x x
Sadece bant içindeki elemanlar depolanır
x
x
x
x
x
x
x
x x
x x
x x
x x
x
x x
x x x x
x
x
x
x
x
x
x
x
x
x
x
x
x
x x
x x
x x
x x
x
x
x
x
x
0
0
0
0
0
0
Model: Bant genişliğini eşitlemek için gösterilen sıfırlar varmış gibi depolanır.
Bilgisayarda iki boyutlu depolama
veya veya
0 0
Tek boyutlu ve satır-satır depolama
[0 0 x x x x | 0 x x x x x | x x x x x x | ... | x x x x x x | x x x x x 0 | x x x x 0 0 | x x x 0 0 0] [0 0 x x x x x x x x | 0 x x x x x x x x x | ... | x x x x x x x x x 0 | x x x x x x x x 0 0 | x x x x x x x 0 0 0]
em de r
0 0 0 x x x x x x x x x x x x x x x x x
x x x x
m
x
ri. co
x
tla
x
sn o
x x x A=
bant
Tek boyutlu kolon-kolon depolama
Simetrik bant matrisin üst bantı: Simetrik bant matris: teori
Yarı bant
x x x
x
w
w
w .e
x x x x x x A= Simetrik
x x
x
x x
x x
x x
x
x
x x
x x x
Yarı bant
x x x x x x → x Simetrik x x x
x x x
x
x x
x
x x
x x
x x
x
x
x x
x x x
x x 0 x 0 0 x 0 0
Sadece üst yarı bant içindeki elemanlar depolanır
Model: yarı bant genişliğini eşitlemek için gösterilen sıfırlar varmış gibi depolanır.
0
Yarı bant Bilgisayarda iki boyutlu
depolama x x x x x x x x tek boyutlu satır-satır depolama x x x x x x x x [ x x x x | ... | x x x x | x x x 0 | x x 0 0 | x 0 0 0] veya → x x x x [ x x x x x x x x x | x x x x x x x x 0 | x x x x x x x 0 0 | x x x x x x 0 0 0] x x x x x x x 0 Tek boyutlu diyagonal - diyagonal depolama x x 0 0 x 0 0 0 TOPÇU, Bilgisayar Ahmet Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
18
1. GİRİŞ: Matrisler, tanımlar
Simetrik bant matrisin alt bantı:
x x
x x
x x
x
x
x
x x
x
x x x x
x x
x
x
x
x
Simetrik
Yarı bant
Yarı bant
x x x x x x x x x
Bilgisayarda iki boyutlu depolama
x
x
x
x
x
x
x x
x x
x x
x
x
x
x
x
x
x
x
x
x
x
Simetrik
Tek boyutlu satır-satır depolama
veya
[ 0 0 0 x | 0 0 x x | 0 x x x | x x x x | ... | x x x x]
[ 0 0 0 x x x x x x | 0 0 x x x x x x x | 0 x x x x x x x x | x x x x x x x x x] Tek boyutlu diyagonal - diyagonal depolama
em de r
0 0 0 0 0 x 0 x x x x x → x x x x x x x x x x x x x x x
Model
x
Sadece alt yarı bant içindeki elemanlar depolanır x
m
x
x x x x
ri. co
x x
x
tla
teori
Model: yarı bant genişliğini eşitlemek için gösterilen sıfırlar varmış gibi modellenir.
sn o
x x x x A=
19
Ufuk çizgisi (Skyline depolama tekniği): Sadece simetrik pozitif tanımlı matrisler için kullanılabilir.
x x
x x 0 x x x x x
Simetrik
w
w
w .e
x A=
x x 0 x 0 x x x x .
x x → x x . x
x x x x x Simetrik
Ufuk çizgisi(skyline)
x 0 x x x x
x x 0 x x 0 x x x x x x x . . x
Kolonların, diyagonalden başlanarak ufuk çizgisine kadar olan elemanları depolanır
Bilgisayarda sadece tek boyutlu depolanır
2. kolon
1. kolon 3. kolon
4. kolon
n. kolon
[x| x x |x x | x x 0 x|x x|xx|x x 0 0 x x|. x|x . x x x x] kH [1 2 2 4 2 2 6 …]
A nın kolonlarının tek boyutlu matriste depolanması
Kolon yükseklikleri(yardımcı vektör)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
19
1. GİRİŞ: Matrisler, tanımlar
20
Seyrek(sparse) matris(iterasyon yöntemleri için):
a14
0
0
a33
a34
0
a44
0
0
0 a25 0 0 a55
Seyrek matris: Sıfırdan farklı elemanı çok az(%1 civarında olan matris) Sadece sıfırdan farklı elemanlar depolanır
A → [a11 a13 a14 a 22 a 25 a 31 a 33 a 34 a 42 a 44 a 52 a 55 ] ia → [1 1 1 2 2 3 3 3 4 4 5 5]
Sıfırdan farklı elemanların satır numaraları ia vektöründe depolanır
Sıfırdan farklı elemanların kolon numaraları ja vektöründe depolanır
tla
ja → [1 3 4 2 5 1 3 4 2 4 2 5]
Matrisin sadece sıfırdan farklı olan elemanlar tek boyutlu A vektöründe depolanır
m
a13
ri. co
a11 0 0 a 22 A = a31 0 0 a42 0 a52
sn o
Ek bilgi: Seyrek ve çok büyük matrisler uygulamada, özellikle sonlu elemanlar metodunun denge denklemlerinde, karşımıza çıkar. Matris simetrik pozitif tanımlı ve bant yapısına sahiptir. Denklem sistemi Cholesky(bant), Cholesky(Skyline) direkt veya CG(Conjugate Gradient) iterasyon metodu ile çözülür(bu metodlar ilerleyen konularda ele alınacak). Cholesky(bant veya ufuk çizgisi) direkt metodunda denklem sistemi çözülürken bant içindeki veya ufuk çizgisi altındaki, başlangıçta sıfır olan, elemanlar sıfırdan farklı olurlar. Bu nedenle çok büyük sistemlerinde çok fazla bellek gerekir, ayrıca yuvarlama hataları giderek büyür.
em de r
CG metodunda matrisin sadece sıfırdan farklı elemanları, tercihen simetri dikkate alınmadan, depolanır. Çünkü programlama açısından daha uygundur. Denklem sistemi çözülürken matrisin elemanlarının değeri hiç değişmez. İterasyon sayısı yaklaşık denklem sayısı kadardır. Yuvarlama hataları da Cholesky metoduna nazaran daha azdır.
w .e
Uygulamadan alınan aşağıdaki A=Bcsstk17 seyrek matrisi için bu metotların ana bellek gereksinimi karşılaştırılacaktır:
Matrisin depolanabilmesi için ana bellek gereksinimi: Cholesky(Skyline) direkt metodu: 28483995x8=22787160 byte Cholesky(bant) direkt metodu: 10974x522x8=45827424 Byte CG itersayon metodu: A için: 219812x8=17296 byte ia ve ja için: 2x10974x2=43896 byte ara değer vektörleri için: 4x10974x8=351168 byte toplam: 17296+43896+351168=412360 byte
w
w
Matris bilgileri: Simetrik: evet Pozitif tanımlı: evet Diyagonal ağırlıklı: Hayır Boyutu: 10974x10974 Yarı bant genişliği: 522 Sıfırdan farklı eleman sayısı: 219812 Doluluk oranı: 219812/109742=0.0018≈ % 0.2
Oran: Skyline/CG=22787160/412360≈55 Cholesky/CG=45827424/412360≈111 A=Bcsstk17 matrisi Görüldüğü gibi, CG iterasyon yöntemi direkt çözümlere nazaran 50-100 kat daha az ana bellek gerektirmektedir Not: 1) Yukarıda ele alınan matrisin kaynaklardaki adı Bcsstk17 dir, araştırmalarda kullanılmaktadır. Bu matrisin tüm bilgilerine (A , ia, ja dahil) http://math.nist.gov/MatrixMarket/data/HarwellBoeing/bcsstruc2/bcsstk17.html adresinden erişilebilir. 2) Yukarıda verilen dışında başka seyrek matris depolama biçimleri de vardır. Seyrek(sparse) matrisler için detaylı bilgi: http://www-users.cs.umn.edu/~saad/books.html Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
20
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta:
[email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
sn o
tla
Ders notları 2014
em de r
Ahmet TOPÇU
Determinant
Matris
w
w
w .e
a11 a det A = det 21 . a n1
a12
...
a 22
...
.
... ...
an2
a1 n a11 a 2 n a 21 = . . a nn a n1
a12
...
a1 n
a 22
...
a2n
.
... ...
.
an2
a nn
Cnxs=Anxm Bmxs
2 DETERMİNAT VE MATRİSLERLE DÖRT İŞLEM
22
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM Kare matrisin determinantı
ri. co
m
Matris çok sayıda sayıyı barındıran bir tablodur, kendi sayısal değeri yoktur. Fakat her kare matrise ait determinant1 denilen; pozitif, negatif veya sıfır olabilen bir sayı vardır. Determinantını bildiğimiz matris hakkında önemli bazı yorumlar yapabilir, karar verebiliriz. Determinant kelimesi; belirleyen, tanımlayan, vurgulayan, egemen, karar veren anlamındadır. Bazı Türkçe kaynaklar matrisin determinantını “matrisin belirteni” olarak tercüme etmektedirler. İki bilinmeyenli doğrusal denklem sisteminin klasik cebir ve matris notasyonunda
a 21 x1 + a 22 x 2 = b2
→
a11 a 21
a12 x1 b1 = a 22 x 2 b2
→ A x=b
şeklinde yazıldığını biliyoruz. Örnek:
4 9 x1 30 → = 1 3 x 2 9
4 x1 + 9 x2 = 30 x1 + 3x2 = 9
→ A x=b
(2.1)
tla
a11 x1 + a12 x 2 = b1
sn o
2.1 denklem sistemini çözmeye, denklem sistemini sağlayan x1 ve x2 bilinmeyenlerini hesaplamaya, çalışalım. Bu amaca yönelik çok sayıda yöntem vardır. Orta öğretimden bu yana kullandığımız değişken yok etme yöntemini kullanalım. 2.1 in birinci denklemini a22 ile, ikinci denklemini –a12 ile çarpar ve her iki denklemi toplarsak x2 bilinmeyeni yok olur, x1 i hesaplayabiliriz: a 22 a11x 1 + a 22 a12 x 2 = a 22b1
em de r
- a12 a 21x 1 − a12 a 22 x 2 = −a12b 2
a 11 a 22 x 1 − a 12 a 21 x 1 = a 22 b 1 − a 12 b 2
x1 =
a 22 b1 − a12 b2 a11 a 22 − a12 a 21
2.1 in birinci denklemini -a21 ile, ikinci denklemini a11 ile çarpar ve her iki denklemi toplarsak x1 bilinmeyeni yok olur, x2 yi hesaplayabiliriz: Eşit
-a 21 a 11 x 1 − a 21 a 12 x 2 = −a 21 b1 a 11 a 21 x 1 + a 11 a 22 x 2 = a 11 b 2
-a 21 a 12 x 2 + a 11a 22 x 2 = −a 21 b1 + a 11 b 2
x2 =
a11b2 − a 21b1 a11 a 22 − a12 a 21
Bu bağıntıları kullanarak yukarıdaki sayısal örneğin bilinmeyenlerini hesaplayalım:
x1 =
3 ⋅ 30 − 9 ⋅ 9 9 4 ⋅ 9 − 1 ⋅ 30 6 = = 3 , x2 = = = 2 4 ⋅ 3 − 9 ⋅1 3 4 ⋅ 3 − 9 ⋅1 3
w
w
w .e
x1 ve x2 değişkenlerinin hesabında kullanılan yukarıdaki bağıntılar incelenirse paydada aynı sayı, a11a22-a12a21, vardır. Bu sabit sayı sadece A katsayılar matrisinin terimlerinden oluşmaktadır. Sayısal örnek için bu sayı 4.3-9.1=3 tür.
n bilinmeyenli bir denklem sisteminin çözümünde de benzer durum vardır: x1, x2, … , xn bilinmeyenlerinin hesabında paydaya daima aynı sabit bir sayı bölen olarak gelmektedir. İşte bu sayıya katsayılar matrisinin determinantı denilmektedir. Determinant ile n bilinmeyenli denklem sisteminin sistematik çözümünü ilk kez Cramer1 vermiştir, Cramer kuralı olarak bilinir.
Yukarıda, 2.1 de verilen 2x2 boyutlu A matrisinin determinantı a11a22-a12a21 diyagonal elemanların çarpımının farkıdır. Matris matematiğinde 2x2 matrisin determinantı Determinat gösterimi
det A = A =
a 11
a 12
a 21
a 22
= a 11 a 22 − a 12 a 21
(2.2)
şeklinde gösterilir. 1
“Determinat” kavramı matematikte “matris” kavramından çok daha önce, MÖ 300-200 civarında Çin’de denklem sistemi çözümünde kullanılmıştır. Japon Shinsuke Kova Seki’nin 1683 yılı çalışmalarında ve Alman Leibniz’in L’ Hospital’e 1693 yılında yazdığı bir mektupta rastlanmaktadır. Determinantı denklem sistemi çözümünde sistematik olarak ilk kez İsviçreli Cramer 1750 yılında kullandı. “Determinant” kelimesinin isim babası Fransız Cauchy dir(1812). Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
22
23
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
m
Determinant çok önemli bir sayıdır, çünkü ait olduğu katsayılar matrisi ve denklem sistemi hakkında yorum yapabilmemize olanak sağlar. Yukarıdaki bağıntılardan da anlaşıldığı gibi, katsayılar matrisi Anxn olan bir denklen sisteminin x1, x2, … , xn bilinmeyenlerinin hesaplanabilmesi için det A≠0 olmalıdır. Det A=0 durumunda, sıfıra bölüm yapılamayacağı için, denklem sisteminin çözümü yoktur.
ri. co
Büyük boyutlu matrislerin determinantının hesabı 2.2 deki kadar basit değildir. Matris büyüdükçe dört işlem sayısı hızla artar. Küçük boyutlu matrislerin determinantı SARRUS kuralı, CHIO metodu ve LAPLACE açılımı ile ve elle hesaplanabilir. Büyük matrislerin determinantı GAUSS, CHOLESKY gibi metotlar ile ve bilgisayarda hesaplanır. SARRUS kuralı1: Sadece 3x3 boyutlu matrisler için geçerlidir. Determinantı hesaplanacak
3x3 matrisin ilk iki kolonu determinant işaretinin sağ tarafına yazılır. Ana ve yan diyagonaller şekilde görüldüğü gibi kesik ve sürekli çizgiler ile birleştirilir. Her sürekli çizgi üstündeki elemanlar birbirleri ile çarpılıp toplanır. Her kesik çizgi üzerinde olan elemanlar birbirleri ile çarpılır, önceki toplamdan çıkarılır.
a 32
Örnek:
+
-
a 13 a 11 a 23 a 21
a 12 a 22 → det A = a 11a 22 a 33 + a 12 a 23 a 31 + a 13 a 21a 32
a 32
a 33 a 31
a 32
- -
+ +
-1 3 2 2 - 2 → det A = 3 3 1 4
-
a 12 a 22
− a 13 a 22 a 31 − a 11a 23 a 32 − a 12 a 21a 33
(2.3)
-1 3 2 2 -2 3 3 1 4
-
-1 2 3
→ det A = 2 ⋅ 2 ⋅ 1 + (−1) ⋅ (−2) ⋅ 4 + 3 ⋅ 3 ⋅ 3
− 3 ⋅ 2 ⋅ 4 − 2 ⋅ (−2) ⋅ 3 − (−1) ⋅ 3 ⋅ 1 = 30
em de r
2 A = 3 4
-
+
tla
+
+
a13 a 11 a 23 → det A = a 21 a 31 a 33
a12 a 22
sn o
a11 A = a 21 a 31
CHIO2 metodu: nxn boyutlu matrisin determinant formülü
A nxn
a11 a = 21 . a n1
a12
a 22 .
an2
... a1n ... a 2 n 1 ⇒ det A = n − 2 ... . a11 ... a nn
a11 a 21 a11 a 31
a13 a 23 a13 a 33
a12 an2
a11 a n1
... ...
.
a11
a1 n
a 21 a11 a 31
a 2n a1n a 3n
... a13 a n3
...
(2.4)
. a11 a n1
a1n a nn
ile verilir. Dikkatli incelenirse, 2x2 boyutlu n-1 adet alt determinant içerir ve düzenli bir yapısı vardır. Örnekler:
w .e
w
a11
a 21 a11 a 31
.
a11 a n1
w
a12 a 22 a12 a 32
2 det A = 3
4
−2
−1 3 1 2 − 2 = 3− 2 2 3 1
0
1
1 det B = 4
3 0
−1 −2
6
1
0
det B =
1 2
1 1 4 (-6) 3- 2
2
−1
2
3 2
2 −1
3 2
4
3
4
3 5 1 = 1 ( − 2 )4 − 2 −8
-6
1
-6
0 -6
0 1
0 -6
-2 -6
-2
3 −2 1 7 − 13 1 = = ( 7 ⋅ ( − 10 ) − ( − 13 ⋅ 10 )) = 30 3 2 10 − 10 2 1
−2
0
−2
1 −2 4 −2
3 0 0 0
1 −1 −2 1 4 −2 −2 1
6
1
6
1
0
−2
3
1 −2 4 −2
5 −6 3 1 = 0 1 4 −2 3
6
1
− 13
0
− 14
−6
−2
−8
- 13 − 14 1 0 84 1 = = (0 − 38 ⋅ 84) = 133 - 13 − 24 38 - 14 − 24 -2
Pierre Frédéric SARRUS (1798-1861), Fransız. F. CHIO (?-?) tarafından 1853 yılında yayınlandı. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
23
24
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
a11=0 durumunda CHIO doğrudan uygulanamaz. 1. satır ile bir başka satır, a11≠=0 olacak şekilde, değiştirilir. Her satır değişikliği determinantın işaretini değiştirdiğinden sonuç (-1)p ile çarpılmalıdır. Burada p satır değiştirme sayısıdır.
yapılabilir.
n
det A =
∑
(−1) i + j a ij A ij ,
j. kolona göre açılım: n
(i sabit),
det A =
j=1
∑ (−1) i =1
i+ j
a ij A ij ,
(j sabit)
(2.5)
ri. co
i. satıra göre açılım:
m
LAPLACE1 açılımı: Bu yönteme göre determinantın açılımı bir satıra veya bir kolona göre
Buradaki |Aij| terimi, aij elemanının bulunduğu satır ve kolonun silinmesi ile oluşan (n-1)x(n1) boyutlu alt matrisin determinantıdır. Kaynaklarda |Aij| terimine aij nin minörü, (-1)i+j|Aij| terimine aij nin işaretli minörü ≡ kofaktörü da denilmektedir.
det A = − 1 6
−2 3 5 4
5 0 −1 0 −1 5 0 = (−1)1+1 ⋅ 4 ⋅ + (−1)1+ 2 ⋅ (−2) ⋅ + (−1)1+3 ⋅ 3 ⋅ = 4(0 − 0) − (−2)(0 − 0) + 3(−4 − 30) = −102 4 0 6 0 6 4 0
3. kolona göre açılım örneği: 4 det A = − 1 6
−2 3 5 4
sn o
4
tla
1. satıra göre açılım örneği:
-1 5 4 -2 4 -2 0 = (−1)1+ 3 ⋅ 3 ⋅ + (−1) 2 +3 ⋅ 0 ⋅ + (−1) 3+3 ⋅ 0 ⋅ = 3(-4 - 30) − 0 ⋅ (16 + 12) + 0 ⋅ (20 − 2) = −102 6 4 6 4 -1 5 0
em de r
Örneklerden görülebileceği gibi, çok sıfırlı satır veya kolona göre açılım işlemleri azaltır. Üstü çizili terimleri yazmaya gerek yoktu! SARRUS, CHIO ve LAPLACE yöntemleri küçük matrislerin determinantlarının el hesabında kullanılabilir, sadece tarihsel değeri vardır. Programlamaya hiç uygun değildirler. Bilgisayarda determinant hesabı için GAUSS ve benzeri alternatif yöntemler kullanılır. Determinant özellikleri
1. Matrisin i. satırı ile i. kolonu değiştirilirse determinantın değeri değişmez, dolayısıyla detA=det AT geçerlidir.
w
w
w .e
2. Matrisin iki satırının veya iki kolonunun yerleri değiştirilirse determinant işaret değiştirir: Hesap sırasında, örneğin 2.4 e göre CHIO metodunda a11=0 ise 1. satır ile başka bir satıra yer değiştirilir. Hesaplanan determinat -1 ile çarpılır. 3. Matrisin bir satırının veya kolonunun tüm elemanları sıfır ise determinant sıfırdır. 4. Diyagonal ve üçgen matrislerin determinantı diyagonal elemanların çarpımına eşittir. Örnekler:
3 A = 9 20
1 I = 1 1
3 − 7 0 8 5 1 2 C= 4 − 2 − 5
2 6 70 − 98 D = − 2 14 E = 0 76 − 2 8 6 9
Det A=3.9.20=540, det I=1.1.1=1, det C=3.5.4. (-5)=-300, det D=2.14.6=168, det E=6.0.9=0 Gözlem: Diyagonal ve üçgen matrislerin diyagonal elemanlarından biri sıfır ise determinant sıfırdır.
5. Diyagonal elemanları kare alt matris olan bölünmüş diyagonal matrisin determinantı alt matrislerin determinantlarının çarpımına eşittir. 1
Pierre Simon Laplace(1749-1827), Fransız: 1772 de yayınlandı. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
24
25
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
.
det a11 det a 22 , det A = det a nn
= det a det a ... det a 11 22 nn det a nn
.
m
a11 a 22 A=
Örnek:
6
2 −1 3 4 9 = 3 2 − 2 6 1 1 = 30 ⋅ 6 ⋅ (−5) = −900 4 9 4 3 1 1 1
ri. co
[6]
2 −1 3 3 2 −2 4 3 1 , det A = det 4 9 1 1
tla
2 − 1 3 3 2 − 2 4 3 1 A=
sn o
6. Matrisin i. satırı j. satırına eşitse veya i. Kolonu j. Kolonuna eşitse determinant sıfırdır. 7. Matrisin i. satırı j. satırın sabit bir c katı ise matrisin satırları doğrusal(lineer) bağımlıdır denir. Satır veya kolonları doğrusal bağımlı matrisin determinantı sıfırdır. Dolayısıyla; determinantı sıfır olan matrisin satır veya kolonları doğrusal bağımlıdır. 8. Matrisin bir satırının veya kolonunun sabit bir c sayısı ile çarpılarak başka bir satır veya kolona eklenmesine satır veya kolonların doğrusal birleştirilmesi denir. Satır veya kolonları doğrusal birleştirilen matrisin determinantı değiştirmez. 9. Simetrik ve pozitif tanımlı matrisin determinantı sıfırdan faklıdır. 10. Kesin diyagonal ağırlıklı matrisin determinantı sıfırdan farklıdır (bak:bölüm 1, sayfa 16).
em de r
Örnek:
− 7 B = − 2 1
3
8 3
− 3 − 3 5
|-7|>|3|+|-3| |8|>|-2|+|-3| olduğundan B kesin diyagonal ağırlıklıdır, det B=-280≠0 dır. |5|>|1|+|3|
Kofaktör matrisi ve adjoint matris
w
w
w .e
A kare matrisinin her aij elemanına ait işaretli minörünün=Ã = (-1)i+j |Aij|, o elemanın olduğu satır ve kolona yazılması ile oluşan matrise kofaktör matrisi; kofaktör matrisinin transpozuna da adjoint(ek) matris denir. Örnek: ~ A 4 − 2 3 11 ~ A = − 1 5 0 → Kofaktör matrisi K = A 21 ~ A 6 4 0 31
adj A = K T
0 = 12 − 15
~ A12 ~ A 22 ~ A32
~ A13 ~ A 23 = − ~ A33
5 4 −2 4 -2 5
0 0 3 0 3 0
−1 6 4 6 4 − -1 −
0 0 3 0 3 0
−1 5 6 4 4 −2 − 6 4 4 -2 -1 5
(2.6)
T
0 − 34 12 − 15 0 − 18 − 28 = 0 − 18 − 3 − 34 − 28 18 − 3 18
Düzenli matris - düzensiz matris tanımı Determinantı sıfır olan matrise düzensiz, sıfırdan farklı olan matrise düzenli matris denir. Başka isimler de verilir. Düzensiz matris: tekil matris, singüler matris. Düzenli matris: tekil olmayan, regüler, singüler olmayan matris. Özetle: • • •
Det A≠0 ise tekil olmayan veya düzenli veya regüler matris denir. Det A=0 ise tekil veya düzensiz veya singüler matris denir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
25
26
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
Doğrusal bağımlılık ve rank tanımı Bir Anxm matrisinin kolonlarını m tane kolon vektörü ile gösterelim:
a11
a12
... a 1m ... a 2m = [ a 11 ... . ... a nm
a 12
3 1 1 3 1 1 ... a 1m ] , Örnek : A 2x3 = = 0 − 1 − 2 0 − 1 − 2 a11
m
a 12 a 21 . a n2
a12
a13
ri. co
A nxm
a 11 a = 21 . a n1
a1m
En az biri sıfırdan farklı olan, bunun dışında tamamen keyfi olan c1, c2, …, cm sabit sayıları ile kolon vektörleri çarpılıp toplandığında bir sıfır vektör elde edilirse matrisin kolonları doğrusal bağımlıdır denir: (2.7)
tla
c1a11+c2a12+ …+ cma1m=0
sn o
Bu bağıntı sadece ve sadece c1=0, c2=0, …, cm=0 için sağlanıyorsa kolonlar doğrusal bağımsızdır. Yukarıda verilen A2x3 matrisinin birinci kolonu 1, ikinci kolonu 2 ve son kolonu -1 ile çarpılıp toplanırsa 1 1 3 0 1 ⋅ a 11 + 2 ⋅ a 12 − 1 ⋅ a 13 = 1 + 2 − 1 = = 0 0 − 1 - 2 0
sıfır vektör bulunur. O halde matrisin kolonları doğrusal bağımlıdır. Bunun önemli bazı anlamı vardır: Vektörlerden biri diğerlerine bağımlı olarak hesaplanabilir. Yukarıdaki ifadeden a13
em de r
•
1 1 3 1 ⋅ a 11 + 2 ⋅ a 12 − 1 ⋅ a 13 = 0 → a 13 = a 11 + 2a 12 = + 2 = 0 - 1 - 2
•
Kolonları doğrusal bağımlı olan matrisin determinantı sıfırdır. 2.7 ifadesi aslında
a11 a 21 . a n1
a12 a 21 .
an2
... a1m c1 0 ... a 2 m c 2 0 = → Ac = 0 ... . . . ... a nm c m 0
w
w
w .e
Doğrusal denklem sistemi ile aynı anlamdadır. Bu denklem sistemi c=0 için sağlanır. Ancak c≠0 ve det A=0 durumunda da sağlanır. O halde ya det A=0 ya da c=0 olmak zorundadır.
Matrisin tüm kolonları doğrusal bağımlı olabilir veya tümü bağımsız olabilir ya da bazıları bağımsız bazıları da diğerlerine bağımlı olabilir. m vektörün r tanesi bağımsız ise 0≤r≤m
dir ve r ye matrisin rankı denir. d=m-r matrisin doğrusal bağımlı kolon sayısıdır ve rank artığı denir. Doğrusal bağımlılık, rank ve rank artığı tanımı matrisin kolon vektörleri için yukarıda verildi. Aynı tanımlar matrisin satır vektörleri için de geçerlidir. O halde nxm boyutlu bir matrisin hem satır hem de kolon rankı vardır. Ancak, satır rankı ve kolon rankı birbirine eşittir. Rank n ve m den küçük olanına eşit veya daha küçüktür. Verilen bilgiler ışığında r rankını şöyle de tanımlayabiliriz: nxm matrisinin rxr boyutlu öyle bir alt matrisi vardır ki bu alt matrisin determinantı sıfırdan farklıdır. Uygulamada karşılaşılan denklem sistemlerinde katsayılar matrisi genelde kare matris, n=m dir. Denklem sisteminin çözümü ancak ve ancak r=n=m ise mümkündür. Bunun anlamı, hem satır hem
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
26
27
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
de kolon vektörlerinin doğrusal bağımsız olması gerektiğidir. Çünkü aksi halde katsayılar matrisinin determinantı sıfırdır, yani düzensiz bir matristir.
m
Daha nadir de olsa n
m (çok denklem az bilinmeyen) olan denklem sistemleri ile de karşılaşılır. nm durumunda, normal olarak, kolonlar doğrusal bağımsız, satırlar bağımlıdır: r=m, d=n-m dir.
ri. co
Bir matrisin kolon veya satırlarının doğrusal bağımlı olup olmadığını, bağımlıysa hangilerinin olduğu, yanı r rankının belirlenmesi önemlidir. Ancak, burada verilen bilgiler doğrusal bağımlılığın ve rankın belirlenmesinde, çok basit matris yapıları hariç, yetersiz kalır.
2 2 2 − 1 1 A = − 4 , B = 0 , C = 1 − 4 − 1 2 5 3 3 3
tla
Örnekler:
sn o
Matrislerinden A için r=3 tür, çünkü bu matrisin kolonlarını veya satırların c1=c2=c3=0 ile çarparsanız 0 bulursunuz, başka hiçbir ci≠0 için bu çarpım 0 olmaz, o halde det A≠0 dır. B matrisinde r=2 dir, çünkü bu matrisin kolonlarını veya satırlarını c1=c2=c3=0 ile çarparsanız, veya c1=0, c2≠0, c3=0 çarparsanız 0 bulursunuz, o halde det B=0 dır.
em de r
C matrisinin rankının belirlenmesi ise diğerleri kadar kolay görünmüyor, dolayısıyla det C hakkında hemen bir yorum yapmak mümkün değildir. Daha sonra, 4. 5. ve 6. bölümlerde, ele alınacak olan denklem sistemlerinin çözüm yöntemlerinde rankın genel olarak nasıl belirleneceği tekrar ele açıklanacaktır.
Matrislerle dört işlem
Aritmetikte a ve b sayılarının toplanması çıkarılması, çarpılması veya bölünmesi sonucu üçüncü bir c sayısı hesaplanır. Matris notasyonunda da benzer dört işlemler yapılarak a ve b matrislerinden c matrisi hesaplanır. Aşağıdaki tabloda aritmetik dört işlem ve matris notasyonundaki karşılıkları özetlenmiştir. Aritmetik karşılığı
Matris karşılığı
Toplama çıkarma Çarpma
c=a+b c=a-b c=a b c=a/b c=a:b c=a(1/b) c=a b-1
c=a+b c=a-b c=a b Yok ! Yok ! Yok !
w
w
w .e
Dört işlem:
Bölme
c=a b-1
Bilindiği gibi, b-1 sayısı b sayısının tersidir. Benzer şekilde a-1 matrisi a matrisinin tersidir. Dikkat edilirse, matrislerde bölme işlemi sadece matrisin tersi ile tanımlanmaktadır.
Toplama ve çıkarma: İki matrisin toplanabilmesi veya çıkarılabilmesi için boyutlarının aynı olması gerekir. Anxm ve Bnxm matrislerinin toplanması veya çıkarılması sonucu oluşan aynı boyutlu Cnxm matrisinin Cnxm= Anxm± Bnxm
(2.8)
Eşit boyutlu Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
27
28
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
elemanları A ve B nin karşılıklı elemanlarının toplanması veya çıkarılması ile bulunur: cij=aij±bij. Örnek:
ri. co
m
3 3 2 0 − 1 3 D = 1 7 − 7 2 = − 6 5 3 5 6 3 − 3 2 A − B = D
3 2 0 − 1 3 1 C = 1 7 + 7 2 = 8 9 3 5 6 3 9 8 A + B = C Toplama ve çıkarma özellikleri
Çarpma
İki matrisin çarpılabilmesi için kurallar vardır:
tla
A ± B = ±B + A A ± (B ± C) = (A ± B) ± C (A ± B)T = A T ± BT
sn o
• A ve B matrislerini çarparak bir C matrisini hesaplayabilmek için A nın kolon sayısı B nin satır sayısına eşit olmalıdır(uygunluk koşulu):
Cnxs=Anxm Bmxs Eşit olmalı
(2.9)
em de r
• Çarpılan matrislerin eşit boyutları atılır, kalan boyutlar C nin boyutudur: C nin satır sayısı A nın satır sayısına, C nin kolon sayısı B nin kolon sayısına eşittir. • C nin i. satır ve j. kolonundaki cij elemanı A nın i. satırındaki elemanların B nin j. Kolonundaki elemanlar ile karşılıklı çarpılıp toplanması ile bulunur: m
c ij = a i1 b 1j + a i2 b 2j + ... + a im b mj = ∑ a ik b kj
(2.10)
k =1
El hesaplarında, çarpımı anlaşılır kılmak ve kolaylaştırmak için, FALK1 şeması kullanılır:
w .e
x B3x7= x x x x a 33 x
w
w
A4x3=
x x a 31 x
x x a 32 x
x x x
x x x
x x x
c35
Örnek:
A3 x 2
1
1 1 = 3 1 , 2 0
b15 b25 b35
x x x
x x x
=C4x7
C=A B çarpımı için A nın sağına ve üste B matrisi çizilir. A nın sağına A nın satırları kadar satır, B nin altına B nın kolonları kadar kolon çizilir. Oluşan matris C nin boyutlarıdır. A nın bir satırındaki sayılar B nin bir kolonundaki sayılarla karşılıklı çarpılıp toplanır, bu toplam o satır ve o kolonun C de birleştiği hücreye yazılır. FALK şeması ve c35 elemanının hesabı solda örnek olarak gösterilmiştir:
c35=a31b15+ a32b25+ a33b35
2 0 0 B2x4 = − 1 − 1 1 2 0 B2 x 4 = − 1 − 1
0 1
1 1 1 3 C=A B nin FALK şeması A 3 x 2 = 3 1 5 2
2 0 4
−1
1
−1
1
0
0
3 2 5 11 =C3x4 6
Sigurd FALK (?,?), Alman. 1950 civarında geliştirdi. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
28
29
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
Yukarıda verilen kurallar üç veya daha çok matrisin çarpımı için aynen uygulanır, örnek: Uygunluk koşulu: • A nın kolon sayısı=B nin satır sayısı olmalı • B nın kolon sayısı=C nin satır sayısı olmalı
Eşit olmalı
•
D nin boyutu=A nın satır sayısı x C nin kolon sayısıdır.
m
Dnxt = Anxm Bmxs Csxt
Eşit olmalı 1 3
5
−1
0 1 2
B4x2=
− 2 0 1 2
2 1 4 3
1 2
−3 0
2
− 2 0 1 2
C2x5=
B4x2= 2
4
1 3
2
5
−1
A 3x4= − 1 2
0 1 2
12 15 11
1 2
− 1 2
4 1
−3 0
2 2
4 1
− 1 =C 2x5 2
− 3 7 − 1
6 29 9
− 36 − 45
18 44
45 67
− 33
20
43
− 18 − 1 =D 3x5 − 13
sn o
D=A B C nin FALK şeması
1 4 3
2 2
ri. co
4 2
tla
A 3x4=
2 − 1 2
A 3x4B4x2
Not: Burada önce A B hesaplanmış, bulunan yeni matris C ile sağdan çarpılarak D bulunmuştur. Önce B C
em de r
hesaplanarak bulunan yeni matris soldan A ile çarpılarak aynı D bulunabilirdi. Ancak bu durumun daha çok işlem gerektireceği açıktır.
Matris çarpımının özellikleri
1. A B C =(A B ) C =A (B C ) 2. A (B + C ) = A B + A C
3. (A B C … M N)T=NTMT … CTBTAT
ka 11 ka A + A + … + A = k A = 21 . k defa ka n1
ka 12 ka 22 . ka n2
w
w
w .e
4.
... ka 1m ... ka 2m ... . ... ka nm
Matrisin k defa toplanması matrisin elemanlarının k tam sayı sabiti ile çarpımıdır.
Genelleştirme: Matrisi bir sabit(gerçek veya tam sayı) ile çarpmak için tüm elemanları o sabit ile çarpılır.
Ak ifadesi, A kare matrisinin kendisiyle k defa çarpımı anlamındadır( k pozitif tamsayı): A0=I, A2 =A A , A3 = A A A , …
5. A A … A= Ak k defa
Çarpımda matrislerin yeri değiştirilemez. Aritmetikte ab=ba dır, fakat matrislerde, çok özel durumlar hariç, matrisin çarpımdaki yeri kesinlikle değiştirilemez. Değiştirilirse, uygunluk koşulu sağlanmayabilir, sağlansa bile sonuç farklı olur.
6. A B ≠ B A Örnekler:
2 A= 3
−1 1
1 0 B = − 2 2 1
4 8 AB = 3 18
4 − 10 CD = − 7 15
4 0 3
C = 1 − 2 D = 2 0 − 2 3 − 1 5
14 3 8 B A = − 4 2 0 11 2 6 2 − 4 DC = − 11 17
2 − 1 E= − 1 5
− 2 F = 1 3
Görüldüğü gibi, A B ≠ B A dır. Sonuç matrislerin hem boyutları hem de elemanları farklıdır!
Görüldüğü gibi, boyutlar aynı olsa bile, C D ≠ D C dır!
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
29
30
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
4 − 11 CE = − 7 17
4 − 7 EC = − 11 17
− 5 AF = 1
FA = ?
A F tanımlı, F A tanımsız!
7. aynı boyutlu iki köşegen matrisin çarpımda yerleri değiştirilebilir.
a 22
... a nn
b11 B=
b22
... bnn
a11b11 AB = B A =
8. Birim matris ile çarpım
1 I2 = 1
3 1 6 A = − 2 7 4 2 1 5
İki alt üçgenin çarpımı bir alt üçgendir.
İki üst üçgenin çarpımı bir üst üçgendir.
0 0 , 1
1 − 2 4 1 1 − 1 1 − 3 5 0 3 1 0 2 − 1 = 0 6 − 2 0 0 1 0 0 1 0 0 1
em de r
0 0 1 0 1 0 0 1 − 2 3 0 1 2 0 = 1 6 4 1 1 − 1 − 1 1 4 1
I1 A =A I1=A I1 B= B B I1= tanımsız! B I2=B I2 B= tanımsız!
sn o
9. İki üçgen matrisin çarpımı
4 1 B = − 1 3 2 1
tla
1 I 1 = 1 1
a 22 b22
... a nn bnn
ri. co
a11 A=
m
Matrisler simetrik olsa dahi C E ≠ E C dır!
1 0 0 1 1 − 1 1 1 − 1 − 2 3 0 0 2 − 1 = − 2 4 − 1 , 4 1 1 0 0 1 4 6 − 4
1 1 − 1 1 0 0 − 5 2 − 1 0 2 − 1 − 2 3 0 = − 8 5 − 1 0 0 1 4 1 1 4 1 1 Bir üst ve bir alt üçgenin çarpımı dolu bir matristir.
Bir alt ve bir üst üçgenin çarpımı dolu bir matristir.
10. İki vektörün çarpımı
w
w
w .e
4 6 2 2 − 1[1 2 3] = − 1 − 2 − 3 , − 2 − 2 − 4 − 6 Kolon vektörü ile satır vektörünün çarpımı bir matristir.
2 [1 2 3] − 1 = −6 − 2 Satır vektörü ile kolon vektörünün çarpımı bir sayıdır.
Genelleştirme:
x = [x1
x2
x1 x1 x x T x x= 2 1 . x n x1 x1 y 1 x y T x y= 2 1 . x n y1
... xn ], x1 x 2 x2 x2
. xn x2 x1 y 2 x2 y2
. xn y2
y = [ y1
y2
... y n ] için
... x1 x n y1 y1 y y ... x 2 x n T , y y= 2 1 . . . ... x n x n y n y1
y1 y 2 y2 y2
... x1 y n y1 x1 y x ... x 2 y n T , y x= 2 1 . . . ... x n y n y n x1
y1 x 2 y2 x2
. yn y2
. yn x2
... y1 y n ... y 2 y n . . ... y n y n ... y1 x n ... y 2 x n . . ... y n x n
x x tanımsız! y y tanımsız! x y tanımsız! y x tanımsız!
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
30
31
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
x x tanımsız!
x x = x12 + x 22 + ... + x n2 T
y y tanımsız!
y y = y12 + y 22 + ... + y n2
x y tanımsız!
x y = y x = x1 y1 + x 2 y 2 + ... + x n y n
y x tanımsız!
T
T
T
m
x1 y1 x y x = 2 , y = 2 → . . xn yn
11. Köşegen matrisin bir matris ile çarpımı
... a1m d11 ... a 2 m ... . ... a nm
a 21 a 22 . an2
a 21 a 22 . an2
d 22
... a1m d 11a11 ... a 2 m d 22 a 21 = ... . . ... a nm d nn a n1 d11 a11 d a = 11 21 . ... d nn d11 a n1
d11 a12 d 22 a 22 . d nn a n 2 d 12 a12
... d11 a1m ... d 22 a 2 m ... . ... d nn a nm
ri. co
d 22
a11 a 21 . a n1
Çok az çarpım gerektirir, sıfır sayıları ile çarpım yapılmaz.
... d nn a1m ... d nn a 2 m ... . ... d nn a nm
tla
a11 a 21 . a n1
... d nn
d 22 a 22 .
d 22 a n 2
sn o
d11
12. İki simetrik matrisin çarpımı simetrik değildir.
1 2 T A= A = 2 3
em de r
Simetrik
− 1 4 T B=B = 4 5 7 14 AB = 10 23
Simetrik değil!
w
w
w .e
13. Matrisin izi: Anxn kare matrisinin köşegen elemanlarının toplamına matrisin izi denir, iz A ile gösterilir: iz A=a11+a22+…+ann. Anxm Bmxn≠ Bmxn Anxm olmasına rağmen her iki çarpımın izi aynıdır:
2 A= −1
1 4
− 3 2
iz A B=-8+14=6,
2 1 B = − 1 5 3 − 2
− 8 15 AB = 1 14
9 1 0 B A = − 7 19 13 8 − 5 − 13
iz B A =0+19-13=6
14. A B ≠ B A olmasına rağmen, aşağıdaki bağıntı geçerlidir (A ve B kare matris): det (A B)=det (B A)=det A det B
2 − 1 A= − 1 3
− 3 2 B= 2 3
− 8 1 AB = 9 7
− 8 9 BA = 1 7
det (A B)=-8.7-1.9=-65, det B A=-8.7-1.9=-65,
det A=2.3-1.1=5, det B=-3.3-2.2=-13
det (A B)= det (B A) = det A det B=-5.13=-65
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
31
32
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
15. det (A ± B) ≠ det A ± det B dir. Bir üstteki matrislerden:
− 3 2 B= 2 3
-1 1 A+ B = 1 6
m
2 − 1 A= − 1 3
det (A+B)=-1.6-1.1=-7 ≠ det A + det B=2.3-(-1)(-1)+(-3).3-2.2=-8
16. Sıfırdan farklı A ≠ 0 ve B ≠ 0 gibi iki matrisin çarpımı sıfır matris olabilir.
ri. co
2 4 0 0 B = 3 6 matrisleri için AB = = 0 dır. 0 0 1 2 Fakat, ne A nede B sıfırdır?
1 −2 4 A= − 2 3 − 5 A B=0 A B=A C
Bu özellik nedeniyle soldaki ifadelerde A matrisi, özel durumlar dışında, kısaltılamaz.
Özel durumlar: det A≠0 ise veya A matrisinin kolonları doğrusal bağımsız ise kısaltma yapılabilir. Ters matris hesabı sonrası bu konuya dönülecektir.
tla
A (B+C)=0 A (B-C)=A (D+E)
2. satırı ile 3. satırı değiştirilmiş birim matrisin soldan çarpıldığı matrisin de aynı nolu satırları yer değiştirmiş.
em de r
1 0 0 1 2 − 3 1 2 − 3 0 0 1 1 0 1 = 2 2 0 0 1 0 2 2 0 1 0 1
sn o
17. i. satırı j. satırı ile değiştirilmiş birim matris bir A matrisi ile soldan çarpılırsa A nın i. satırı ile j. satırı yer değiştirir, sağdan çarpılırsa i. Kolonu ile j. Kolonu yer değiştirir.
1 2 − 3 1 0 0 1 − 3 2 1 0 1 0 0 1 = 1 1 0 2 2 0 0 1 0 2 0 2
2. satırı ile 3. satırı değiştirilmiş birim matrisin sağdan çarpıldığı matrisin de aynı nolu kolonları yer değiştirmiş.
18. Bölünmüş matrislerin çarpımı
Büyük matrislerin çarpımı için matrisler bölünmek zorunda kalınabilir. A ve B matrisleri çarpılarak C=A B hesaplanacaksa, A ve B düşey ve yatay doğrularla alt matrislere bölünür:
w
w
w .e
• A nın satırdaki alt matris sayısı B nin kolondaki alt matris sayısına eşit olmalı (uygunluk koşulu). •
A nın alt matrisleri ile B nin alt matrisleri uygunluk koşulunu sağlamalı. a11
a11 A = a 21 a 31
a12 a 22
a13 a 23
a14 a 24
a 32
a 33
a 34
a21
b11 b 21 B = b31 b41 b51
a12
a22
b12
b13
b22 b32
b23 b33
b42 b52
b43 b53
a13
a15 a a 25 = 11 a a 35 21
a 12 a 22
a 13 a 23
b14 b24 b 11 b34 = b 21 b44 b 31 b54
b 12 b 22 b 32
a11 a 21
A=
a23
Matrisler amaca uygun ve çarpım uygunluk koşulunu sağlayacak şekilde alt matrislere bölünür. Bolünmüş matrislerin alt matrisleri çarpılarak sonuç matrisin alt matrisleri hesaplanır
a12 a 22
b11 B= b 21 b 31 a13 c11 a 23 c 21
b12 b 22 b 32 c12 =A B= C c 22
c11=a11b11+a12b21+a13b31 c12=a11b12+a12b22+a13b32 c21=a21b11+a22b21+a23b31 c22=a21b12+a22b22+a23b32
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
32
33
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
Örnek: 0 − 1 3 a 12 a A = − 5 2 4 = 11 a a 22 − 2 − 6 3 21 2 1 b B = − 3 4 = 11 b 2 1 21 Alt matrislerin çarpımı: 2 3 6 = 4 - 11 - 2
- 2 - 1 1] = 8 4
a 22 b 21 = [3] [2 1] = [6 3]
c 11 c =A B= C 21
c11=a11b11+a12b21 c21=a21b11+a22b21
m
a 12 a 22
6 - 2 - 1 1 5 3 c 11 = + = - 11 - 2 8 4 - 3 2
1 C = − 3 22
5 2 − 25
c 21 = [16 − 28] + [6 3] = [22 − 25]
sn o
1 2 - 6] = [16 − 28] - 3 4
a 21 b11 = [- 2
a 11 a 21
ri. co
- 1 a 12 b 21 = [2 4
A=
tla
3 0 1 a 11 b 11 = − 5 2 − 3
b11 b 21
B=
19. Diyagonal elemanları alt matris olan iki matrisin çarpılmasıyla bulunan yeni matrisin de diyagonal elemanları alt matris olur. 0 0 , a 33
0 b11 0 B = 0 b 22 0 0 0 b33
0 a11 b11 , AB = 0 a 22 b 22 0 0
em de r
a11 0 A = 0 a 22 0 0
0 0 a 33 b33
Örnek:
w
w
w .e
0 1 2 2 − 4 1 2 −1 0 1 1 2 − A= −1 2 3 0 0
0
0
2 4 3
3 0 0 1 − 1 − 2 3 −1 −1 , B=0 1 1 2 0 , 2 −2 −3 3 2 2 0 0 1 3
0 0 − 1 − 1 6 14 3 3 6 − − 0 2 2 3 0 AB = 5 −3 −4 7 0 0 10 9
Ters matris Ters matris kavramı aritmetikteki bölme işleminin karşılığıdır. Ancak, matris işlemlerinde hiçbir zaman bölme işleminden bahsedilmez. Aritmetikte bir a≠0 gerçek sayısının tersi a
1 −1 = aa −1 = 1 ile tanımlanır. aa = 1 ifadesinin matris işlemlerinde karşılığı a
A A-1=I
(2.11) -1
şeklindedir. Burada A matrisi A matrisinin tersi, I birim matristir. Matris kendine ait ters matrisi ile çarpıldığında birim matris bulunur. Bilindiği gibi bir sayının tersinin olması için o sayı sıfırdan farklı olmalıdır. Benzer şekilde, bir matrisin tersinin olması için o matrisin determinantı sıfırdan farklı olmalıdır. Bu nedenle ters matris sadece determinantı sıfırdan farklı (düzenli) kare matrisler için tanımlıdır. Verilmiş bir Anxn matrisinin tersinin hesabı için farklı yöntemler vardır. Burada 2x2 boyutlu matris için basit bir formül ve ve nxn matris için adjoint(ek) matris yöntemi açıklanacaktır. Bu yöntemin sadece teorik önemi vardır, bilgisayar programları için hiç uygun değildir(uygulamada kullanılan yöntemler için bak: Bölüm 8). Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
33
34
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
2x2 boyutlu matrisin tersi için formül:
a A = 11 a 21
a12 , a 22
−1
A =
1 a 22 det A − a 21
− a12 , a11
1. 2. 3. 4.
A nın ana diyagonal elemanlarının yerini değiştir. Tali diyagonalin işaretlerini değiştir. Det A yı hesapla Her elemanı det A ya böl.
det A = a11 a 22 − a 21 a12 ≠ 0
A
−1
=
− 7 3 3.5 − 1.5 1 = − 1 2 ⋅ ( − 7 ) − 4( − 3 ) − 4 2 2
ri. co
2 − 3 A= , 4 − 7
m
Örnek:
(2.12)
Adjoint matris yöntemi: Bu yönteme göre Anxn matrisinin tersi
A −1 =
adj A , det A
(2.13)
det A ≠ 0
tla
formülü ile hesaplanır. Kofaktör ve Adjoint matrisin tanımı sayfa 19 da verilmişti.
1 A = 1 − 1
− 3 1 , 1
1 0 2
−1
A =?
sn o
Örnek:
SARRUS kuralına göre, det A= 1.0.1+1.1.(-1)+1.2.(-3)-(-3).0.(-1)-1.1.1-1.2.1=-10, olduğundan matrisin tersi vardır.
det A ≠0
Kofaktörler matrisi
1
1
1
0 2 − 2 − 2 2 1 = − 7 − 2 − 3 , 2 1 − 4 − 1 1 0
em de r
0 1 2 1 1 −3 K = − 2 1 1 −3 0 1
−
−1 1 1 −3 −1 1 1 −3 − 1 1
−1 1 − −1 1 1
Ters matris A
− 2 − 7 1 Adj A = K = − 2 − 2 − 4 2 − 3 − 1 T
−1
− 2 − 7 1 0.2 0.7 − 0.1 1 = − 2 − 2 − 4 = 0.2 0.2 0.4 − 10 2 − 3 − 1 − 0.2 0.3 0.1
w
w
w .e
A A-1=A-1A=I olduğu kontrol edilebilir.
Ters matrisin özellikleri
A A-1=A-1A=I (A-1)-1=A (AT)-1=(A-1)T (Not: (A-1)T ifadesi bazen basitçe A-T şeklinde de yazılır) T -1 T -1 A=A ise (A ) =A dir. (A B C … M N)-1=N-1M-1 … C-1B-1A-1 1 6. (k A) −1 = A −1 (k≠0 olmak üzere herhangi bir sabit sayı) k
1. 2. 3. 4. 5.
7. det A −1 =
1 det A
8. 2x2 matris için formül:
a A = 11 a 21
a12 , a 22
A
−1
=
1 a 22 det A − a 21
− a12 , a11
det A = a11 a 22 − a 21 a12 ≠ 0 olmalı!
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
34
35
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
9. Köşegen matrisin tersi:
, ... a nn
a 22
−1
A nxn
Örnek: − 2 A=
1 1 −1
a
−1 22
a22
−3 1 1
1 0 2
−1 a 11 = [− 0.5]
3 1
4 1
0.2 0.7 − 0.1 −1 = 0.2 0.2 0.4 a 22 − 0.2 0.3 0.1 1 − 3 −1 = a 33 − 1 4
... −1 a nn
det aii≠ 0 olmalı.
− 0.5 02 0.2 = − 0.2
sn o
a11
−1 a 11 =
tla
A nxn
a 11 =
ri. co
m
1 d dii≠ 0 olmalı. d11 11 1 d22 −1 , Dnxn = Dnxn = d22 ... . .. d 1 nn dnn 10. Köşegen elemanları kare alt matris olan köşegen matrisin tersi alt matrislerin tersi alınarak aynı köşegene yazılmasıyla hesaplanır:
a33
A −1
0.7 0.2 0.3
− 0.1 0.4 0.1 1 −1
−3 4
em de r
11. Alt üçgen matrisin tersi gene bir alt üçgen, üst üçgen matrisin tersi gene bir üst üçgendir. Örnek: − 3 − 1 4 , L= 2 −2 6 1 − 1 5 8
L
w
w
w .e
1 − 3 − 1 2 4 − 2 − 1 U = , 6 5 8
−1
U
−1
Noktadan sonra sadece üç hane verilmiş, üçüncü hane yuvarlatılmıştır.
− 0.333 − 0.083 0.25 = 0.083 0.083 0.167 -0.021 − 0.021 -0.104 0.125 − 0.333 − 0.083 0.083 -0.021 0.25 0.083 − 0.021 = 0.167 -0.104 0.125
12. Bant matrislerin tersi tamamen doludur. Örnek:
1 1 −1 A=
−1 2
1 2
0 1
1 1
2 −2 −3 0
1 −1
3
−1
−1 1
1 2
0 1
0
3
1
3
1 2
−1
3 2 2
1 − 1 3 3
217 - 432 484 - 134 A −1 = 10 − 3 54 109 - 115 78
172 296
− 611 − 127 − 176 - 136 - 25 0
102 37
- 362 - 25
76 48
561 - 86
332 - 229
529 - 353
- 233 168
38 300
13 26
68 135
28 57
176 353
46 92
264 - 473
- 68
- 182
20
- 412
264
138
59
137
- 39
294
- 294
20
455 37 - 292 - 126 - 307 386 87 118
13. Kısaltma: matris bağıntılarında kısaltma işlemi belli koşullar sağlanmadıkça yapılamaz! • det A≠0 ise, her iki taraf A-1 ile soldan çarpılır ve A-1 A=I olduğu hatırlanırsa, aşağıdaki ifadelerde A matrisi kısaltılabilir: A A A A
B=0 B=A C (B+C)=0 (B-C)=A (D+E)
A-1 A B= A-1 0 A-1 A B= A-1 A C A-1A (B+C)= A-10 A-1 A (B-C)= A-1A (D+E)
B=0 B= C B+C=0 B-C= D+E
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
35
36
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
•
Anxm
F=A
T nxm
dikdörtgen
matrisinin
kolonları
doğrusal
bağımsız
ise,
yani
A nxm matrisi mxm boyutlu düzenli bir matris olur, yani F
−1
rank=m
= (A
T nxm
ise,
A nxm ) −1
tanımlıdır, det F≠0 dır. Bu nedenle aşağıdaki ifadeler yazılabilir: (Anxm)T Anxm Bmxs=(Anxm)T 0
m
F matrisi, det F ≠ 0, F-1 var. Dolayısıyla bu matris kısaltılabilir.
Bmxs= 0
Sıfır matris F matrisi, det F ≠ 0, F-1 var. Dolayısıyla bu matris kısaltılabilir.
Sonuç mxs boyutlu bir matris olur
ri. co
Anxm Bmxs=0
Anxm(Bmxs-Cmxs)=(Dnxs+Enxs) (Anxm)TAnxm (Bmxs-Cmxs)=(Anxm)T(Dnxs+Enxs)
•
Bmxs-Cmxs=(Anxm)T(Dnxs+Enxs)
det A =0 durumunda A B=A C ifadesinde A kısaltılamaz:
1 4 2 3 2 6 B = − 6 5 − 9 , C = 2 − 3 7 − 3 6 − 5 4 − 1 9
matrisleri için
7 6 10 A B = AC = 3 5 7 17 17 27
dir.
tla
1 − 2 2 A = 3 1 − 2 , 5 − 3 2
•
A B= C A ifadesinde, det A≠0 olsa dahi, A kısaltılamaz, çünkü: A-1A B= A-1 C A
•
B= A-1 C A veya A B A-1= C A-1
A B A-1= C dir
A B= C A D ifadesinde, det A≠0 olsa dahi, A kısaltılamaz, çünkü: A-1A B= A-1C A D
B= A-1C A D dir
A kare matris ve r, s kolon matrisleri olsun:
em de r
•
sn o
Burada A kısaltılarak B=C dir denilemez, neden? Çünkü açıkça görüldüğü gibi B≠C dir. det A=0 dır, yani A-1 yoktur. A yı kısaltmamız sıfıra bölme yaptığımız anlamına gelir.
T
a=
r r T
Burada r vektörlerinden hiç biri kısaltılamaz! a sabit bir sayıdır.
r Ar T
r As a= T s As T
Burada r vektörlerinden hiç biri kısaltılamaz! a bir matristir.
w
w
w .e
rr a= T r r
Burada ne s ne de A s kısaltılabilir! a sabit bir sayıdır.
•
Matris eşitliğinde, yukarıda açıklanan koşullar sağlanmadıkça, keyfi kısaltma yapılamayacağı gibi eşitliğin solu ve sağı keyfi bir matris ile de çarpılamaz. Aksi halde eşitlik bozulur. Eşitliğin her iki tarafı sadece ve sadece çarpıldıktan sonra, gerekirse, kısaltılabilen bir matris ile çarpılabilir. Örneğin, determinantı sıfırdan farklı herhangi bir matris ile veya kolonları doğrusal bağımsız bir matris ile çarpılabilir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
36
37
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
Ortogonal matris 1) Anxn kare matrisi kendi transpozu ile soldan veya sağdan çarpıldığında birim matris oluşuyorsa Anxn ortogonaldır denir: T T −1 −1 A nxn A nxn = A nxn A nxn = I . Ters matris tanımı A A = A A = I ile karşılaştırılırsa A ortogonal1
Sinα Cosα 0
0 T 0 → A A = 1
Cosα Sinα 0
− Sinα
0 Cosα 0 − Sinα 1 0
Cosα 0
Sinα Cosα 0
0 0 = 1
T = A nxn . Örnek :
1 Cosα 1 → AT = A−1 = Sinα 0 1
− Sinα Cosα 0
ri. co
Cosα A = − Sinα 0
−1
m
matrisinin transpozunun aynı zamanda A nın tersi olduğu anlaşılır: A
0 0 1
2) Anxm dikdörtgen matrisi kendi transpozu ile soldan çarpıldığında birim matris oluşuyorsa T Anxm ortogonaldır denir: A nxm A nxm = I . Örnek: 0 Cos2 α Cosα SinαCosα 0 0 Sinα 2 0 Cos α Sin α 0 0 Sin α Cos α Sin α 0 0 T ≠I AA = = 2 0 Cosα 0 0 Cosα Sinα 0 0 Cos α SinαCosα Sinα 0 0 SinαCosα Sin 2 α 0
tla
0 Cosα Sinα 0 1 0 T A= →A A= = I, 0 Cosα 0 1 Sinα 0
sn o
Dikkat: Anxm dikdörtgen ortogonal matrisinin tersi tanımlı olmadığı gibi A nxm A nxm ≠ A nxm A nxm dir.
T
T
Matrislerin analitik türev ve integrali
em de r
Nümerik analizde, nadiren de olsa, analitik türev ve integral almak gerekir. Özet bilgiler aşağıda verilmiştir.
Analitik türev
Elemanları bir x değişkeninin fonksiyonu olan matrisin x e göre türevi her elemanın türevi alınarak bulunur:
... a n ] →
a2
dA d = [a1 dx dx
a2
da ... a n ] = 1 dx
da 2 dx
...
da n dx
w .e
A = [a1
w
w
da1 a1 a1 dx a d A d a 2 da 2 A= 2 → = = dx . dx dx . . a n a n da n dx
a11 a A = 21 . a n1
1
a12 a 22 . an2
... a1m a11 ... a 2 m d A d a 21 → = ... . dx dx . ... a nm a n1
a12 a 22 . a n2
da11 ... a1m dx ... a 2 m da 21 = dx ... . . ... a nm da n1 dx
da12 dx da 22 dx . da n 2 dx
da1m dx da 2 m ... dx ... . da nm ... dx ...
Bazı kaynaklar “ortogonal” yerine “ortonormal” olarak adlandırmaktadır, standart bir kavram yoktur. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
37
38
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
Örnek: Aşağıdaki A matrisinde a ve b sabit gerçek sayılar, x değişkendir. A nın x e göre 1.
ve 2. türevi?
Sin( 2 x) 6ax 2 , 5 2e 2 x
0 d 2 A b = dx 2 − 2 x
2Cos ( 2 x) 12ax 0 4e 2 x
m
1 Sin 2 ( x) 2ax 3 d A 0 A= → = b dx 5x e 2x bLog ( x) x
ySin 2 ( x) 2ayx 3 ∂A 0 → = by dx 5 xy ye 2 x x
1 A= 2 by Log ( x)
ri. co
Örnek: Aşağıdaki A matrisinde a ve b sabit sayılar, x ve y değişkendir. A nın x e ve y ye göre 1. türevi?
y Sin(2 x) 6ayx 2 , 5y 2 ye 2 x
0 Sin 2 ( x) 6ax 2 ∂A = dy 2byLog ( x) 5x e 2x
sn o
em de r
d dA (c A) = c dx dx d dA dB ( A + B) = + dx dx dx d dA dB ( AB) = B+ A dx dx dx
tla
c bir sabit, A ve B matrislerinin terimleri x in fonksiyonu olmak üzere aşağıdaki bağıntılar geçerlidir:
Türev vektörü:
x1, x2, …, xn bilinmeyenlerinden oluşan kolon vektörü
x = [x1
T x2 ... xn ] olsun.
x
∂ ∂ ∂ kısmi türev operatörlerinin vektörüne türev vektörü veya türev , , ..., ∂x1 ∂x 2 ∂x n
vektörünün
operatörü veya diferansiyel operatör denir:
∂ ∂x 1 ∂ ∂ = ∂x ∂x 2 . ∂ ∂xn
w
w
w .e
Türev operatörü
Vektörün vektöre göre türevi a)
x = [x1
x2 ... xn ]
olan y = [ y1
T
kolon vektörü ve elamanları x1,…, xn bilinmeyenlerinin fonksiyonu
T y 2 ... y m ] kolon vektörü verilmiş olsun. y vektörünün x vektörüne göre
türevini almak isteyelim:
∂ ∂x 1 ∂ 1) ∂ y = ∂x 2 ∂x . ∂ ∂ x n
y 1 y2 . y m
türevi yoktur, çünkü bu iki vektörün matris çarpımı tanımsızdır!
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
38
39
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
∂y 2 ∂x1 ∂y 2 ∂x 2 . ∂y 2 ∂x n
∂y m ∂ ∂x1 ∂x1 ∂y m ∂ ... ∂x 2 = ∂x 2 ... . . ∂y m ∂ ... ∂x n ∂x n ...
Bu matrise Jacobian denir ve genellikle J ile gösterilir.
Örnek:
sn o
x1 Sin( x 2 ) e 2 x1 + x 2
]
3x 2 5 = 2 6 x1 x 2
em de r
[
b) x
= [x1
Diferansiyel operatör matrisi
y nin x vektörüne göre türevi?
2 ∂ 3x1 x 2 ∂x x Sin( x ) tanımsız! 1) ∂ 2 y = 1 1x 1 ∂ ∂x e + x 2 ∂x 2 5
∂ ∂x 2) ∂ T y = 1 3x1 x 22 ∂x ∂ ∂x 2
∂ ∂x1 y1 ∂ y ... 2 ∂x 2 . ... . y ∂ m ... ∂x n ...
tla
x1 x = , x 1
y1 3x1 x 22 y x Sin(x2 ) , y = 2 = 1x y3 e 1 + x2 5 y 4
∂ ∂x1 ∂ ∂x 2 . ∂ ∂x n
m
y2
∂y1 ∂x 1 ∂y1 ... y m ] = ∂x .2 ∂y 1 ∂x n
ri. co
∂ ∂x 1 2) ∂ T ∂ y = ∂x 2 [ y1 ∂x . ∂ ∂x n
Jacobian
Sin( x 2 ) 2e 2 x1 x1Cos( x 2 ) 1
0 0
T x2 ... xn ] kolon vektörünün x1,…, xn bilinmeyenlerine göre türevi:
∂ ∂x x 1 1 ∂ x tanımsızdır! 1) ∂ x = ∂x 2 2 ∂x . . ∂ x n ∂x n
w
w
w .e
∂ ∂x 1 2) ∂ T ∂ x = ∂x 2 [x1 ∂x . ∂ ∂x n
x2
∂x1 ∂x 1 ∂x1 ... x n ] = ∂x 2 . ∂x 1 ∂x n
c) Birbirinin fonksiyonu olmayan
∂x 2 ∂x1 ∂x 2 ∂x 2 . ∂x 2 ∂x n
x = [x1
... ...
... ...
Jacobian=birim matris
∂x n ∂x1 1 0 ... 0 ∂x n 0 1 ... 0 ∂x 2 = . . ... . . ∂x n 0 0 ... 1 ∂x n
T x2 ... xn ] ve y = [ y1
T y 2 ... y m ] kolon vektörleri
verilmiş olsun:
∂ ∂x y 1 1 1) ∂ ∂ y 2 tanımsızdır! y = ∂x 2 ∂x . . ∂ y m ∂x n
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
39
40
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
∂y 2 ∂x1 ∂y 2 ∂x 2 . ∂y 2 ∂x n
Jacobian=sıfır matris. Çünkü
∂y m x ∂x1 ∂y m ∂x 2 = 0 . ∂y m ∂x n
... ... ... ...
y
nin elemanları
in elemanlarından bağımsızdır.
m
y2
∂y1 ∂x 1 ∂y1 ... y m ] = ∂x 2 . ∂y 1 ∂x n
ri. co
∂ ∂x 1 ∂ 2) ∂ T y = ∂x 2 [ y1 ∂x . ∂ ∂x n
3) Benzer şekilde:
∂ x tanımsız! ∂y
∂x =0 ∂y
tla
T
=0 (sıfır matris)
=0 (sıfır matris) T ∂y ∂ T ∂x x y= y+ x= y ∂x ∂x ∂x
∂y ∂ T ∂x y x= x+ y=y ∂x ∂x ∂x T
T
sn o
T
∂ T x x = 2x ∂x
=I (birim matris)
=I (birim matris)
em de r
d) Sıkça karşılaşılabilecek matris türev formülleri aşağıda verilmiştir. x ve
A sabit gerçek sayılar içeren bir matristir.
x ve
y
y kolon vektörü,
birbirinden bağımsızdır. Matris
çarpımlarının tanımlı olduğu varsayılmıştır:
∂ ∂x 1 ∂ ∂ = ∂x ∂x 2 . ∂ ∂xn
w
w
w .e
∂ T x =I ∂x
∂ T Ax = A ∂x
∂ T x A= A ∂x
∂ T T x Ax = Ax + A x ∂x
∂2 ∂x
2
x Ax = A + A T
∂ T x Ay = Ay ∂x
∂ T x =0 ∂y
∂ T x x = 2x ∂x
∂ T x y=y ∂x
∂ T y x=x ∂y
∂ T T T x A =A ∂x
A≠ AT, yani A simetrik değildir!
∂ T x Ax = 2 Ax ∂x
∂2
T
∂x ∂ T T y Ax = A y ∂x
2
A= AT, yani A simetriktir!
x Ax = 2 A T
∂ T T x Ay = A y ∂y
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
40
41
2. DETERMİNANT VE MATRİSLERLE DÖRT İŞLEM
Özel uygulama: Sonlu elemanlar metodunda bir sistemin toplam potansiyeli
1 T T x Ax − x b 2 T ile verilir. Burada x yer değiştirme kolon vektörü, b dış yük kolon vektörü, A = A toplam potansiyelidir. A, b sabit sayılardan oluşur ve bilinir, x hesaplanmak
π=
π
minimumdur.
π
değeri
x
istenir. Sistemin denge
in fonksiyonudur. Sistemin denge konumunda
∂π =0 ∂x
olmalıdır:
ri. co
∂π 1 ∂ T ∂ T ∂ T T x Ax − x b = Ax − b = 0 = ( x A x − x b) = ∂x ∂x 2 ∂x ∂x
π
m
konumunda
sistem rijitlik matrisi,
Ax = b
bulunur. Bu bağıntı sistemin denge koşuludur ve doğrusal bir denklem sistemidir. Denklem sistemi çözülerek
x
tla
bilinmeyen yer değiştirme vektörü hesaplanır.
Analitik integral
A = [a1
sn o
Bir matrisin tek veya çok katli integrali, her elemanın integrali alınarak bulunur, örnekler:
... a n ] → ∫ Adx = ∫ [a1
a2
a1 dx ∫ ∫ a 21 dx . , ∫ a n dx
[∫ a dx
w
w
w .e
a1 a 2 A dx dy dz = ∫∫∫ ∫∫∫ . dx dy dz = a n
a11 a A = 21 . a n1
a12 a 22 .
an2
... a1m a11 a ... a 2 m → ∫ Adx = ∫ 21 . ... . ... a nm a n1
1
∫a
2
dx ...
a1 a 2 A dx dy = ∫∫ ∫∫ . dx dy = a n
em de r
a1 a1 a a A = 2 → ∫ Adx = ∫ 2 dx = . . a n a n
... a n ]dx =
a2
a12 a 22 . an2
∫a
n
dx
]
a1 dxdy ∫∫ ∫∫ a 21 dxdy . ∫∫ a n dxdy
a1 dx dy dz ∫∫∫ ∫∫∫ a 21 dx dy dz . ∫∫∫ a n dx dy dz
a11 dx ... a1m ∫ ... a 2 m a dx dx = ∫ 21 ... . . ... a nm ∫ a n1 dx
dx ... 22 dx 2 m dx . ... . a dx ... a dx n 2 nm ∫ ∫
∫a ∫a
12
dx ...
∫a ∫a
1m
Matris çarpımının integrali
∫∫∫ A
T
B A dx dy dz
tipinde integraller ile teoride karşılaşılır. A nın elemanları x, y ve z nin fonksiyonu, B ise gerçek sayılardan oluşur. AT B A matris çarpımı yapılmadan integral alınamaz. Önce, çarpım yapılarak, D = AT B A matrisi, sonra
∫∫∫ D dx dy dz
integrali hesaplanır.
D matrisinin elemanları genelde çok karmaşık fonksiyonlar içerir, bu durumda analitik integrasyon yerine nümerik integrasyon metotları kullanılır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
41
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
tla
Ders notları 2014
em de r
sn o
Ahmet TOPÇU
Klasik notasyon
a11 x1 + a12 x 2 + ... + a1m x m = b1
a 21 x1 + a 22 x 2 + ... + a 2 m x m = b2
a12 a 22 . an 2
... a1m x1 b1 ... a 2 m x 2 b2 = ... . . . ... a nm x m bn
Matris notasyonu
A x=b
w
w
w .e
... a n1 x1 + a n 2 x 2 + ... + a nm x m = bn
a11 a 21 . a n1
Matris notasyonu
3 ÇOK BİLİNMEYENLİ DOĞRUSAL DENKLEM SİSTEMİ TÜRLERİ Çözümün varlığı, yokluğu, çokluğu ve çözüm metotları
43
3. ÇOK BİLİNMEYENLİ DOĞRUSAL DENKLEM SİSTEMİ TÜRLERİ
3. ÇOK BİLİNMEYENLİ DOĞRUSAL DENKLEM SİSTEMİ TÜRLERİ
m
Karmaşık ve analitik çözümü mümkün olmayan diferansiyel denklemler sonlu farklar ve sonlu elemanlar gibi yöntemler ile doğrusal denklem sistemlerine dönüştürülürler. Hemen her bilim dalında problemlerin tahminen %75 i en az bir bilinmeyenli bir doğrusal denkleme, genellikle de çok bilinmeyenli doğrusal denklem sistemine indirgenir. Klasik ve matris nosyonunda yazılmış doğrusal denklem sistemlerine örnekler:
Klasik: a11x1=b1
matris: [a11][x1]=[b1]
İki bilinmeyenli iki denklemli sistem:
Klasik:
ri. co
Bir bilinmeyenli bir denklem:
a11 x1 + a12 x 2 = b1
a11 a 21
matris:
a 21 x1 + a 22 x 2 = b2
a11 x1 + a12 x 2 + ... + a1m x m = b1 Klasik: a 21 x1 + a 22 x 2 + ... + a 2 m x m = b2
a11 a 21 Matris: . a n1
a12 a 22 .
sn o
.
a12 x1 b1 = a 22 x 2 b2
tla
m bilinmeyenli n denklemli sistem:
a n1 x1 + a n 2 x 2 + ... + a nm x m = bn
A x=b
an2
A x=b
... a1m x1 b1 ... a 2 m x 2 b2 = ... . . . ... a nm x m bn
A x=b
em de r
A ve b bilinir x hesaplanır. aij ve bi sabit sayılar, xi bilinmeyendir. A ya katsayılar matrisi, x e bilinmeyenler vektörü ve b ye karşı taraf vektörü denir. Denklemler sabit sayıları ve birinci dereceden bilinmeyenleri içerdiği için bu tür denklem sistemlerine doğrusal denklem x . 2 sistemleri adı verilir, çünkü x1 x2, x1 , Sin(x2), Log (x1), e 1 , 1/(x1+x2) gibi veya benzeri terimler içermezler.
Denklem sistemi türleri:
1. Denklem sayısının bilinmeyen sayısına eşit olduğu sistem:
a12
a 22 . an2
... a1n x1 b1 ... a 2 n x 2 b2 = ... . . . ... a nn x n bn
w
w
w .e
a11 a A x = b → 21 . a n1
1 x1 11.2 6 −3 3 − 3 8 − 2 − 1 x − 6.6 2 = Örnek: 2 4 9 2 x 3 − 0.3 3 5 x 4 − 12.8 −1 3
n=m
Denklem sayısı bilinmeyen sayısına eşittir: n=m. Uygulamada çoğunlukla karşılaşılan denklem sistemi türüdür. Katsayılar matrisi A tam dolu, seyrek dolu, simetrik, bant, simetrik ve bant, üçlü köşegenmatris olabilir.
det A≠0 ise tek çözüm vardır, det A = 0 durumunda çözüm yoktur veya sonsuz çözüm vardır.
2. Denklem sayısının bilinmeyen sayısından çok olduğu sistem:
a11 a12 a a 22 A x = b → 21 . . an1 an2
Örnek:
... a1m x1 b1 ... a 2m x 2 b 2 = ... . . . ... anm x m bn
3.1 − 6.6 0.58 − 2.9 4.2 x 1 = 2.01 2.7 5.8 x2 − 4.43 2.3 1.8 3.39
n>m
Denklem sayısının bilinmeyen sayısından çok olması durumudur: n>m. Genellikle ölçüme ve deneye dayalı problemlerde ortaya çıkar. Ölçme ve deney yoluyla belirlenen veri hatalarını en aza indirgemek için bilinmeyen sayısından daha çok denklem oluşturulur. Çözüm yaklaşıktır ve minimum hata olacak şekilde bulunmaya çalışılır.
A katsayılar matrisi genelde çok seyrek doludur. Bu tür denklem sistemini çözebilmek için A nın kolonları doğrusal bağımsız olmalı, yani rank A=m olmalıdır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
43
44
3. ÇOK BİLİNMEYENLİ DOĞRUSAL DENKLEM SİSTEMİ TÜRLERİ
3.Denklem sayısının bilinmeyen sayısından az olduğu sistem:
Denklem sayısının bilinmeyen sayısından az olması durumudur: n
m
Örnek:
... a1m x1 b1 ... a 2m x 2 b 2 = ... . . . ... a nm x m bn
A katsayılar matrisi genelde çok seyrek doludur. Bu tür denklem sistemini çözebilmek için A nın satırları doğrusal bağımsız olmalı, yani rank A=n olmalıdır. Tek değil, sonsuz çözüm vardır.
x1 2 x 2 − 22 4 − 2 1 1 6 − 3 − 2 x = 41 3 x4
4. Birden çok karşı taraflı sistem:
... a1m x11 x12 ... x1s b11 b12 ... a 2m x 21 x 22 ... x 2s b 21 b 22 = ... . . . ... . . . ... anm x m1 x m2 ... x ms bn1 bn2
6 -3 -3 -3 9 1 Örnek: 2 3 9 - 2 -1 -1
1 x11 2 x 21 2 x 31 7 x 41
x 22 x 32 x 42
x13 - 22 3 x 23 42 -9 = x 33 16 -12 x 44 9 5
1.6 3.9
Aynı katsayılı s tane denklem sisteminin tek bir denklem sisteminde yazılmış şeklidir.
Karşı tarafta s tane vektör vardır. Her karşı taraf vektörü için bir çözüm vektörü gerektiğinden x matrisinin de s tane vektörü vardır. Çözüm s tane denklem sisteminin çözümü ile eşdeğerdir. Çözümün varlığı yukarıda açıklanan n=m, n>m veya n
sn o
x12
... b1s ... b 2s ... . ... bns
tla
a11 a12 a a 22 A x = b → 21 . . a a n1 n2
ri. co
a11 a12 a a 22 A x = b → 21 . . a a n1 n2
n
8.3
4.1
5. Karşı tarafı sıfır olan sistem(homojen denklem sistemi):
... a1m x1 0 ... a 2m x 2 0 = ... . . . ... anm xm 0 x1 2 x2 0 Örnek: 4 − 2 1 1 6 − 3 − 2 x = 0 3 x 4
Karşı tarafı sıfır olan sisteme homojen denklem sistemi denir. n=m veya n≠m olabilir. x=0 için bu bağıntının sağlandığı açıktır. Ancak burada x ≠ 0 çözümü önemli olur.
em de r
a11 a12 a a22 A x = 0 → 21 . . an1 an2
x ≠ 0 çözümünün olabilmesi için: 1. ya det A=0 olmalı, veya 2. A nın satırları veya kolonları doğrusal bağımlı olmalı.
Her durumda denklemi sağlayan birden çok x vardır.
6. Karşı tarafı bilinmeyen vektörünün sabit bir katı olan sistem(özdeğer problemi):
w
w
w .e
a11 a12 a a22 21 Ax = λ x → . . an1 an 2
... a1n x1 x1 x ... a2 n x2 2 = λ . ... . . ... ann xn xn
a11 a12 a a22 21 Ax − λ I x = 0 → . . a a n2 n1
a11 a12 a a22 21 ( A − λ I ) x = 0 → ( . . a a n2 n1
a12 a11 − λ a a 22 − λ 21 . . an 2 an1
Soldaki bağıntıların hepsi de aynı bağıntıdır, fakat farklı şekillerde yazılmışlardır.
... a1n x1 1 ... a2 n x2 1 − λ ... . . ... ann xn ... a1n 1 ... a2 n 1 − λ ... . ... ann
x1 0 x 0 2 = . . . 1 xn 0
) . 1
x1 0 x 0 2 = . . xn 0
nxn boyutlu denklem sisteminin karşı tarafı bilinmeyen vektörünün sabit bir katıdır. Bu tür denklem sistemi ile dinamik, deprem, stabilite problemlerinde karşılaşılır ve özdeğer problemi adı verilir. Denklemi sağlayan bir λ sabiti ve buna ait x vektörü aranır. λ Sabitine özdeğer, x vektörüne de λ ya ait özvektör denir. Homojen bir denklem sistemi olduğundan x≠0 çözümleri ancak ve ancak det (A-λI) =0 için vardır. Çözümü zorca olan bu problem titreşim yapan cisimlerin periyot, frekans ve modlarının hesabına özdeştir.
a1n x1 0 a2 n x2 0 = ... . . . ... ann − λ xn 0
... ...
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
44
45
3. ÇOK BİLİNMEYENLİ DOĞRUSAL DENKLEM SİSTEMİ TÜRLERİ Tek çözüm var, çözüm yok, sonsuz çözüm var ne demektir? Bir bilinmeyenli bir denklem için açıklamaya çalışalım:
ax=b denkleminde a ve b sabit x bilinmeyendir. a≠0 durumunda çözüm x=b/a dır, Çözüm vardır ve tektir. a=0 ve b≠0 durumunda 0x=b ifadesi matematik kurallara ters düşer, çünkü, b≠0 olduğu bilinmektedir. Ayrıca bu ifadeden x=b/0 yazılamaz! Demek ki denklem uyumsuzdur, çözüm yoktur. a=0 ve b=0 durumunda 0x=0 bağıntısını sağlayan sonsuz x vardır, sonsuz çözüm vardır.
m
Tek çözüm var, çözüm yok, sonsuz çözüm var ne demektir? İki bilinmeyenli denklem sistemleri için açıklamaya çalışalım: 1. denklem sistemi: 2x - y=2 x + y=4
veya
y=2x - 2 y=-x + 4
ri. co
x2
İki farklı doğrunun denklemidir. Bu doğruları x-y koordinat sisteminde çizersek x=2 ve y=2 noktasında kesiştiklerini görürüz. O halde bu nokta her iki doğru üzerindedir, x=2 ve y=2 değerleri her iki denklemi de sağlar, başka kesişen nokta yoktur. Çözüm vardır ve tektir.
y= 2
Kesişme noktası≡çözüm
Aynı denklem sistemini matris notasyonunda yazar ve katsayılar matrisinin determinantını hesaplarsak
y=
2 − 1 x 2 Ax = b → = , det A = 2 ⋅ 1 − (−1) ⋅ 1 = 3 1 1 y 4
+ -x
4
Det A ≠ 0 olduğunu görürüz.
Tek çözüm var
tla
Sonuç: determinantı sıfırdan faklı denklem sisteminin çözümü vardır ve tektir. 2. denklem sistemi: 2x - y=2 x - ½y=0
veya
y=2x - 2 y=2x
y 5 4
Aynı denklem sistemini matris notasyonunda yazar ve katsayılar matrisinin determinantını hesaplarsak
1
sn o
İki farklı doğrunun denklemidir. Bu doğruları x-y koordinat sisteminde çizersek birbirine paralel olduklarını görürüz, kesişmezler. O halde her iki doğru üzerinde olan hiçbir ortak nokta yoktur. Her iki denklemi de sağlayan x ve y değer çifti bulunamaz. Çözüm yoktur.
0
2 − 1 x 2 1 Ax = b → = , det A = 2 ⋅ ( −0.5) − ( −1) ⋅ 1 = 0 1 − y 0 2
x 1
-1
2
3
4
5
-2
Det A = 0 olduğunu görürüz. 1. satırı -1/2 ile çarparak 2. satır ile toplarsak
em de r
3 2
Çözüm yok
2 − 1 x 2 0 0 y = − 1
Çözüm yok
A nın ikinci satırı sıfır olur, yani A nın satırları doğrusal bağımlıdır, rank<2 dir. b nin ikinci satırı sıfır değildir. İkinci denklemi açık yazarsak 0.x+0.y=-1 yani 0=1 dir. Bu ise matematik kurallara ters düşer. Demek ki denklemler uyumsuzdur.
Sonuç: Katsayılar matrisinin bir satırı sadece sıfır elemanlar içeriyor fakat aynı satırın karşı tarafı sıfırdan farklı ise: 1. determinant sıfırdır. 2. satırlar doğrusal bağımlıdır. 3. denklemler uyumsuzdur. 4. denklem sisteminin çözümü yoktur. 3. denklem sistemi: 2x - y=2 x - ½y=1
birbirinden farklı gibi görünen bu iki denklemi
w
w
w .e
y=2x-2 y=2x-2
şeklinde yazarsak, gerçekte birbirinin aynı iki doğru olduğunu görürüz. Bu doğruları x-y koordinat sisteminde çizersek üst üste düşerler. Her iki doğru üzerinde sonsuz ortak nokta vardır. O halde her iki doğru üzerindeki her nokta her iki denklemi de sağlarlar. Bu nedenle sonsuz çözüm vardır. Aynı denklem sistemini matris notasyonunda yazar ve katsayılar matrisinin determinantını hesaplarsak
2 − 1 x 2 1 = , det A = 2 ⋅ ( −0.5) − ( −1) ⋅ 1 = 0 Ax = b → 1 − 2 y 1
Det A = 0 olduğunu görürüz. 1. satırı -1/2 ile çarparak 2. satır ile toplarsak
y 5 4 3 2 1 0 -1
x 1
2
3
4
5
-2
Sonsuz çözüm var
2 − 1 x 2 0 0 y = 0 A nın ve b nin ikinci satırı sıfır olur, yani A nın satırları doğrusal bağımlıdır, rank<2 dir. İkinci denklemi açık yazarsak 0.x+0.y=0 yani 0=0 dır. Bu ise matematik kurallara ters düşmez. Demek ki denklemler uyumludur. y değişkenine istediğimiz herhangi değer verebilir, x i buna bağlı hesaplayabiliriz: y=c gibi bir sabit olsun, x=[2-(-1).c]/2=1+0.5c olur. Çözüm vektörü
x 1 + 0.5c dır ve denklem sistemini her c değeri için sağlar. Sonsuz c değeri olabileceği için sonsuz çözüm vardır. x= = y c Sonuç: Katsayılar matrisinin bir satırı sadece sıfır elemanlar içeriyor ve aynı satırın karşı tarafı da sıfır ise: 1. determinant sıfırdır. 2. satırlar doğrusal bağımlıdır. 3. denklemler uyumludur. 4. denklem sisteminin sonsuz çözümü vardır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
45
46
3. ÇOK BİLİNMEYENLİ DOĞRUSAL DENKLEM SİSTEMİ TÜRLERİ
Tek çözüm var, çözüm yok, sonsuz çözüm var ne demektir? Üç bilinmeyenli denklem sistemi için açıklamaya çalışalım:
Denklem sistemi: 3 adet düzlem denklemi
Matris notasyonunda
a 11 A x = b, a 21 a 31
a 12 a 22 a 32
a 13 x b 1 a 23 y = b 2 a 33 z b 3
m
a11x+a12y+a13z=b1 a21x+a22y+a23z=b1 a31x+a32y+a33z=b3
ri. co
denklem sisteminin her bir denklemi bir düzlemin denklemidir. x, y, z uzay eksen takımında; üç düzlem bir noktada kesişirse tek çözüm vardır. Bir doğru boyunca kesişirlerse veya üst üste düşerlerse sonsuz çözüm vardır. Kesişmezler veya birbirine pararlel iseler çözüm yoktur. Kesişme doğrusu ≡ sonsuz çözüm var
Düzlemler bir doğru boyunca kesişiyor: Sonsuz çözüm var
Düzlemler üst üste düşüyor: Sonsuz çözüm var
em de r
sn o
Düzlemler bir noktada kesişiyor: Tek çözüm var
tla
Kesişme noktası ≡ tek çözüm var
Düzlemler birbirine paralel: Çözüm yok
Düzlemler kesişmiyor: Çözüm yok
Genelleştirme: Tek çözüm var, çözüm yok, sonsuz çözüm var ne demektir? n denklem ve m bilinmeyenli
a 11 x 1 + a 12 x 2 + ... + a 1m x m = b1
a 21 x 1 + a 22 x 2 + ... + a 2m x m = b 2
a n1 x 1 + a n2 x 2 + ... + a nm x m = b n
→
a11 a12 a 21 a 22 . . a n1 a n2
... a1m x1 b1 ... a 2m x 2 b 2 = → Ax = b ... . . . ... a nm x m b n
w
w
w .e
Denklem sistemi x1, x2, …, xm eksenli uzayda tanımlıdır. Çizim yoluyla çözümü gösteremeyiz. 2x2 ve 3x3 denklem sistemleri için yukarıda verdiğimiz ilkeleri genelleştirebiliriz: Aranan çözüm, m eksenli uzayda koordinatları x1, x2, …, xm olan bir noktadır. Bu nokta bulunabilir, bulunamayabilir veya sonsuz tane bulunabilir. O halde nxm denklem sisteminin
• • •
Tek çözümü olabilir. Çözümü olmayabilir. Sonsuz çözümü olabilir.
Denklem sistemine bakarak çözüm vardır, yoktur ya da sonsuz çözüm vardır demek mümkün değildir. Yukarıdaki irdelemelerden anlaşıldığı gibi, çözüm katsayılar matrisinin determinantının değerine, satır veya kolonların doğrusal bağımlı olup olmadığına, ranka ve denklemlerin uyumlu olup olmadığına bağlıdır. Büyük bir denklem sisteminin determinantı nasıl hesaplanacak? Satır veya kolonların doğrusal bağımlı olup olmadığı nasıl belirlenecek? Denklemlerin uyumlu veya uyumsuz olduğu nasıl anlaşılacak? Rank nasıl hesaplanacak? Zor gibi görülen bu soruların cevabı aslında çok basittir. Denklem sistemi çözülürken bu soruların tümünün cevabı da kendiliğinden ortaya çıkar. Bölüm 4 de denklem sistemlerinin çözüm yöntemleri incelenirken bu sorular sayısal örneklerle cevaplanacaktır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
46
47
3. ÇOK BİLİNMEYENLİ DOĞRUSAL DENKLEM SİSTEMİ TÜRLERİ
Doğrusal denklem sistemlerinin çözüm yöntemleri Katsayılar matrisi kare olan, n denklem ve n bilinmeyenli (3.1)
m
A x=b
ri. co
denklem sistemininde A ve b nin elemanlarının sabit sayılardan oluştuğu, det A≠ 0 ve b ≠ 0 olduğu varsayılmaktadır. Denklem sistemini sağlayan x vektörünün hesaplanması amaçlanmaktadır. Bilindiği gibi, sıralanan koşullar nedeniyle, çözüm vardır ve tektir. Bilinen ilk sistematik çözüm metodu Cramer kuralıdır1. Determinant hesabına dayalı bu çözüm metodu, diğer çözüm metotlarına kıyasla, çok fazla işlem(100 bilinmeyenli denklem sistemi için yaklaşık 70 milyon işlem!) gerektirdiğinden günümüzde kullanılmamaktadır. Cramer kuralının sadece tarihsel değeri vardır.
tla
Günümüzde 3.1 doğrusal denklem sistemi direkt veya iterasyon yöntemlerinden biri ile çözülür: Direkt yöntemler:
İterasyon yöntemleri:
sn o
Belli sayıda çözüm adımı ve işlem sayısı olan çözüm yöntemleridir. Gerekli adım sayısı ve dört işlem sayısı çözüm öncesi bellidir. GAUSS indirgeme metodu, GAUSS-JORDAN tekniği, LU veya LDU çarpanlara ayırma yöntemleri, CHOLESKY metodu ve diğer benzerleri bu gruba girer.
em de r
Gerekli adım ve dört işlem sayısı çözüm öncesi bilinemez. Hatta çözümün bulunacağının garantisi de her zaman yoktur. Çözüme bir başlangıç çözümü tahmin edilerek başlanır, bir sonraki adımda hesaplanan çözüm gerçek çözüme daha yakındır. Birbirini izleyen iki çözüm arasındaki fark yeter derecede küçük oluncaya kadar hesap tekrarlanır. JACOBI, GAUSSSEIDEL metodu, CG (Conjugate Gradient method) metodu, SOR(Successive Overrelaxation Method) metodu ve diğer benzerleri bu gruba girer. Çok sayıda direkt ve iterasyon yöntemi vardır. 1953 yılında yapılan bir sayıma göre 450 den çok çözüm yöntemi vardı. Temelleri asırlar önce atılmış olmakla birlikte, asıl gelişmeler 1960-1970 lı yıllarda olmuştur. Bugün sayısını bilmek mümkün değildir. En genel yöntem GAUSS indirgeme metodudur. Diğerleri bu yöntemin özel durumlar için az ya da çok değiştirilmiş şeklidir. Yukarıda adı geçen yöntemler en çok kullanılanlardır.
w
w
w .e
Tüm çözüm yöntemlerinin üç temel dayanağı vardır:
• Denklem sisteminin bir denkleminin sıfırdan farklı bir sabit ile çarpılması çözümü değişmez. • Denklem sisteminin iki satırının yerleri değiştirilirse çözüm değişmez. • Denklem sisteminin iki kolonunun yerleri değiştirilirse çözüm değişmez, ancak değişkenlerin sırası değişir. • Denklem sisteminin bir denklemi sıfırdan farklı sabit bir sayı ile çarpılır ve başka bir satır ile toplanırsa(veya çıkarılırsa) çözüm değişmez.
Direkt çözüm metotları bu ilkelerden yararlanarak 3.1 denklem sisteminin katsayılar matrisini • • •
Bir üst üçgen matrise, veya Bir alt ve bir üst üçgen matrisin çarpımına veya Bir alt üçgen bir diyagonal ve bir üst üçgen matrisin çarpımına
dönüştürürler. Bu nedenle, yukarıda adı geçen yöntemlere, indirgeme veya çarpanlara ayırma yöntemi adı da verilir. Katsayılar matrisi üçgenleştirilmiş sistemin çözümü gerçek sistemin çözümünü verir.
1
İlk sistematik denklem çözümünü İsviçreli Cramer(1704-1752), 1750 yılında yayınladı.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
47
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
13 PROGRAMLAR:
Basit GAUSS indirgeme metodu
13. PROGRAMLAR: Doğrusal denklem sistemi çözümü- basit GAUSS indirgeme metodu
131
13. PROGRAMLAR: Doğrusal denklem sistemi çözümü- basit GAUSS indirgeme metodu1 . .
. .
.
.
.
a1n x11 a2 n x21 . . . ann xn1
x12 x22
. .
. .
. .
xn 2
.
.
.
x1n b11 b12 x2 n b21 b22 . = . . xnn bn1 bn 2
. .
. .
. .
.
.
.
b1n b2 n bnn
m
. .
ri. co
a11 a12 a 21 a22 . . . an1 an 2
A x =b bağıntısında A ve b verildiğinde x bilinmeyenler matrisi, det A, A nın kondisyon sayısı ve rankı hesaplanır. m=n ve karşı taraf matrisi b
1 . . .
1
tla
1 b = I =
sn o
birim matris olarak verilirse A nın ters matrisi, A-1 hesaplanır. Hesaplanan x veya A-1 matrisi b matrisinde depolanır. Bu nedenle x matrisi için programda boyut açılmamıştır. Hesap sonrası A ve b nin ilk değerleri kaybolur. Determinat: A nın determinantı det A, önemli bir sabit sayıdır. det A=0 ise çözüm yoktur.
Determinant
em de r
Det A = d. 2k
dır. GAUSS programı det A yı değil d ve k sayılarını hesaplar. Bunun nedeni sayı taşmasını önlemektir. Kullanıcı det A değerini yukarıdaki bağıntıdan hesaplayabilir. Kondisyon sayısı(Hadamard):
Kon( A ) h =
det A V
İle tanımlanan bir diğer önemli sayıdır. A matrisinin hasta (ill-conditiond) bir matris olup olmadığı hakkında bir fikir verir. Kon A<10-3 durumunda A matrisinin hasta bir matris olduğu, çözümün hatalı olabileceği şüphesi vardır.
w
w
w .e
Rank: A matrisinin lineer bağımsız satır sayısıdır. Rank A
Örnek:
6 −2 12 − 8 Ax = b → 3 − 13 − 6 4
x11 x 21 x31 1 − 18 x41
2 6 9
4 10 3
x12 16 1 x22 26 − 2 = → x32 − 19 9 x42 − 34 − 4
x =?
GAUSS sonucu
1. çözüm vektörü 2. çözüm vektörü
1
Teori ve sayısal örnekler için bak: bölüm 5 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
131
13. PROGRAMLAR: Doğrusal denklem sistemi çözümü- basit GAUSS indirgeme metodu
132
Çözüm:
ri. co
m
3 − 15.26 1 32.96 x= − 2 48.58 15.33 1 Det A=d.2k=0.5625.28=144 Kon(A)h=|det A|/ V=144/45666=0.003
'---------------- Ana program Gauss---------------' Ax=b Denklem sistemi çözümü ' Çağrılan alt programlar: Gauss '-------------------------------------------------DATA 4,2: ' n,m A(n,n ve B(n,m) 'A matrisi: matrislerinin boyutları DATA 6, -2,2, 4 DATA 12, -8,6, 10 DATA 3,-13,9, 3 A nın satırları DATA -6, 4,1,-18
DEFINT I-N DEFDBL A-H, O-Z
tla
sn o
' B matrisi: DATA 16,26,-19,-34 DATA 1,-2,9,-4
Ana program
B nin kolonları
Alt programın ana programa tanıtımı
em de r
DECLARE SUB Gauss (n, a(), m, b(), rank, d, k, v) CLS
A ve B nin boyutları DATA satırlarından okunuyor
READ n, m DIM a(n, n), b(n, m): 'A ve B için bellekte yer ayır
w
w
w .e
' A yı oku: FOR i = 1 TO n FOR j = 1 TO n READ a(i, j) NEXT j NEXT i ' b yi oku: FOR i = 1 TO m FOR j = 1 TO n READ b(j, i) NEXT j NEXT i
A ve B matrisleri tanımlanıyor
A nın satırları DATA satırlarından okunuyor
B nin kolonları DATA satırlarından okunuyor
CALL Gauss(n, a(), m, b(), rank, d, k, v)
GAUSS alt programı çağrılıyor
PRINT "Determinant ve kondisyon hesabı için katsayılar:" PRINT "Rank="; rank; "d="; d; "k="; k; "V="; v IF rank < n THEN PRINT "Matris tekil, çözüm yok !": END PRINT PRINT "Denklem sisteminin çözümü (Gauss):" FOR i = 1 TO m FOR j = 1 TO n PRINT b(j, i); NEXT j PRINT : PRINT NEXT i END
Sonuçlar yazdırılıyor
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
132
ri. co
sn o
' Zero: sıfır sayılacak sayı rank = 0: v = 1: Zero = 0 FOR i = 1 TO n d=0 FOR j = 1 TO n IF ABS(a(i, j)) > Zero THEN Zero = ABS(a(i, j)) d = d + a(i, j) * a(i, j) NEXT j d = SQR(d): v = v * d: 'HADAMARD hacmi NEXT i Zero = Zero * Eps
GAUSS alt programı
tla
SUB Gauss (n, a(), m, b(), rank, d, k, v) '-----------------------------------------------------------' Doğrusal denklem sistemi çözümü (Gauss) ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1994 ' a(n,n)*x(n,m)=b(n,m) denklem sisteminden x(n,m) hesaplanır. ' a ve b çağıran programda depolanmış olmalıdır. ' x(n,m) çözümü b(n,m) matrisinde depolanır. ' n=m ve b(n,n)=I (birim matris) olarak verilirse ' b(n,n) çözümden sonra a(n,n) nin tersi olur. ' Programın verdiği d, k ve V sayıları yardımıyla ' det a=d*2^k ile hesaplanabilir. ' a tekil ise d=0 döner, çözüm yoktur. ' a nın kondisyon sayısı Kon a=ABS(det a)/V ile ' hesaplanarak matrisin hasta (ill-conditioned) olup ' olmadığı incelenebilir. '-----------------------------------------------------------' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps
133
m
13. PROGRAMLAR: Doğrusal denklem sistemi çözümü- basit GAUSS indirgeme metodu
em de r
IF n = 1 THEN ' n=1 durumu IF ABS(a(1, 1)) <= Zero THEN GOTO 100 FOR i = 1 TO m b(1, i) = b(1, i) / a(1, 1) NEXT i rank = 1: d = a(1, 1): k = 0 EXIT SUB END IF
FOR i = 1 TO n - 1 ' Kolonda Pivot ara T = 0: d = 1: k = i FOR j = i TO n IF ABS(a(j, i)) > T THEN T = ABS(a(j, i)): k = j NEXT j
w
w
w .e
IF T <= Zero GOTO 100 IF k > i THEN d = -d: ' Determinantın işaretini değiş ' i ve k satırlarını değiş FOR j = i TO n T = a(i, j) a(i, j) = a(k, j) a(k, j) = T NEXT j FOR j = 1 TO m T = b(i, j) b(i, j) = b(k, j) b(k, j) = T NEXT j END IF ' İndirge rank = i FOR j = i + 1 TO n T = a(j, i) / a(i, i) FOR k = i + 1 TO n a(j, k) = a(j, k) - T * a(i, k) NEXT k FOR k = 1 TO m b(j, k) = b(j, k) - T * b(i, k) NEXT k NEXT j NEXT i IF ABS(a(n, n)) <= Zero GOTO 100 rank = n
' Yukarı doğru hesap FOR j = 1 TO m FOR i = n TO 1 STEP -1 T=0 FOR k = i + 1 TO n T = T + a(i, k) * b(k, j) NEXT k b(i, j) = (b(i, j) - T) / a(i, i) NEXT i NEXT j
' Determinat için d ve k yi belirle (WILKINSON) k=0 FOR i = 1 TO n d = d * a(i, i) 200 k = k + 4 IF ABS(d) >= 1 THEN d = d * .0625: GOTO 200 300 k = k - 4 IF ABS(d) < .0625 THEN d = d * 16: GOTO 300 NEXT i EXIT SUB 100 ' Matris tekil d = 0: k = 0 END SUB ' Gauss
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
133
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
sn o
Ahmet TOPÇU
tla
Ders notları 2014
em de r
n=m
Yukarıdan aşağı doğru hesap
Alt üçgen matris
l 22 l 32
l 33
.
.
.
...
l n2
l n3
ln4
...
w
w
w .e
l11 l 21 l 31 . l n1
x1 b1 x b 2 2 x 3 = b3 . . l nn x n bn
x1 = b1 / l11 x 2 = (b2 − l 21 x1 ) / l 22 x 3 = (b3 − l 31 x1 − l 32 x 2 ) / l 33 ... x n = (bn − l n1 x1 − l n 2 x 2 − l n3 x 3 − l n 4 x 4 − .... − l n ( n −1) x n −1 ) / l nn
4 DENKLEM SİSTEMİ ÇÖZÜMÜ, DİREKT METOTLAR Katsayılar matrisi üçgen sistemler
49
4. KATSAYILAR MATRİSİ ÜÇGEN OLAN DENKLEM SİSTEMİNİN ÇÖZÜMÜ
4. KATSAYILAR MATRİSİ ÜÇGEN OLAN DENKLEM SİSTEMİNİN ÇÖZÜMÜ
m
Katsayılar matrisi alt veya üst üçgen olan denklem sistemi ile uygulamada karşılaşılmaz. Ancak, çarpanlara ayırma yöntemlerinde ortaya çıkar. Bu yöntemlerin anlaşılabilmesi açısından üçgen katsayılı sistem çözümü iyi kavranmalıdır.
ri. co
Aşağıdaki üçgen matrislerde diyagonal elemanların sıfırdan farklı olduğu varsayılmaktadır (determinant≠0 anlamında). Alt üçgen katsayılı sistem:
+ l 22 x 2
l 31 x1
+ l 32 x 2
+ l 33 x 3
.
.
.
.
...
l n1 x1
+ ln2 x2
+ l n3 x 3
+ l n4 x4
...
l 33 . l n3
. ln4
H e s a p
= b3
3. Adım: x1 ve x2 yi yerine koy x3 ü hesapla
2. Adım: x1 i yerine koy, x2 yi hesapla
+ l nn x n = bn
1. Adım:
n. Adım: x1, x2 , x3 , …, xn-1 i yerine koy xn i hesapla
H e s a p y ö n ü
x1 = b1 / l11
sn o
l 22 l 32 . l n2
x1 b1 x b 2 2 x 3 = b3 . . l nn x n bn
1. Adım: x1 i hesapla: x1=b1/l11
.
Denklem sistemi matris notasyonunda L x=b l11 l 21 l 31 . l n1
= b1 = b2
tla
l11 x1 l 21 x1
... ...
y ö n ü
2. Adım:
x 2 = (b2 − l 21 x1 ) / l 22
3. Adım:
x 3 = (b3 − l 31 x1 − l 32 x 2 ) / l 33
...
n. Adım:
x n = (bn − l n1 x1 − l n 2 x 2 − l n3 x 3 − l n 4 x 4 − .... − l n ( n −1) x n −1 ) / l nn
em de r
Şeklini alır. 1. denklemde 1, ikinci denklemde 2, 3. denklemde 3, …, n. denklemde n bilinmeyen vardır. Hesap 1. denklemden n. denkleme doğru yapılır: 1. denklemden x1 hesaplanır. 2. denklemde x1 yerine konur ve x2 hesaplanır. 3. denklemde x1, x2 yerine konur ve x3 hesaplanır. n. denklemde x1, x2, x3, …, xn-1 yerine konur ve xn hesaplanır. Görüldüğü gibi çözüm çok basittir. Hesap yönü yukarıdan aşağıya doğrudur. Şematik hesap: l11 . . . li1 .
. . .
li 2 .
. . . .
w
w
w .e
.
li(i −1 ) .
Örnek:
6 x1 3 −1 3 x − 7 2 = 2 − 4 7 x3 4 − 3 5 2 4 x 4 5
lii .
x1 b1 x2 . . . = xi −1 . x b . i i . . .
x1 = b1 /l11
xi bilinmeyenini hesaplamak için: L nin i diyagonalinin solundaki sayılar x in i. satırının üstündeki sayılar ile çarpılır, bi den çıkartılır, bulunan değer L nin diyagonal elemanı lii ye bölünür. i. Adım:
x i = (bi − l i1 x1 − l i 2 x 2 − ... − l i(i −1 ) x i −1 )/l ii
Hesaplarda noktadan sonra 3 hane yürütülmüştür, 3. hane yuvarlatılmıştır. H e s a p y ö n ü
1. Adım:
x1 = 3 / 6 = 0.500
2. Adım:
x 2 = (−7 − (−1) ⋅ 0.500) / 3 = −2.167
3. Adım:
x 3 = (4 − 2 ⋅ 0.500 − (−4) ⋅ (−2.167)) / 7 = −0.810
4. Adım:
x 4 = (5 − (−3) ⋅ 0.500 − 5 ⋅ (−2.167) − 2 ⋅ (−0.810)) / 4 = 4.739
Gözlem: • Diyagonal elemanlar lii ≠ 0 dır. • Katsayılar matrisinin determinantı det L
• •
1. Adım:
= l11 ⋅ l 22 ⋅ ... ⋅ l nn = 6 ⋅ 3 ⋅ 7 ⋅ 4 = 504 ≠ 0
0.500 − 2.167 x= − 0.810 4.739
dır.
L düzenli(regüler) bir matristir, satır ve kolonları doğrusal bağımlı değildir, rank=n=4 tür. Tek çözüm vardır ve bulunmuştur.
Bu koşullardan biri sağlanmasaydı çözüm bulanamayacaktı!
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
49
50
4. KATSAYILAR MATRİSİ ÜÇGEN OLAN DENKLEM SİSTEMİNİN ÇÖZÜMÜ
Üst üçgen katsayılı sistem: +u13 x 3
...
+u1( n −1) x n −1
u 22 x 2
+ u 23 x 3
... ...
+ u 2( n −1) x n −1 . u ( n −1)( n −1) x n −1
+u1n x n
n. Adım: x2, x3, … xn i yerine koy x1 i hesapla
= b1
n-1. Adım: x3, x4, … xn i yerine koy x2 yi hesapla
+ u 2 n x n = b2 . . + u ( n −1) n x n = bn −1 u nn x n
2. Adım: xn i yerine koy, xn-1 i hesapla
= bn
1. Adım: xn i hesapla: xn=bn/unn
Matris notasyonunda U x=b u13 ...
u1( n −1)
u23 ... . ...
u2( n −1) . u( n −1)( n −1)
u1n x1 b1 u2 n x2 b2 . . = . u( n −1) n xn −1 bn −1 unn xn bn
H e s a p y ö n ü
y ö n ü
n. Adım:
x1 = (b1 − u12 x2 − u13 x3 − ... − u1( n −1) xn −1 − u1n xn ) / u11
n-1. Adım:
x2 = (b2 − u23 x3 − ... − u2( n −1) xn −1 − u2n xn ) / u22 ...
2. Adım:
xn −1 = (bn −1 − u( n −1) n xn ) / u( n −1)( n −1) xn = bn / unn
tla
u11 u12 u22
H e s a p
m
+u12 x 2
ri. co
u11 x1
1. Adım:
.
. uii .
. ui (i +1) .
. ui (i + 2) .
. . .
.
. .
. uin .
. . xi bi xi +1 . = xi + 2 . . . .xn bn
em de r
sn o
şeklini alır. n. denklemde 1, n-1. denklemde 2, …, 2. denklemde n-1 ve 1. denklemde n bilinmeyen vardır. Hesap n. denklemden 1. denkleme doğru yapılır: n. denklemden xn hesaplanır. n-1. denklemde xn yerine konur ve xn-1 hesaplanır. 2. denklemde x3, , x4,…, xn yerine konur ve x2 hesaplanır. 1. denklemde x2, x3, …, xn yerine konur ve x1 hesaplanır. Görüldüğü gibi çözüm çok basittir. Hesap yönü aşağıdan yukarı doğrudur. Şematik hesap:
. .
unn
i. Adım:
x i = (bi − u i (i +1) x i +1 − u i (i + 2) x i + 2 − ... − u in x n ) / u ii
xi bilinmeyenini hesaplamak için: U nun i diyagonalinin sağındaki sayılar x in i. satırının altındaki sayılar ile çarpılır, bi den çıkartılır, bulunan değer U nun diyagonal elemanı uii ye bölünür. 1. Adım:
x n = b n / u nn
Örnek:
w
w
w .e
6 − 1 2 − 3 x1 3 3 − 4 5 x2 − 7 = 7 2 x3 4 4 x4 5
H e s a p y ö n ü
4. Adım:
x1 = (3 − (−1)(−4.131 − 2 ⋅ 0.214 − (−3) ⋅ 1.250) / 6 = 2.191
3. Adım:
x2 = (−7 − (−4) ⋅ 0.214 − 5 ⋅ 1.250) / 3 = −4.131
2. Adım:
x3 = (4 − 2 ⋅ 1.250) / 7 = 0.214
1. Adım:
x4 = 5 / 4 = 1.250
Gözlem: • Diyagonal elemanlar uii≠0 dır. • Katsayılar matrisinin determinantı det
• •
U = u11 ⋅ u 22 ⋅ ... ⋅ u nn = 6 ⋅ 3 ⋅ 7 ⋅ 4 = 504 ≠ 0
2.191 − 4.131 x= 0.214 1.250
dır.
U düzenli(regüler) bir matristir, satır ve kolonları doğrusal bağımlı değildir, rank=n=4 tür. Tek çözüm vardır ve bulunmuştur.
Bu koşullardan biri sağlanmasaydı çözüm bulanamayacaktı!
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
50
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
sn o
Ahmet TOPÇU
tla
Ders notları 2014
m=n
em de r
Üst üçgen matris
a12 a 22
a13 a 23
a 32
a 33
. a n2
. a n3
... a1n x1 b1 ... a 2 n x 2 b2 ... a 3n x 3 = b3 ... . . . ... a nn x n b n
a11 a12 (1) a22
a13 (1) 23 ( 3) 33
a a
a1n x1 b1 ... a2(1n) x2 b2(1) ... a3( 2n ) x3 = b3( 2 ) ... . . . ( n −1) ( n −1) ann xn bn ...
w
w
w .e
a11 a 21 a 31 . a n1
Carl Friedrich GAUSS (1777 –1855)
5 DENKLEM SİSTEMİ ÇÖZÜMÜ, DİREKT METOTLAR Basit GAUSS indirgeme metodu
5. BASİT GAUSS1 İNDİRGEME METODU
52
5. BASİT GAUSS1 İNDİRGEME METODU n bilinmeyenli n denklemli A x=b sisteminde A ve b verilmiş olsun. x in hesaplanması istenmektedir. det A≠0 ise çözüm vardır ve tektir.
.
.
a n1 x1
+ an2 x2
+ a13 x 3 + ... + a1n x n + a 23 x 3 + ... + a 2 n x n + a 33 x 3 + ... + a 3n x n .
... . + a n 3 x 3 + ... + a nn x n
= b1 = b2 = b3 . = bn
a11 a 21 → a 31 . a n1
a12
a13
a 22 a 32 . a n2
a 23 a 33 . a n3
... a1n x1 b1 ... a 2 n x 2 b2 ... a 3n x 3 = b3 ... . . . ... a nn x n bn
m
+ a12 x 2 + a 22 x 2 + a 32 x 2
(5.1)
ri. co
a11 x1 a 21 x1 a 31 x1
Basit GAUSS indirgeme metodu bu denklem sistemini n-1 adımda katsayılar matrisi bir üst üçgen olan eşdeğer denklem sistemine indirger:
+ a13 x3 + ... + a1n xn (1) + a23 x3 + ... + a2(1n) xn ( 2) + a33 x3 + ... + a3( 2n) xn
...
. a
( n −1) nn n
x
= b1 = b2(1) = b3( 2 ) → . = bn( n −1)
a11
a12
a13
(1) 22
(1) 23 ( 2) 33
a
a a
a1n x1 b1 ... a 2(1n) x 2 b2(1) ... a 3( 2n) x 3 = b3( 2 ) ... . . . ( n −1) ( n −1) a nn x n bn ...
tla
a11 x1 + a12 x2 (1) a22 x2
sn o
(5.2) Burada aij(k ) ve bi(k ) sayıları k. adımda A nın değişen sayılarını göstermektedir. Bu denklem sisteminden aşağıdan yukarı doğru hesap yapılarak x vektörünün tüm elemanları belirlenir.
em de r
İndirgeme metodunun ana ilkesi şudur: 1. adımda A nın 1. kolonunun diyagonalinin altındaki sayılar sıfırlanır. 2. adımda A nın 2. kolonunun diyagonalinin altındaki, 3. adımda A nın 3. kolonunun diyagonalinin altındaki, …, n-1. adımda A nın n-1. kolonunun diyagonalinin altındaki sayılar sıfırlanır.
1. kolonun diyagonali altındaki sayıları sıfırlamak için A nın 1. satırı özenle seçilmiş bazı sayılar ile çarpılır ve 2., 3., …, n. denklemden çıkarılır. 2. kolonun diyagonali altındaki sayıları sıfırlamak için A nın 2. satırı özenle seçilmiş bazı sayılar ile çarpılır ve 3., 4., …, n. denklemden çıkarılır, v.s. Bu işlemin nasıl yapılacağı aşağıda adım adım açıklanacaktır. 1. Adım:
Özenle seçilmiş sayılar
w
w
w .e
1. satır l21=a21/a11 ile çarpılır 2. satırdan çıkarılır. Bunun sonucunda a21 sıfır olur. 1. satır l31=a31/a11 ile çarpılır 3. satırdan çıkarılır. Bunun sonucunda a31 sıfır olur. … 1. satır ln1=an1/a11 ile çarpılır n. satırdan çıkarılır. Bunun sonucunda an1 sıfır olur.
Özenle seçilen sayılarda bölen olarak görünen a11 sayısına pivot eleman denir. 1.adım sonunda x1 bilinmeyeni son n-1 denklemden indirgenmiş olur. 5.1 denklem sistemi
a11x1 + a12 x2 (1) 0 + a22 x2 (1) 0 + a32 x2 . . 0 + an(12) x2
+ a13 x3 + (1) + a23 x3 + (1) + a33 x3 + . (1) + an 3 x3 +
+ a1n xn + a2(1n) xn + a3(1n) xn . (1) + ann xn
... ... ... ... ...
= b1 = b2(1) = b3(1) . = bn(1)
a11 a12 0 a (1) 22 (1) 0 a32 . . 0 a (1) n2
a13 ... a1n x1 b1 (1) a23 ... a2(1n) x2 b2(1) (1) a33 ... a3(1n) x3 = b3(1) . ... . . . (1) (1) an(13) ... ann xn bn
İndirgenen bilinmeyen
(5.3)
Sıfırlanan sayılar
şeklini alır.
Burada
a ij(1)
ve
bi(1) sayıları 1. adımda A nın değişen yeni sayılarını göstermektedir.
Genelleştirilirse, bu sayılar l i1 = a i1 / a11 ,
a ij( 1 ) = a ij − l i1 a1 j
ve b i(1) = b i − l i1 b1 ,
i = 2 , 3 , ..., n , j = 1, 2 , ..., n
ile hesaplanmaktadır. 1
Carl Friedrich GAUSS (1777 –1855), Alman: 1798 civarı Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
52
5. BASİT GAUSS1 İNDİRGEME METODU
53
2. Adım:
1. adım sonunda oluşan 5.3 sisteminin 1. denklemi hariç geriye kalan n-1 denkleminden x2 bilinmeyeni benzer şekilde yok edilir.
m
(1) (1) (1) 2. satır l 32 = a 32 / a 22 ile çarpılır 3. satırdan çıkarılır. Bunun sonucunda a 32 sıfır olur. (1) (1) (1) 2. satır l 42 = a 42 / a 22 ile çarpılır 4. satırdan çıkarılır. Bunun sonucunda a 42 sıfır olur. …
Özenle seçilmiş sayılar
ri. co
(1) (1) (1) 2. satır l n 2 = a n 2 / a 22 ile çarpılır n. satırdan çıkarılır. Bunun sonucunda a n 2 sıfır olur.
(1) sayısına pivot eleman denir. 2.adım Özenle seçilen sayılarda bölen olarak görünen a 22 sonunda x2 bilinmeyeni son n-2 denklemden indirgenmiş olur. 5.3 denklem sistemi
+ a13 x3 + ... + a1n xn (1) + a23 x3 + ... + a2(1n) xn
= b1 = b2(1)
+0 .
( 2) + a33 x3 + ... + a3( n2 ) xn . ... .
= b3( 2 ) .
0
+0
( 2) + an( 23) x3 + ... + ann xn
= bn( 2 )
a13 ... a1n x1 b1 (1) a23 ... a2(1n) x2 b2(1) ( 2) a33 ... a3( 2n) x3 = b3( 2) . ... . . . ( 2) ( 2) an( 23) ... ann xn bn
sn o
0 .
a11 a12 0 a (1) 22 0 0 . . 0 0
İndirgenen bilinmeyenler
tla
a11 x1 + a12 x2 (1) 0 + a22 x2
(5.4)
Sıfırlanan sayılar
şeklini alır.
Burada aij( 2) ve bi(2) sayıları 2. adımda A nın değişen yeni sayılarıdır.
Genelleştirilirse, bu sayılar (1 ) l i 2 = a i(21) / a 22 ,
a ij( 2 ) = a ij( 1 ) − l i 2 a 2( 1j )
em de r
ile hesaplanmaktadır.
ve b i( 2 ) = bi(1) − l i 2 b 2(1) ,
i = 3, 4 , ..., n , j = 2 , 3 , ..., n
Diğer adımlar:
2. adım sonunda oluşan 5.4 sisteminin 1. ve 2. denklemi hariç, geriye kalan n-2 denklemindeki x3, x4, …, xn-1 bilinmeyenleri benzer şekilde yok edilir. n-1. adım sonunda katsayılar matrisi bir üst üçgen olan 5.2 eşdeğer denklem sistemine dönüşür. Bu denklem sisteminden aşağıdan yukarı doğru hesap ile x1, x2, …, xn bilinmeyenleri sırayla bulunur:
+ a13 x3 +
w
w
w .e
a11x1 + a12 x2 (1) a22 x2
(1) + a23 x3 + ( 2) + a33 x3 +
...
+ a1n xn
= b1
... ... ...
+ a2(1n) xn + a3( 2n) xn
= b2(1) = b3( 2)
.
.
( n −1) ann xn
= bn( n −1)
a11 a12 (1) a22
İndirgenen bilinmeyenler
x1 b1 x b (1) 2 2 x3 = b3( 2) ... . . . ( n −1) ( n −1) ann xn bn
a13 ... (1) a23 ... ( 3) a33 ...
Sıfırlanan sayılar
a1n a2(1n) a3( 2n)
x1 = (b1 − a12 x2 − a13 x3 − ... − a1n xn ) / a11 H e s a p y ö n ü
(1) (1) x2 = (b2(1) − a23 x3 − ... − a2(1n) xn ) / a22 ( 2) x3 = (b3( 2) − ... − a3( 2n) xn ) / a33
... ( n −1) xn = bn( n −1) / ann
(1) ( 2) ( n −1) diyagonal elemanlarına pivot eleman denir. a11, a22 , a33 ,..., ann
Gözlem: • A katsayılar matrisi n-1 adım sonunda bir üst üçgen matrise dönüştürülmektedir. • Oluşan yeni denklem sistemi verilen denklem sistemi ile eşdeğerdir. • Tüm işlemler A, b ve x matrisi üzerinde yapılmaktadır. A ve b nın ilk değerleri kaybolmaktadır. • Pivot elemanlar ≠ 0 olmalıdır, aksi halde çözüme devam edilemez. (n −1) • Kasayılar matrisi A nın determinantı indirgenmiş sistemin determinantına eşittir: det A = a11 ⋅ a (1) ⋅ a ( 2) ⋅ .. ⋅ ann 22 33 • Pivot elemanlardan biri sıfır ise det A=0 olur. Bu ise A nın satır veya kolonlarının doğrusal bağımlı olduğu anlamına gelir. • det A=0 ise A tekildir, çözüm yoktur veya tek değildir. Rank A
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
53
5. BASİT GAUSS1 İNDİRGEME METODU
54
Örnek: 12 x1 − 8 x 2 + 6 x 3 + 10 x 4 = 26 3 x1 − 13 x 2 + 9 x3 + 3 x 4 = −19 − 6 x1 + 4 x 2 + x 3 − 18 x 4 = −34
−2 6 12 − 8 → 3 − 13 4 − 6
4 x1 16 6 10 x 2 26 = → A x = b, 9 3 x 3 − 19 1 − 18 x 4 − 34 2
x =?
m
6 x1 − 2 x 2 + 2 x 3 + 4 x 4 = 16
ri. co
Tüm işlemler A matrisi üzerinde yapılacaktır. Diyagonal altındaki sayıların sıfır olacağı bilindiğinden bu hücrelere lij değerleri saklanacaktır. 1. Adım: Pivot eleman
l31=3/6=0.5 l41= - 6/6= -1
4 x1 16 2 2 x2 − 6 = 8 1 x3 − 27 3 − 14 x4 − 18 2
l21=2 sayısı 1.satır ile çarpıldı, 2.satırdan çıkartıldı.
l31=0.5 sayısı 1.satır ile çarpıldı, 3.satırdan çıkartıldı.
tla
l21=12/6=2
6 −2 2 −4 0.5 − 12 2 −1
l41= -1 sayısı 1.satır ile çarpıldı, 4.satırdan çıkartıldı.
2. Adım:
l32=-12/(-4)=3
−2 6 −4 2 0 .5 3 − 1 − 0.5
4 x1 16 2 2 x2 − 6 = 2 − 5 x3 − 9 4 − 13 x 4 − 21 2
l32=3 sayısı 2.satır ile çarpıldı, 3.satırdan çıkartıldı. l42= -0.5 sayısı 2.satır ile çarpıldı, 4.satırdan çıkartıldı.
em de r
l42=2/(-4)=-0.5
Pivot eleman
sn o
1. diyagonal altındaki elemanlar pivot elemana bölündü
2. diyagonal altındaki elemanlar pivot elemana bölündü
3. Adım:
l43=4/2=2
Pivot eleman
−2 6 −4 2 0 .5 3 − 1 − 0 .5
4 x1 16 2 2 x2 − 6 = 2 − 5 x3 − 9 2 − 3 x4 − 3 2
l43= 2 sayısı 3.satır ile çarpıldı, 4.satırdan çıkartıldı.
w .e
3.diyagonal altındaki elemanlar pivot elemana bölündü
İndirgenmiş denklem sistemi ve aşağıdan yukarıya doğru hesap:
w
w
6 − 2 2 4 x1 16 − 4 2 2 x − 6 2 = 2 − 5 x 3 − 9 − 3 x4 − 3
H e s a p y ö n ü
x1 = (16 − (−2) ⋅ 1 − 2 ⋅ (−2) − 4 ⋅ 1) / 6 = 3 x 2 = (−6 − 2 ⋅ (−2) − 2 ⋅ 1) /( −4) = 1 x3 = (−9 − (−5) ⋅ 1) / 2 = −2 x 4 = −3 /( −3) = 1
Gözlem: • Tüm işlemler A , b ve x matrisi üzerinde yapılmıştır. A ve b nın verilmiş ilk değerleri kaybolmuştur. • A katsayılar matrisi n-1=4-1=3 adım sonunda bir üst üçgen matrise dönüşmüştür. • Oluşan yeni denklem sistemi verilen denklem sistemi ile eşdeğerdir. • Pivot elemanlar ≠ 0 dır. • Katsayılar matrisi A nın determinantı indirgenmiş sistemin determinantına eşittir. det A = 6 ⋅ ( −4) ⋅ 2 ⋅ ( −3)
• •
3 1 x= − 2 1
= 144 ≠ 0
dır.
det A ≠ 0 olduğundan A düzenli(regüler) bir matristir, satır ve kolonları doğrusal bağımlı değildir, rank A=n=4 tür. Tek çözüm vardır ve bulunmuştur.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
54
5. BASİT GAUSS1 İNDİRGEME METODU
55
Pivot eleman seçimi ve satır değiştirme
1 1 1 x1 2 0 1 1 x = 1 , 2 − 2 1 − 1 x3 3
− 2 1 − 1 x1 3 1 1 1 x = 2 2 0 1 1 x3 1
ri. co
0 1 1 x1 1 1 1 1 x = 2, 2 − 2 1 − 1 x3 3
m
( n −1) sayılarına “pivot eleman”, bu lij sayılarının hesabında bölen olarak karşımıza çıkan a11, a (1) , a ( 2) ,..., ann 22 33 elemanların bulunduğu satır ve kolona “pivot satırı” ve “pivot kolonu” denir. Pivot kelimesi kilit, rol oynayan, yönlendiren olarak tercüme edilebilir. Pivot eleman hesabın kaderini belirler. Çünkü, indirgemenin sürdürülebilmesi için pivot elemanların sıfırdan farklı olması gerekir, aksi durumda hesaba devam edilemez. Örneğin
denklem sistemlerinin üçünün de çözümü aynı; x1=1, x2=3, x3=-2 dır. Çünkü farklı gibi görülen her üç denklem sistemi gerçekte birbirinin aynıdır, sadece satırlarının yerleri değiştirilmiştir. Satırların yer değiştirmesi çözümü değiştirmediğinden çözüm de aynı kalır.
tla
Ancak; birinci denklem sistemi çözülmek istenirse, daha ilk adımda, çıkmaza girilir. Çünkü 1. diyagonal eleman(yani pivot), sıfırdır. İkinci denklem sisteminde 1. diyagonal eleman(pivot) sıfırdan farklıdır, indirgemenin ilk adımı sorunsuz yürütülebilir. Üçüncü denklem sisteminde de ilk adım sorun yaratmaz. Pivot elemanın sıfır olması halinde, örneğin k. Adımda, akk=0 ise; A matrisinin k. Kolonunda diyagonalin altındaki sayılar arasında pivot eleman aranır ve k. satır ile sonraki satırlardan biri değiştirilir, pivot elemanın sıfırdan farklı olması sağlanır ve hesaba devam edilir.
sn o
Sıfırdan farklı pivot elemanın bulunamaması durumunda; örneğin k. Adımda diyagonal ve diyagonalin altındaki tüm elemanlar sıfır ise, akk= a(k+1)k=,…, = ank=0; satır değiştirmek de bir işe yaramaz. Bunun anlamı; A matrisinin tekil, yani det A=0 olduğu, çözümün bulunmadığı veya sayısız çözümün olduğudur.
em de r
Pivot elemanın sıfırdan farklı fakat mutlak değerce çok küçük olması da nümerik sorun yaratır. lij sayıları A nın elemanları pivot elemana bölünerek hesaplandığından, pivot elemanın çok küçük olması bölümün çok büyük bir sayı olmasına, bununla çarpılan/toplanan sayıların daha da büyümesine ve yuvarlama hatalarına neden olur. Büyük denklem sistemlerinde bu işlemler milyonlarca defa yapıldığından, yuvarlama hataları birike birike sonucun tamamen yanlış hesaplanmasına neden olur. Yuvarlama hatalarını azaltmak için, gerekirse her adımda, satırlara yer değiştirilir. Mutlak değerce en büyük sayı diyagonal ve diyagonalin altındaki sayılar arasında aranır, bu sayının bulunduğu satır ile pivot satırı değiştirilir. Örnek: yukarıdaki 1. denklem sistemi çözülürken 1. adımda 1. diyagonal ve diyagonalin altında mutlak değerce en büyük sayı 3. satırdadır: |-2|. Bu nedenle 1. denklem ile 3. denkleme yer değiştirilir ve indirgemeye devam edilir. Böylece pivot elemanların en büyük sayı olması, olası yuvarlama hatalarının en az olması sağlanmış olur. Determinant:
İndirgeme sonrası oluşan yeni denklem sistemi verilen denklem sistemi ile eşdeğerdir. Bu nedenle katsayılar matrisi A nın determinantı indirgenmiş sistemin determinantına eşittir. Satırlara yer değiştirmek determinantın değerini değiştirmez fakat işaretini değiştirir. Pivot arama nedeniyle indirgeme sırasında p defa satır değiştirilmiş ise determinant da p defa işaret değiştireceğinden (5.5)
w
w
w .e
(1) ( 2) ( n −1) det A = (−1) p ⋅ a11 ⋅ a22 ⋅ a33 ⋅ .. ⋅ ann
olur.
İndirgeme tamamlanabilmiş, n-1 adım sonra denklem sisteminin katsayılar matrisi üst üçgen olan eşdeğer denklem sistemine dönüştürülebilmiş ise determinant (5.5) den hesaplanır ve det A ≠0 dır. Ancak, indirgeme tamamlanamamış ise; örneğin k. Adımda pivot eleman bulunamamış ise, indirgeme işlemine devam edilemez, det A=0 dır. det A ≠0 ise: A matrisi tekil değildir, düzenlidir(regülerdir) denir. Çözüm vardır ve tektir.
det A=0 ise: A matrisi tekildir(singülerdir), düzensizdir denir. Çözüm yoktur veya sonsuz çözüm vardır. Denklemler uyumlu ise sonsuz çözüm vardır, uyumsuz ise çözüm yoktur. Rank: İndirgeme tamamlanabilmiş ise rank A=n dir. A nın satır ve kolonları düzenlidir. k.adımda sıfırdan farklı pivot eleman bulunamamış ise, A nın rankı r=k-1 dir. A nın r satırı doğrusal bağımsızdır geriye kalan d=n-r satır veya kolonları doğrusal bağımlıdır; d ye rank artığı denir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
55
5. BASİT GAUSS1 İNDİRGEME METODU
56
Örnek:
2 4 x1 16 6 10 x 2 26 = , 9 3 x3 − 19 1 − 18 x 4 − 34
x =?
m
6 −2 12 − 8 3 − 13 − 6 4
ri. co
Çözüm için her adımda pivot arama yapılacak, gerekirse satırlar değiştirilecektir. El hesabında ondalık işaretinden sonra 6 hane yürütülecektir. 1. Adım: 1. diyagonal ve altındaki mutlak değerce en büyük sayı 2. satırda |12| dir. 1. ve 2. satırlar değiştirilecek ve indirgeme yapılacaktır.
Pivot eleman
l21=6/12=0.5 l31=3/12=0.25 l41=-6/12=-0.5
1. ve 2.satır değiştirildikten sonra.
tla
6 10 x1 26 2 4 x 2 16 = 9 3 x3 − 19 1 − 18 x 4 − 34
sn o
12 − 8 6 −2 3 − 13 − 6 4
−8 6 10 x1 26 12 0 .5 − 1 − 1 x 2 3 2 = 0.25 − 11 7.5 0.5 x 3 − 25.5 4 − 13 x 4 − 21 − 0 .5 0
l21= 0.5 sayısı 1.satır ile çarpıldı, 2.satırdan çıkartıldı. l31= 0.25 sayısı 1.satır ile çarpıldı, 3.satırdan çıkartıldı.
l41= -0.5 sayısı 1.satır ile çarpıldı, 4.satırdan çıkartıldı.
em de r
1. diyagonal altındaki elemanlar pivot elemana bölündü
2. Adım: 2. diyagonal ve altındaki mutlak değerce en büyük sayı 3.satırda|-11|dir. 2. ve 3. satırlar değiştirilecek ve indirgeme yapılacaktır.
w
w
w .e
−8 6 10 x1 26 12 0.25 − 11 7.5 0.5 x − 25.5 2 = 0 .5 2 − 1 − 1 x3 3 4 − 13 x 4 − 21 − 0 .5 0
l32=2/(-11)= -0.181818… l42=0/(-11)=0
2. ve 3.satır değiştirildikten sonra.
Pivot eleman
−8 6 10 26 12 x1 0.25 − 11 7.5 0 .5 x 2 = − 25.5 0.5 − 0.181818 0.363635 − 0.909091 x 3 − 1.636359 0 4 − 13 x 4 − 21 − 0.5
l32= -0.181818 sayısı 2.satır ile çarpıldı, 3.satırdan çıkartıldı. l42= 0 olduğundan işlem gerekmez.
2. diyagonal altındaki elemanlar pivot elemana bölündü
3. Adım: 3. diyagonal ve altındaki mutlak değerce en büyük sayı 4. satırda |4| tür. 3. ve 4. satırlar değiştirilecek ve indirgeme yapılacaktır.
6 10 26 −8 12 x1 0.25 7.5 0 .5 − 11 x 2 = − 25.5 − 0.5 0 4 − 13 x 3 − 21 0.5 − 0.181818 0.363635 − 0.909091 x 4 − 1.636359
3. ve 4.satır değiştirildikten sonra.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
56
5. BASİT GAUSS1 İNDİRGEME METODU
57
Pivot eleman
l43= 0.090909 sayısı 3.satır ile çarpıldı, 4. satırdan çıkarıldı.
Aşağıdan yukarı doğru hesap:
ri. co
3. diyagonal altındaki eleman pivot elemana bölündü
x1 = (26 − (−8) ⋅1.000034 − 6 ⋅ (−1.999951) − 10 ⋅1.000015) / 12 = 2.999986 x 3 = (−21 − (−13) ⋅1.000015) / 4 = −1.999951 x 4 = 0.272730 / 0.272726 = 1.000015 Gerçek çözüm: x={3 1 -2 1} dir.
3 2.999986 0.000014 1 1.000034 − 0.000034 − = − 2 − 1.999951 − 0.000049 1 1.000015 − 0.000015
sn o
Hata vektörü:
2.999986 1.000034 x= − 1.999951 1.000015
tla
x 2 = (−7.5 ⋅ (−1.999951) − 0.5 ⋅1.000015) /(−11) = 1.000034
m
l43=0.363635/4= 0.090909
−8 6 10 x1 26 12 0.25 − 11 7 .5 0.5 x 2 − 25.5 = − 0.5 − 13 x3 − 21 0 4 0.5 − 0.181818 0.090909 0.272726 x 4 0.272730
em de r
Görüldüğü gibi, pivot arama yapılmasına, 6 ondalık hane yürütülmesine rağmen, az da olsa hata vardır. Bilgisayarda ondalık sayı hesabında genelde 15-16 hane kullanılır. Denklem sistemi 15-16 hane kullanarak bilgisayarda çözülürse hata çok azalacak, fakat belki gene de tam sıfır olmayacaktır. Bu örneğin gerçek çözümünü bildiğimiz için hata vektörünü de hesaplayabildik. Uygulamada ise gerçek çözüm bilinmez(bilinseydi hesaplamaya gerek kalmazdı). Gerçek çözüm bilinmediğine göre aşağıdaki sorular gündeme gelmektedir: Hesaplanan çözüm doğru mudur? Hata nasıl ölçülecektir? Hata ne kadardır? Hata kaynağı nedir?
w .e
• • • •
w
w
Bu soruların cevabı verilemeyen çözüm doğru varsayılamaz. İzleyen sayfalarda bu sorular irdelenecektir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
57
5. BASİT GAUSS1 İNDİRGEME METODU
58
Nümerik hesaplarda hata kaynakları, hatanın ölçüsü Fiziksel bir problemin sayısal olarak çözümünde aşağıdaki nedenlerle az ya da çok hatalar oluşur. 1. Modelleme hatası: Fiziksel problemin çözülebilmesi için oluşturulan matematik model gerçek problemi tam olarak yansıtamıyordur. Varsayılan geometri ve sınır değerler farklıdır.
m
2. Çözüm yönteminden doğan hatalar: Nümerik çözüm için seçilen metot fiziksel problem veya onun modeline uygun değildir.
ri. co
3. Program veya programlama hataları: Çözümde kullanılan program kod hataları içeriyordur veya problemin çözümüne uygun değildir. 4. Bilgisayar hataları: Bilgisayarda sayılar yuvarlatılarak depolanır, sonsuz terimli serilerden hesaplanan değerler için sonlu terim kullanılır. Nadiren de olsa, donanım hatalı olabilir. Voltajda ani değişimler farkında olunamayan hatalı sonuçlar doğurabilir. 5. İnsani hatalar: Programı kullanan kişi programı yeterince tanımıyordur, gerekli ön ayarları yapmamış veya hatalı yapmıştır. Verileri hatalı girmiştir veya yuvarlatarak vermiştir. Sonuçları yanlış yorumlamıştır. Basit bir fiziksel problem örneği ile yukarıda sayılan hataların bazılarına açıklık getirmeğe çalışalım.
tla
Fiziksel problem: Dünya yüzey alanının hesabı
Matematik model: Fiziksel problemin matematik modeli öncelikle a) Gerçeğe en yakın olmalı b) basit olmalı c) Hesaplanabilir olmalı
em de r
sn o
Dünyanın ideal bir geometrisi yoktur. Yuvarlaktır deriz, küre olduğunu kastederiz. Uzaydan çekilmiş fotoğrafa baktığımızda küre gibi görünmektedir. Fakat biliyoruz ki; yüksek dağlar ve derin çukurlar vardır, kutuplarda basık, ekvatorda şişik bir geometriye sahiptir(geoid) .
Fiziksel problem: pürüzlü yüzey, düzgün olmayan geometri
Daha gerçek model: Geoid
Küre model: uzaydan görünüş
Basitliği nedeniyle, dünyayı küre olarak modelleyelim: Kürenin yüzey alanı: A=4 π r2
r yarıçapını ve π sayısını ne alalım? Ekvatorda r=6378.1 km, kutuplarda r=6356.8 km dir. Yarı çapı ortalama değer alarak modelleyelim, r=(6378.1+6346.8)/2=6367.5 km alalım. π=3.14 alalım. .
.
w
w
w .e
A=4 3.14 6367.52=509245907 km2 olur.
Bulduğumuz bu değerin tam doğru olmadığı, yaklaşık olduğu açıktır. Doğru değerin hesaplanamayacağı da açıktır. Hata kaynağı: a) Küre varsayımı doğru değildir. b) Ekvator ve kutupta ölçülmüş yarıçaplar ölçüm hatası içerir. c) Yarıçapı ortalama değer alarak bir hata daha oluşturduk. d) π=3.14 değerini yuvarlatarak hata oluşturduk. e) Hesaplanan A değerinin yuvarladık, virgülden sonraki hanelerini attık. Hata ne kadardır? Gerçek değeri bilemediğimize göre, hatanın ne kadar olduğunu da bilememekteyiz. Daha gerçekçi modellerle (geoid) hesaplanmış değer kaynaklarda A=510072000 km2 olarak verilmektedir. Bu değer de matematik anlamda doğru olamaz, çünkü gene bir takım varsayımlar yapılarak hesaplanmıştır. Ancak, burada kullandığımız küre modelinden daha doğrudur. A=510072000 km2 değerini doğru kabul ederek hata analizi yapabiliriz. Önce hata ölçüsü tanımı yapalım. Tanım: bir x fiziksel büyüklüğünün hesaplanmış değeri
x hesap
ve gerçek değeri
x gerçek olsun.
Bu iki değer
arasındakı farka hata veya mutlak hata denir. Hata(mutlak):
Δx = x hesap − x gerçek
Mutlak hatanın gerçek değere oranına hata yüzdesi veya bağıl hata denir. Hata yüzdesi(bağıl hata):
ε=
Δx x gerçek
=
x hesap − x gerçek x gerçek
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
58
5. BASİT GAUSS1 İNDİRGEME METODU
Hata yüzdesi (bağıl hata) gerçek değerin birim hatası olarak da yorumlanabilir:
59
ε=
Δx → Δx = ε x gerçek x gerçek
Hata(mutlak):
Δ A = Ahesap − Agerçek = 509245907− 510072000= -826093km2
Hata yüzdesi(bağıl hata):
ε=
A − Agerçek ΔA − 826093 = hesap = ≈ −0.0002 Agerçek Agerçek 510072000
m
Şimdi dünyanın yüzey alanı ile ilgili hesabımıza dönelim, hata analizi yapalım: Agerçek=510072000 km2 ve Ahesap=509245907 km2 alarak:
ri. co
Buradaki eksi işareti hesaplanan alanın gerçek alandan 826093 km2 daha küçük kaldığını gösterir, Hata %0.02 kadardır. 826093 km2 değeri hatanın çok büyük olduğunu düşündürebilir. Fakat hata yüzdesi sadece %0.02 (on binde 2) olduğundan, küçük kabul edilmelidir.
Bu basit örnekte de görüldüğü gibi, hata yüzdesi(bağıl hata) daha iyi fikir vermektedir. Nümerik hesaplarda hata yerine hata yüzdesi(bağıl hata) ile çalışmak daha uygun olacaktır. Gerçek değerin bilinmediği fiziksel problemlerde hata kontrolü
tla
Nümerik analiz problemlerinde genelde gerçek çözüm bilinmez. Fakat hesaplanan değerin veya değerlerin sağlaması gereken bir koşul veya koşullar vardır. Hesaplanan değerin bu koşulları sağlayıp sağlamadığına bakılarak hesaplanan değerin veya değerlerin doğruluğu veya hatası kontrol edilir. Basit bir örnek verelim:
sn o
3x2 - 1=0 denklemini sağlayan x nedir? x1= ±0.5774 olarak hesapladığımızı varsayarak hatayı hesaplayalım. Bu değer 3x2 - 1=0 denklemini sağlamak zorundadır: 3(0.5774)2 - 1=0.000172≠0 olduğundan, sağlamıyor. Hata 0.000172 dir. Yuvarlama hatasının nedeni nedir, nasıl azaltılabilir? Hesap makineleri ve bilgisayarlar bir sayıyı depolamak için belli sayıda hane kullanırlar, 8, 10 veya 16 hane gibi. Makineye verilen sayının hane sayısı makinenin depolayabileceği hane sayısından daha fazla ise, sayının sonundaki bazı rakamları kaybolur. Örnekleyelim: kullandığınız el hesap makinesine 1234567890 sayısını yazın ve eşit tuşuna basın. Makineniz 10 hane gösterebiliyorsa ekranda 1234567890 göreceksiniz. Şimdi 123456789012345 yazın ve eşit tuşuna basın. Muhtemelen 1.23456789.1014 göreceksiniz. Makineye verdiğiniz sayı bu değildi, son haneleri kayboldu!
em de r
Verdiğiniz: 123456789012345 Makinenin depoladığı: 1.23456789.1014 =123456789000000 Hata: 123456789012345 – 123456789000000=12345 Hata yüzdesi: 12345/123456789012345=10-10
0.123456789012345 sayısını yazıp eşit tuşuna basın, sonuç: 0.123456789 olacaktır. Son haneler gene kayboldu! 1/3 yazın eşit tuşuna basın, sonuç: 0.333333333 olacaktır. Halbuki 1/3=0.33333333333333…… tür. Ondalık işaretinden sonra sonsuz sayıda 3 rakamı vardır. Makinenizin sonsuz hanesi depolayabildiğinden daha fazla haneyi kesmektedir.
yoktur,
π sayısını makineniz muhtemelen π=3.141592654 olarak gösteriyordur, son hane yuvarlatılmıştır. 30 haneli değeri π=3.14159265358979323846264338328 dir, gerçek değeri bugüne kadar hesaplanamamıştır! Yukarıdaki örnekleri, varsa, cep telefonunuzun veya saatinizin hesap makinesi ile de deneyiniz!
w .e
Bilgisayara 10 tabanlı sayılar veririz. Bilgisayar ise iki tabanlı sayılarla (sıfır ve bir ile) çalışır. Verilen ondalık sayıları iki tabanlı (binary) sayıya çevirir ve depolar. Örnek: 2010 sayısı bilgisayarda 11111011010 olarak depolanır. Çevirme nedeniyle hane (bit ) kaybı olur. Buna yönelik çarpıcı bir örnek verelim: 0.1 ondalık sayısının 10000 defa toplamı Toplam =
10000
∑ 0.1 = 0.1 ⋅ 10000 = 1000 i =1
w
w
olması gerektiği açıktır. Kullandığınız programlama dili ile bu toplamı bilgisayara yaptırarak şaşırtıcı sonucu görünüz! Qbasic kodunu verelim:
Qbasic sonucu Bilgisayarın verdiği sonuç 999.9029 hatalıdır! Bilsayar 0.1 sayısını hatalı depolamıştır. Demek ki bilgisayar sayıları hatasız depolayamıyor, yuvarlıyor ve kesiyor. Yuvarlama hatalarını tamamen önlemek mümkün değildir. Milyarlarca sayı dört işleme tabi tutulduğunda bu hataların giderek büyüyebileceği, belki de hesaplanmak istenen sonucun tamamen yanlış olmasına neden olacağı açıktır. Yuvarlanmış bir sayı hataya neden olurken yuvarlanmış bir sayı ile hesaplanan bir diğer sayı yuvarlandığında hata büyüyebilir de azalabilir de. Hataları elden geldiğince azaltmak için: 1.Makine veya bilgisayarda mümkün olduğunca çok haneli hesap yapılmalı: El hesap makinelerinde hane sayısını değiştirmek mümkün değildir, fakat satın alırken çok haneli olanı seçilebilir. Bilgisayarda hane sayısını, kullanılan yazılıma bağlı olarak, ayarlama imkânı vardır: Tek hassasiyet(4 Byte SINGLE precision) yerine çift hassasiyet(8 Byte DOUBLE precision) hatta dörtlü hassasiyet (16 Byte QUAD precision, EXTENDED) kullanarak. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
59
5. BASİT GAUSS1 İNDİRGEME METODU
60
2.Büyük sayılar ile diğer büyük sayıların çarpımı önlenmelidir: Büyük denklem sistemlerinin çözümünde uygun pivot eleman seçilerek bunu gerçekleştirmek mümkündür.
•
a, b, c sayılarından d=ab/c hesaplanacak varsayalım. Sayıların büyük veya küçük olduğuna bağlı olarak hesabın aşağıdaki şekilde yapılması sayı taşma ve yuvarlama riskini azaltır: |a| ve |b| sayılarından biri büyük ve diğerleri küçükse d=(ab)/c |b| ve |c| sayılarının her ikisi de büyük veya her ikisi de küçükse d=a(b/c) |a| ve |c| sayılarının her ikisi de büyük veya her ikisi de küçükse d=(a/c)b
m
•
Bilgisayar önce parantez içindeki ifadeyi hesapladığından, parantez içi 1 sayısına yakın çıkacaktır.
ex gibi ifadeler yuvarlama ve sayı taşması açısından risklidir, uygun hesap sırası seçilmelidir, örnek: a=ex/et yerine a=e(x-t) , a=yn/enx yerine a=(y/ex)n kullanılmalıdır.
•
ri. co
•
Yüksek dereceden polinomlar sayı taşması ve yuvarlama hataları açısından risklidir, örnek:
y=a1x5+ a2x4+ a3x3+ a4x2+ a5x+ a6 yerine y=((((a1x+a2)x+a3)x+a4)x+a5)x+a6 daha uygundur.
Vektör ve matris normları, kondisyon sayısı kavramı
Norm bir sayıdır ve
işareti ile gösterilir. Mesala x vektörünün normu
Vektör normları:
x2
x ile gösterilir. Uygulamada sıkça
sn o
kullanılan vektör ve matris normları aşağıda verilmiştir.
x = [x1
tla
Denklem sistemlerinin çözümünde hata analizi için norm ve kondisyon sayıları kullanılır. Norm ve kondisyon sayısı çözümün ne denli sağlıklı olduğu bilgisini verebilir.
... x n ] vektörünün normları:
x 1 = x1 + x2 + ... + xn (l1 normu denir)
em de r
T x 2 = x x = x12 + x22 + ... + xn2 (l2 normu veya Öklid normu veya x in uzunluğu denir)
x ∞ = max xi
(l∞ normu veya maximum norm denir)
[
Örnek: x gerçek = 2
− 3 0 1 − 4] vektörünün hesaplanmış vektörü
[
]
x hesap = 2.0001 − 2.9998 10−6 0.9999 − 4.0002 olsun. Normlar:
1
x gerçek
2
= 2 + 3 + 0 + 1 + 4 = 10
= 4 + 9 + 0 + 1 + 16 = 5.477226
w
w
w .e
x gerçek
x gerçek
∞
= 2.0001 + 2.9998 + 10 − 6 + 0.9999 + 4.0002 = 10.000001
x hesap
1
x hesap
2
x hesap
= max( 2,3,0,1,4) = 4
∞
= 2.000012 + 2.9998 2 + 0 2 + (10 −6 ) 2 + 0.9999 2 + 4.0002 2 = 5.477289 = max(2.00001,2.9998,0,0.9999,4.0002) = 4.0002
Normların oranları:
x gerçek
1
x hesap
1
x gerçek
2
x hesap
2
x gerçek x hesap
∞ ∞
=
10 = 0.9999999 10.000001
=
5.477226 = 0.9999885 5.477289
=
4 = 0.99995000 4.0002
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
60
5. BASİT GAUSS1 İNDİRGEME METODU
61
x hesap tam doğru olsaydı bu normların hepsi de 1 olurdu. Demek ki herhangi bir normun oranı 1 e ne denli
Dır.
yakın ise x hesap o denli doğrudur. Örneğimizde oranlar 1 e çok yakın olduğundan x hesap doğru kabul edilebilir. Burada verilenler dışında başka vektör normları da vardır. Uygulamada l2 (Öklid) normu veya basitliği nedeniyle l∞ (maksimum) normu genelde tercih edilir.
Hata vektörü:
[
]
[
h = 0. 0001 0.0002 10
−6
]
− 0.0001 − 0.0002
Hata vektörünün uzunluğu (Öklid normu)≈0 olmalıdır:
hh = 0.00012 + 0.00022 + (10−6 )2 + 0.00012 + 0.00022 = 10−8 ≈ 0 T
Olduğundan
x hesap doğru varsayılabilir.
ri. co
h = x hesap − x gerçek = 2. 0001 − 2.9998 10−6 0.9999 − 4.0002 − [2 − 3 0 1 − 4]
m
Yukarıdaki x hesap vektörünün doğruluğu hata vektörü kullanılarak da yapılır:
Hemen şunu da belirtelim: Hata vektörünün terimlerinin veya
Matris normları:
A max = max aij
sn o
a11 a12 ... a1n a a ... a2 n matrisinin normları: A = 21 22 . . . . an1 an 2 ... ann
tla
normunun küçük olması çözümün doğru olduğunun önemli bir bir göstergesidir, fakat yeterli bir koşul değildir. İzleyen örneklerde bu durum açıklık kazanacaktır.
(matrisin mutlak değerce en büyük elemanı) (
Aj
j. Kolonun l1 normu)
A ∞ = max Ai
(
Ai
i. Satırın l1 normu)
em de r
A 1 = max A j
Matris kondisyon sayısı:
w
w
w .e
a11 a12 ... a1n a a ... a2 n matrisinin kondisyon sayısı k(A): A = 21 22 . . . . an1 an 2 ... ann
k ( A) = A
A
−1
ile tanımlanır.
k(A)≈1 ise A iyi kondisyonludur denir, A-1 hatasız hesaplanmış anlamına gelir. Bir diğer kondisyon sayısı Hadamard1 kondisyon sayısıdır:
kh ( A) =
det A
V V = a1a2 ...an ai = ai21 + ai22 + ... + ain2
(i. satırın Öklid normu)
0≤kh(A)≤1 arasındadır. kh(A)=0 ise det A=0 matris tekildir. kh(A) değeri 1 e ne denli yakın ise matris o denli iyi kondisyonlu, 0 ra ne denli yakınsa o denli kötü kondisyonludur. kh(A)<0.01 ise kötü kondisyonlu, kh(A)>0.1 iyi kondisyonlu varsayılabilir. 0.01≤ kh(A)≤0.1 aralığında ise ne kötü ne de iyi kondisyonludur, durum şüphelidir. Ters matris hesabı çok işlem gerektirdiğinden ve denklem sistemi çözümünde det A ara değer olarak zaten hesaplanabildiğinden, Hadamard kondisyon sayısını kullanmak daha pratiktir.
------------------------------------1
Jacques Salomon Hadamard (1865-1963), Fransız
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
61
5. BASİT GAUSS1 İNDİRGEME METODU
62
Örnek:
10 2 Matrisinin norm ve kondisyon sayılarını belirleyelim A= − 1 9
0.097826 − 0.021739 = 0.010870 0.108696
−1
A
−1
max
= 0.108696, A−1 = max(0.108696,0.130435) = 0.130435, A 1
k ( A) max = A k ( A)1 = A k ( A)∞ = A
1
−1
A
max
A
−1 1
A
= 10 ⋅ 0.108696 = 1.09
= 11 ⋅ 0.130435 = 1.43
−1
∞
max
∞
= 12 ⋅ 0.119565 = 1.43
ri. co
−1
∞
= max(0.119565,0.119540) = 0.119565
tla
A
m
A max = 10 , A 1 = max(11, 11) = 11, A ∞ = max(12, 10) = 12
HADAMARD kondisyon sayısı:
sn o
det A = 92
a1 = 102 + 22 = 10.20, a2 = 12 + 92 = 9.06, V = 10.2 ⋅ 9.06 = 92.41 kh ( A) =
92 = 0.9956 92.41
em de r
Yorumlanırsa, kondisyon sayıları 1 e yakın olduğundan A matrisi iyi kondisyonludur. Örnek olması açısından burada tüm norm ve kondisyon sayıları hesaplanmıştır. Uygulamada sadece bir norm ve kondisyon sayısı ile yetinilir. Hasta matris(ill-conditioned matrix) ve hasta denklem sistemi
Kötü kondisyonlu matrise hasta matris(İng.: ill-conditioned) denir. Bu tür matrislerin determinantları çok küçüktür, matris tekile yakındır. Matrisin elemanlarındaki çok küçük bir değişiklik(yuvarlama hatası nedeniyle) matrisin tersinin tamamen yanlış hesaplanmasına neden olur. Dolayısıyla Hasta matris katsayılı denklem sisteminin çözümü de hatalı olacaktır.
Örnek:
x =?
w
w
w .e
1.2969 0.8648 x1 0.8642 Ax = b → = , 0.2161 0.1441 x 2 0.1440
Önce A nın HADAMARD kondisyon sayısını bulalım: k ( A) = h
det A V
Det A=10-8
Determinant çok küçük! A nın hasta matris olduğunun ilk işaretini almış olduk.
a1 = 1.29692 + 0.86482 = 1.56, a2 = 0.21612 + 0.14412 = 0.26, V = a1a2 = 1.56 ⋅ 0.26 = 0.62, kh ( A) =
10−8 = 1.6 ⋅ 10−8 0.62
Kh(A)=1.6.10-8 ≈ 0 olduğundan A matrisi kötü kondisyonludur, hasta bir matristir. A x=b denklem sistemi de hasta bir denklem sistemidir, çözümü yaparsak hatalı sonuç alacağımıza işaret etmektedir. Gauss ile çözerek sonucu görelim: Basit Gauss indirgemesi:
0.8648 x1 0.8642 1.2969 0.166628 1.06 ⋅ 10 − 7 x = 0.82 ⋅ 10 − 7 2
x1 = (0.8642 − 0.8648 ⋅ 0.773585) / 1.2969 = 0.150516 x2 = 1.06 ⋅ 10− 7 / 0.82 ⋅10− 7 = 0.773585
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
62
5. BASİT GAUSS1 İNDİRGEME METODU
63
0.150516 x= 0.773585 Hata vektörü:
m
0.8642 1.2969 0.8648 0.150516 − 5.08 ⋅ 10−7 h = b − Ax = − = −7 0.1440 0.2161 0.1441 0.773585 − 1.06 ⋅ 10
ri. co
Hata vektörünün Öklid normu :
h 2 = h h = (5.08 ⋅ 10−7 ) 2 + (1.06 ⋅ 10−7 ) 2 = 5.2 ⋅ 10−7 T
2 x= − 2 dir, yerine koyarak hata var mı? Görelim:
sıfır hata ile sağlanıyor.
sn o
0.8642 1.2969 0.8648 2 0 h = b − Ax = − = 0.1440 0.2161 0.1441 − 2 0
tla
Yorum: Hata vektörünün terimleri küçük görünüyor. Normu da öyle. O halde x vektörü doğrudur diyebilir miyiz?. HAYIR! x vektörünün tek bir rakamı dahi doğru değil! Gerçek çözüm:
O halde hesapladığımız x=[0.150516 0.773585]T çözümü, hata vektörü küçük olmasına rağmen, tamamen yanlıştır. Bunun nedeni: A matrisinin, dolayısıyla denklem sisteminin hasta olmasıdır.
em de r
ÖZET: A x=b doğrusal denklem sisteminde • • • •
A kötü kondisyonlu (hasta) ise A-1 (A nin tersi), büyük bir olasılıkla, hatalıdır. Doğrusal denklem sistemi de hastadır x çözümü, büyük bir olasılıkla, hatalıdır. |det A| <<1 hasta matrise işaret eder.
w
w
w .e
Hasta matris ile yapılan nümerik hesapların sonucuna güvenilmez. Öncelikle alınacak önlem, matrisin neden hasta olduğunu araştırmaktır. Modelleme hataları, uygun olmayan nümerik yöntem, uygun olmayan birim kullanılması ve veri hataları hasta matris oluşmasının genel nedenleri arasında sayılabilir. Matrisin kurulmasında bu hatalar yapılmamışsa, bilgisayar çözümünde mutlaka çift hassasiyet (8 Byte-DOUBLE PRECESI0N) hatta, programlama dili izin veriyorsa, dörtlü hassasiyet (16 Byte-QUAD precision, EXTENDED) kullanılmalıdır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
63
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
tla
Ders notları 2014
sn o
Ahmet TOPÇU
m=n
em de r
LU=A
Üst üçgen matris
l11 l 21 l 22 l 31 l32 . . l n1 l n 2
u11 ... ... l nn
l33 .
l n3
u13 ... u1n a11 u 23 ... u 2 n a 21 u 33 ... u 3n = a31 ... . . u nn a n1
a12 a 22
a13 a 23
a 32
a 33
.
.
an2
a n3
... a1n ... a 2 n ... a 3n ... . ... a nn Kare matris
Alt üçgen matris
w .e
w
w
u12 u 22
6
DENKLEM SİSTEMİ ÇÖZÜMÜ, ÇARPANLARA AYIRMA YÖNTEMLERİ • DOOLITTLE • CROUT • CHOLESKY Mayric Hascall Doolittle(1830-1913)
Prescott Duran Crout (1907-1984)
André-Louis Cholesky (1875 – 1918)
65
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
m
5. bölümde verilen indirgeme yöntemi GAUSS’un orijinal çözümüdür, bazen basit GAUSS yöntemi de denir. Basit GAUSS yöntemi hem katsayılar matrisini hem de karşı taraf vektörünü aynı anda değiştirerek katsayılar matrisi üst üçgen olan eşdeğer bir denklem sistemine dönüştürür. Uygulamada ise, çoğu kez, karşı taraf vektörünün indirgeme sırasında değiştirilmesi uygun olmaz. Katsayılar matrisi belli iken karşı taraf vektörü henüz bilinmiyor veya zaman zaman değişiyor olabilir.
u11 ... ... l nn
l 22 l 32
l 33
.
.
l n2
l n3
u13 u 23 u 33
... u1n a11 ... u 2 n a 21 ... u 3 n = a 31 ... . . u nn a n1
U üst üçgen
a12
a13
a 22
a 23
a 32
a 33
... a1n ... a 2 n ... a 3n ... . ... a nn
(6.1)
.
.
an2
a n3
A katsayılar matrisi
sn o
L alt üçgen
u12 u 22
tla
LU = A →
l11 l 21 l 31 . l n1
ri. co
Çarpanlara ayırma yöntemleri A x=b denklem sisteminin A katsayılar matrisini A=L U sağlanacak şekilde, bir L (Lower) alt üçgen ve bir U (Upper) üst üçgen matrisin çarpımına dönüştürürler. Çarpanlara ayırma işlemi sırasında karşı taraf vektörü b nin bilinmesine gerek yoktur. Bu yöntemlere göre A belli ise L ve U üçgen matrisleri A nın elemanlarından
eşitliği sağlanacak şekilde hesaplanırlar. L ve U belirlendikten sonra b de belli olunca çözüm için A x =b yerine x bilinmeyenler vektörü b karşı taraf vektörü l 22 l 32
l 33
... ... l nn
u11
u12
u13
u 22
u 23 u 33
em de r
LU x= b →
l11 l 21 l 31 . l n1
.
.
ln2
l n3
L alt üçgen
... u1n ... u 2 n ... u 3n ... . u nn
x1 b1 x b 2 2 x 3 = b3 . . x n1 bn1
(6.2)
U üst üçgen
Eşdeğer denklem sistemi kullanılır. Bunun için 6.2 bağıntısında U x = y dönüşümü yapılır:
L U x = b → U x = y, L y = b →
w
w
w .e
y
l11 l 21 l 31 . l n1
l 22 l 32
l 33
.
.
ln2
l n3
u11 ... ... l nn
u12
u13
u 22
u 23 u 33
... u1n x1 b1 ... u 2 n x 2 b2 ... u 3n x 3 = b3 ... . . . u nn x n1 bn1
(6.3)
Ux= y
Bu dönüşüm sonucu katsayılar matrisi üçgen olan aşağıdaki iki denklem sistemi oluşur: L y = b den y hesaplanır, U x = y de yerine konur ve x hesaplanır. l11 l 21 L y = b → l 31 . l n1
l 22 l 32
l 33
.
.
ln2
l n3
... ... l nn
y1 b1 y b 2 2 y 3 = b3 . . y n1 bn1
Yukarıdan aşağı doğru hesap yapılarak
y bulunur
y burada yerine konur
(6.4) u11 u12 u13 u22 u23 Ux = y → u33
... u1n x1 y1 ... u2 n x2 y2 ... u3n x3 = y3 ... . . . unn xn1 yn1
Aşağıdan yukarı doğru hesap yapılarak
x
bulunur
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
65
66
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
m
İlk bakışta bir yerine iki denklem sisteminin çözüleceği, işlem sayısının da katlanacağı sanılabilir. Bu doğru değildir. Çarpanlara ayırma yöntemi ile basit GAUSS yöntemi arasında gerçekte işlem sayısı açısından hiçbir fark yoktur. Tek fark, çarpanlara ayırma sırasında b vektörüne gerek olmamasıdır. Çarpanlara ayırma yöntemleri, basit GAUSS indirgeme yönteminin biraz değişik şeklidir, çok az fark ile birbirlerine çok benzerler. Uygulamada tercihan kullanılan DOOLITTLE, CROUT ve CHOLESKY yöntemleri burada ele alınacak, verilmiş bir A matrisinin L ve U üçgen çarpanlarına nasıl ayrılacağı açıklanacaktır. •
DOOLITTLE1 LU metodu
L
1 . ln 3
u11 u12 u22 ... U ... 1
u13 ... u1n u23 ... u2 n u33 ... u3n = ... . unn
a11 a12 a 21 a22 a31 a32 . . an1 an 2
a13 a23 a33 . an 3
sn o
LU = A ⇒
1 l 21 1 l31 l32 . . ln1 ln 2
tla
A verilmiş olsun, det A ≠ 0 olmak ve lii=1 alınmak kaydıyla
ri. co
DOOLITTLE, metodunda L matrisinin bütün diyagonal elemanları lii=1 alınır, satırda pivot eleman aranır, gerekirse, kolonlara yer değiştirilir, uii ≠ 0 olması sağlanır. • CROUT metodunda U matrisinin bütün diyagonal elemanları uii=1 alınır, kolonda pivot eleman aranır, gerekirse, satırlara yer değiştirilir, lii ≠ 0 olması sağlanır. • CHOLESKY metodu sadece simetrik ve pozitif tanımlı matrisler için özel bir yöntemdir, diyagonal elemanlar lii = aii , u ii = a ii alınır ve L=UT dur, pivot arama yapılmaz.
... ... ... ... ...
a1n a2 n a3n . ann
A
bağıntısı sağlanacak şekilde n adımda hem L hem de U nun tüm elemanları belirlenebilir. Matris çarpım kuralından yararlanarak, her adımda önce U nun bir satırı sonra L nin bir kolonu hesaplanır.
em de r
1.Adım:
1 ⋅ u11 = a11 → u11 = a11
1 ⋅ u12 = a12 → u12 = a12 1 ⋅ u13 = a13 → u13 = a13
U nun 1.satırının hesabı: L nin 1. satırı ÇARPI U nun1., 2.,…,n. kolonları=A nın 1.satırıdır
l21 ⋅ u11 = a21 → l 21 = a 21 / u11 l31 ⋅ u11 = a31 → l31 = a31 / u11 ... ln1 ⋅ u11 = a n1 → ln1 = a n1 / u11
... 1 ⋅ u1n = a1n → u1n = a1n
l 21 ⋅ u12 + 1 ⋅ u 22 = a 22 → u 22 = a22 − l 21 ⋅ u12
l31 ⋅ u12 + l32 ⋅ u 22 = a32 → l32 = (a32 − l31 ⋅ u12 ) / u 22
l 21 ⋅ u13 + 1 ⋅ u 23 = a23 → u 23 = a 23 − l21 ⋅ u13
l41 ⋅ u12 + l42 ⋅ u 22 = a42 → l42 = (a 42 − l41 ⋅ u12 ) / u 22
w .e
w
w
L nin 2.kolonunun hesabı: L nin 3.,4.,..,n. satırları ÇARPI U nun 2.kolonu=A nın 2.kolonudur
U nun 2.satırının hesabı: L nin 2.satırı ÇARPI U nun 2., 3.,…, n. kolonları=A nın 2.satırıdır
2.Adım:
L nin 1.kolonunun hesabı: L nin 2., 3.,..,n. satırları ÇARPI U nun 1.kolonu=A nın 1.kolonudur
... l 21 ⋅ u1n + 1 ⋅ u 2 n = a 2n → u 2n = a2 n − l21 ⋅ u1n
3.Adım:
... ln1 ⋅ u12 + ln 2 ⋅ u 22 = a n 2 → ln 2 = (a n 2 − l n1 ⋅ u12 ) / u 22
U nun 3.satırının hesabı: L nin 3.satırı ÇARPI U nun 3.,…, n. kolonları =A nın 3.satırıdır
L nin 3.kolonunun hesabı: L nin 4.,..,n. satırları ÇARPI U nun 3.kolonu=A nın 3.kolonudur
l31 ⋅ u13 + l32 ⋅ u 23 + 1 ⋅ u33 = a33 → u33 = a33 − l31 ⋅ u13 − l32 ⋅ u 23
l41 ⋅ u13 + l42 ⋅ u 23 + l43 ⋅ u33 = a 43 → l43 = (a 43 − l 41 ⋅ u13 − l 42 ⋅ u 23 ) / u33
...
...
l31 ⋅ u1n + l32 ⋅ u 2 n + 1 ⋅ u3n = a3n → u3n = a3n − l31 ⋅ u1n − l32 ⋅ u 2 n
ln1 ⋅ u13 + ln 2 ⋅ u 23 + ln3 ⋅ u33 = an 3 → l n 3 = (a n 3 − l n1 ⋅ u13 − l n 2 ⋅ u 23 ) / u33
… n.Adım: U nun n.satırının hesabı: L nin n.satırı ÇARPI U nun n.kolonu=A nın n.satırıdır
l n1 ⋅ u1n + l n 2 ⋅ u 2 n + l n3 ⋅ u 3n + ... + 1 ⋅ u nn = a nn → u nn = a nn − l n1 ⋅ u1n − l n 2 ⋅ u 2 n − l n 3 ⋅ u n 3 − ...
1
L nin n.kolonunun hesabı:
lnn = 1
Mayric Hascall Doolittle(1830-1913), Amerikalı: 1878 de yayınlandı Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
66
67
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
Genel formüller: 1. adım:
l11 = 1 ,
u11 = a11 , u12 = a12 , ..., u1n = a1n
U nun 1. satırı A nın birinci satırı ile aynı
U nun i. satırı: u ij = a ij −
i −1
∑l
ik u k j
m
i. adım:
j = i,i + 1,..., n
,
L nin i.kolonu: l ii = 1,
l ji = (a ji −
i −1
∑l
jk u ki ) / u ii
ri. co
k =1
, j = i + 1, i + 2, ..., n,
k =1
i. adım şematik hesap: Kolon değiştirme vektörü
tla
U nun 1., 2,…, i-1. adımlarda hesaplanmış satırları
u ii ≠ 0
U nun i. satırının hesabı:
sn o
uij=aij - Σ diyagonalin solundaki sayılar ÇARPI aij nin üstündeki sayılar
em de r
uij yi hesaplamak için: Renkli satır ve kolondaki sayıları birbiri ile çarp, topla, aij den çıkar ve sonucu aij nin olduğu yere yaz.
L nin 1., 2,…, i-1. adımlarda hesaplanmış kolonları
Kolon değiştirme vektörü
U nun 1., 2,…, i. adımlarda hesaplanmış satırları
Pivot adayı
w
w .e
U nun i. satırında pivot ara
Satırda pivot arama: uii ≠ 0 olmalıdır. uii nin mutlak değerce çok küçük olması da istenmez. Gerekirse kolonlara yer değiştirilerek uii nin mutlak değerinin mümkün olan en büyük sayı olması sağlanır. Bunun için; satırda pivot ara, uii, ui,i+1,…, uin elemanlarından mutlak değerce en büyük olanı bul. Bu eleman k. kolonda ise i. kolon ile k. kolonu değiştir. Kolon değiştirme vektörünün aynı nolu kolonlarını da değiştir. Kolon değiştirme sayısının depolandığı değişkenin, adı p olsun, değerini 1 artır: p=p+1.
Kolon değiştirme vektörü
w
U nun 1., 2,…, i. adımlarda hesaplanmış satırları
Pivot
L nin i. kolonunun hesabı: lji=(aji - Σdiyagonalin üstündeki sayılar ÇARPI aji nin solundaki sayılar) BÖLÜ uii
L nin i. adımda hesaplanacak kolonu
lji yi hesaplamak için: Renkli satır ve kolondaki sayıları birbiri ile çarp, topla, aji den çıkar, uii diyagonal elemanına böl ve sonucu aji nin olduğu yere yaz.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
67
68
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
•
L nin diyagonal elemanları, lii=1, depolanmaz.
• L ve U üçgen matrisleri A nın üzerine depolanır. Diyagonalin altındaki elemanlar L ye, diyagonal ve üstündeki elemanlar U ya aittir.
L
tla
U
ri. co
m
Kolon değiştirme vektörü
sn o
• Kolon değiştirme vektörü çarpanlara ayırma işlemi sırasında hangi kolonların yerlerinin değiştiği bilgisini içerir. Ayrıca, her kolon değişikliği determinantın işaretini değiştireceğinden, kaç defa kolon değiştirildiği de p gibi bir değişkende depolanır. • u11, u22, …, unn elemanlardır.
elemanları çarpanlara ayırma işlemi sırasında seçilmiş pivot
• Det A=det L.det U dur. det L=1 ve det U= (-1)p.u11.u22. … . unn olduğundan Det A= (-1)p.u11.u22. … . unn dir.
em de r
• Çarpanlara ayırma işleminin herhangi bir adımında, örneğin i. adımında, pivot eleman bulunamazsa, yani uii=0 ise, Det A=0 dır. A tekildir, rankı r=i-1 dir, r satır ve kolonu doğrusal bağımsız geriye kalan d=n-r satır ve kolonu doğrusal bağımlıdır.
Örnek:
−2
2
−8 − 13
6 9
4
1
w
w
w .e
6 12 A= 3 −6
4 10 , 3 − 18
L=?,
U=?
Matrisi DOOLITTLE metodu ile L ve U üçgen çarpanlarına ayrılacaktır. Çarpanlara ayırma işlemine başlamadan önce kolon değiştirme vektörü 1, 2, 3, 4 ile doldurulur ve kolon değiştirme sayısının saklanacağı p değişkeni sıfırlanır.
[
]
1
2
3
4
6 12 A= 3 −6
−2 −8 − 13 4
2 6 9 1
4 10 3 − 18
Kolon değiştirme vektörü başlangıç değerleri
p=0 (kolon değiştirme sayısı başlangıç değeri)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
68
69
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
1.Adım:
Pivot
]
Kolon değişikliği yapılmadı, p=0
1
2
3
4
6 2 0 .5 −1
−2 −8
2 6
− 13 4
9 1
4 10 3 − 18
U nun 1. satırı A nın 1. satırı ile aynı Satırdaki mutlak değerce en büyük sayı |6| zaten diyagonalde olduğundan kolon değiştirmeğe gerek yoktur.
m
[
ri. co
L nin 1. kolonu: diyagonal altındaki sayılar pivot elemana bölündü
2.Adım:
2
3
6 2
−2 −4
2 2
0 .5 −1
3 − 0.5
9 1
4] 4 2 3 − 18
Kolon değişikliği yapılmadı, p=0
tla
Pivot
1
U nun 2.satırı: Diyagonalin solundaki sayı buradaki sayının üstündeki sayı ile çarpıldı, buradaki sayıdan çıkartıldı. Satırdaki mutlak değerce en büyük sayı |-4| zaten diyagonalde olduğundan kolon değiştirmeğe gerek yoktur.
sn o
[
L nin 2.kolonu: Diyagonalin üstündeki sayı buradaki sayının solundaki sayı ile çarpıldı, buradaki sayıdan çıkartıldı, sonuç pivot elemana bölündü
3.Adım:
1
2
3
6 2
−2 −4
2 2
0 .5 −1
3 − 0.5
2 1
4]
Kolonlar değiştirilecek
em de r
[
Pivot
4 2 −5 − 18
U nun 3.satırı: Diyagonalin solundaki sayılar buradaki sayının üstündeki sayılar ile çarpıldı, buradaki sayıdan çıkartıldı. Satırdaki mutlak değerce en büyük sayı |-5| pivot adayıdır. 3. kolon ile 4.kolona yer değiştirilecek.
L nin 3.kolonu: henüz hesaplanmadı
[
6 2
Pivot
0 .5 −1
2
4
−2 −4
4 2
3 − 0 .5
−5 − 18
3]
2 2 2 1
3. kolon ile 4. kolona yer değiştirildi, p=1
Kolon değişikliği sonrası U nun3.satırı
[
1
2
4
6 2
−2 −4
4 2
0.5 −1
3 − 0 .5
−5 2.6
3] 2 2 2 1
Pivot
L nin 3.kolonu: Diyagonalin üstündeki sayılar buradaki sayının solundaki sayılar ile çarpıldı, buradaki sayıdan çıkartıldı, sonuç pivot elemana bölündü
4.Adım:
w
w
w .e
1
[ L
1
2
4
6 2
−2 −4
4 2
0 .5 −1
3 − 0 .5
−5 2 .6
3] 2 2 2 − 1 .2
U
U nun 4.satırı: Diyagonalin solundaki sayılar buradaki sayının üstündeki sayılar ile çarpıldı, buradaki sayıdan çıkartıldı.
Pivot
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
69
70
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
Sonuç:
[
Kolon değiştirme vektörü:
1
2
3]
4
Kolon değiştirme sayısı: p=1
, 1
1 2 0.5
1 3
1
−1
− 0.5
2.6
6 U =
1. .
.
−2
4
−4
2 −5
2 2 2 − 1.2
.
ri. co
L=
m
L ve U matrisleri:
tla
Determinant: Det A=(-1) 6 (-4) (-5) (-1.2)= 144 Rank A: r=4 Doğrusal bağımsız kolon ve satır sayısı: 4 Doğrusal bağımlı kolon ve satır sayısı(Rank artığı): d=n-r=4-4=0
DOOLITTLE ile denklem sistemi çözümü:
sn o
A matrisinin L ve U çarpanları bilindiğinden farklı karşı taraf vektörlü denklem sistemleri doğrudan yukarıdan aşağıya doğru ve aşağıdan yukarıya doğru hesap yapılarak çözülebilir. Aşağıda iki örnek verilmiştir. Örnek 1: −2 −8 − 13
2 6 9
4
1
x1 16 x 26 2 = , x3 − 19 − 18 x 4 − 34 4 10 3
x =?
em de r
6 12 Ax = b → 3 −6
A katsayılar matrisi yukarıda L ve U çarpanlarına ayrılmıştı: Ancak; kolonlara yer değiştirildiği de unutulmamalıdır. Kolon değişimi bilinmeyenlerin yerini değiştirmek 2 4 3] vektörü 3. ve 4.kolonların değiştirildiğini [ 1 anlamındadır. göstermektedir. Bu nedenle denklem sistemi L ve U cinsinden yazılırsa
Ax = b
→ LU x = b '
w
w
w .e
'
→
L
1 2 0.5
1 3
1
−1
− 0.5
2.6
X’
6 1
−2 −4
4 2 −5
b
x1 16 x 26 2 = x 4 − 19 − 1.2 x 3 − 34 2 2 2
U
olur. Burada x’ vektörü hesaplanmak istenen x bilinmeyenler vektörünün 3. ve 4. bilinmeyenlerinin yerleri değiştirilmiş şeklidir. y = U x' denirse, L y = b bağıntısında, yukarıdan aşağı doğru hesap ile, y bulunur, U x' = y bağıntısında da, aşağıdan yukarı doğru hesap ile, x’
bulunur. 3. ve 4. değişkenlerin yerleri değiştirilerek aranan x vektörü oluşturulur. Bu adımlar aşağıda uygulanmıştır:
Ly = b →
1 2
1
0.5
3
1
−1
− 0.5
2.6
y1 16 y 26 2 = → y 3 − 19 1 y 4 − 34
y1 16 y − 6 y 2 = 26 − 2 ⋅ 16 = −6 → 2 = y3 = −19 − 0.5 ⋅16 − 3 ⋅ (−6) = −9 y 3 − 9 y 4 = −34 − ( −1)16 − (−0.5)(−6) − 2.6(−9) = 2.4 y 4 2.4 y1 = 16
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
70
71
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
−2 −4
6 U x' = y →
x1 = (16 − 2( −2) − 4 ⋅ 1 − (−2) ⋅ 1) / 6 = 3 2 x1 16 2 x 2 − 6 → x2 = (−6 − 2(−2) − 2 ⋅ 1) /(−4) = 1 = x4 = (−9 − 2 ⋅ ( −2)) /(−5) = 1 2 x 4 − 9 x3 = 2.4 /( −1.2) = −2 − 1.2 x 3 2.4
4 2
m
−5
2 6 9
4
1
' ' Ax = b → LU x = b →
x1 24.68 x 64.20 2 = , x3 56.51 − 18 x4 − 33.31 4 10 3
1 2 0.5
1 3
1
−1
− 0.5
2.6
1
0.5 −1
3 − 0.5
1 2.6
−2 −4
4 2
6 1
y1 24.68 y 64.20 → 2 = y3 56.51 1 y4 − 33.31
−5
4 2 −5
x1 x 2 = x4 − 1.2 x3 2 2 2
2 x1 24.68 2 x 2 14.84 = → 2 x 4 − 0.35 − 1.2 x 3 − 0.3
24.68 64.20 56.51 − 33.31
y1 24.68 y 14.84 → 2 = y3 = 56.51 − 0.5 ⋅ 24.68 − 3 ⋅ 14.84 = −0.35 y 3 − 0.35 y4 = −33.31 − (−1) ⋅ 24.68 − (−0.5) ⋅ 14.84 − 2.6(−0.35) = −0.3 y 4 − 0.3 y2 = 64.20 − 2 ⋅ 24.68 = 14.84
x1 = ( 24.68 − 2 ⋅ 0.25 − 4 ⋅ 0.17 − (−2)(−3.5)) / 6 = 2.75 x2 = (14.84 − 2 ⋅ 0.25 − 2 ⋅ 0.17) /(−4) = −3.50 x4 = (−0.35 − 2 ⋅ 0.25) /(−5) = 0.17 x3 = −0.3 /(−1.2) = 0.25
x1 2.75 x − 3.50 → 2 = x3 0.25 x4 0.17
w
w
w .e
6 U x' = y →
−2 −4
y1 = 24.68
em de r
1 2
x =?
tla
−2 −8 − 13
sn o
6 12 Ax = b → 3 −6
ri. co
Örnek 2:
Ly = b →
x1 3 → x2 = 1 x3 − 2 x4 1
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
71
72
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
CROUT1 LU metodu A verilmiş olsun, det A ≠ 0 olmak ve uii=1 alınmak kaydıyla
u13 ... u1n a11 u 23 ... u 2 n a 21 1 ... u 3n = a 31 ... . . 1 a n1
a12 a 22
a13 a 23
a 32 . an2
a 33 . an3
... a1n ... a 2 n ... a 3n ... . ... a nn
A
m
l33 . l n3
1 u12 1 ... ... l nn U
ri. co
l11 l 21 l 22 L U = A → l31 l 32 . . L l n1 l n 2
bağıntısı sağlanacak şekilde n adımda hem L hem de U nun tüm elemanları belirlenebilir. Matris çarpım kuralından yararlanarak, her adımda önce L nin bir kolonu sonra U nun bir satırı hesaplanır. 1.Adım:
... ln1 ⋅ 1 = an1 → ln1 = an1
l11 ⋅ u12 = a12 → u12 = a12 / l11
tla
l31 ⋅ 1 = a31 → l31 = a31
L nin 1.kolonunun hesabı: L nin 1., 2.,…,n.satırları ÇARPI U nun1. kolonu=A nın 1.kolonudur
l11 ⋅ u13 = a13 → u13 = a13 / l11
... l11 ⋅ u1n = a1n → u1n = a1n / l11
U nun 2.satırının hesabı: L nin 2.satırı ÇARPI U nun 3., 4., …, n.kolonu=A nın 2.satırıdır
L nin 2.kolonunun hesabı: L nin 2., 3.,…, n. satırları ÇARPI U nun 2. kolonu=A nın 2.kolonudur
2.Adım:
l21 ⋅ u12 + l22 ⋅ 1 = a22 → l22 = a22 − l21 ⋅ u12 l31 ⋅ u12 + l32 ⋅ 1 = a32 → l32 = a32 − l31 ⋅ u12
l21 ⋅ u13 + l22 ⋅ u23 = a23 → u23 = (a23 − l21 ⋅ u13 ) / l22
l21 ⋅ u14 + l22 ⋅ u24 = a24 → u24 = (a24 − l21 ⋅ u14 ) / l22
em de r
... ln1 ⋅ u12 + ln 2 ⋅ 1 = an 2 → ln 2 = an 2 − ln1 ⋅ u12
3.Adım:
U nun 1.satırının hesabı: L nin 1.satırı ÇARPI U nun 2., 3, …, n.kolonu=A nın 1.satırıdır
sn o
l11 ⋅ 1 = a11 → l11 = a11 l21 ⋅ 1 = a21 → l21 = a21
... l21 ⋅ u1n + l22 ⋅ u2n = a2 n → u2 n = (a2 n − l21 ⋅ u1n ) / l22
L nin 3.kolonunun hesabı: L nin 3, 4., …, n satırlar ÇARPI U nun 3.kolonu =A nın 3.kolonudur
U nun 3.satırının hesabı: L nin 3.satırı ÇARPI U nun 4., ..., n. kolonu=A nın 3.satırıdır
l31 ⋅ u13 + l32 ⋅ u23 + l33 ⋅ 1 = a33 → l33 = a33 − l31 ⋅ u13 − l32 ⋅ u23
l31 ⋅ u14 + l32 ⋅ u24 + l33 ⋅ u34 = a34 → u34 = (a34 − l31 ⋅ u14 − l32 ⋅ u24 ) / l33
...
...
ln1 ⋅ u13 + ln 2 ⋅ u23 + un3 ⋅ 1 = a3n → ln 3 = an3 − ln1 ⋅ u13 − ln 2 ⋅ u23
l31 ⋅ u1n + l32 ⋅ u2 n + l33 ⋅ u3n = a3n → u3n = (a3n − l31 ⋅ u1n − l32 ⋅ u2 n ) / l33
…
w .e
n.Adım:
L nin n.kolonunun hesabı: L nin n.satırı ÇARPI U nun n.kolonu=A nın n.satırıdır:
u nn = 1
w
w
l n1 ⋅ u1n + l n 2 ⋅ u 2 n + l n3 ⋅ u n3 + ... + l nn ⋅ 1 = a nn → l nn = a nn − l n1 ⋅ u1n − l n 2 ⋅ u 2 n − l n3 ⋅ u 3n − ...
U nun n.satırının hesabı:
1
Prescott Duran Crout (1907-1984), Amerikalı: 1941 de yayınlandı Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
72
73
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
Genel formüller:
u11 = 1 ,
l11 = a11 , l 21 = a 21 , ..., l n1 = a n1
L nin 1. kolonu A nın birinci kolonu ile aynı
i. adım:
L nin i.kolonu: l ii = 1,
l ji = a ji −
i −1
∑l
jk u k i
j = i, i + 1,..., n
,
U nun i.satırı: u ij = (a ij −
i −1
∑l
ik u kj ) / l ii
, j = i + 1, i + 2, ..., n,
ri. co
k =1
m
1. adım:
l ii ≠ 0
k =1
i. adım şematik hesap: Satır değiştirme vektörü
tla
U nun 1., 2,…, i-1. adımlarda hesaplanmış satırları
sn o
L nin i. kolonunun hesabı:
lji=(aji - Σ diyagonalin üstündeki sayılar ÇARPI aji nin solundaki sayılar) lji yi hesaplamak için:
topla, aji
L nin i. adımda hesaplanacak kolonu
em de r
L nin 1., 2,…, i-1. adımlarda hesaplanmış kolonları
Renkli satır ve kolondaki sayıları birbiri ile çarp, den çıkar ve sonucu aji nin olduğu yere yaz.
Satır değiştirme vektörü
w .e
U nun 1., 2,…, i-1. adımlarda hesaplanmış satırları
Pivot adayı
Kolonda pivot arama: lii ≠ 0 olmalıdır. lii nin mutlak değerce çok küçük olması da istenmez. Gerekirse satırlara yer değiştirilir lii nin mutlak değerinin mümkün olan en büyük sayı olması sağlanır. Bunun için; kolonda pivot ara, lii, li,i+1,…, lin elemanlarından mutlak değerce en büyük olanı bul. Bu eleman k. satırda ise i. satır ile k. satırı değiştir. Satır değiştirme vektörünün aynı nolu satırlarını da değiştir. Satır değiştirme sayısının depolandığı değişkenin, adı p olsun, değerini 1 artır: p=p+1.
w
L nin i.kolonunda pivot ara
w
U nun 1., 2,…, i-1. adımlarda hesaplanmış satırları
U nun i. satırının hesabı: uij=aij - Σ diyagonalin solundaki sayılar ÇARPI aij nin üstündeki sayılar BÖLÜ lii Pivot
Pivot
uij yi hesaplamak için: Renkli satır ve kolondaki sayıları birbiri ile çarp, topla, aij den çıkar, lii diyagonal elemanına böl ve sonucu aij nin olduğu yere yaz.
L nin 1., 2,…, i. adımlarda hesaplanmış kolonları
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
73
74
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
•
U nun diyagonal elemanları, uii=1, depolanmaz.
m
• L ve U üçgen matrisleri A nın üzerine depolanır. Diyagonal ve altındaki elemanlar L ye, diyagonalin üstündeki elemanlar U ya aittir.
U
tla
L
ri. co
Kolon değiştirme vektörü
•
sn o
• Satır değiştirme vektörü çarpanlara ayırma işlemi sırasında hangi satırların yerlerinin değiştiği bilgisini içerir. Ayrıca, her satır değişikliği determinantın işaretini değiştireceğinden, kaç defa satır değiştirildiği de p gibi bir değişkende depolanır. l11, l22, …, lnn elemanları çarpanlara ayırma işlemi sırasında seçilmiş pivot elemanlardır.
• Det A=det L . det U dir. det L= (-1)p.l11.l22. … . lnn ve det U=1, olduğundan Det A= (-1)p.l11.l22. … . lnn dir.
em de r
• Çarpanlara ayırma işleminin herhangi bir adımında, örneğin i. adımında, pivot eleman bulunamazsa, yani lii=0 ise, Det A=0 dır. A tekildir, rankı r=i-1 dir, r satır ve kolonu doğrusal bağımsız geriye kalan d=n-r satır ve kolonu doğrusal bağımlıdır.
Örnek:
−2
2
−8 − 13 4
6 9 1
w
w
w .e
6 12 A= 3 −6
4 10 → A = LU → L = ?, U = ? 3 − 18
Matrisi CROUT metodu ile L ve U üçgen çarpanlarına ayrılacaktır. Çarpanlara ayırma işlemine başlamadan önce satır değiştirme vektörü 1, 2, 3, 4 ile doldurulur ve satır değiştirme sayısının saklanacağı p değişkeni sıfırlanır. Satır değiştirme vektörü başlangıç değerleri
1 2 , 3 4
6 12 A= 3 −6
−2
2
−8 − 13
6 9
4
1
4 10 3 − 18
p=0 (satır değiştirme sayısı başlangıç değeri)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
74
75
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
1.Adım: L nin 1. kolonu: A nın 1. kolonu ile aynı. Pivot adayı 2. satırda, 1.ve 2. satırlar değiştirilecek
2 6
− 13
9
4
1
1. kolonda pivot ara
4 10 3 − 18
Satırlar değiştirilecek
12 6 3 −6
−8 −2
6 2
− 13
9
4
1
10 4 3 − 18
Satır değiştirildikten sonra, p=1
Pivot adayı
Pivot
2 1 3 , 4
2 1 3 , 4
m
−2 −8
ri. co
6 12 3 −6
12 − 0.666667 0.5 0.833333 6 −2 2 4 3 − 13 9 3 4 1 − 18 − 6
U nun 1. satırı: Diyagonalin sağındaki sayılar pivot elemana bölündü
tla
1 2 3 , 4
Pivot
sn o
2.Adım:
Pivot
2 3 1 , 4
12 − 0.666667 0.5 0.833333 Satırlar 6 değiştirilecek 2.000002 2 4 3 − 10.999999 9 3 − 18 − 6 − 0.000002 1 Pivot adayı
em de r
2 1 3 , 4
L nin 2.kolonu: Diyagonalin üstündeki sayı buradaki sayının solundaki sayı ile çarpıldı, buradaki sayıdan çıkartıldı. Pivot adayı 3. satırdadır, 2. ve 3.satırlar değiştirilecek
12 − 0.666667 0.5 0.833333 3 − 10.999999 9 3 6 2.000002 2 4 − 18 − 6 − 0.000002 1 Satır değiştirildikten sonra, p=2
Pivot
0 .5 0.833333 12 − 0.666667 3 − 10.999999 − 0.181818 − 0.045455 6 2.000002 2 4 1 − 18 − 6 − 0.000002
w
w
w .e
2 3 1 , 4
U nun 2.satırı: Diyagonalin solundaki sayı buradaki sayının üstündeki sayı ile çarpıldı, buradaki sayıdan çıkartıldı ve pivot elemana bölündü
3.Adım:
2 3 1 , 4
0 .5 0.833333 12 − 0.666667 3 − 10.999999 − 0.181818 − 0.045455 6 2.000002 0.363637 4 4 − 18 − 6 − 0.000002
L nin 3.kolonu: Diyagonalin üstündeki sayılar buradaki sayının solundaki sayılar ile çarpıldı, buradaki sayıdan çıkartıldı. Pivot eleman 4.satırda, 3.ve 4.satırlar değiştirilecek
2 3 4 , 1
2 3 4 , 1
0 .5 0.833333 12 − 0.666667 3 − 10.999999 − 0.181818 − 0.045455 − 6 − 0.000002 4 − 18 2.000002 0.363637 4 6 Satır değiştirildikten sonra, p=3
Pivot
Pivot adayı
0 .5 0.833333 12 − 0.666667 3 − 10.999999 − 0.681818 − 0.045455 − 6 − 0.000002 4 − 3.25 2.000002 0.363637 4 6
U nun 3.satırı: Diyagonalin solundaki sayılar buradaki sayının üstündeki sayılar ile çarpıldı, buradaki sayıdan çıkartıldı ve pivot elemana bölündü
Pivot
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
75
76
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
4.Adım:
0 .5 0.833333 12 − 0.666667 3 − 10.999999 − 0.681818 − 0.045455 − 6 − 0.000002 4 − 3.25 2.000002 0.363637 0.272733 6
U
m
2 3 4 , 1
L nin 4.kolonu: Diyagonalin solundaki sayılar buradaki sayının üstündeki sayılar ile çarpıldı, buradaki sayıdan çıkartıldı.
Sonuç:
tla
2 3 Satır değiştirme vektörü: 4 , Satır değiştirme sayısı: p=3 1
ri. co
L
L ve U matrisleri:
0.5 0.833333 1 − 0.666667 1 − 0 . 681818 − 0.0454555 U = 1 − 3.25 1
sn o
12 3 − 10.999999 , L= − 6 − 0.000002 4 6 2 . 000002 0 . 363637 0 . 272733
em de r
Determinant: Det A=(-1)3.12.(-10.999999).4.0.272733= 144.003001 Rank A: r=4 Doğrusal bağımsız kolon ve satır sayısı: 4 Doğrusal bağımlı kolon ve satır sayısı(rank artığı): d=n-r=4-4=0
CROUT ile denklem sistemi çözümü:
A matrisinin L ve U çarpanları bilindiğinden katsayılar matrisi A olan farklı karşı taraf vektörlü denklem sistemleri doğrudan yukarıdan aşağı ve aşağıdan yukarı hesap yapılarak çözülebilir. Aşağıda iki örnek verilmiştir. Örnek 1:
w
w
w .e
6 12 Ax = b ⇒ 3 −6
−2 −8 − 13 4
2 6 9 1
4 x1 16 10 x 2 26 = , 3 x 3 − 19 − 18 x 4 − 34
x =?
A katsayılar matrisi yukarıda L ve U çarpanlarına ayrılmıştı: Ancak; satırlara yer değiştirildiği de unutulmamalı, çözüme başlamadan önce sağ taraf vektörünün satırları değiştirilmelidir. Satır değiştirme vektörü= [ 2
b = [ 16
26
3
4
- 19 - 34]T yerine b' = [ 26
1 ]T olduğundan, sağ taraf vektörü - 19
- 34
16 ]T alınmalıdır. Bu nedenle denklem
sistemi L ve U cinsinden yazılırsa
x
b’
0.5 0.833333 x1 26 12 1 − 0.666667 3 − 10.999999 1 − 0 . 681818 − 0.0454555 x2 − 19 Ax = b' ⇒ LU x = b' ⇒ = − 6 − 0.000002 4 1 − 3.25 x3 − 34 2.000002 0.363637 0.272733 1 6 x4 16 U
L
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
76
77
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
olur. y = U x denirse, L y = b' bağıntısından, yukarıdan aşağı doğru hesap ile, y bulunur,
U x = y den
de,
aşağıdan
yukarı
doğru
hesap
ile,
x
bulunur.
Bu
adımlar
aşağıda
y1 = 26 / 12 = 2.166667
ri. co
12 y1 26 3 − 10.999999 y − 19 2 = → Ly = b → − 6 − 0.000002 y 3 − 34 4 2.000002 0.363637 0.272733 y 4 16 6
m
uygulanmıştır.
y1 2.166667 y2 = ( −19 − 3 ⋅ 2.166667) /( −10.999999) = 2.318182 → y2 = 2.318182 y3 − 5.249998 y3 = ( −34 − (−6) ⋅ 2.166667 − (−0.000002) ⋅ 2.318182) / 4 = −5.249998 y4 = (16 − 6 ⋅ 2.166667 − 2.000002 ⋅ 2.318182 − 0.363637 ⋅ ( −5.249998)) / 0.272733 = 0.999963 y4 0.999963
tla
0.5 0.833333 x1 2.166667 1 − 0.666667 1 − 0.681818 − 0.0454555 x 2 2.318182 Ux = y→ = → 1 − 3.25 x 3 − 5.249998 1 x 4 0.999963
sn o
x1 = 2.166667 − 0.833333 ⋅ 0.999963 − 0.5 ⋅ (−2.000118) − (−0.666667) ⋅ 0.999919 = 3.000037 x2 = 2.318182 − (−0.0454555) ⋅ 0.999963 − (−0.681818) ⋅ ( −2.000118) = 0.999919 x3 = −5.249998 − ( −3.25) ⋅ 0.999963 = −2.000118
em de r
x4 = 0.999963
x1 3.000037 x 0.999919 → 2 = x3 − 2.000118 x4 0.999963
Örnek 2:
6 12 Ax = b → 3 −6
−2 −8 − 13
2 6 9
4
1
x1 24.68 x 64.20 2 = , x3 56.51 − 18 x 4 − 33.31 4 10 3
Satır değiştirme vektörü= [ 2
b = [ 24.68
64.20
56.51
3
4
x =?
1 ]T olduğundan, sağ taraf vektörü
- 31.31]T yerine b' = [ 64.20
56.51
- 33.31
24.68 ]T alınmalıdır. Bu
w
w
w .e
nedenle denklem sistemi L ve U cinsinden yazılırsa 0 .5 0.833333 x1 64.20 12 1 − 0.666667 3 − 10.999999 1 − 0.681818 − 0.0454555 x 2 56.51 Ax = b' → LU x = b' → = − 6 − 0.000002 4 1 − 3.25 x 3 − 33.31 2.000002 0.363637 0.272733 1 6 x 4 24.68
12 y1 64.20 3 − 10.999999 y 56.51 2 = → Ly = b → − 6 − 0.000002 y 3 − 33.31 4 2.000002 0.363637 0.272733 y 4 24.68 6 y1 = 64.20 / 12 = 5.35
y1 5.35 → y 2 = − 3.678182 y3 − 0.302498 y3 = (−33.31 − (−6) ⋅ 5.35 − (−0.000002)(−3.678182) / 4 = −0.302498 y4 = (24.68 − 6 ⋅ 5.35 − 2.000002 ⋅ (−3.678182) − 0.363637(−0.302498) / 0.272733 = 0.170023 y 4 0.170023
y2 = (56.51 − 3 ⋅ 5.35) /(−10.999999) = −3.678182
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
77
78
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
x 1 = 5.35 − 0.833333 ⋅ 0.170023 − 0.5 ⋅ 0.250077 − ( −0.666667 )( −3.499937 = 2.749983 x 2 = −3.678182 − ( −0.0454555 ) ⋅ 0.170023 − ( −0.681818 ) ⋅ 0.250077 = −3.499937
x1 2.749983 → x2 = − 3.499937 x3 0.250077 x4 0.170023
ri. co
x 3 = −0.302498 − ( −3.25 ) ⋅ 0.170023 = 0.250077
m
0.5 0.833333 x1 5.35 1 − 0.666667 1 − 0.681818 − 0.0454555 x 2 − 3.678182 Ux= y→ = → 1 − 3.25 x 3 − 0.302498 1 x 4 0.170023
x 4 = 0.170023
CHOLESKY1 UUT metodu
tla
CHOLESKY metodu sadece simetrik ve pozitif tanımlı matrisler için özel bir yöntemdir. Basit, nümerik açıdan stabil, bellek gereksinimi düşük ve programlanması kolaydır. Pivot aramak, satır veya kolon değiştirmek gerekmez.
Matematik tanım:
sn o
Simetrik pozitif tanımlı matris nedir? Mekanik tanım
Simetriklik koşulu A=AT dir. Elemanlarının en az biri sıfırdan farklı olan, bunun dışında tamamen keyfi bir x ≠0 kolon vektörü olsun. P = xT A x
em de r
çarpımı sabit bir sayı olur. Eğer
P>0 ise A pozitif tanımlıdır (positive definit) P<0 ise A negatif tanımlıdır (negative definit) P≥0 ise A yarı pozitif tanımlıdır (positive semidefinit) P≤0 ise A yarı negatif tanımlıdır (negative semidefinit)
denir. Herhangi bir matrisin pozitif tanımlı olup olmadığını genelde matrisin görünümünden anlamak basit değildir. Çoğu kez matrisin mekanik anlamı yorumlanarak karar verilebilir. Örneğin, sonlu elemanlar metodunun denge denklemlerinin katsayılar matrisinin ve en küçük kareler metodunun katsayılar matrisinin daima pozitif tanımlı olduğu bilinmektedir.
Örnekler:
w
w
w .e
x 1 0 A= , x = 1 , p = x T A x = [x1 0 1 x2
1 0 x1 2 2 x 2 ] x = x1 + x 2 0 1 2
olduğundan, x1≠0 veya x2≠0 olduğu sürece p>0 dır, dolayısıyla A pozitif tanımlıdır.
x 0 1 0 1 x1 B= , x = 1 , p = x T B x = [x1 x 2 ] = x1 x 2 + x1 x 2 1 0 x2 1 0 x 2 dır. x1 ≤ 0 ve x 2 ≥ 0 için p≤0 olacağından B pozitif tanımlı değildir.
Mekanik tanım: P = (½) xT A x bağıntısı mekanikte depolanmış şekil değiştirme enerjisidir. Şekil değiştirme enerjisi daima pozitif olduğundan p>0 dır. Örneklemek gerekirse, sonlu elemanlar metodunda x sistemin global düğüm yer değiştirme vektörü (deplasman vektörü), A sistemin global rijitlik matrisidir. A daima simetrik, yani A=AT dir. P sistemde depolanmış şekil değiştirme enerjisi(iç kuvvetlerin işi) anlamındadır ve daima pozitiftir. Dolayısıyla A matrisi de daima pozitif tanımlıdır. Bunun pratik anlamı şudur. A nın diyagonal elemanları daima pozitiftir ve CHOLESKY metodu ile üçgen çarpanlara ayırma işlemi sırasında daima pozitif kalırlar. Diyagonal elemanlardan biri negatif veya sıfır olursa sistem ya labildir ya da rijitlik matrisi hatalı kurulmuştur, çözüm bulunamaz anlamına gelir. 1 André-Louis Cholesky (1875 – 1918), Polonya asıllı Fransız: Çalışmasını 1905-1913 civarında hazırlandığı sanılmaktadır. 1. Dünya savaşında öldü. Çalışması ölümünden sonra, 1924 de yayınlandı.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
78
79
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
CHOLESKY metodunda A=L U üçgen çarpanlarının diyagonal elemanlar lii = aii , u ii = a ii alınır. Simetriden dolayı L=UT veya U=LT dur. Simetrik ve pozitif tanımlı A matrisi A=UTU
UT U = A
⇒ UT
u11 u 12 u22 u13 u23 . . u1n u2 n
u33 . u3n
... ... unn
u11 u12 u13 u22 u23 u33
ri. co
m
sağlanacak şekilde üçgen çarpanlarına ayrılır1. n adımda U nun tüm elemanları belirlenebilir. Matris çarpım kuralından yararlanarak, her adımda U nun bir satırı hesaplanır.
... u1n a11 a12 ... u2 n a21 a22 ... u3n = a31 a32 ... . . . unn an1 an 2
U
a13 a23
a33 .
an 3
... a1n ... a2 n ... a3n ... . ... ann
tla
A
1. adım
u11u12 = a12 → u12 = a12 / u11 u11u13 = a13 → u13 = a13 / u11 ...
em de r
u11u1n = a1n → u1n = a1n / u11
U nun 1.satırının hesabı: UT nin 1..satırı ÇARPI U nun 1.,2. ,…, n.kolonları =A nın 1.satırıdır
sn o
u11u11 = a11 → u11 = a11
2. adım
u12 u12 + u 22 u 22 = a 22 → u 22 = a 22 − u12 u12
u12 u13 + u 22 u 23 = a 23 → u 23 = (a 23 − u12 u13 ) / u 22
U nun 2.satırının hesabı: UT nin 2..satırı ÇARPI U nun 2., 3. ,…, n.kolonları =A nın 2.satırıdır
...
u12 u1n + u 22 u 2 n = a 2 n → u 2 n = ( a 2 n − u12 u1n ) / u 22
3. adım
w
w
w .e
u13 u13 + u 23 u 23 + u 33 u 33 = a 33 → u 33 = a 33 − u13 u13 − u 23 u 23 ...
u13 u1n + u 23 u 2 n + u 33 u 3n = a 3n → u 3n = (a 3n − u13 u1n − u 23 u 2 n ) / u 33
U nun 3.satırının hesabı: UT nin 3.satırı ÇARPI U nun 3. ,…, n.kolonları =A nın 3.satırıdır
…
n. adım
U nun n.satırının hesabı: UT nin n.satırı ÇARPI U nun n.kolonu =A nın n.satırıdır
u1n u1n + u 2 n u 2 n + u 3n u 3n + ... + u nn u nn = a nn → u nn = a nn − u1n u1n − u 2 n u 2 n − u 3n u 3n − ...
1
Kaynaklarda A=UTU, A=U UT, A=LTL, A=L LT şeklin de de gösterilir, hepsi de aynı anlamdadır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
79
80
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
Genel formüller:
u12 = a12 / u11 , u13 = a13 / u11 ,..., u1n = a1n / u11 ,
i.adım:
Diyagonal eleman: u ii = a ii −
i −1
∑u
ik u i k
,
(a11>0)
ri. co
u11 = a11 ,
m
1.adım:
(kök içindeki ifade>0 olmalı)
k =1
Diyagonalin sağındaki elemanlar: uij = ( aij −
i −1
∑u
ik u kj ) / uii
k =1
tla
i. adım şematik hesap:
, j = i + 1, i + 2 , ..., n
sn o
U nun 1., 2,…, i-1. adımlarda hesaplanmış satırları
U nun i. diyagonalinin hesabı:
uii=√ (aii -
Σ
diyagonalin üstündeki sayıların KARESİ)
em de r
uii yi hesaplamak için: Renkli kolondaki sayıların karesini aii den çıkar, sonucun karekökünü al ve sonucu aii nin olduğu yere yaz.
U nun i. satırının hesabı:
uij= (aij - Σ diyagonalin üstündeki sayılar ÇARPI aij nin üstündeki sayılar) BÖLÜ uii
w
w
w .e
uij yi hesaplamak için:
• •
Renkli bölgedeki sayıları çarp, aii den çıkar, diyagonal elemana böl ve sonucu aij nin olduğu yere yaz.
A nın sadece diyagonali ve üstündeki sayıları depolanır. U üçgen matrisi A nın üzerine depolanır. • Çarpanlara ayırma işleminin herhangi bir adımında, örneğin i. adımında
UT depolanmaz
U
aii −
i −1
∑u
ik ui k
≤0
k =1
ise, karekök alınamaz, işleme devam edilemez. Bu durum, A nın pozitif tanımlı olmadığı anlamındadır.
• •
Det A=det UT . det U dur. det A= u112. u222. … . unn2 olur.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
80
81
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
Örnek: −6
26 −7 − 11
−7 9 7
12 − 11 T , A =U U →U =? → 7 65
9
3
−6
26
−7 9
Diyagonal altındaki sayılar kullanılmayacağı için yazılmadı
12 − 11 7 65
A nın sadece diyagonali ve üstündeki sayılar ile çalışılacak
m
3
ri. co
9 3 A= −6 12
1.Adım:
U11 in hesabı: a11 in karekökü alınıp buraya yazıldı
2.Adım:
3
−2
26
−7 9
4 − 11 7 65
1
5
−2
4 − 1 − 3 9 7 65
em de r
U22 nin hesabı: diyagonalin üstündeki sayıların kareleri buradaki a22 den çıkartıldı, karekökü alındı ve buraya yazıldı
1
U1j nin hesabı: Buradaki aij sayıları u11 e bölündü
sn o
3
tla
Simetrik matrisi CHOLESKY metodu ile UT ve U üçgen çarpanlarına ayrılacaktır. A nın pozitif tanımlı olduğunun bilindiği varsayılmaktadır.
U2j nin hesabı: diyagonalin üstündeki sayı a2j nin üstündeki sayı ile çarpıldı, a2j den çıkartıldı, u22 ye bölündü ve sonuç buraya yazıldı
3.Adım:
w
w
w .e
U33 ün hesabı: diyagonalin üstündeki sayıların kareleri buradaki a33 den çıkartıldı, karekökü alındı ve buraya yazıldı
3
1
5
−2
4 − 1 − 3 2 6 65
U2j nin hesabı:
diyagonalin üstündeki sayılar a3j nin üstündeki sayılar ile çarpıldı, a3j den çıkartıldı, u33 e bölündü ve sonuç buraya yazıldı
4.Adım:
U44 ün hesabı:
diyagonalin üstündeki sayıların kareleri buradaki a44 den çıkartıldı, karekökü alındı ve buraya yazıldı
3
1 5
−2
4 − 1 − 3 2 6 2
Sonuç:
1 −2 4 3 3 1 5 5 − 1 − 3 T T A = U U, U = U = -2 -1 2 2 6 2 4 -3 6 2 A Pozitif tanımlıdır: Çünkü uii diyagonal elemanları hesaplanırken karekökü alınacak sayılar pozitif kalmıştır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
81
82
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY 2. 2. 2. 2
T.
Determinant: Det A=Det U det U=3 5 2 2 = 3600
CHOLESKY ile denklem sistemi çözümü:
Örnek:
Ax = b ,
9 3 −6 12
−6 −7
3 26 −7 − 11
9 7
12 x1 − 11 x 2 = 7 x3 65 x 4
72 34 , 22 326
x =?
x
UT
2 6
3 2
− 2 4 x1 − 1 − 3 x 2 = 2 6 x3 2 x4
1 5
y1 y 2 = y3 2 y4
y1 = 72 / 3 = 24 24 72 y 2 = (34 − 1 ⋅ 24) / 5 = 2 2 34 → y → = y 3 = (22 − (−2) ⋅ 24 − (−1) ⋅ 2) / 2 = 36 36 22 y 4 = (326 − 4 ⋅ 24 − (−3) ⋅ 2 − 6 ⋅ 36) / 2 = 10 10 326
3 Ux = y →
− 2 4 x1 24 − 1 − 3 x 2 2 = → 2 6 x3 36 2 x 4 10
w
w
w .e
em de r 6
1 5
x =?
y
3 1 5 T U y=b→ - 2 -1 4 -3
2
72 34 , 22 326
sn o
3 1 5 T Ax = b → U U x = b → - 2 -1 4 -3
b
tla
U
ri. co
m
A matrisinin UT ve U çarpanları bilindiğinden katsayılar matrisi A olan farklı karşı taraf vektörlü denklem sistemleri doğrudan yukarıdan aşağı ve aşağıdan yukarı hesap yapılarak çözülebilir. Aşağıda bir örnek verilmiştir.
x1 = (24 − 4 ⋅ 5 − (−2) ⋅ 3 − 1 ⋅ 4) / 3 = 2 x 2 = (2 − (−3) ⋅ 5 − (−1) ⋅ 3) / 5 = 4 x 3 = (36 − 6 ⋅ 5) / 2 = 3 x 4 = 10 / 2 = 5
2 4 →x= 3 5
Determinant hesabı
Bir Anxn matrisinin determinantının tanımı, klasik hesap metotlar(Sarrus, Chio, Laplace) ve determinant özelliklerine bölüm 2 de yer verilmişti. Ayrıca, bölüm 6 da verilen A = L U çarpanlara ayırma metodlarında (Doolittle, Crout, Cholesky) det A nın p
.
.
.
Doolittle metodunda: det A= (-1) .u11 u22 … unn p. . . . Crout metodunda: det A= (-1) l11 l22 … lnn 2. 2. . 2 Choleky metodunda det A= u11 u22 … unn
(6.5)
ile hesaplanacağı gösterilmişti. Burada p satır veya kolon değiştirme sayısıdır. Determinantın değeri çözümün var olup olmadığına işaret eder. Det A≠0 ise çözüm vardır, det A=0 çözüm yoktur veya birden çok çözüm vardır (bak: bölüm 3, sayfa 45). Determinant matrise ait ilginç bir sayıdır. Hem çok önemlidir hem de hesaplamaktan özenle kaçınırız. Genellikle denklem sistemini çözerken sadece kontrol amacıyla kullanırız. Bu kontrol 6.5 ifadelerindeki lii veya uii diyagonal elemanlarından herhangi birinin sıfır olup olmadığı kontrol edilerek yapılır. Herhangi biri sıfır ise determinant sıfırdır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
82
83
6. ÇARPANLARA AYIRMA YÖNTEMLERİ: DOOLITLE, CROUT VE CHOLESKY
m
Determinant hesaplanacaksa nümerik sorun çıkabileceği bilinmelidir. Denklem sistemi çok büyük ise 6.5 deki diyagonal elemanların birbiri ile çarpımı sayı taşmasına(sayının bilgisayar birim belleğine sığmaması) neden olabilir! Basit bir örnek verelim: Crout metodunda denklem sayısının n=100, p=2, L nin tüm diyagonal elemanların birbirine eşit ve 5 olduğunu varsayalım. 6.5 den: det A=(-1)2.5. 5. ….5=5100=7888609052210118054117285652827862296732064351090230047702789306640625
ri. co
gibi çok büyük bir sayı olur(yuvarlanmış det A=7.88860905.1069). Uygulamada karşılaşılan büyük denklem sistemlerinde n=100000, n=100000000 olabildiğine göre, 6.5 deki ifadelerden determinantın hesaplanmasının sayı taşmasına neden olacağı (programın çıkmaza gireceği, beklide bilgisayarın kilitleneceği) açıktır.
Determinantın hesaplanması zorunlu olan bir durumda, det A yı doğrudan 6.5 deki ifadelerden değil Det A =(-1)p . s . 2t
tla
bağıntısına göre sadece s ve t sayılarını hesaplamak sayı taşmasını önler. Burada s gerçek sayı, t tamsayı değişkenidir. s ve t değerlerini hesaplayan basit bir BASIC programı parçası verilmiştir.
em de r
sn o
REM Determinant için s ve t yi belirle (Wilkinson1) s=1 t=0 Basit Gauss, Doolittle, Crout metotlarında alt veya üst üçgen matrisin diyagonal elemanları A matrisinin diyagonalinde depolanmıştır. FOR i = 1 TO n Cholesky metodunda da durum aynıdır, ancak Cholesky metodunda s = s * a(i, i) bu satır s = s * a(i, i)^2 olarak değiştirilmelidir. 1930 t=t+4 IF ABS(s) >= 1 THEN s = s *0.0625 : GOTO 1930 1950 t=t-4 IF ABS(s) <0.0625 THEN s = s * 16 : GOTO 1950 NEXT i Uyarı: s ve t değerleri yerine konularak programda det A =(-1)p . s . 2t değeri hesaplanmamalıdır. Aksi halde gene sayı taşması olacaktır. s ve t programda belirlendikten sonra, det A=(-)p. s . 2t değeri program dışında, Mathematica veya MATLAB ile ya da özel bir program ile, hesaplanabilir. -----------------------------------
1
James Hardy Wilkinson (1919 – 1986), İngiliz
UTDU veya LTDL çarpanlara ayırma yöntemi
w
w
w .e
UTDU (veya LTDL) yöntemi simetrik matrisler için ve Cholesky metodunun biraz farklı şeklidir. Matrisin pozitif tanımlı olması gerekmez. Simetrik A matrisi A=UTD U
olacak şekilde diyagonal elemanları 1 olan üst üçgen U ve D diyonal matrisine dönüştürülür. U ve D aşağıdaki bağıntı sağlanacak şekilde belirlenir. 1 u 12 T U DU = A → u13 . u1n
1 u 23 . u 2n UT
1 . u 3n
d 11 ... ... 1
d 22 d 33
D
1 u12 1 ... d nn U
u13 u 23 1
... u1n a11 ... u 2 n a 21 ... u 3n = a 31 ... . . 1 a n1
a12 a 22
a13 a 23
a 32 . an2
a 33 . a n3
... a1n ... a 2 n ... a 3n ... . ... a nn
A
UTDU yöntemi bazı problemlerin çözümünde daha uygun olmaktadır. Yöntemin detayları burada verilmeyecektir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
83
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz Ahmet TOPÇU
sn o
tla
Ders notları 2014
m=n
X1 0 0.2500 0.1250 0.1875 0.1563 0.1719 0.1641 0.1680 0.1660 0.1670 0.1665 0.1668 0.1666 0.1667
X2 0 0.5000 0.3750 0.4375 0.4063 0.4219 0.4141 0.4180 0.4160 0.4170 0.4165 0.4168 0.4166 0.4167
X3 0 0 -0.1250 -0.0625 -0.0938 -0.0782 -0.0860 -0.0821 -0.0840 -0.0830 -0.0835 -0.0833 -0.0834 -0.0833
x4 0 0.2500 0.1250 0.1875 0.1563 0.1719 0.1641 0.1680 0.1660 0.1670 0.1665 0.1667 0.1666 0.1667
Başlangıç değerleri
Max | xik − xik −1 |=| x42 − x14 |=| 0.1250 − 0.2500 |= 0.1250 > ε = 0.0001 olduğundan iterasyona devam!
w .e
em de r
k 0 1 2 3 4 5 6 7 8 9 10 11 12 13
| 0.1660 − 0.1680 |= 0.0020 > ε = 0.0001, iterasyona devam!
| 0.1668 − 0.1665 |= 0.0003 > ε = 0.0001, iterasyona devam! | 0.1667 − 0.1667 |= 0.0001 = ε = 0.0001, iterasyon durduruldu !
Çözüm
w
w
İterasyon no
| 0.1875 − 0.1250 |= 0.0625 > ε = 0.0001, iterasyona devam!
7
DENKLEM SİSTEMİ ÇÖZÜMÜ, İTERASYON YÖNTEMLERİ: • Jacobi • Gauss-Seidel • GG(Conjugate Gradient) Carl Gustav Jakob JACOBI (1804-1851 )
Philipp Ludwig von SEIDEL (1821–1896)
85
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG a11 x1 + a12 x 2 + a13 x 3 + ... + a1n x n = b1 .
A x=b
(7.1)
m
a 21 x1 + a 22 x 2 + a 23 x 3 + ... + a 2 n x n = b 2 a n1 x1 + a n 2 x 2 + a n 3 x 3 + ... + a nn x n = bn
ri. co
A x=b doğrusal denklem sistemi, n çok büyük ise ve A çok seyrek ise iterasyon yöntemleri ile çözülür. Çünkü direkt metodlar çok fazla bellek, dört işlem ve hesap süresi gerektirirler. Biriken yuvarlama hataları çözümü tehlikeye sokar. İterasyon yöntemlerinde A nın elemanları değişmez, bu nedenle A nın sadece sıfırdan farklı elemanları depolanır, sıfır ile dört işlem yapılmaz. Hem bellek hem hesap süresi hem de yuvarlama hataları önemli miktarda azalır. Uygulamada karşılaşılan A matrisi genelde çok seyrektir, sıfırdan farklı eleman oranı yaklaşık %1-5 civarındadır.
tla
İterasyon (kelime anlamı: tekrarlama, yenileme) yöntemleri A x=b denklem sisteminin çözümünü aşağıdaki ilkeye göre çözmeye çalışırlar: Başlangıç: x bilinmeyenler vektörü için bir başlangıç değeri tahmin edilir, örneğin: x =x(0)=[0 0 … 0]T
sn o
İterasyon: 1 adım: hata vektörü h=b-A x küçülecek şekilde yeni bir yaklaşım bulunur: x=x(1) 2.adım: hata vektörü h=b-A x küçülecek şekilde yeni bir yaklaşım bulunur: x=x(2) … k.adım: hata vektörü h=b-A x küçülecek şekilde yeni bir yaklaşım bulunur: x=x(k) … İterasyonu durdurma koşulu sağlanıncaya kadar tekrarlanır.
em de r
Kaç adım sonunda çözüme varılabileceği, k nın üst sınırı, önceden kestirilemez. İterasyonu durdurma koşuluna gerek vardır. Durdurma koşulu için farklı yaklaşımlar vardır, bazı örnekler: 1. iterasyon sayısının üst sınırı, max k 2. h =b-A x(k) olmak üzere,
3. h =xk - x(k-1) olmak üzere,
4.
max | xik − xik −1 |≤ ε ,
h Th ≤ ε
h Th ≤ ε
i=1, 2, …, n
Burada ε kabul edilebilir hata değeridir, x vektörünün fiziksel anlamına bağlı olarak, ε=0.1 - ε=10-14 gibi tipik bir değer olabilir.
w
w
w .e
Çok sayıda iterasyon metodu vardır. Burada JACOBI, GAUSS-SEIDEL ve CG (Conjugate Gradient) metotlarına yer verilecektir. JACOBI ve GAUSS-SEIDEL metodları katsayılar matrisi simetrik veya simetrik olmayan denklem sistemlerinde kullanılabilir. CG Metodu ise sadece katsayılar matrisi simetrik ve pozitif tanımlı denklem sistemleri için kullanılır. JACOBI metodu1:
İterasyona başlamadan önce, 7.1 denklem sistemi diyagonal elemanları aii≠0 olacak şekilde yeniden düzenlenir. Bunun için gerekirse satırların yerleri değiştirilir. 7.1 sisteminden x1, x2, …, xn çekilerek x1 =
1 (b1 -a12 x 2 − a13 x 3 -...-a1n x n ) a11
x2 =
1 (b2 -a 21 x1 − a 23 x 3 - ... − a 2n x n ) a 22
(7.2)
. xn =
1 (bn -a n1 x1 − a n 2 x 2 − a n3 x 3 -...) a nn
şeklinde yazılır. 1
Carl Gustav Jakob JACOBI (1804 - 1851 ), Alman: 1845 de yayınlandı. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
85
86
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
İterasyona x1, x2, x3, …, xn bilinmeyenleri için, fiziksel anlamına göre, bir başlangıç değeri tahmin edilerek başlanır. Herhangi bir tahmin yapılamıyorsa x1= x2= …= xn=0 veya
x1 =
b b1 b , x 2 = 2 ,..., x n = n a11 a 22 a nn
alınabilir. Bu xi değerleri 7.2 in sağ tarafında yerine konur,
ri. co
m
soldaki yeni xi değerleri hesaplanır. İterasyonu durdurma koşulu kontrol edilir, sağlanıyorsa iterasyon durdurulur. Sağlanmıyorsa yeni xi değerleri 7.2 nin sağ tarafında yerine konur ve soldaki yeni xi değerleri hesaplanır. İterasyonu durdurma koşulu sağlanıncaya kadar bu işlem tekrarlanır. Örnek:
Ax = b →
1 1 0 x1 1 4 0 1 x 2 2 = , x =? 0 4 1 x 3 0 1 1 4 x 4 1
tla
4 1 1 0
1 (1 − x 2 − x 3 ) 4 1 x 2 = (2 − x1 − x 4 ) 4 1 x3 = (− x1 − x 4 ) 4 1 x 4 = (1 − x 2 − x3 ) 4
em de r
x1 =
sn o
Denklem sisteminin direkt yöntemlerle çözümü xT=[0.1667 0.4167 -0.0833 0.1667] dir. Çözümde ondalık sayıdan sonra 4 hane verilmiştir. Aynı denklem sistemini JACOBI iterasyonu ile çözelim. Denklem sistemini
şeklinde yazalım. i. bilinmeyenin k. Ve k-1. adımda hesaplanan iki değerinin farkı x ik − x ik −1 olmak üzere, Max | xik − xik −1 |≤ ε koşulu sağlanınca iterasyonu durduralım.
ε=0.0001 seçelim.
Çözümde 4 ondalık hane kullanalım. Başlangıç için x =x =[0 0 0 0] alalım. X1 0 0.2500 0.1250 0.1875 0.1563 0.1719 0.1641 0.1680 0.1660 0.1670 0.1665 0.1668 0.1666 0.1667
X2 0 0.5000 0.3750 0.4375 0.4063 0.4219 0.4141 0.4180 0.4160 0.4170 0.4165 0.4168 0.4166 0.4167
w
w
w .e
k 0 1 2 3 4 5 6 7 8 9 10 11 12 13
İterasyon no
X3 0
0 -0.1250 -0.0625 -0.0938 -0.0782 -0.0860 -0.0821 -0.0840 -0.0830 -0.0835 -0.0833 -0.0834 -0.0833
x4 0 0.2500 0.1250 0.1875 0.1563 0.1719 0.1641 0.1680 0.1660 0.1670 0.1665 0.1667 0.1666 0.1667
(0)
T
Başlangıç değerleri
Max | xik − xik −1 |=| x42 − x14 |=| 0.1250 − 0.2500 |= 0.1250 > ε = 0.0001 olduğundan iterasyona devam!
| 0.1875 − 0.1250 |= 0.0625 > ε = 0.0001, iterasyona devam!
| 0.1660 − 0.1680 |= 0.0020 > ε = 0.0001, iterasyona devam!
| 0.1668 − 0.1665 |= 0.0003 > ε = 0.0001, iterasyona devam! | 0.1667 − 0.1666 |= 0.0001 = ε = 0.0001, iterasyon durduruldu !
13. iterasyon sonunda bulunan çözüm
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
86
87
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
Çözüm:
x1 0.1667 x 2 = 0.4167 x3 − 0.0833 x4 0.1667
m
GAUSS-SEIDEL metodu1:
x1 =
1 (b1-a12 x 2 − a13 x 3 -...-a1n x n ) a11
x2 =
1 (b2 -a 21 x1 − a 23 x 3 - ... − a 2 n x n ) a 22
ri. co
İterasyona başlamadan önce, 7.1 denklem sistemi diyagonal elemanları aii≠0 olacak şekilde düzenlenir. Bunun için gerekirse satırların yerleri değiştirilir. 7.1 sisteminden x1, x2, …, xn çekilerek
(7.3)
xn =
1 (bn -a n1 x1 − a n 2 x 2 − a n3 x 3 -...) a nn
sn o
şeklinde yazılır.
tla
.
İterasyona x1, x2, x3, …, xn bilinmeyenleri için, fiziksel anlamına göre, bir başlangıç değeri tahmin edilerek başlanır. Herhangi bir tahmin yapılamıyorsa x1= x2= …= xn=0 veya
x1 =
b b1 b , x 2 = 2 ,..., x n = n alınabilir. a11 a 22 a nn
em de r
xi değerleri 7.3 ün 1. denkleminin sağ tarafında yerine konur, x1 in yeni değeri bulunur. x1 in yeni değeri ve x3, x4, …, xn nin önceki değerleri 2. denklemin sağ tarafında yerine konur, x2 nin yeni değeri bulunur. x1 ve x2 nin yeni değeri ile x4, …, xn nin önceki değerleri 3. denklemin sağ tarafında yerine konur, x2 nin yeni değeri bulunur. … x1, x2, …, xn-1 in yeni değerleri n. denklemin sağ tarafında yerine konur, xn nin yeni değeri bulunur. İterasyonu durdurma koşulu kontrol edilir, Sağlanmıyorsa son xi değerleri ile işlem tekrarlanır.
sağlanıyorsa
iterasyon
durdurulur.
GAUSS-SEIDEL metodu ile JACOBI metodu temelde aynıdır. Tek fark şudur: GAUSS-SEIDEL metodunda xi nin her yeni değeri hemen kullanılır.
w
w
w .e
Örnek:
A x = b,
4 1 1 0
1 1 0 x1 1 4 0 1 x 2 2 = , x =? 0 4 1 x 3 0 1 1 4 x 4 1
Denklem sisteminin direkt yöntemlerle çözümü xT=[0.1667 0.4167 -0.0833 0.1667] dir. Çözümde ondalık sayıdan sonra 4 hane verilmiştir. Aynı denklem sistemini GAUSS-SEIDEL iterasyonu ile çözelim. Denklem sistemini
1
Philipp Ludwig von SEIDEL (1821 – 1896), Alman: 1874 yılında yayınlandı. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
87
88
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
1 (1 − x 2 − x 3 ) 4 1 x 2 = ( 2 − x1 − x 4 ) 4 1 x 3 = ( − x1 − x 4 ) 4 1 x 4 = (1 − x 2 − x 3 ) 4
ri. co
m
x1 =
şeklinde yazalım. i. bilinmeyenin k. ve k-1. adımda hesaplanan iki değerinin farkı x ik − x ik −1 olmak üzere, Max | xik − xik −1 |≤ ε koşulu sağlanınca iterasyonu durduralım.
ε=0.0001 seçelim.
Çözümde 4 ondalık hane kullanalım. Başlangıç için x =x =[0 0 0 0] alalım. (0)
İterasyon adımları
X3 0 -0.0625 -0.0782 -0.0821 -0.0830 -0.0833 -0.0833 -0.0834
x4 0 0.1563 0.1641 0.1660 0.1665 0.1666 0.1667 0.1667
Başlangıç değerleri
Max | xik − xik −1 |=| x12 − x12 |=| 0.1563 − 0.2500 |= 0.0937 > ε = 0.0001 olduğundan iterasyona devam!
| 0.1641 − 0.1563 |= 0.0078 > ε = 0.0001, iterasyona devam! | 0.1667 − 0.1666 |= 0.0001 = ε = 0.0001 , iterasyonu durdur!
7. iterasyon sonunda bulunan çözüm
x1 0.1667 x 2 = 0.4167 x 3 − 0.0834 x 4 0.1667
w
w
w .e
em de r
Çözüm:
X2 0 0.4375 0.4219 0.4180 0.4170 0.4168 0.4167 0.4167
tla
X1 0 0.2500 0.1563 0.1641 0.1660 0.1665 0.1666 0.1667
sn o
k 0 1 2 3 4 5 6 7
T
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
88
89
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
Aitken iterasyon hızlandırıcısı Yukarıdaki örneklerden görüldüğü gibi, iterasyon gerçek çözüme oldukça yavaş yakınsamaktadır. JACOBI ve GAUSS-SEIDEL iterasyonları doğrusal yaklaşım sergilerler. Doğrusal yaklaşımlı iterasyon metotlarında AITKEN1 hızlandırıcısı kullanılarak iterasyon hızlandırılabilir. Herhangi bir xi bilinmeyenin birbirini izleyen üç iterasyon
x ik ← xik −
k
değerleri kullanılarak x i
( xik − x ik −1 ) 2 xik − 2 x ik −1 + x ik −2
nın değeri iyileştirilebilir. AITKEN’e göre
dir.
Bu formülü kullanarak aşağıdaki örneği JACOBI metodu ile çözelim:
1 (1 − x 2 − x3 ) 4 1 x2 = (2 − x1 − x4 ) 4 1 x3 = ( − x2 − x 4 ) 4 1 x4 = (1 − x 2 − x3 4
k 0 1 2 3
X2 0 0.5000 0.3750 0.4375 (0.4167) 0.4063 (0.4167)
X1 0 0.2500 0.1250 0.1875 (0.1667) 0.1563 (0.1667)
4
0 -0.1250 -0.0625 (-0.0833) -0.0938 (-0.0834)
x4 0 0.2500 0.1250 0.1875 (0.1667) 0.1563 (0.1667)
Max | xik − xik −1 |=| 0.1250 − 0.2500 |= 0.1250 > ε = 0.0001 olduğundan iterasyona devam! Aitken
4. iterasyon sonunda bulunan çözüm
0.1875 −
(0.1875 − 0.1250) 2 = 0.1667 0.1875 − 2 ⋅ 0.1250 + 0.2500
| −0.0834 − (−0.0833 |= 0.0001 = ε = 0.0001 iterasyonu durdur!
em de r
İterasyon adımları
X3 0
Alexander Craig Aitken(1895-1967)
Başlangıç değerleri
sn o
A x = b,
1 1 0 x1 1 4 0 1 x2 2 = , x=? 0 4 1 x3 0 1 1 4 x4 1
tla
x1 =
4 1 1 0
x ik
m
nın iyileştirilmiş değeri
xik − 2 , xik −1 , xik
ri. co
adımı sonunda bulunan
Parantez içinde koyu yazılmış değerler AITKEN formülü ile iyileştirilmiş değerlerdir. Görüldüğü gibi yakınsama hızlanmış, 13 iterasyon yerine sadece 4 iterasyon yeterli olmuştur. AITKEN hızlandırıcısı, formülün yapısı gereği, en erken 3. adım sonunda uygulanabilir. Ancak, ilk adımlarda değerler çok kaba olduğundan, büyük denklem sistemlerinde 5.-10. adımdan sonra uygulanması daha uygun olur. İterasyonun son adımlarında da yarar sağlamaz, çünkü sadece son hanelerde çok küçük değişiklikler olmaktadır. Max | xik − xik −1 |≤ 10 ⋅ ε olduğunda AITKEN hızlandırıcısının devre dışı bırakılması uygun olur. AITKEN hızlandırıcısının tek sakıncalı yönü, ardaşık üç iterasyon vektörünün bellekte tutulması zorunluluğudur.
__________________________________
A. C. AITKEN (1895 - 1967), Yeni Zelandalı matematikçi, ünlü formülü 1926 da yayınladı.
CG (Conjugate Gradient) metodu1 A simetrik ve pozitif tanımlı, yani x A x > 0 olmak üzere T
A x=b
(7.4)
denklem sisteminin
w
w
w .e
1
f ( x) =
1 T x Ax − x T b 2
(7.5)
fonksiyonunu minimum yapacak x çözümü aranır. f(x) in minimum olma koşulu ∂ f ( x) ∂ f ( x) 1 = 0 dır: = 2 A x − b = 0 dan A x=b denklem sistemi olur. ∂x ∂x 2
1
Magnus R. HESTENES(1906-1991), Amerikalı ve Eduard L. STIEFEL(1909-1978), İsviçreli: 1952 yılında yayınladılar. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
89
90
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
m
Çözüme x0 başlangıç vektörü tahmin edilerek başlanır. Genellikle x0 = 0 alınır. Toplam k iterasyon adımında öyle x1, x2, x3, … , xk vektörleri belirlenir ki son bulunan xk vektörü 7.5 ifadesini minimum yapar. Maksimum iterasyon sayısı teorik olarak bilinmeyen sayısı kadardır: k≤n. Bu nedenle CG metodunu direkt metot olarak gören yazarlar da vardır. Ancak, yuvarlama hataları nedeniyle k>n olabilir. CG Metodunun iterasyon adımları:
Başlangıç vektörü seçilir: x0=0 Kabul edilebilir hata sınırı ε seçilir.
ri. co
Çözülecek denklem sistemi: A x=b
Hazırlık: r0=b, s1=b alınır (yardımcı başlangıç vektörleri). 1.adımı:
2.adımı: T
s1 r 0
α2 =
T
s 1 As 1
T
s2 r1
α3 =
T
s 2 As 2
s3 r 2
……
k.adımı:
tla
T
α1 =
3.adımı:
T
s 3 As 3
T
αk =
s k r k −1 T
s k As k
x1 = x 0 + α 1 s1
x 2 = x1 + α 2 s 2
x3 = x 2 + α3 s3
r 1 = r 0 − α 1 As 1
r 2 = r 1 − α 2 As 2
x k = x k −1 + α k s k
r 3 = r 2 − α 3 As 3
r k = r k −1 − α k As k
T
T
T
T
β1 = −
r 2 r 2 ≤ ε ise durdur!
r 1 As 1
β2 = −
T
s 1 As 1
sn o
r 1 r 2 ≤ ε ise durdur!
β3 = −
s 2 As 2
s3 = r 2 + β2 s2
r 3 As 3 T
s 3 As 3
s 4 = r 3 + β3 s3
em de r
s 2 = r 1 + β1 s1
T
Not: • Her adımın formüllerinde 4 kez görülen
As k çarpımı her adımda bir kez yapılır.
•
s Tk As k değeri her adımda bir kez hesaplanır.
•
Her adımın formüllerinde 2 kez görülen
rk
r k r k ≤ ε ise durdur! T
T
r 2 As 2 T
r 3 r 3 ≤ ε ise durdur!
(kalan) hata vektörüdür. Teorik olara
T
βk = −
r k As k T
s k As k
s k +1 = r k + β k s k
r k =0 olduğunda iterasyon sona erer. Ancak, sayısal hesaplarda tam
sıfır genelde yakalanamaz, hataların karelerinin karekökü kabul edilebilir hata sınırı altında kalınca iterasyonu durdurmak daha iyi bir yoldur:
r Tk r k ≤ ε . Diğer bir seçenek: r k nin elemanlarından mutlak değerce en
büyüğü<ε olunca iterasyon durdurulur. •
i≠ k için
ri
ve
rk
ortogonaldır,
r i r k = 0 olmalıdır. T
Bu koşul yardımıyla iterasyonun, yuvarlama hataları
w
w
w .e
nedeniyle, tehlikeye girip girmediği kontrol edilebilir.
Örnek:
A x = b,
4 1 1 0
1 1 0 x1 1 4 0 1 x 2 2 = , x =? 0 4 1 x 3 0 1 1 4 x 4 1
Başlangıç vektörü seçilir: x0=[0 0 0 0]T alalım. Kabul edilebilir hata sınırı seçilir: ε=0.0001 olsun. Hazırlık, yardımcı vektörler: r0=[1 2 0 1]T,
s1=[1 2 0 1]T
Hesaplarda ondalık sayıdan sonra 4 hane yürütelim. 1. adım:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
90
91
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
s1 r 0 T 1
s As1
=
T
6 = 0.1875 32
0.1875 0.3750 , x 1 = x 0 + α 1 s1 = 0 0.1875 r 1 r 1 = 0.1875, T
r 1 A s 1 = −1, T
m
T
α1 =
s1 A s 1 = 32
− 0.1250 0.1250 r 1 = r 0 − α 1 A s1 = − 0.3750 − 0.1250
ri. co
T
0.1875 = 0.4330 > ε = 0.0001 olduğundan iterasyona devam edilecek!
β1 = −
r As1 s A s1
=−
−1 = 0.0313, 32
− 0.0937 0.1876 s 2 = r 1 + β1 s1 = − 0.3750 − 0.0937
sn o
2. adım:
T 1 T 1
tla
s 1 r 0 = 6,
6 10 A s1 = , 2 6
em de r
− 0.5622 0.5630 , sT As = 0.8438 sT2 r1 = 0.1875, As 2 = 2 2 − 1.6874 − 0.5622 0.1667 0.4167 T s r 0.1875 , = 0.2222, x 2 = x1 + α 2 s 2 = α2 = T2 1 = − 0.0833 s 2 As 2 0.8438 0.1667 r T2 r 2 ≈ 0.,
− 0.0001 − 0.0001 r2 = − 0.0001 − 0.0001
0 = 0 < ε = 0.0001 olduğundan iterasyon durduruldu !
w
w
w .e
0.1667 0.4167 Çözüm: x = − 0.0833 0.1667 Sadece 2 adımda çözüm bulunmuştur. Aynı örnek için JACOBI 13, GAUSS-SEIDEL 7, AITKEN hızlandırıcılı JACOBI 4 iterasyon adımı gerektirmişti. CG metodunun diğer iterasyon metotlarına göre üstünlüğü bu küçük örnek ile dahi görülmektedir. Ancak, CG metodunun sadece simetrik ve pozitif tanımlı A özel durumu için geçerli olduğunu hatırlatalım. Genel olarak, GAUSS-SEIDEL metodu JACOBI metodundan, CG metodu da her ikisinden çok daha çabuk yakınsar. JACOBI metodu uygulamada hemen hiç kullanılmaz.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
91
92
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
Not: • CG (Conjugate Gradient) iterasyon metodu 1952 yılında M. R. HESTENES ve E. STIEFEL tarafından yayınlandı. Bak: Hestenes, M. L., Stiefel, E., 1952. Methods of Conjugate Gradients for Solving Linear Systems. J. of Research of the National Bureau of Standards 49 (6). http://nvl.nist.gov/pub/nistpubs/jres/049/6/V49.N06.A08.pdf.
m
• CG (Conjugate Gradient) iterasyon metodu sadece A katsayılar matrisi simetrik ve pozifif tanımlı sistemlerin çözümünde kullanılabilir. A x=b denklem sisteminde A simetrik değilse, AT A x= AT b dönüşümü yapılarak CG metodu AT A x= AT b sistemine uygulanabilir. Çünkü AT A x= AT b sisteminde AT A katsayılar matrisi simetrik ve pozitif tanımlıdır.
Eduard L. STIEFEL(1909-1978)
w
w
w .e
em de r
Magnus R. HESTENES(1906-1991)
sn o
tla
ri. co
• CG (Conjugate Gradient) iterasyon metodu 20. yüzyılın en iyi algoritmalarından biri seçilmiştir. Bak: http://www.cs.duke.edu/courses/fall06/cps258/references/topten.pdf http://www.bilisimdergi.com/20-Yuzyilin-En-iyi-10-Algoritmasi-3-10.html
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
92
93
7. İTERASYON YÖNTEMLERİ: JACOBI, GAUSS-SEIDEL, CG
İterasyon yöntemlerinin avantajları
ri. co
m
• A x=b denklem sistemi direkt metodlar ile çözülemeyecek kadar büyük ise ve A seyrek bir matris ise iterasyon yöntemleri ile çözülebilir. İterasyon yöntemleri ile çözülebilecek denklem sisteminin büyüklüğü günümüzde 1-2 milyara dayanmıştır. • A seyrek matris ise çok az bellek gerektirir. • A seyrek matris ise çok az dört işlem, çok daha az hesap süresi gerektirir. • Optimizasyon gibi tekrarlanan problemlerin çözümüne uygundur. Çünkü bir önceki çözüm bir sonraki çözümün başlangıç vektörü olarak alınabilir, çözüm çok çabuk yakınsar. • İterasyon metotlarında A x=b denklem sisteminin A katsayılar matrisi değişikliğe uğramaz. Buna karşın; direkt metotlarda A nın elemanları değişir, sıfır elemanlar sıfırdan farklı olurlar. Seyrek matrisler giderek dolu matris olurlar. • İterasyon metotlarında yuvarlama hataları direkt metotlara nazaran çok daha az sorun yaratır. • Birkaç iterasyon adımı sonunda oldukça yaklaşık bir ara çözüm oluşur. Kabaca bir çözümün yeterli olduğu problem türlerinde birkaç iterasyon adımı yeterli olur. Direkt metotlarda ara çözüm bulmak mümkün değildir. • Tümü ana bellekte depolanamayacak kadar büyük denklem sistemlerinde A nın hard diskte depolanması ve çözümün taksit-taksit yapılması çok daha basittir. İterasyon yöntemlerinin dezavantajları
tla
• Katsayılar matrisi tam dolu ise, yani seyrek değil ise, iterasyon metotları kullanmak uygun olamaz (çok fazla bellek, çok fazla işlem yükü, biriken yuvarlama hataları). •
Karşı taraf vektörünün iterasyon başlamadan önce bilinmesi zorunludur.
•
Birden çok her karşı taraf vektörü için itarasyonun tekrarlanması gerekir.
•
İterasyonun kaç adımda sona ereceği, dolayısıyla hesap süresi önceden kestirilemez.
sn o
• Bazı özel durumlar hariç, her denklem sisteminde iterasyonun yakınsayacağı garantisi yoktur. Çözüm yakınsayabilirde, ıraksayabilirde. Aynı denklem sisteminin için iterasyon metotlarından biri yakınsarken bir diğeri ıraksayabilir. Ancak; katsayılar matrisi kesin diyagonal ağırlıklı veya simetrik pozitif tanımlı ise JACOBI ve GAUSS-SEIDEL metodu mutlaka yakınsar. CG metodu ise sadece simetrik ve pozitif tanımlı matrisler için daima yakınsar.
em de r
• Çözümün yakınsamaması durumunda iterasyon, teorik olarak, sonsuza kadar devam eder. Bu nedenle iterasyon sayısı maksimum iterasyon sayısı ile sınırlandırılmak zorundadır. Maksimum iterasyon sayısının ne olması gerektiğinin net bir cevabı yoktur. Çok küçük tutulursa doğru sonuca ulaşılamaz, çok büyük tutulursa gereksiz yere hesap süresi uzar. • İterasyonun yakınsamaması durumunda sorunun kullanılan metottan mı yoksa denklem sisteminin yapısından mı kaynaklandığını belirlemek zordur. Örneğin denklem sistemi hatalı kurulmuş ise, katsayılar matrisinin determinantı sıfır ise çözüm yakınsamaz. İterasyon metotlarında determinant hesabı mümkün olmadığından hata kaynağı belirlenemez. Hatırlatma:
Kesin diyagonal ağırlıklı matris tanımı için bak: bölüm 1 , sayfa 15. Simetrik pozitif tanımlı matris tanımı için bak : : bölüm 1, sayfa 15 ve bölüm 6 sayfa 78.
Hangi çözüm yöntemi daha iyi?
w
w
w .e
n bilinmeyenli A x=b doğrusal denklem sisteminin çözümü için hangi metot daha uygundur? Cevabı oldukça zor bir sorudur bu! Çünkü çok sayıda etken vardır: Denklem sisteminin büyüklüğü, A nın yapısı, çözüm süresi, çözümden beklenen hassasiyet, kullanılacak bilgisayarın özellikleri, paket program var mı veya programlanacak mı? Bir fikir vermek üzere aşağıdaki yorumları yapabiliriz:
• Denklem sistemi küçük ise direkt metotlardan (GAUSS, DOOLITTLE, CROUT, CHOLESKY) birini kullanmak uygundur. Ancak küçük nedir? Sorusu çıkar karşımıza. A tam dolu ise, günümüz bilgisayarları için n ≤ 10000 bilinmeyen küçük sayılabilir. A bant matris ise n ≤ 20000, bant ve simetrik ise n ≤ 40000 bilinmeyen küçük sayılabilir.
• Denklem sistemi büyük ve A seyrek bir matris ise; iterasyon yöntemi kullanılmak zorundadır. Ancak, sayısız denilecek kadar, az yada çok birbirinden farklı, iterasyon metodu vardır. En uygun iterasyon metodunun seçimi zordur. • Yuvarlama hatalarının sorun yaratacağı sistemlerde iterasyon yöntemleri uygun olur. A nın simetrik ve pozitif tanımlı olduğu biliniyorsa CG metodu en uygun iterasyonyon yöntemidir. • İterasyon yöntemlerinden, elden geldiğince, kaçınmak gerekir. Uygun bir iterasyon yöntemi aramak yerine direkt metotlar ile çözümün yapılabileceği uygun bir bilgisayarın aranması belki de daha doğru bir yoldur.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
93
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
tla
Ders notları 2014
sn o
Ahmet TOPÇU
em de r
m=n
Kare matrisin tersi
a 11 a 12 a 21 a 22 . . a n1 a n2
... a 1n x 11 ... a 2n x 21 ... . . ... a nn x n1
x 12 x 22 .
x n2
Birim matris
... x 1n 1 ... ... x 2n 1 ... = ... . . . ... . ... x nn ... 1
A A-1=I
w
w
w .e
Kare matris
8 TERS MATRİS HESABI GAUSS-JORDAN tekniği
Wilhelm Jordan (1842-1899)
8. TERS MATRİS HESABI
94
8. TERS MATRİS HESABI Bölüm 2 sayfa 27 de ters matrisin tanımı, özellikleri ve adjoint matris yöntemiyle sayısal bir −1 hesap örneği verilmişti. A nxn matrisi ve tersi A nxn tanım gereği −1
A nxn A nxn = I nxn
m
(8.1)
−1
bağıntısını sağlar. Ters matrisi x nxn = A nxn ile gösterirsek
A nxn x nxn = I nxn A-1
a 11 a 21 . a n1
a 12 a 22 . a n2
... a 1n x 11 ... a 2n x 21 ... . . ... a nn x n1
x 12 x 22 . x n2
I
... x 1n 1 ... ... x 2n 1 ... = ... . . . ... . ... x nn ... 1
(8.3)
tla
A
ri. co
(8.2)
sn o
ifadesinden hesaplanacak x matrisi A nın tersi olur. Bu ifade n karşı taraflı ve n bilinmeyen vektörlü bir denklem sistemidir. A matrisi GAUSS, DOOLİTTLE, CROUT veya CHOLESKY metodlarından biri ile üçgen çarpanlarına ayrılarak x in her bir vektörü hesaplanabilir. Ancak bu tarz hesap yolu iyi değildir. Çünkü hem A nın hem de tersi olan x in aynı anda bilgisayar belleğinde tutulması gerekir. Gerekli bellek 2n2 dir.
em de r
Ters matrisin hesabı için GAUSS, DOOLİTTLE, CROUT veya CHOLESKY metotları yerine GAUSS-JORDAN1 metodu kullanılır. GAUSS-JORDAN metodunda tüm işlemler A nın üzerinde yapılır, ters matris A nın üstüne depolanır. Dolayısıyla, diğer metotların yarısı kadar, sadece n2 bellek gerekir. Bu nedenle, diğer metotlara nazaran daha çok işlem gerektirmesine rağmen, GAUSS-JORDAN metodu tercih edilir. Ters matris hesabı için iterasyon metotları uygun değildir, çünkü A seyrek veya bant matris olsa bile tersi daima tam dolu bir matristir.
GAUSS-JORDAN tekniği ile ters matris hesabı GAUSS-JORDAN tekniğine göre Anxn düzenli(tekil olmayan) matrisinin tersi birbirini izleyen transformasyonlar ile hesaplanır. Anxn matrisi, her adımda bir tane olmak üzere, n adımda belirlenebilen T1, T2, …, Tn transformasyon matrisleri ile soldan ardışık çarpılarak birim matrise dönüştürülür. nxn boyutlu transformasyon matrisleri öyle seçilirler ki
w
w
w .e
Tn … T2 T1 A=I
olur. Buradan, Ters matrisin tanımı gereği A-1=Tn … T2 T1 olduğu anlaşılır.
Transformasyon matrislerinin belirlenmesi:
A nxn
a 11 a 12 a a 22 = 21 . . a n1 a n 2
... a 1n ... a 2n ... . ... a nn
verilmiş olsun. T1, T2, …, Tn transformasyon matrislerinin nasıl hesaplanacağı adım adım açıklanacaktır. 1
Wilhelm Jordan (1842 – 1899), Alman: 1887 de yayınlandı. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
94
8. TERS MATRİS HESABI
95
0 0 ... 0 1 0 ... 0 , 0 1 ... 0 . . ... . 0 0 ... 1
1 0 B = T 1 A = 0 . 0
b12 b22
b13 b23
b32 . bn 2
b33 . bn 3
... b1n ... b2 n ... b3 n , ... . ... bnn
(a11 ≠ 0 )
ri. co
1 a 11 − a21 a11 T 1 = a31 − a11 . an1 − a11
m
1. adım: A matrisinin 1. kolonunun elemanları yardımıyla oluşturulan nxn boyutlu T1 matrisi Anxn matrisi ile soldan çarpılarak B matrisine dönüştürülür:
Görüldüğü gibi, T1 öyle seçilmiştir ki çarpım sonrası B=T1A matrisinin birinci kolonu birim matrisin birinci kolonuna dönüşmüştür. T1 in özelliği nedeniyle B nin elemanları
a1 j a11
ve bij = a ij -
a i1 a1 j , a11
(i ≠ 1 )
tla
b1 j =
ile hesaplanmaktadır.
sn o
Açıklama: Bu formüllerden anlaşılacağı gibi, B nin 1. kolonunun hesaplanması gerekmez. bij elemanını hesaplamak için T1 matrisinin i. satırındaki tüm elemanların A nın j. kolonundaki elemanlar ile çarpılıp toplanması da gerekmez. T1 in i. satırındaki ilk eleman -a i1 /a 11 , A nın j. kolonundaki ilk elemanla çarpılır ve bulunan değer aij ile toplanırsa bij bulunur. Gerçekte nxn boyutlu olan T1 in, yapısı incelendiğinde, tamamının oluşturulmasına gerek olmadığı, sadece 1. kolonunun bir vektör olarak hesaplanmasının yeterli olduğu anlaşılır. Ayrıca, B nin 1. kolonu sonraki hesaplarda kullanılmayacağı için, B=T1A hesaplandıktan sonra T1 in 1. kolonu B nin 1. kolonuna yazılarak saklanabilir. Bu açıklamanın amacı, gereksiz dört işlemin önlenmesine yöneliktir.
2. adım: B matrisinin elemanları yardımıyla T2 hesaplanır, B ile soldan çarpılır C matrisi
em de r
oluşur:
b12 1 - b 22 1 0 b22 T2 = b 0 - 32 b22 . . bn 2 0 b22
b2 j
ve cij = bij -
w
w
w .e
c2 j =
0 ... 0 0 ... 0 , 1 ... 0 . ... . 0 0 1
b22
1 0 B = T 2 T 1 A = 0 . 0
bi 2 a1 j , b22
0 c13 1 c23 0 c33 .
.
0 cn 3
... c1n ... c2 n ... c3n , ... . ... cnn
(b22 ≠ 0 )
(i ≠ 2 )
n. adım: Bu adımdan bir önceki adımda hesaplandığı varsayılan N=Tn-1 … T2 T1A matrisinin elemanlarından Tn belirlenir ve N ile soldan çarpılırsa birim matris oluşur.
1 0 Tn = . 0 0
n1n nnn n 1 ... 0 − 2 n nnn . ... . . , nn −1 0 ... 1 − nnn 1 0 ... 0 nnn 0 ... 0
−
1 0 I = T n ....T 2 T 1 A = . 0 0
0 0 ... 0 1 0 .. 0 . . ... . , 0 0 1 0 0 0 0 1
(nnn ≠ 0 )
Böylece A yı birim matrise dönüştüren transformasyon matrisleri bulunmuş olur. Tanım gereği, A nın tersi A-1=Tn … T2 T1 çarpımından hesaplanır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
95
8. TERS MATRİS HESABI
96
a11, b22, … , nnn sayılarına “pivot eleman”, bu elemanların bulunduğu satır ve kolona “pivot satırı” ve “pivot kolonu” denir. Pivot kelimesi kilit, rol oynayan, yönlendiren olarak tercüme
ri. co
m
edilebilir. Pivot eleman hesabın kaderini belirler. Çünkü, transformasyon matrislerinin hesabında geçen pivot elemanların a11≠0, b22≠0, … , nnn≠0 olması gerekir, aksi durumda hesaba devam edilemez. Pivot elemanın sıfır olması halinde, örneğin b22=0 ise, B matrisinin 2. satırında pivot eleman aranır ve 2. kolon sonraki kolonlardan biri ile değiştirilir, pivot elemanın sıfırdan farklı olması sağlanır ve hesaba devam edilir. Hangi kolonun hangi kolon ile değiştirildiği bir yere kaydedilir. Çünkü iki kolonun yerinin değiştirilmesi sonuçta hesaplanan ters matrisin aynı nolu satırlarının değiştirilmesini gerektirir. Sıfırdan farklı pivot elemanın bulunamaması durumunda; örneğin T2 nin hesaplanması sırasında b22=b23=…=b2n=0 ise; kolon değiştirmek bir işe yaramaz. Bunun anlamı; A matrisinin tekil, yani det A=0 olduğu, A nın tersinin hesaplanamayacağı, A-1 in tanımsız olduğudur.
sn o
tla
Pivot elemanın sıfırdan farklı, fakat mutlak değerce çok küçük olması da nümerik sorun yaratır. Transformasyon matrislerinin elemanları pivot elemana bölünerek hesaplandığından, pivot elemanın çok küçük olması bölümün çok büyük bir sayı olmasına, bununla çarpılan/toplanan sayıların daha da büyümesine ve yuvarlama hatalarına neden olur. Büyük matrislerde bu işlemler milyonlarca defa yapıldığından, yuvarlama hataları birike birike sonucun yanlış hesaplanmasına neden olur. Yuvarlama hatalarını azaltmak için her adımda pivot aranır. Mutlak değerce en büyük sayı satırda aranır, bu sayı pivot olacak şekilde kolonların yeri değiştirilir.
Örnek:
em de r
2 1 4 A = 2 2 2, A −1 = ? 1 2 0
1. adım: T1 i oluşturmadan önce 1. satırdaki mutlak değerce en büyük sayı aranır. Üçüncü kolondaki 4 sayısı pivot adayıdır. 1. kolon ile 3. kolona yer değiştirilir, a11=4 pivot eleman olur. Sonra T1 oluşturularak A ile soldan çarpılır B matrisi hesaplanır. B nin 1. kolonu birim matrisin birinci kolonuna dönüşür. 1. ve 3. kolonun yerleri değiştirildi!
w
w
w .e
1 0 0 4 4 1 2 1 0.25 0.5 2 0.25 0 0 A = 2 2 2, T1 = − 1 0 = − 0.5 1 0, B = T1 A = 0 1.5 1 4 0 2 1 0 0 1 2 1 0 0 − 0 1 4 2.adım: B nin 2. satırındaki mutlak değerce en büyük sayı aranır. b22=1.5 pivot elemandır. Kolon değiştirilmesi gerekmez. T2 oluşturulur B ile soldan çarpılır, C matrisi hesaplanır. C nin 2. kolonu birim matrisin ikinci kolonuna dönüşür. 0.25 1 - 1.5 1 T 2 = 0 1.5 2 0 − 1.5
0 1 - 0.166667 0 0 = 0 0.666667 0, 0 - 1.333333 1 1
1 0 0.333333 C = T 2 B = 0 1 0.666667 0 0 - 0.333333
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
96
8. TERS MATRİS HESABI
97
3. adım: b33=-0.333333 pivot elemandır. T3 oluşturulur, C ile soldan çarpılırsa I birim matrisi oluşur:
1 0 0 I = T 3 C = 0 1 0 0 0 1
-1
Ters matrisin hesabı: A =T3 T2 T1 den hesaplanır:
0 0 1 − 1.5 1 −2 1 0 = 1 2 4 − 3 − 2 0 1
1. ve 3. satırların yerleri değişmeli!
tla
A −1
0.333333 0.25 1 1 0 − - 0.333333 1 - 1.5 0 4 2 0.666667 1 0 = T3 T 2 T1 = 0 0 0 − - 0.333333 1.5 4 1 2 0 0 0 - 0.333333 0 − 1.5 1 − 4
m
1 0 1 0 1 2 , 0 0 - 3
ri. co
0.333333 1 0 − - 0.333333 0.666667 = T3 = 0 0 - 0.333333 1 0 0 - 0.333333
A
−1
4 − 3 − 2 = 1 −2 2 1 − 1.5 1 -1
em de r
Kontrol: A A =I olmalı:
sn o
1. ve 3. kolonun yerleri değiştirildiğinden 1. ve 3. satırın yerleri değiştirilmelidir:
AA
−1
4 − 3 1 0 0 2 1 4 − 2 = 2 2 2 1 −2 2 = 0 1 0 1 2 0 1 − 1.5 1 0 0 1
Açıklama: Teoriyi açıklamak amacıyla T1, T2, …, Tn, A, B, C, …, N gibi çok sayıda matris gerekli olmakla birlikte, programlama için bu matrislerin hemen hiçbirine gerek yoktur. Tüm transformasyon matrisleri için sadece n elemanlı bir vektör, kolon değişimlerini saklamak için n elemanlı bir vektör ve nxn boyutlu A matrisi yeterlidir. i. transformasyon sonrası A nın i. vektörünün birim matrisin i. vektörüne dönüşeceği bilindiğinden ve i. kolon sonraki hesaplarda gerekli olmadığından, Ti nin i. kolonu A nın i. kolonuna depolanabilir. Tüm işlemler A matrisi üzerinde yapılabilir, bellek harcanmamış olur.
w
w
w .e
Ters matris hesabı fazla dört işlem( yaklaşık 6n3) gerektirir, zorunlu olmadıkça hesabından kaçınılır. Zorunlu durumda GAUSS-JORDAN tekniği tercih edilir. Çünkü tüm diğer yöntemler iki kat daha fazla bellek gerektirir. Ayrıca, varsa, A nın bant ve simetrisinden yararlanılamaz; çünkü ters matris daima tam doludur.
Yukarıda verilen yöntemin i. adımında pivot eleman i. satırda aranmakta, gerekirse, kolonlara yer değiştirilmektedir. Buna satırda pivot arama denir. Satırda pivot arama yerine, i. kolonda da pivot aranabilir ve gerekirse satırlara yer değiştirilebilir. Buna kolonda pivot arama denir. Hatta, i. satır ve kolon ile n. satır ve kolonun sınırladığı matris içinde pivot eleman aranarak, gerekirse hem satırlara ve hem de kolonlara yer değiştirilir. Buna da tam pivot arama denir. Tam pivot arama kullanılırsa yuvarlama hataları en aza indirgenir, ancak hesap süresi çok uzar, genelde tercih edilmez.
Ters matris ile denklem sistemi çözümü −1 A x = b denklem sisteminin çözümü ters matris hesaplandıktan sonra, teorik olarak, x = A b
çarpımından da bulunabilir. Ancak, çok fazla işlem gerektirdiğinden ve
A
−1
tam dolu
olduğundan, bu çözüm yolu hiç bir zaman tercih edilmez. Nümerik hesaplarda, zorunlu olmadıkça, ters matris hesabından kaçınılır! Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
97
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
sn o
Ahmet TOPÇU
tla
Ders notları 2014
n>m
1 3 .3 5 .3 1 7 .4 1 1 6 .9 1 a 9.0 ≈ 1 b 8.6 10.8 1 1 12.4 12.0 1 1 13.2
w
w
w .e
em de r
4 6 8 10 12 Ax = b → 14 16 18 20 22
8 10 12 14 16
y
2 4
6
y=0.52x+2.10
0
2 4
x 6
8 10 12 14 16 18 20 22 24
9
DENKLEM SAYISININ BİLİNMEYEN SAYISINDAN ÇOK OLDUĞU DENKLEM SİSTEMLERİ: DENGELEME HESABI • En küçük kareler metodu • QR çarpanlara ayırma metodu
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
99
9. DENKLEM SAYISININ BİLİNMEYEN SAYISINDAN ÇOK OLDUĞU DENKLEM SİSTEMLERİ: DENGELEME HESABI
ri. co
m
Denklem sayısının bilinmeyen sayısından çok olması durumudur. Gözlem, ölçüm ve deneye dayalı problemlerde ortaya çıkar. Ölçümler hata içerir. Mesela jeodezik ölçümlerde; okuma hatası, alet hatası, atmosferik koşullar(ışığın kırılması, hava basıncı, sıcaklığı gibi) gerçek değerlerin belirlenmesini imkânsız kılar. Ölçme ve deney yoluyla belirlenen veri hatalarını en aza indirgemek için gereğinden çok ölçüm yapılır ve bilinmeyen sayısından daha çok denklem oluşturulur. Kesin çözüm yoktur, çözüm yaklaşıktır ve minimum hata olacak şekilde bulunmaya(dengelenmeye) çalışılır. A x ≈ b genel denklem sistemi n denklem ve m bilinmeyen içerir ve n>m dir:
a 12 a 22 . a n2
... a 1m x 1 b1 ... a 2m x b 2 = 2 . . ... . xm bn ... a nm
3.1 − 6.6 0.58 − 2.9 4.2 x Örnek: 1 ≈ 2.01 2. 7 5.8 x 2 − 4.43 2. 3 1. 8 3.39
(9.1)
tla
a 11 a 21 A x ≈ b, . a n1
sn o
b karşı taraf vektörü hata(ölçme hatası) içerir. A kolon düzenlidir, yani rank A=m dir. Ancak, denklemler uyumlu olmadığından, denklemlerin hepsini de tam olarak sağlayan x vektörü bulmak mümkün değildir. Elden geldiğince iyi bir çözüm bulmaya çalışılır. Elden geldiğince iyi bir çözüm nedir? x öyle hesaplanmalı ki denklem sisteminde yerine konulduğunda, ki denklemi sağlamayacaktır, oluşacak h fark vektörünün (9.2)
em de r
h= A x - b
elemanlarının karelerinin toplamı minimum olsun: f(h)=hTh
min
(9.3)
Bu koşulu sağlayacak farklı çözüm yöntemleri vardır. Bunlardan ilki, “En küçük kareler metodu”, LEGENDRE1 tarafından 1806 yılında yayınlandı. En küçük kareler metodunu GAUSS’un 1794-1795 yıllarında geliştirdiği fakat yayınlamadığına inanılır. Metot LEGENDRE tarafından yayınlanmasına rağmen onun adıyla değil GAUSS adı ile anılır. Bir diğer metot QR çarpanlara ayırma metodudur.
w
w
w .e
En küçük kareler metodu
9.3 koşulu 9.2 de yerine konarak
f ( h) = h h = ( A x − b) T ( A x − b) = x A A x − x A b − b A x + b b T
T
T
T
T
T
T
Bu ifade artık h nın değil x in fonksiyonudur.
f ( x) = x A A x − 2 x A b + b b → min T
T
T
Minimum olma koşulu
T
T
∂f ( x) T = 0 dır. A A simetrik ve kare bir matristir. ∂x
Adrien-Marie Legendre(1752-1833)
∂f ( x) T T = 2 A Ax − 2 A b = 0 ∂x
A Ax = A b T
T
(9.4)
olur2. 1
Adrien-Marie Legendre (1752-1833), Fransız
2
Matris ifadelerin türevinin alınması ile ilgili temel kurallar için bak: Bölüm 2. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
99
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
100
T B = A A ve c = A b
T
(9.5)
ile kısaltılırsa
Bx = c
m
(9.6)
olur. Bu bağıntıdan hesaplanan x minimum hata içerir. 9.4 ve karşılığı olan 9.5 bağıntısına T en küçük kareler metodunun normal denklemleri adı verilir. A A veya karşılığı B simetrik,
ri. co
pozitif tanımlı kare matristir, det B≠0 dır. 9.6 denklem sistemi CHOLESKY ile çözülerek x bulunur. Bu şekilde hesaplanan x minimum hata içerir ve 9.3 koşulunu sağlar. Ancak 9.1 genel denklemini tam olarak sağlamaz, yani x elden geldiğince iyi bir çözümdür, hatalar elden geldiğince dengelenmiştir.
Örnek 1:
1 1000.3 1 1000.1 Ax ≈ b → x ≈ 1 998 1 1000.15 olur. 3.4.5 ve 3.4.6 ya göre
1000.3 1000.1 T = 3998.55 c = A b = [1 1 1 1] 998 1000.15
em de r
1 1 T B = A A = [1 1 1 1] = 4 1 1
sn o
tla
Bir altın külçe 4 kez tartılıyor ve 1000.3, 1000.1, 998, 1000.15 gram geliyor. Muhtemelen hiçbiri doğru değil. Külçenin minimum hata içeren kütlesi ne kabul edilmelidir. Kütlesini x ile gösterelim. Matris notasyonunda denklem sistemi
Minimum hata koşulu: B x = c 4x=3998.55 x=999.6375 gramdır (ortalama değer olduğuna dikkat ediniz).
Örnek 2:
w
w
noktasında noktasında noktasında noktasında noktasında
durularak durularak durularak durularak durularak
m
h3
h23= -6.492 m -2 . 41
3=
8. 0 53
4=
1
0m
4
h1
w .e
1 ve 2 nolu nirengi noktalarının yükseklikleri bilinmektedir: h1=153.625 m, h2=168.177 m. 3 ve 4 noktalarının yüksekliklerini belirlemek için noktaların yükseklik farkları aşağıdaki gibi ölçülmüştür:
1 1 2 2 3
h2=168.177 m
3
.65 h 14=5
= h 24
2 2m 91 -8 .
2m
h1=153.625 m
1-3 1-4 2-3 2-4 3-4
yükseklik yükseklik yükseklik yükseklik yükseklik
farkı farkı farkı farkı farkı
ölçülmüş,h13=8.053 m ölçülmüş, h14=5.652 m ölçülmüş, h23=-6.492 m ölçülmüş, h24=-8.912 m ölçülmüş, h34=-2.410 m
3 ve 4 noktalarının en az hata içeren h3 ve h4 yüksekliklerini bulunuz? Denklemler: h1+h13= h3 153.625+8.053= h3
h3=161.678 m
h1+h14= h4 153.625+5.652= h4
h4=159.277 m
h2+h23= h3 168.177-6.492= h3
h3=161.685 m
h2+h24= h4 168.177-8.912= h4
h4=159.265 m
h3+h34= h4
h3- h4=- h34
h3- h4=-(-2.410)=2.410 m
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
100
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
101
Bu denklemler matris notasyonunda yazılırsa 161.678 159 .277 161.685 159.265 2.410
m
1 1 h 3 ≈ A x ≈ b → 1 h 1 4 1 − 1
161.678 159.277 325.773 1 1 1 T 161.685 = c=A b→ 1 − 1 316.132 1 159.265 2.410
ri. co
1 1 3 − 1 1 1 1 T 1 = B=A A→ , 1 − 1 − 1 3 1 1 1 − 1
Minimum hata koşulu:
tla
h 161.681 3 − 1 h3 325.773 Bx = c → → Cholesky → x = 3 = h = m h − 1 3 4 316.132 4 159.271
bulunur.
sn o
Hata vektörünü ve hataların karelerinin toplamını bulalım:
em de r
0.003 1 161.678 1 159.277 − 0..006 161.681 h = A x − b → h = 1 − 161.685 = − 0.004 , 159.271 1 0.006 159.265 1 − 1 2.410 2.4869 ⋅10 −14
h h = 0.000097 T
Örnek 3:
y
yi ordinatları deneysel olarak belirlenen 10 noktanın koordinatları aşağıdaki tabloda verilmiştir. Nokta no xi yi
2 6 5.3
3 8 7.4
4 10 6.9
5 12 9.0
6 14 8.6
7 16 10.8
8 18 12.4
9 20 12.0
10 22 13.2
Bu noktalar x-y düzleminde işaretlendiğinde sağdaki grafik oluşuyor. Noktalar neredeyse bir doğru üzerindeymiş gibi görünüyor. Bu noktaları en iyi temsil edecek bir doğru uydurmak istiyoruz.
w .e
w
w
1 4 3.3
x 0
2 4
6
8 10 12 14 16 18 20 22 24
Doğru denklemi y=ax+b dir. En uygun a ve b sayılarını belirlememiz gerekiyor. Tablodaki koordinatlar bu denklemde yerine konarak bulanan 10 denklem ve matris notasyonundaki karşılığı: 4 1 3 .3 3.3=4a+b 6 1 5 .3 5.3=6a+b 8 1 7 .4 7.4=8a+b 6.9=10a+b 10 1 6 .9 12 1 a 9.0 9.0=12a+b Ax ≈ b → ≈ 8.6=14a+b 14 1 b 8.6 10.8=16a+b 16 1 10.8 12.4=18a+b 18 1 12.4 12=20a+b 20 1 12.0 13.2=22a+b 22 1 13.2 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
101
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
102
Normal denklem ve çözümü:
2020 130 1328 T T B= A A= , c= A b= 130 10 88.9
m
6
a≈0.52 ve b≈2.10 alınarak y=ax+b doğrusunun denklemi:
ri. co
2020 130 a 1328 a 0.522121 Bx = c → = → Cholesky → x = = 130 10 b 88.9 b 2.10242
8 10 12 14 16
Minimum hata koşulu:
2 4
y=0.52x+2.10 olur. Bu doğru sağda görülen x-y düzleminde çizilmiştir.
h = A x − b →,
tla
Hata vektörünü ve hataların karelerinin toplamını 2. örnekteki yolla bulalım: h h = 4.66762
Hataların karelerinin toplamı oldukça büyüktür. Noktalar bir doğru denklemi yerine, daha yüksek dereceden bir eğri ile modellenirse hatanın azalacağı beklenir.
Örnek 4:
sn o
T
yi ordinatları deneysel olarak belirlenen 6 noktanın koordinatları aşağıdaki tabloda verilmiştir.
4 10 5
5 12 3
6 14 2
Bu noktalar x-y düzleminde işaretlendiğinde sağdaki grafik oluşuyor. Noktalar bir eğri gibi görünüyor. Bu noktaları en iyi temsil edecek bir eğri uydurmak istiyoruz. Eğrinin derecesini tam olarak bilemiyoruz, ama ikinci derece bir polinom (parabol) gibi görünüyor. Bir parabol uydurmaya çalışalım.
8
3 7 5
6
2 4 4
4
1 2 1
em de r
xi yi
2
Nokta no
İkinci derece polinomun(parabolün) genel denklemi y=a0+a1x+a2x2 dir. En uygun a0, a1, a2 sayılarını bulmak istiyoruz. Tablodaki koordinatlar y=a0+a1x+a2x2 fonksiyonunda yerine konarak:
4 1 2 1 1 4 16 a0 4 1 7 49 5 Ax ≈ b → a1 ≈ 1 10 100 a 5 1 12 144 2 3 1 14 196 2
2
w
w
w .e
1= a0+2a1+2 a2 4= a0+4a1+42a2 5=a0+7a1+72a2 5=a0+10a1+102a2 3=a0+12a1+122a2 2=a0+14a1+142a2
Normal denklem ve çözümü:
509 20 T 5887 , c = A b = 167 1637 71825
49 6 B = A A = 49 509 509 5887 T
Minimum hata koşulu:
49 6 B x = c → 49 509 509 5887
509 a 0 20 a 0 − 1.59881 5887 a1 = 167 → Cholesky → x = a1 = 1.67906 a 2 − 0.1035 71825 a 2 1637
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
102
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
6
8
a0 ≈ -1.5988, a1 ≈ 1.6791 ve a2=-0.1035 alınarak y=a0+a1x+a2x2 eğrisinin denklemi:
103
2 4
y=-1.5988+1.6791x-0.1035x2
m
olur. Bu eğri sağda görülen x-y düzleminde çizilmiştir.
h h = 1.0013 T
Örnek 5:
sn o
Bir doğru üzerinde bulunan 4 noktanın aralarındaki mesafeler ölçülmüştür. Ayrıca, ölçüm hatalarını azaltmak için, 1 -3 arası ve 1-4 arası da ölçülmüştür. Ölçülen değerler sağdaki şekilde gösterilmiştir. Ölçüm hatalarını dengeleyiniz.
tla
h = Ax − b →
ri. co
Hata vektörünü ve hataların karelerinin toplamını 2. örnekteki yolla bulalım:
Ölçümler: L1=156 m, L2=229 m, L3=284 m, L4=384, L5=670 m
em de r
Ayrıca, noktalar bir doğru üzerinde olduğundan, şu ek koşulların da sağlanması gerekir: L4-L1-L2=0 L5-L1-L2-L3=0 L5-L3-L4=0 Denklem sistemi ve çözümü:
2 1 − 1 − 1 3 2 3 1 − 1 − 1 T 1 1 3 1 − 2 → c = A b = 3 − 1 − 1 − 1 1 − 1 − 1 − 2 − 1 3
156 229 284 384 670
w
w
w .e
1 156 1 L 229 1 284 1 L2 1 L ≈ 384 → B = AT A = Ax ≈ b → 3 1 670 L4 1 − 1 − 1 L 0 5 − 1 − 1 − 1 1 0 − 1 − 1 1 0
Minimum hata koşulu: 2 1 − 1 − 1 L1 156 L1 155.914 3 L 228.914 2 L 229 3 1 1 1 − − 2 2 Bx = c → 1 1 3 1 − 2 L3 = 284 → Cholesky → x = L3 = 284.514 metre 3 − 1 L4 384 L4 384.600 − 1 − 1 1 L5 669.486 − 1 − 1 − 2 − 1 3 L5 670
Hata vektörünü ve hataların karelerinin toplamını 2. örnekteki yolla bulalım: h = A x − b → h h = 1.11429 T
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
103
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
104
Örnek 6:
Ölçülen değerler: x1=75 kg. x2=100 kg. x3=50 kg. x4=178 kg. x5=122 kg. x6=156 kg. x7=227 kg.
Denklem sistemi ve çözümü:
sn o
tla
Ayrıca, şu ek koşulların da sağlanması gerekir: x4 - x1 - x2=0 x5 - x1 - x3=0 x6 - x2 - x3=0 x7 - x1 - x2 - x3=0
ri. co
m
Üç kişi aynı teraziyi kullanarak tartılıyorlar. Her biri önce tek tek tartılıyor, 75, 100, 50 kg geliyorlar. Sonra 1. ve 2. kişi beraber tartılıyor, 178 kg geliyorlar. Sonra 1. ve 3. kişi beraber tartılıyor, 122 kg geliyorlar. Sonra 2. ve 3. kişi beraber tartılıyor, 156 kg geliyorlar. Son olarak üçü birden tartılıyor ve 227 kg geliyorlar. Her birinin kütlesi nedir?
em de r
75 1 100 1 x1 50 2 2 − 1 − 1 0 − 1 1 4 75 2 100 1 178 4 2 1 0 1 1 x − − − 2 x3 122 2 50 2 4 0 − 1 − 1 − 1 1 T T Ax ≈ b → 1 x4 ≈ 156 → B = A A → − 1 − 1 0 2 0 0 0 → c = A b → 178 − 1 0 − 1 0 122 2 0 0 1 x5 227 x 1 1 1 0 0 1 1 0 0 2 0 − − − − 6 156 x 0 − 1 − 1 − 1 − 1 0 227 0 0 2 1 −1 7 0 1 −1 −1 1 0 − 1 − 1 − 1
Minimum hata koşulu:
w
w
w .e
2 2 − 1 − 1 0 − 1 x1 x1 74.3333 4 75 x 102.3330 2 x 100 − − − 4 2 1 0 1 1 2 2 x3 50.3333 2 50 2 4 0 − 1 − 1 − 1 x3 B x = c → − 1 − 1 0 2 0 0 0 x4 =→ 178 → Cholesky → x = x4 = 177.3330 kg x5 123.3330 − 1 0 − 1 0 122 2 0 0 x5 0 2 0 x6 x6 154.3330 0 −1 −1 0 156 x 227.000 − 1 − 1 − 1 0 227 0 0 2 x7 7
1. kişi 74 kg, 2. kişi=102 kg, 3. kişi=50 kg. Hata vektörünü ve hataların karelerinin toplamını 2. örnekteki yolla bulalım: h = A x − b → h h = 16.0 T
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
104
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
105
Örnek 7:
Bir üçgenin açıları α = 410 , β = 113 0 , γ = 27 0 olarak ölçülmüştür. Dengelenmiş açıları bulunuz.
γ = 180 − (α + β ) = 27 → α + β = 153
β
.
ri. co
olmalıdır. Bu durumda problemin iki bilinmeyeni vardır: α ve
m
Açılar birbirinden bağımsız değildir. γ açısını diğerleri cinsinden yazarsak
Denklemler ve çözüm:
α = 410 β = 113 0
tla
α + β = 153 0
Minimum hata koşulu:
sn o
1 41 α 2 1 194 T T A x ≈ b → 1 ≈ 113 → B = A A → , c = A b → 266 1 2 β 1 1 153
2 1 α 194 α 40.6667 Bx = c → = → Cholesky → x = = 1 2 β 266 β 112 .667
em de r
Dengelenmiş açılar:
α = 40.66671 0
β = 112 .6667 0
γ = 180 − (α + β ) = 180 − 40.6667 − 112 .6667 = 26.6666 0 Hata vektörünü ve hataların karelerinin toplamını bulalım: h h = 0.333333 T
w .e
1 41 − 0.333333 40.6667 h = A x − b → h = 1 − 113 = − 0.333333 , 112 . 667 153 0.333333 1 1
NOT: Uygulamada genellikle A nxm matrisinin satır sayısı çok fazla (n çok büyük), buna karşın kolon sayısı azdır (m küçük). T A A veya karşılığı olan B matrisinin elemanlarının bazıları çok büyük, bazıları da çok küçük olabilmektedir
w
w
(4.örneğe bakınız). Bu tür matrisler tekile yakındır, nümerik zorluk yaratır. Denklem sisteminin çözümünde yuvarlama hataları fazla olur, hatta çözüm bulunamayabilir. Dolayısıyla, en küçük kareler metodunun istikrarsız(instabil) olduğu söylenebilir.
QR çarpanlara ayırma metodu1 Yukarıdaki nedenlerle dengeleme hesabında En küçük kareler metodu yerine QR çarpanlara ayırma metodu tercih edilir. QR çarpanlara ayırma metodu A nxm matrisini, Q ortogonal matris ve R tekil olmayan üst üçgen matris olmak üzere
A = QR 1
1961 yılında, birbirinden bağımsız olarak, İngiliz John G. F. Francis(1934-) ve Rus V. N. Kublanovskaya(1920- tarafından geliştirildi. 20. yüzyılın en iyi 10 algoritmasından biri seçildi. Bak: http://amath.colorado.edu/resources/archive/topten.pdf Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
105
9. DENGELEME HESABI: EN KÜÇÜK KARELER METODU
106
şeklinde çapanlarına ayırır. Q ortogonal matrisi Gram-Schmidt, Householder veya givens
A matrisinden hesaplanır. Q ortogonal, yani
ortogonalleştirme metotlarından biri ile
Q Q = I , olduğundan A x ≈ b dengeleme problemi T
Ax ≈ b → Q R x ≈ b → Q Q R x = Q b → I R x = Q b → R x = Q b T
T
T
m
T
−1
ri. co
olur. R üst üçgen matrisinin tersi tanımlı olduğundan, x bilinmeyenler vektörü geriye doğru hesap ile veya teorik olarak
x=R Q b T
ile hesaplanır.
tla
İşlem sayısı fazla olmasına rağmen, QR metodu istikrarlı(stabil) ve programlanması çok basit bir metottur. Bu metodun teorik detayları için bak: http://tutorial.math.lamar.edu/Classes/LinAlg/QRDecomposition.aspx
w
w
w .e
em de r
sn o
Bu bölümün programları için bak: Bölüm 20
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
106
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
tla
Ders notları 2014
sn o
Ahmet TOPÇU
em de r
n
Katsayılar matrisi
w
w
w .e
a11 a 21 . a n1
a12 a 22 .
a n1
x1 . ... a1m 0 x2 . ... a 2 m 0 . = → Ax = 0 . ... . . . . ... a nm 0 x m
Bilinmeyenler Karşı taraf
10 GENEL DOĞRUSAL DENKLEM SİSTEMLERİ: Denklem sayısı bilinmeyen sayısından az olan homojen ve inhomojen denklem sistemleri
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
108
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
ri. co
m
Anxm xm =bn genel denklem sisteminin n=m durumu için, çözüm yöntemleri bölüm 4-7 de verilmişti. n>m, denklem sayısının bilinmeyen sayısından çok olması, durumu da bölüm 9 da ele alınmıştı. Bu bölümde n
Homojen denklem sistemi
Karşı taraf vektörü sıfır olan denklem sistemlerine homojen denklem sistemi denir. A x = 0 homojen denklem sistemi n denklem ve m bilinmeyen içerir ve n
a 22 . a n1
x1 . ... a1m 0 x2 . ... a 2 m 0 . = . ... . . . . ... a nm 0 x m
x1 3 − 7 4 4 − 2 x2 0 Örnek: 9 1 0 x3 = 0 − 2 3 6 6 − 6 3 3 x4 0 x5
tla
a12
(10.1)
sn o
a11 a A x = 0, 21 . a n1
Katsayılar matrisi A satır düzenlidir, yani satırları doğrusal bağımlı değildir, rank A=n dir. n
em de r
x=0 vektörü 10.1 homojen denklem sisteminin bir çözümüdür, 10.1 i sağlar. x=0 çözümüne trivial(önemsiz, değersiz) çözüm denir ve uygulama açısından hiçbir önem taşımaz. Önemli olan 10.1 denklemini sağlayan x ≠ 0 çözümü bulmaktır. A x = 0 sistemi
[a 0
x a1 ] 0 = 0 x1
şeklinde alt matrislere bölünmüş olsun. Burada a0 nxn ve a1 nxd boyutlu alt matrislerdir. Bu alt matrisler şöyle oluşturulmuş olsun: A nın m kolonundan n tane doğrusal bağımsız olanları belirlenir, gerekirse kolonlara yer değiştirilir, bir araya toplanır a0 oluşturulur. Geriye kalan d=m-n kolon da bir araya toplanarak a1 oluşturulur. a0 alt matrisi nxn kare matristir, −1 hem satırları hem de kolonları doğrusal bağımsız olduğundan tekil değildir, yani tersi, a 0 ,
w .e
w
w
(10.2)
vardır. 10.2 den
a 0 x 0 + a 1 x1 = 0 −1
x 0 = −a 0 a 1 x 1
(10.3) (10.4)
yazılabilir. 10.4 bağıntısı 10.3 de yerine konursa −1
− a 0 a 0 a 1 x 1 + a 1 x 1 = −a 1 x 1 + a 1 x 1 = 0
(10.5)
I (birim matris)
Bu son bağıntıdan şu anlaşılır: x1 vektörü ne olursa olsun 10.5 daima sağlanır. O halde x1≠0 −1 ve tamamen keyfi bir vektör seçilir ve x 0 = −a 0 a 1 x 1 olduğu dikkate alınırsa
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
108
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
x 0 − a −1 a x x = = 0 1 1 x1 x1
109
(10.6)
ri. co
m
olur. Bu genel çözüm 10.2 denklem sistemini sağlar fakat 10.1 genel homojen denklem sistemini sağlamaz. Çünkü 10.2 bağıntısı oluşturulurken A nın kolonlarına yer değiştirilmiştir. Kolonların yerinin değiştirilmesi bilinmeyenlerin sırasının değiştirildiği anlamındadır. 10.6 çözümünün 10.1 bağıntısını sağlaması için, 10.6 bağıntısı hesaplandıktan sonra, x vektörünün de aynı nolu satırlarının yerleri değiştirilmelidir. 10.6 çözümüne temel çözüm adı verilir. x1 vektörü tamamen keyfi seçilebildiğinden temel çözümün herhangi bir katı da çözümdür. c herhangi bir sabit olmak üzere:
− a −1 a x x x = c 0 = c 0 1 1 x1 x1
(10.7)
− a −1 a x −1 a 1 ] c 0 1 1 = 0 → −c a 0 a 0 a 1 x 1 + c a 1 x 1 = c a 1 x 1 + c a 1 x 1 = 0 x 1
sn o
[ a0
tla
vektörünün 10.2 ifadesini
sağladığı görülür. c sonsuz farklı değer alabileceğinden, denklem sisteminin sonsuz çözümü olduğu anlaşılır.
•
em de r
Genelleştirilirse: • n
Temel çözümlerin belirlenmesi
w
w
w .e
Çözüm için basit GAUSS, GAUSS-JORDAN veya DOOLITLE metodu kullanılabilir. Çözüme başlamadan önce A matrisinin hangi kolonlarının doğrusal bağımsız olduğu bilinmediğinden a0 alt marisi doğrudan oluşturulamaz. Bu iş, örneğin basit GAUSS indirgeme metodu ile çözüm aranıyorsa, şöyle yapılır: İndirgeme, satırda pivot arama ve gerekirse kolonlara yer değiştirme ile yapılır. İndirgemenin i. adımında pivot eleman bulunamazsa i. kolon sonraki i+1., i+2.,…, m. kolonlardan biri ile, pivot eleman sıfırdan farklı olacak şekilde, değiştirilir ve indirgemeye devam edilir. n-1 adım sonra denklem sistemi aşağıdaki şematik forma dönüşür:
Burada U indirgeme sonucu a0 ın üst üçgene dönüşen kısmıdır ve a0 ın alt üçgeni sıfırlanmıştır. ã1 ise a1 in değişmiş şeklidir. x1 herhangi bir keyfi değer alabileceği için x1≠0 seçilerek ã1 x1 vektörü karşı tarafa atılabilir. Bu aşamada denklem sistemi katsayılar matrisi üst üçgen olan normal bir denklem sistemine dönüşmüş olur. Bilinmeyen sadece x0 vektörüdür. Yukarı doğru hesap ile x0 belirlenir. Aşağıdaki sayısal örnekler çözümün kavranmasını sağlayacaktır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
109
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
110
Örnek 1:
Basit GAUSS indirgeme metodu ile: 2.adım
pivot
x0
ri. co
1. adım:
m
x1 1 3 − 5 4 0 2 3 − 4 2 x 2 = 0 bağıntısın ı sağlayan ve sıfırdan farklı x vektörünü bulunuz. x 3 2 − 3 − 2 3 0 x 4
pivot
tla
x1 1 3 − 5 4 0 0 − 3 6 − 6 x 2 = 0 x 0 0 − 2 0 3 0 x4
x 4 1 0 1 3 − 5 x 0 − 3 6 − 6 2 = 0 x 0 − 7 12 − 14 3 0 x4
U
ã1
x1
sn o
4. kolon önceki üç kolona doğrusal bağımlıdır, x0=[x1 x2 x3]T ve x1=x4 dır. x4 için herhangi bir(sıfırdan farklı) keyfi bir değer seçilebilir. x1=x4=1 seçilir ve yerine konursa:
x1 x1 = ( −4 − (−5) ⋅ 0 − 3(−2)) / 1 = 2 1 3 − 5 4 0 1 3 − 5 x1 − 4 0 − 3 6 − 6 x 2 = 0 → 0 − 3 6 x = 6 → x = (6 − 6 ⋅ 0) /(−3) = −2 2 x 2 3 x 0 0 − 2 0 0 0 0 − 2 x 3 0 3 = 0 /( −2) = 0 1 x0
em de r
U
-ã1 x1
x1 2 x1 2 x − 2 x x 0 = x 2 = − 2, x 1 = [x 4 ] = [1] → x = 0 = 2 = temel çözümü bulunur. Bu temel x 1 x3 0 x 3 0 x4 1 çözüm denklem sisteminde yerine konarak doğruluğu kanıtlanabilir:
Yorum: Örnek denklem sisteminde d=m-n=4-3=1 doğrusal bağımlı kolon olduğundan sadece tek bir temel çözüm bulunmuştur. Bu temel çözümün herhangi bir c katı da çözüm olacağından sonsuz çözüm vardır.
w
w
w .e
2 1 3 − 5 4 0 2 3 − 4 2 − 2 = 0 0 3 2 − 3 − 2 0 1
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
110
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
111
Örnek 2:
m
x1 1 3 − 5 4 1 x 2 0 2 6 − 4 2 1 = 0, x = ? x 3 3 9 − 3 − 2 1 x 4 0 x 5
ri. co
1.adım:
x1 4 1 x 2 0 1 3 − 5 0 0 6 − 6 − 1 x 3 = 0 0 0 12 − 14 − 2 x 4 0 x 5
tla
pivot
2.adım: Pivot=0, kolon değiştirilecek
sn o
x1 x1 x1 1 x 2 0 1 1 − 5 4 3 x 5 0 1 1 − 5 4 3 x 5 0 1 3 − 5 4 0 0 6 − 6 − 1 x = 0 → 0 − 1 6 − 6 0 x 3 = 0 → 0 − 1 6 − 6 0 x 3 = 0 3 0 0 12 − 14 − 2 x 4 0 0 − 2 12 − 14 0 x 4 0 0 0 0 − 2 0 x 4 0 x 5 x 2 x 2
em de r
3.adım:
x0
Pivot=0, kolon değiştirilecek
x1 x1 4 − 5 3 x5 0 1 1 − 5 4 3 x5 0 1 1 0 − 1 6 − 6 0 x = 0 → 0 − 1 − 6 6 0 x = 0 3 4 0 − 2 0 x4 0 0 0 − 2 0 0 x3 0 0 0 x2 x2 U
ã1
x1
w
w
w .e
4. ve 5. kolon önceki üç kolona doğrusal bağımlıdır, x0=[x1 x5 x4]T ve x1=[x3 x2 ] dır. Doğrusal bağımlı kolon sayısı d=m-n=5-3=2 olduğundan 2 temel çözüm vardır. x1 için herhangi sıfırdan farklı keyfi bir değer
x 1 x 0 x 1 = 3 = ve x1 = 3 = seçilerek 2 temel çözüm bulunur. x 2 0 x 2 1 1.temel çözüm, x1=[1 0]T için: x0
x0
x1 x1 = (5 − 4 ⋅ 0 − 1 ⋅ 6) / 1 = −1 4 − 5 3 x5 0 1 1 4 x1 5 1 1 0 − 1 − 6 6 0 x = 0 → 0 − 1 − 6 x = − 6 → x = ( −6 − (−6) ⋅ 0) /( −1) = 6 5 4 5 x4 = 0 /(−2) = 0 0 0 − 2 0 0 1 0 0 0 − 2 x4 0 0 U
ã
U x1
-ã1 x1
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
111
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
1. temel çözüm
m
Kolon değişikliğinin karşılığı olarak satırlara yer değiştirilir
x1 − 1 x 0 2 x = x3 = 1 x4 0 x 5 6
ri. co
x1 − 1 x 6 5 x0 x = = x4 = 0 x1 x3 1 x2 0
112
2.temel çözüm, x1=[0 1]T için: x0 x0
ã1
U
x1
Kolon değişikliğinin karşılığı olarak satırlara yer değiştirilir
x1 − 3 x 1 2 x = x3 = 0 x4 0 x 5 0
2. temel çözüm
em de r
x1 − 3 x 0 5 x x = 0 = x4 = 0 x1 x 0 3 x 2 1
-ã1 x1
sn o
U
tla
x1 x1 = (−3 − 4 ⋅ 0 − 1 ⋅ 0) / 1 = −3 4 − 5 3 x 5 0 1 1 4 x1 − 3 1 1 0 − 1 − 6 6 0 x = 0 → 0 − 1 − 6 x = 0 → x = (0 − (−6) ⋅ 0) /( −1) = 0 5 4 5 x 0 0 − 2 0 0 0 0 0 0 − 2 x 4 0 4 = 0 /( −2) = 0 1
Her iki temel çözüm homojen denklem sistemini sağlar:
w
w
w .e
− 1 − 3 1 0 0 1 3 − 5 4 1 0 2 6 − 4 2 1 1 0 = 0 0 3 9 − 3 − 2 1 0 0 0 0 6 0 1. temel çözüm
2. temel çözüm
Temel çözümlerin herhangi keyfi bir birleşimi de homojen denklemi sağlar. Mesela toplamları:
− 4 1 3 − 5 4 1 1 0 2 6 − 4 2 1 1 = 0 3 9 − 3 − 2 1 0 0 6 1. ve 2. temel çözümün toplamı
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
112
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
113
Özel uygulama: İzostatik sistemin ve birim yüklemelere ait iç kuvvetlerin otomatik hesabı
ri. co
m
Yapı statiği kuvvet metodunda temel ilke, izostatik bir temel sistemin seçilmesi, hiperstatik bilinmeyenlerin birim yükle yüklenmesi ve bu yüklemelerden oluşan iç kuvvetlerin hesabıdır. İzostatik sistemde dış yük sıfırdır. Bu şu anlama gelir: Sistemin denge denklemlerinde karşı taraf vektörü sıfırdır(yük yok!), yani denklem sistemi homojen bir denklem sistemidir. İzostatik bilinmeyenler 1 (birim yük) seçilir. Bu da şu anlama gelir, izostatik bilinmeyenler serbest değişkendir. O halde, izostatik bilinmeyenler homojen denklem sisteminde karşımıza çıkan serbest değişkenler ile aynı anlamdadır ve temel çözümler de birim yüklemelerden oluşan iç kuvvetlerdir. Yukarıda açıklanan homojen denklem sistemi çözümünde serbest değişkenler kendiliğinden ortaya çıktığı için, bu çözüm metodu herhangi bir hiperstatik sistemin izostatik sisteminin otomatik seçimi ve birim yüklemelere ait iç kuvvetlerin hesabının da otomatik belirlenmesinde kullanılabilir. Aşağıdaki basit örnek konuya açıklık getirecektir.
tla
Örnek 3:
sn o
Aşağıda verilen kafes sistemin içten hiperstatiklik derecesi 1 dir (2 veya 4 nolu çubuk olmasaydı 1 ve 2 nolu düğümün denge denklemleri ile tüm çubuk kuvvetleri hesaplanabilirdi). Homojen denklem sistemi çözümü kullanılarak izostatik sistemin seçimi ve birim yüklemeden oluşan iç kuvvetlerin hesabı otomatik olarak yapılacaktır.
em de r
1 noktasında denge:
2 noktasında denge:
Cos 45=0.7071 S1+0.7071S2=0 0.7071S2+S3=0
0.7071S4+ S5=0 S3+0.7071S4 =10
Matris notasyonunda sistemin denge denklemi:
Çubuk kuvvetleri ≡ Bilinmeyenler
Denge matrisi
w
w
w .e
1 0.7071 0 0.7071 AS = P, 0 0 0 0
S1 0 0 S2 1 0 0 0 S 3 = 0 0.7071 1 0 S4 1 0.7071 0 10 S 5 0
0
Dış yük vektörü
İzostatik sistemin denge denklemi(dış yük yok):
1 0.7071 0 0.7071 AS = 0, 0 0 0 0
S1 0 0 S2 1 0 0 0 S3 = 0 0.7071 1 0 S4 1 0.7071 0 0 S 5 0
0
Homojen denklem sistemi
Homojen denklem sisteminin çözümü: Çözüm için basit GAUSS indirgeme metodu uygulanacaktır. 1.ve 2.adımlar: 1 ve 2 kolonun diyagonali altındaki sayılar kendiliğinden sıfır olduğundan bu adımlarda denklem sistemi değişmez.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
113
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
S1 0 0 1 0.7071 S2 1 0 0 0 0 0.7071 S 3 = → 0 0.7071 1 0 0 0 S 4 1 0.7071 0 0 0 0 S 5 0
0
S1 0 0 S2 0 0 1 0 S 5 = 1 0.7071 0 0 S4 0 0.7071 1 0 S 3 0
0
ã1
U
ri. co
1 0.7071 0 0.7071 0 0 0 0
x0
Pivot=0, kolon değiştirilecek
m
3.adım:
114
x1=S3≡Hiperstatik bilinmeyen
S3 serbest değişken≡Hiperstatik bilinmeyen olarak karşımıza çıkmıştır. 3 nolu çubuk kesilmiştir. S3 serbet değişkenini=1 seçelim≡birim yükleme: 3
tla
0
1m
S 0 1 0 S 0 0 1 2 0 S5 = 1 0.7071 0 0 S 0 0.7071 1 4 0 1 0
2
em de r
S 0 0 0 1 0 1 0.7071 S 0 0 1 2 0 0 0.7071 S = → 1 0.7071 0 5 0 0 0 S 4 0 0.7071 1 0 0 0 1 ã1
4
4
S3=1 (birim yükleme)
1 0.7071 0 0.7071 0 0 0 0
S3=1 (birim yükleme)
S3=1
sn o
1 0.7071 0 0.7071 0 0 0 0
1
1
2
5 1m
0 0 S1 0 0 0 S 2 − 1 = 1 0.7071 S 5 0 0 0.7071 S 4 − 1
S3=1 (birim yükleme)
.
-ã1S3=-ã1 1
S 1 = ( 0 − .7071 ⋅ ( − 1.4142 )/ 1 = 1.0 kN S 2 = −1/ 0.7071 = −1.4142 kN
S 5 = ( 0 − 0.7071 ⋅ ( − 1.4142 )/ 1 = 1.0 kN
1
S3=1 2 4
-1 .4 14 2
Homojen denklem sisteminin çözümü ≡ birim yüklemeden izostatik sistemde oluşan iç kuvvetler
1m
S1 1.0 S − 1.4142 2 S = S 3 = 1.0 S 4 − 1.4142 S 5 1.0
1
1.0
3
4
42
w
S 3 = 1.0 kN (seçilmiş serbest değişken ≡ birim yükleme)
1 .4 -1
w
w .e
S 4 = −1/ 0.7071 = −1.4142 kN
1.0 5
2
1m
NOT: A x=0 homojen denklem sisteminin d=m-n adet temel çözümü olduğu yukarıda açıklanmıştı. Bu temel çözümlerden oluşan d vektörlü x matrisine A nın çekirdeği (İng.: Kernel veya Nullspace) denir. A nın çekirdeği x, GAUSS, DOOLITLE, GAUSS-JORDAN veya SVD (Singular value decomposition) metotları ile belirlenir. Büyük denklem sistemlerinde SVD metodu tercih edilir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
114
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
115
İnhomojen denklem sistemi Karşı taraf vektörü sıfırdan farklı olan denklem sistemlerine inhomojen denklem sistemi adı verilir. A x = b homojen denklem sistemi n denklem ve m bilinmeyen içerir ve n
a 22 . a n1
x1 3 − 7 4 4 − 2 x 2 2 Örnek: 9 1 0 x3 = − 10 − 2 3 6 6 − 6 3 3 x 4 3 x5
m
x1 . ... a1m b1 x2 . ... a 2 m b2 . = . ... . . . . ... a nm bn x m
a12
(10.8)
ri. co
a11 a A x = b → 21 . a n1
[ a0
tla
Katsayılar matrisi A satır düzenlidir, satırları doğrusal bağımlı değildir, rank A=n dir. n
x a1 ] 0 = b x1
(10.9)
sn o
şeklinde yazılabilir. Burada a0 düzenli bir matristir, det a0≠0 dır, tersi vardır:
a 0 x 0 + a1 x1 = b −1
x 0 = a 0 (b − a1 x1 )
em de r
olur. x1 keyfi değerler alabilen serbest değişkenlerin vektörüdür. Genel çözüm
a 0−1 (b − a1 x1 ) x0 = x1
(10.10)
olur.
Örnek 4:
w
w
w .e
Örnek 3 de verilen kafes sitemin izostatik sisteminde dış yükten oluşan iç kuvvetleri hesaplayalım. Hiperstatik sistemin denklem sistemi
1 0.7071 0 0.7071 AS = P, 0 0 0 0
S1 0 0 S2 1 0 0 0 S 3 = 0 0.7071 1 0 S4 1 0.7071 0 10 S 5 0
0
Dış yük
idi. Bu denklem sistemi basit GAUSS ile indirgenirse
1 0.7071 0 0.7071 0 0 0 0 U
S1 0 0 S2 0 0 1 0 S 5 = 1 0.7071 0 0 S4 0 0.7071 1 10 S 3 0
0
ã1
x1=S3 ≡ Hiperstatik bilinmeyen
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
115
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
116
S3 serbest değişken≡Hiperstatik bilinmeyen olarak karşımıza çıkmıştır. 3 nolu çubuk kesilmiştir. İzostatik sistemde dış yük varken birim yükleme yoktur. S3 serbet değişkeni=0 seçilmelidir:
S 0 1 0 S 0 0 1 2 0 S 5 = 1 0.7071 0 0 S 0 0.7071 1 4 10 0
1
3
S3=0 Birim yük yok!
1
0
S3=0 2
4
S3=0 (birim yükleme yok)
4
m
0
ri. co
1 0.7071 0 0.7071 0 0 0 0
2
5
1m
10 kN
Son kolonun 0 ile çarpılıp karşı tarafa atıldığı düşünülürse:
S 0 1 0 1 0.7071 S 0 0 1 2 0 0 0.7071 S 5 = → 1 0.7071 0 0 0 0 S 4 0 0.7071 1 10 0 0 0 0
S1 0 0 0 S 2 0 = 1 0.7071 S 5 0 0 0.7071 S 4 10 0
0
tla
0
ã1
Yukarı doğru hesap ile:
S1 = 0
S3=0 (birim yükleme yok!)
em de r
S2 = 0
sn o
1 0.7071 0 0.7071 0 0 0 0
S 5 = (0 − 0.7071 ⋅ 14 .142 ) / 1 = −10.0 kN S 4 = 10 / 0.7071 = 14 .142 kN
S 3 = 0 (seçilmiş olan serbest değişken)
1m 4
0. 0
2
4
2
w .e
S3=0
-10.0 5
2
1m 10.0 kN
w
w
İnhomojen denklem sisteminin çözümü ≡ Dış yükten izostatik sistemde oluşan iç kuvvetler
1
4 .1 14
S1 0 S 0 2 S = S3 = 0 S 4 14.142 S 5 − 10
1
0.0
3
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
116
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
117
Kare katsayılı homojen ve inhomojen denklem sistemi a)Homojen denklem sistemi:
a12 a 22 . an2
... a1n x1 0 ... a 2 n x 2 0 = ... . . . ... a nn x n 0
ri. co
a11 a A x = 0 → 21 . a n1
m
Sayfa 93 de denklem sayısı bilinmeyen sayısından az, n
1 − 2 1 x 1 0 3 x 2 = 0 1 − 3 2 x 3 0
Örnek: 1 − 4
(10.11)
tla
Katsayılar matrisi A kare matristir. Çözüm için iki farklı durum vardır: det A≠0 ve det A=0 durumu. det A≠0 durumu: A nın tersinin tanımlı olduğu anlamındadır. A x=0 homojen denklemi A -1
A x=A 0
-1
ile
x= 0 olmak zorundadır(trivial çözüm), bu çözüm önemsenmez.
sn o
çarpılırsa A
-1
em de r
det A=0 durumu: A nın satırlarının doğrusal bağımlı olması, yani rank A
Örnek 5:
1 − 2 1 x1 0 1 − 4 3 x = 0 çözümü? 2 1 − 3 3 x 3 0 Basit GAUSS ile indirgeme:
w
w
w .e
1 − 2 1 x 1 0 1 − 2 1 x 1 0 0 − 2 2 x = 0 → 0 − 2 2 x = 0 → det A = 1 ⋅ (−2) ⋅ 1 = −2 2 2 0 − 1 2 x 3 0 0 0 1 x 3 0
Det A≠0 olduğundan sadece sıfır(trivial) çözüm vardır, x=0 dır.
Örnek 6:
1 − 2 1 x 1 0 1 − 4 3 x = 0 çözümü? 2 1 − 3 2 x 3 0 Basit GAUSS ile indirgeme:
1 − 2 1 x 1 0 1 − 2 1 x 1 0 0 − 2 2 x = 0 → 0 − 2 2 x = 0 → det A = 1 ⋅ (−2) ⋅ 0 = 0 2 2 Sıfırlanan satır. 0 − 1 1 x 3 0 0 0 0 x 3 0 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
117
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
118
m
det A=0 olduğundan x≠0 çözümü vardır. İndirgenmiş katsayılar matrisi incelenirse: • 3. satırın tüm elemanları sıfır olmuş, 3. denklem yok olmuş, sadece iki denklem kalmıştır. • x3 bilinmeyeni serbest değişken olarak ortaya çıkmıştır. • Bir serbest değişken olduğundan bir temel çözüm vardır. • x3 serbest değişkenine herhangi bir değer verilerek, mesela x3=1 seçilerek, diğer değişkenler hesaplanabilir.
1 − 2 1 x 1 0 0 − 2 2 x = 0 → 1 − 2 x 1 = − 1 2 0 − 2 x − 2 2 0 − 1 1 1 0
ri. co
x3=1 seçilirse:
x1 = (−1 − (−2 ⋅ 1) / 1 = 1 x 2 = −2 /(−2) = 1
x1 1 x = x2 = 1 x3 1
• •
a12 a 22 . an2
... a1n x1 b1 1 − 2 1 x 1 − 6 ... a 2 n x 2 b2 Örnek: 1 − 4 3 x 2 = − 10 = ... . . . 1 − 3 2 x 3 − 7 ... a nn x n bn
(10.2)
em de r
a11 a A x = b, 21 . a n1
sn o
b)İnhomojen denklem sistemi:
tla
Homojen denklem sisteminin temel çözümü x=[1 1 1]T olarak bulunur.
İnhomojen denklen sisteminde det A≠0 ise, bilindiği gibi, çözüm vardır ve tektir. Bölüm 5-6 de verilen yöntemlerden biri (Basit GAUSS, DOLITTLE, CROUT, CHOLESKY,…) ile çözüm bulunur. det A=0 ise çözüm, ya yoktur veya birden çok çözüm vardır. det A=0 durumu A nın satırlarının doğrusal bağımlı olduğu anlamındadır. Bu nedenle indirgeme sonucunda, A nın en az bir satırının tüm elemanları sıfıra dönüşür. Aynı satırın karşı tarafı sıfır veya sıfırdan farklı olabilir. Aynı satırdaki karşı taraf sıfırdan farklı ise: sıfır=bir sayı gibi bir denklem var demektir. Bu, matematik anlamda bir çelişkidir, denklemlerin kuruluşunda bir hata vardır, denklemler tutarsızdır, çözüm yoktur.
w
w
w .e
Aynı satırdaki karşı taraf da sıfır ise: en az bir serbest değişken var demektir. Denklem sistemi sayfa 101 de verilen yolla çözülür.
Örnek 7:
1 − 2 1 x 1 − 6 1 − 4 3 x = − 10 çözümü? 2 1 − 3 3 x 3 − 7
det A=-2≠0 dır (yukarıdaki örnek 5 e bakınız). Bu nedenle çözüm vardır ve tektir, GAUSS ile bulunabilir: x=[-1 3 1]T dir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
118
10. GENEL DOĞRUSAL DENKLEM SİSTEMLERİ
119
1 − 2 1 x 1 − 6 1 − 4 3 x = − 10 çözümü? 2 1 − 3 2 x 3 8 Basit GAUSS ile indirgeme:
Aynı satırın karşı tarafı sıfırdan farklı: . 0 x3= -3 matematik çelişkidir.
tla
A nın sıfırlanan satırı. det A=0
ri. co
1 − 2 1 x 1 − 6 1 − 2 1 x 1 − 6 0 − 2 2 x = − 4 → 0 − 2 2 x = − 4 → det A = 1 ⋅ (−2) ⋅ 0 = 0 2 2 0 − 1 1 x 3 14 0 0 0 x 3 12
m
Örnek 8:
Örnek 9:
sn o
det A=0 ve A nın üçüncü satırının tüm elemanları sıfır olmuş, fakat 3. satırın karşı tarafı 12 olmuş. 3. denklem 0.x3=12 dir. Matematik olarak böyle bir eşitlik olamaz. Demek ki çözümü istenen denklem sisteminin denklemleri çelişkilidir, denklem sisteminin kuruluşunda bir hata vardır. Netice olarak bu denklem sisteminin çözümü yoktur.
em de r
1 − 2 1 x 1 − 6 1 − 4 3 x = − 10 çözümü? 2 1 − 3 2 x 3 − 8 Basit GAUSS ile indirgeme:
1 − 2 1 x 1 − 6 1 − 2 1 x 1 − 6 0 − 2 2 x = − 4 → 0 − 2 2 x = − 4 → det A = 1 ⋅ (−2) ⋅ 0 = 0 2 2 0 − 1 1 x 3 − 2 0 0 0 x 3 0 Aynı satırın karşı tarafı da sıfır
w
w
w .e
A nın sıfırlanan satırı. det A=0
.
det A=0 dır. 3. satır hem sol hem de sağ tarafta sıfırdır. 0 x3=0 denklemi matematik olarak çelişkili değildir. x3 ün keyfi her değeri için bu denklem sağlanır. x3 serbest değişkendir, sonsuz çözüm vardır. x3=1 seçelim, üçüncü kolonu x3=1 ile çarparak karşı tarafa atalım:
1 − 2 1 x 1 − 6 0 − 2 2 x = − 4 → 1 − 2 x 1 = − 6 − 1 x = − 7 2 0 − 2 x − 4 2 3 − 6 2 0 0 0 1 0
Yukarı doğru hesap ile:
x 1 = (−7 − (−2) ⋅ 3)/1 = −1 1 − 2 x 1 − 7 0 − 2 x = − 6 → x 2 = −6/(−2) = 3 2 x 3 = 1 seçildi
− 1 → x = 3 1
3 1]T dir. x3 serbest değişkeni için başka sayısız değer x3=1 için çözüm x=[-1 seçilebileceğinden sonsuz çözüm vardır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
119
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
11
PROGRAMLAR: Doğrusal denklem sistemi Çözücüler • • • • • • • •
Basit matris işlemleri Gauss Cholesky Ufukçizgisi(Skyline) Gauss-Jordan Gauss-Seidel CG(Conjugate Gradient) Seyrek matris
11. PROGRAMLAR: Basit matris işlemleri ve doğrusal denklem sistemi çözücüler
121
11. PROGRAMLAR: Basit matris işlemleri ve doğrusal denklem sistemi çözücüler
m
Nümerik metotlar neticede programlanarak bilgisayarda çözüm yapabilmek amacıyla geliştirilmişlerdir. Teorik bilgilerin test edilmesi, kavranması ve kullanılabilir duruma getirilebilmesi için program yazmak ya da yazılmış programları kullanmak gerekecektir. Program yazmak da başlı başına derin bir konudur. Ancak mühendislik problemleri ile uğraşan kişinin, çok profesyonel olmasa bile, küçük programlar yazabilme becerisinin olması da gerekir.
ri. co
Bu amaca yönelik olarak test edilmiş programlara yer verilecektir. Bu bölüm basit matris işlemleri ve doğrusal denklem sistemi çözümü için QBASIC dilinde hazırlanmış programlar içermektedir. Öğrencinin bu programları görsel bir programlama diline çevirmesi, test etmesi, deneyim kazanması beklenir. QBASIC(QuickBasic) programlama dili Microsoft tarafından geliştirilmiş, MS-DOS tabanlı basit bir programlama dilidir. 1990-2000 li yıllarda kullanılmış; günümüzde yerini Visual Basic, C, Delphi gibi modern dillere bırakmıştır. Programlar neden QBASIC dilinde veriliyor? Neden görsel bir dilde verilmiyor?
tla
Bunun iki ana nedeni vardır. 1) Görsel programlama dilleri, görselliği sağlamak için, çok sayıda program kodunu otomatik eklerler. Bir kitabın sayfalarında verilemeyecek kadar çok ve karmaşık kod üretilir. Asıl vurgulanmak istenen program parçacığı otomatik eklenen kodlar arasında kaybolur, anlaşılması güçleşir. 2) 1960-1970 li yıllar nümerik analizin altın yıllarıdır. Bu dönemin bilimsel yayınları ve kitapları ALGOL, FORTRAN ve BASIC gibi, günümüzde pek kullanılmayan dillerde kodlanmış çok önemli programlar içerir. Neticede 60 yıllık bir bilgi birikimi vardır.
sn o
QBASIC basit fakat oldukça yapısal ve kavranması kolay kodlardan oluşur, öğretim amaçlı programların anlaşılır düzeyde kitaplarda verilmesine olanak sağlar. Visual Basic QBASIC dilinin gelişmiş şekli olduğundan ve hemen tüm QBASIC kodlarını da içerdiğinden dönüştürülmesi kolaydır. Çoğu kez kopyala-yapıştır yeterli olur. Ancak, Türkçe karakter desteği yoktur. Bu, programların çalışmasını etkilemez fakat Türkçe açıklama satırlarını kullanıcının okuması zorlaşır. QBASIC deyimleri hakkında öz bilgiler
em de r
‘ işareti ve sonrası programın anlaşılırlığını artırmak için programcının yaptığı açıklamadır, programın çalışmasını etkilemez. Değişkenler bir harf ile başlar. Aynı değişken büyük veya küçük harf olarak yazılabilir: A veya a aynı değişkendir. DATA 3,-7,10 benzeri satırlar veri satırıdır. READ deyimi bu satırlardan sıra ile değer okur. DEFINT I-N deyimi i,j,k,l,m,n harfleri ile başlayan değişkenlerin tam sayı olacağını belirtir. DEFDBL A-H, O-Z deyimi bu harf aralığındaki bir harf ile başlayan değişkenlerin DOUBLE≡ çift hassasiyetli olacağını belirtir. DECLARE SUB Matrisoku (n, m, a()) benzeri deyimler bir alt programın adını ve parametrelerini ana programa tanımlar: Bu örnekte alt programın adı Matrisoku, parametreleri de n, m ve a dır. n ve m tam sayı, a() matris anlamındadır. Ana programda CALL deyimi ile çağrılacak alt program, çağrılmadan önce, DECLARE ile ana programa tanıtılmak zorundadır. READ n,m,L benzeri deyimler DATA satırlarından değer okur. Bu örnekte n, m ve L değişkenleri okunur. DIM a(n, m), b(m, L), c(n, L) benzeri deyimler matrislerin boyutunu tanımlar ve ana bellekte yer ayırır. Bu örnekte a, b ve c matrisleri tanımlanmaktadır. n, m ve L matrislerin boyutudur, değerleri DIM deyimi öncesi okunmuş veya atanmış olmalıdır. CLS deyimi ekranı temizler. CALL Matrisoku(n, m, a()) benzeri deyimler, adı ve parametreleri verilen alt programı çağırır, çalıştırır. Bu örnekte Matrisoku adlı alt program çağrılıyor. n, m, a() parametrelerdir. n ve m matrisin boyutu, a() matristir. PRINT deyimi kendini izleyen parametrelerin değerlerini ekrana yazar. PRINT “Z=”; 5 ekrana Z=5 yazar. * işareti çarpma ve ^ işareti üs alma için kullanılır. Örnek 2*3 çarpım ve 2^3 üs alma anlamındadır. SUB … END SUB
Kelimeleri arasında alt program kodları yer alır.
w
w
w .e
EXIT SUB alt programdan çıkılmasını sağlar. FOR i = 1 TO n STEP 2 … NEXT i
deyimi i= 1, 3,…, n değerleri için FOR-NEXT arasındaki kodları işler
DO … LOOP UNTIL s<1l
deyimi s<1 oluncaya kadar DO ile LOOp arasındaki kodları tekrar tekrar işler
IF T <= Zero THEN .... deyimi t değişkeni Zero değişkeninden küçük veya Zero ya eşitse THEN i izleyen … kodları işler. IF T = 0 THEN … ELSE … END IF
deyimi t değişkeni sıfır ise THEN i izleyen …, değilse ELSE izleyen … kodları işler.
GOTO 200 deyimi 200 nolu satıra atlanmasını sağlar. ABS(x) fonksiyonu x değişkeninin mutlak değerini hesaplar. SQR(x) fonksiyonu x in karekökünü hesaplar. : işareti ile birden çok satır tek satırda yazılabilir. Örnek:
rank = 0: v = 1: Zero = 0
satırı
rank = 0 v=1 Zero = 0
satırları ile aynı anlamdadır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
121
11. PROGRAMLAR: Basit matris işlemleri ve doğrusal denklem sistemi çözücüler
122
Matris metotlarında gerekli işlem sayısı Uygulamada sıkça karşılaşılan matris metotları(çarpma, üçgen çarpanlara ayırma, denklem sistemi çözümü, v.s.) ne kadar dört işlem(toplama, çıkarma çarpma, bölme) gerektirir? Aşağıda verilen tablo yardımıyla toplam işlem sayısı belirlenebilir.
m
Örnek: A x=b doğrusal denklem sisteminin n=1000 bilinmeyeni ve s=1 karşı taraf vektörü olsun. Gauss veya Crout veya Doolittle metodu kullanılarak denklem sistemi çözülmek istenirse gerekli toplam işlem sayısı
2n 3 n 2 n 2 ⋅ 1000 3 1000 2 1000 − − + 2n 2 s = − − + 2 ⋅ 1000 2 ⋅ 1 = 6681665 3 2 6 3 2 6
ri. co
olur. Bir bilgisayar bu kadar işlemi kaç saniyede yapar? Bunun için bilgisayarın FLOPS(FLoating point Operations Per Second) denilen değerinin bilinmesi gerekir. 2010 yılında üretilen Intel Core I7 980 XE işlemcisi 107 GFLOP ( bir saniyede 109) çift hassasiyetli(DOUBLE) işlem yapabilmektedir. Bu işlemciye sahip bir bilgisayarda denklem sisteminin çözümü teorik ve yaklaşık olarak 6681665/109=0.007 saniye sürecektir. Gerçekte çözüm daha uzun sürer. Çünkü işletim sistemi, programlama dili, programın kalitesi, ara işlemler, bellek tipi, bellek miktarı, v.s. süreyi etkiler.
İŞLEM SAYISI
AÇIKLAMA
tla
İŞLEM: Matris çarpımı
Çarpma : Toplama:
nms nms
n, m, s matrislerin boyutları
Toplam :
2nms
sn o
A, B ve C dikdörtgen matrisler
em de r
A ve C dikdörtgen, L alt veya üst üçgen matris
w
w
w .e
L alt, U üst üçgen ve C kare matris
L1, L2, L3 hepside alt veya hepside üst üçgen matris
Çarpma :
Toplama:
nm 2 nm + 2 2 nm 2 nm + 2 2
Toplam :
nm 2 + nm
Çarpma :
n3 n 2 n + + 3 2 6
Toplama:
n3 n 2 n + + 3 2 6
Toplam :
n3 n + n2 + 3 3
Çarpma :
n3 n 2 n + + 6 2 3
Toplama:
n3 n 2 n + + 6 2 3
Toplam :
n3 2n + n2 + 3 3
mn 2 mn + 2 2 2 mn mn + Toplama: 2 2
Çarpma : A ve C dikdörtgen, L alt veya üst üçgen matris
A ve C dikdörtgen, B diyagonal elemanları rxr boyutlu bölünmüş matris. Blok sayısı=m/r (tam sayı)
Toplam :
mn 2 + mn
Çarpma : Toplama:
nmr nmr
Toplam : 2nmr
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
122
11. PROGRAMLAR: Basit matris işlemleri ve doğrusal denklem sistemi çözücüler
İŞLEM SAYISI
YÖNTEM
Toplama:
n3 n 2 n − + 3 2 6 n2 n − 2 2
m
n3 n 2 n − + 3 2 6
Bölme
:
Toplam :
2n 3 n 2 n − − 3 2 6
Çarpma :
n3 n − 6 6
tla
GAUSS CROUT DOOLITLE
Çarpma :
ri. co
İŞLEM: Üçgen çarpanlara ayırma
123
Toplama:
em de r
A simetrik
sn o
CHOLESKY
n2 n − 2 2 n n3 n 2 n + + 3 2 6
Çarpma:
nbc − nc + n − nb −
b 2 c bc b 2 b + + − 2 2 2 2
c3 c2 c + − 6 2 2
Toplama: Çarpma kadar
GAUSS CROUT DOOLITLE
Bölme
:
nb −
b2 b −n+ 2 2
Toplam :
2nbc − 2nc − nb + n −
w .e
w
Toplam :
+ bc −
c3 + c2 − b2c 3
2c b 2 b + − 3 2 2
Çarpma :
nb 2 nb b 3 b 2 b − − + − 2 2 3 2 6
Toplama: Çarpma kadar Bölme
CHOLESKY
A bant ve simetrik, b yarı bant genişliği
:
Karekök:
−
A bant matris, b üst bant, c alt bant genişliği
w
Bölme
n3 n − 6 6
:
nb −
b2 b −n+ 2 2
Karekök:
n
Toplam :
b2n +
b 2 b 2b 3 + − 2 6 3
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
123
11. PROGRAMLAR: Basit matris işlemleri ve doğrusal denklem sistemi çözücüler
s
s Yukarıdan aşağı veya aşağıdan yukarı doğru hesap
x = b L n
n
n
Çarpma :
Toplama:
Bölme:
L alt veya üst üçgen matris n, m, s matrislerin boyutları
ns
Toplam :
n2s
Çarpma :
nbs −
b 2 s ns − 2 2 2 b s ns nbs − − 2 2
tla
Yukarıdan aşağı veya aşağıdan yukarı doğru hesap
n 2 s ns − 2 2 2 n s ns − 2 2
ri. co
n
İŞLEM SAYISI
YÖNTEM
m
İŞLEM: Denklem sistemi çözümü
124
Toplama: Bölme:
ns
Toplam :
2nbs − b 2 s
sn o
L alt veya üst bant matris, b bant genişliği
n3 n 2 n − + + n 2 s − ns 3 2 6 n3 n 2 n − + + n 2 s − ns Toplama: 3 2 6 n2 n − + 2ns Bölme: 2 2 2n 3 n 2 n − − + 2n 2 s Toplam : 3 2 6
Çarpma :
n
s
s
GAUSS CROUT DOOLITTLE
x = b
em de r
A
n
n
n
s
n
s
x = b
A
CHOLESKY
n
n
n
w
w .e
A simetrik
n3 n − + n 2 s − ns 6 6 n3 n − + n 2 s − ns Toplama: 6 6 n2 n − + 2ns Bölme: 2 2 Karekök: n
Çarpma :
Toplam :
n3 n 2 n + + + 2n 2 s 3 2 6
Çarpma:
1 (−3b + 3b 2 − 2c + 3bc − 3b 2 c + 3c 2 6 − c 3 + 6n − 6bn − 6cn + 6bcn − 3b 2 s − 3c 2 s − 6ns + 6bns + 6cns)
w
GAUSS CROUT DOOLITLE
Toplama: Çarpma kadar Bölme:
nb +
b b2 + ns − n − 2 2
Toplam : A bant matris, b üst bant, c alt bant genişliği
1 (−3b + 3b 2 − 4c + 6bc − 6b 2 c + 6c 2 6 − 2c 3 + 6n − 6bn − 12cn + 12bcn − 6b 2 s − 6c 2 s − 6ns + 12bns + 12cns)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
124
11. PROGRAMLAR: Basit matris işlemleri ve doğrusal denklem sistemi çözücüler
Çarpma :
125
nb 2 nb b 3 b 2 b − − + − 2 2 3 2 6
+ 2nbs − b 2 s − ns Toplama: Çarpma kadar Bölme:
nb −
Karekök: n Toplam :
A simetrik bant matris, b yarı bant genişliği
s
A
s
Çarpma :
x = b n
n
n3 n 2 − + n2s 2 2
n3 n 2 − + n2s 2 2 2 Bölme: n
Toplama:
tla
n
GAUSS-JORDAN
b 2 b 2b 3 + − − 2b 2 s 2 6 3
ri. co
4nbs + nb 2 +
n
b2 b − n + + 2ns 2 2
m
CHOLESKY
İTERASYON YÖNTEMLERİ Bir itersyon adımı için
n 3 + 2n 2 s
Çarpma :
n2
Toplama: Bölme: n
sn o
JACOBI GAUSS-SEIDEL
Toplam :
Toplam :
em de r
CG (Conjugate Gardient) simetri dikkate alınmadan
n2 − n 2n 2 2
Çarpma: 3 n +6n+2
2
Toplama: 3 n +3n-3 Bölme: 2
2
Toplam : 6 n +9n+1
Test edilmiş programlar:
Matris işlemleri, doğrusal denklem sistemi çözücüler(direkt ve iterasyon yöntemleri) olmak üzere, 12.24. bölümlerde 15 adet program verilmiştir. Programların adı ve işlevi aşağıda özetlenmiştir. 1.
Basit Matris işlemleri: matris okuma, yazma, toplama, çarpma, determinant hesabı gibi basit program parçacıklarından oluşur. QBASIC dilinin yapısının kavranmasını amaçlamaktadır. Gauss: A x = b doğrusal denklem sistemini çözer.
CholeskyFull: A x = b doğrusal denklem sistemini çözer. A simetrik, pozitif tanımlı, tam dolu.
4.
Cholesky2: A x = b doğrusal denklem sistemini çözer. A simetrik, pozitif tanımlı, bant. İki boyutlu depolama tekniği kullanılmıştır.
w
w
w .e
2. 3.
5.
Cholesky1: A x = b doğrusal denklem sistemini çözer. A simetrik, pozitif tanımlı, bant. Vektör depolama tekniği kullanılmıştır.
6.
CholeskySkyline: A x = b doğrusal denklem sistemini çözer. A simetrik, pozitif tanımlı. A ufuk çizgisi(Skyline) tekniği ile depolanır.
7.
GaussJordan: A matrisinin tersi A-1 i hesaplar.
8.
GaussJordanSim: A matrisinin tersi A-1 i hesaplar. A simetrik pozitif tanımlı.
9.
LeastSquares: Dengeleme hesabı, en uygun eğri(polinom) uydurma
10. QR: Anxm xm = bn denklem sayısı bilinmeyen sayısından çok olan sistemin QR çarpanlara ayırma metodu ile çözümü, n≥m. 11. BoBx: Anxm dikdörtgen matrisinin Bo sağ ters matrisini ve Bx çekirdeğini hesaplar, n≤m. 12. GaussSeidel: A x = b doğrusal denklem sistemini iterasyon ile çözer. 13. CG: A x = b doğrusal denklem sistemini Conjugate gradient iterasyon metodu ile çözer. A simetrik, pozitif tanımlı. 14. PCG: A x = b doğrusal denklem sistemini kondisyon iyileştirmesi (Preconditioning) yaparak Conjugate gradient iterasyon metodu ile çözer. A simetrik, pozitif tanımlı. 15. PCGsparse: A x = b doğrusal denklem sistemini kondisyon iyileştirmesi (Preconditioning) yaparak Conjugate gradient iterasyon metodu ile çözer. A simetrik, pozitif tanımlı ve seyrek(sparse). A nın sadece sıfırdan farklı
elemanları depolanır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
125
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
12 PROGRAMLAR:
Basit matris işlemleri
127
12. PROGRAMLAR: Basit matris işlemleri
12. PROGRAMLAR: Basit matris işlemleri
1 2 B3 x 2 = 2 0 3 1
A nın elemanları
B nin elemanları
C=A B ve det C program ile hesaplanacak
m
1 2 3 A2 x 3 = 4 5 6
Matrislerin boyutları verisi
ri. co
' Matris işlemleri ana programı ' Matrislerin boyutları: n,m,L DATA 2,3,2 ' A nın elemanları: DATA 1,2,3 DATA 4,5,6 ' B nin elemanları: DATA 1,2 DATA 2,0 DATA 3,1
sn o
tla
DEFINT I-N: 'I,J,K,L,M,N harfleri ile başlayan değişkenler tam sayıdır. Hangi harfle başlayan değişkenlerin Tam DEFDBL A-H, O-Z: ' Bu harflerle başlayanlar çift hassasiyetli ondalık sayıdır sayı, hangilerinin ondalık sayı olacağı DECLARE SUB Matrisoku (n, m, a()) tanımlanıyor DECLARE SUB matrisokuSimetrik (n, a()) DECLARE SUB matrisyaz (n, m, a()) DECLARE SUB vektoroku (n, v()) DECLARE SUB vektoryaz (n, v()) Alt programların adı ve DECLARE SUB matriscarp (n, m, L, a(), b(), c()) DECLARE SUB MatrisTopla (Topla, n, m, a(), b(), c()) parametreleri ana programa DECLARE SUB diyagmatriscarp (n, m, d(), a()) tanıtılıyor! DECLARE SUB matrisdiyagcarp (n, m, a(), d()) DECLARE SUB matrisvektorcarp (n, m, a(), v(), c()) DECLARE SUB matriscopyala (n, m, a(), b()) DECLARE SUB transpoz (n, m, a(), b()) DECLARE SUB transpozkare (n, a()) DECLARE SUB birimmatris (n, a()) DECLARE SUB sifirmatris (n, m, a()) n, m, L sayılarını oku DATA satırlarından okur. Bunlar A, B ve C DECLARE SUB Determinant (n, a(), rank, d, k, v)
matrislerinin boyutunu tanımlamak için kullanılacak
READ n, m, L: ' DATA satırlarından oku
A, B ve C matrisleri için ana bellekte yer ayır
em de r
DIM a(n, m), b(m, L), c(n, L): ' Matrislere yer ayır CLS : ' ekranı temizle Matrisoku alt programına git A matrisini oku geri gel CALL Matrisoku(n, m, a()) CALL Matrisoku(m, L, b()) CALL matriscarp(n, m, L, a(), b(), c()) Matrisoku alt programına git B matrisini oku geri gel PRINT “A:” CALL matrisyaz(n, m, a()) PRINT “B:” Matriscarp alt programına git A ile B yi çarp C ye depola ve geri gel CALL matrisyaz(m, L, b()) PRINT “C:” CALL matrisyaz(n, L, c()) Matrisyaz alt programına git A yı yaz, gel CALL Determinant(n, c(), rank, d, k, v) PRINT “r=”; rank, “d=”; d; “k=”; k; “V=”; v Determinant hesaplayan alt programını çağır END
programına git det A hesapla gel
Determinant ve kondisyon bilgilerini yaz
w
w
w .e
SUB Matrisoku (n, m, a()) ' A(n,m) matrisini Data stırlarından okur '----------------------------------------FOR i = 1 TO n FOR j = 1 TO m READ a(i, j) NEXT j NEXT i END SUB
Programın sonuçları
SUB matrisokuSimetrik (n, a()) 'A(n,n) simetrik matrisinin üst üçgen 'elemanlarını okur ve alt üçgenini tamamlar '-----------------------------------------FOR i = 1 TO n FOR j = i TO n READ a(i, j) a(j, i) = a(i, j) NEXT j NEXT i END SUB
SUB matrisyaz (n, m, a()) ' A(n,m) matrisini ekrana yazar '-----------------------------FOR i = 1 TO n FOR j = 1 TO m PRINT a(i, j); NEXT j PRINT NEXT i END SUB
.
k
. 8
Det C = d 2 =0.140625 2 =36
K=
det C V
=
36 = 0.07 519.2
C nin HADAMARD kondisyon sayısı
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
127
128
12. PROGRAMLAR: Basit matris işlemleri
SUB vektoryaz (n, v()) ' V(n) Vektörünü ekrana yazar '---------------------------FOR i = 1 TO n PRINT v(i); NEXT i PRINT END SUB
m
sn o
tla
SUB matriscopyala (n, m, a(), b()) ' A(n,m)=B(n,m) B matrisi A ya kopyalanır '---------------------------------------FOR i = 1 TO n FOR j = 1 TO m a(i, j) = b(i, j) NEXT j NEXT i END SUB
em de r
SUB matriscarp (n, m, L, a(), b(), c()) ' C(n,L)=A(n,m)*B(m,L) hesaplanır '-------------------------------------------FOR i = 1 TO n FOR j = 1 TO L T=0 FOR k = 1 TO m T = T + a(i, k) * b(k, j) NEXT k c(i, j) = T NEXT j NEXT i END SUB
SUB matrisvektorcarp (n, m, a(), v(), c()) ' C(n)=A(n,m)*V(m) hesaplanır. ' A(n,m) matrisi V(m) matrisi ile sağdan çarpılır ' C(n) de depolanır. '-------------------------------------------FOR i = 1 TO n T=0 FOR j = 1 TO m T = T + a(i, j) * v(i) NEXT j c(i) = T NEXT i END SUB
ri. co
SUB vektoroku (n, v()) ' V(n) Vektörünü DATA satırlarından okur '-------------------------------------FOR i = 1 TO n READ v(i) NEXT i END SUB
SUB MatrisTopla (Topla, n, m, a(), b(), c()) 'Topla=1 ise C(n,m)=A(n,m)+B(n,m) 'Topla<>1 ise C(n,m)=A(n,m)-B(n,m) hesaplanır '-----------------------------------------FOR i = 1 TO n FOR j = 1 TO m IF Topla = 1 THEN c(i, j) = a(i, j) + b(i, j) ELSE c(i, j) = a(i, j) - b(i, j) END IF NEXT j NEXT i END SUB
w
w
w .e
SUB diyagmatriscarp (n, m, d(), a()) ' A(n,m)=D(n)*A(n,m) hesaplanır. ' D(n) vektörü diyagonal matrisin sadece ' diyagonal elemanlarını içerir. '-------------------------------------------FOR i = 1 TO n FOR j = 1 TO m a(i, j) = a(i, j) * d(i) NEXT j NEXT i END SUB
SUB matrisdiyagcarp (n, m, a(), d()) ' A(n,m)=A(n,m)*D(m) hesaplanır. ' D(m) vektörü diyagonal matrisin sadece 'diyagonal elemanlarını içerir. '--------------------------------------FOR i = 1 TO m FOR j = 1 TO n a(j, i) = a(j, i) * d(i) NEXT j NEXT i END SUB
SUB transpoz (n, m, a(), b()) ' A(n,m) nin transpozu B(m,n) de depolanır '----------------------------------------FOR i = 1 TO n FOR j = 1 TO m b(j, i) = a(i, j) NEXT j NEXT i END SUB
SUB transpozkare (n, a()) ' A(n,n) kare matrisinin transpozu ' gene A ya depolanır '--------------------------------FOR i = 1 TO n FOR j = i + 1 TO n T = a(j, i) a(j, i) = a(i, j) a(i, j) = T NEXT j NEXT i END SUB
SUB birimmatris (n, a()) 'A(n,n) matrisini birim matris yapar '---------------------------------FOR i = 1 TO n FOR j = 1 TO n a(i, j) = 0 NEXT j a(i, i) = 1 NEXT i END SUB SUB sifirmatris (n, m, a()) 'A(n,m) matrisini sıfırlar '-------------------------FOR i = 1 TO n FOR j = 1 TO m a(i, j) = 0 NEXT j NEXT i END SUB
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
128
129
ri. co
sn o
IF n = 1 THEN ' n=1 durumu IF ABS(a(1, 1)) <= Zero THEN GOTO 100 rank = 1: d = a(1, 1): k = 0 EXIT SUB END IF
tla
SUB Determinant (n, a(), rank, d, k, v) ' A(n,n) matrisinin determinantı GAUSS ile hesaplanır ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1994 ' A(n,n) çağıran programda depolanmış olmalıdır. ' Programın verdiği d, k ve V sayıları yardımıyla ' det A=d*2^k ile hesaplanabilir. ' A nın kondisyon sayısı Kon A=ABS(det A)/V ile hesaplanabilir '---------------------------------------------------------------------------------' Norm rank = 0: v = 1: Zero = 0 FOR i = 1 TO n T = 0: d = 0 FOR j = 1 TO n T = T + ABS(a(i, j)): ' WILKINSON normu d = d + a(i, j) * a(i, j) NEXT j IF T > Zero THEN Zero = T d = SQR(d): v = v * d: 'HADAMARD hacmi NEXT i Zero = Zero * 1E-14
m
12. PROGRAMLAR: Basit matris işlemleri
em de r
FOR i = 1 TO n - 1 ' Kolonda Pivot ara T = 0: d = 1: k = i FOR j = i TO n IF ABS(a(j, i)) > T THEN T = ABS(a(j, i)): k = j NEXT j IF T <= Zero THEN GOTO 100 IF k > i THEN d = -d: ' Determinantın işaretini değiş ' i ve k satırlarını değiş FOR j = i TO n T = a(i, j) a(i, j) = a(k, j) a(k, j) = T NEXT j END IF
w
w
w .e
' indirge rank = i FOR j = i + 1 TO n T = a(j, i) / a(i, i) FOR k = i + 1 TO n a(j, k) = a(j, k) - T * a(i, k) NEXT k NEXT j NEXT i IF ABS(a(n, n)) <= Zero GOTO 100 rank = n
' Determinat için d ve k yi belirle (WILKINSON) k=0 FOR i = 1 TO n d = d * a(i, i) 200 k = k + 4 IF ABS(d) >= 1 THEN d = d * .0625: GOTO 200 300 k = k - 4 IF ABS(d) < .0625 THEN d = d * 16: GOTO 300 NEXT i EXIT SUB 100 ' Matris tekil d = 0: k = 0 END SUB
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
129
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
14 PROGRAMLAR:
CholeskyFull
135
14. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyYFull
14. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyFull1
.
. .
a11 a12 a22 . Sim. .
. .
. .
. .
. .
. .
. . .
.
. .
A x =b bağıntısında A ve b verildiğinde x bilinmeyenler vektörü hesaplanır. A tam dolu(full), simetrik ve pozitif tanımlı matristir. CholeskyFull alt programı A ve b yi parametre olarak alır, x çözümünü bulur.
a1n x1 b1 a2 n x2 b2 = ann xn bn
a1n a2 n A ann
m
.
. .
A nın üst üçgeninin satırları CholeskyFull alt programını çağıran programda tek boyutlu A matrisinde depolanmış olmalıdır:
ri. co
. .
[a11 a12 … a1n |a22 a23 … a2n | ….| ann]
tla
a11 a12 a22 . Sim. .
b [b1 b2 … bn]
sn o
A nın boyutu (n.n-n)/2+n dir. b matrisi de tek boyutlu b matrisinde depolanmış olmalıdır:
Hesaplanan x çözümü b vektöründe depolanır. Bu nedenle x matrisi için programda boyut açılmamıştır. Hesap sonrası A ve b nin ilk değerleri kaybolur. A=UTU çarpanlarından U üst üçgeni A matrisinde depolanır.
em de r
A pozitif tanımlı değilse çözüm bulunamaz. iHata değişkeni çözümün bulunup bulunamadığını belirtir. iHata=0 ise çözüm bulunmuştur, iHata≠0 ise çözüm bulunamamış, yarıda kesilmiştir. Bu durumda iHata çözümün kesildiği denklem numarasını verir. Örnek:
w
w
w .e
4 2 4 2 4 x1 b1 5 4 4 4 x 2 b2 Ax = b → 6 2 2 x 3 = b3 → 9.5 2 x 4 b4 Sim 32 x 5 b5
x =?
CholeskyFull sonucu
Çözüm: − 5 8 x= 4 − 7 − 4
1
Teori ve sayısal örnekler için bak: bölüm 6 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
135
136
14. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyYFull
'-------------- Ana program CholeskyFull---------------' Ax=b denklem sistemi çözümü ' çağrılan programlar: CholeskyFull '------------------------------------------------------Denklem sayısı verisi DATA 5: 'denklem sayısı ' a matrisi: DATA 4, 2, 4, 2, 4 DATA 5, 4, 4, 4 A nın üst üçgeninin satırları DATA 6, 2, 2 DATA 9.5, 2 DATA 32 'b matrisi: B nin kolonu DATA -18,2,14,-44.5,-122
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB CholeskyFull (n, a(), b(), iHata) CLS
Denklem sayısı okunuyor
Üst üçgendeki eleman sayısı hesaplanıyor
READ n iES = (n * n - n) \ 2 + n: 'a matrisindeki eleman sayısı
' b vektörünü oku: FOR i = 1 TO n READ b(i) NEXT i
A ve B matrisleri için bellekte yer ayrılıyor
tla
' a matrisini oku: FOR i = 1 TO iES READ a(i) NEXT i
A nın üst üçgeninin satırları DATA satırlarından okunuyor
B nin elemanları DATA satırlarından okunuyor
CholeskyFull alt programı
em de r
CALL CholeskyFull(n, a(), b(), iHata) çağrılıyor IF iHata <> 0 THEN PRINT “Matris pozitif tanımlı de§il. Denklem no:”; iHata ELSE PRINT “Denklem sisteminin çözümü (CholeskyFull):” FOR i = 1 TO n: PRINT b(i); : NEXT i: PRINT END IF
Sonuçlar yazdırılıyor
END 'CholeskyFull ana
CholeskyFull alt programı
SUB CholeskyFull (n, a(), b(), iHata) '--------------------------------------------------------------------' Doğrusal denklem sistemi çözümü (CHOLESKYFULL) ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1993 ' A(n,n)*x(n)=b(n) denklem sisteminin x(n) vektorü hesaplanır. ' A katsayılar matrisi simetrik ve pozitif tanımlı olmalıdır. ' A nın sadece üst üçgen matrisinin satırları sıra ile ' a(1)=a11,a(2)=a12,...,a(n)=a1n ' a(n+1)=a22,a(n+3)=a23,... ' ..... ' a(n*(n+1)/2)=ann ' şeklinde depolanmış olmalıdır. ' b matrisi b(1)=b1,b(2)=b2,...b(n)=bn şeklinde depolanmış olmalıdır. ' çözüm sonrası x(n) matrisi b(n) matrisinde depolanır. ' iHata=0 dönerse çözüm bulunmuştur, iHata sıfırdan farklı ise A tekildir ' veya pozitif tanımlı değildir, çözüm bulunamamıştır. Bu durumda ' iHata çözümün kesildiği denklem numarasını verir. '--------------------------------------------------------------------iHata = 0 iStart = 1: ' a matrisinin a vektöründe start adresi ' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps
w .e
w
w
' Çarpanlara ayır iAdr = iStart FOR i = 1 TO n i1 = i - 1 ' U nun diyagonal elemanı iSpadr = iStart + i1 iFark = n T=0 FOR j = 1 TO i1 T = T + a(iSpadr) ^ 2 iFark = iFark - 1 iSpadr = iSpadr + iFark NEXT j a(iAdr) = a(iAdr) - T IF a(iAdr) <= zero THEN iHata = i: EXIT SUB a(iAdr) = SQR(a(iAdr)) ' U nun satırı FOR k = 1 TO n - i iSpadr = iStart + i1 iFark = n T=0 FOR j = 1 TO i1 T = T + a(iSpadr) * a(iSpadr + k) iFark = iFark - 1 iSpadr = iSpadr + iFark NEXT j a(iAdr + k) = (a(iAdr + k) - T) / a(iAdr) NEXT k iAdr = iAdr + n - i1 NEXT i ' Yukarıdan aşağı hesap iAdr = iStart FOR i = 1 TO n i1 = i - 1 iSpadr = iStart + i1 iFark = n FOR j = 1 TO i1 b(i) = b(i) - a(iSpadr) * b(j) iFark = iFark - 1 iSpadr = iSpadr + iFark NEXT j b(i) = b(i) / a(iAdr) iAdr = iAdr + n - i1 NEXT i ' Aşağıdan yukarı hesap iAdr = n * (n + 1) \ 2 + 1 FOR i = n TO 1 STEP -1 iAdr = iAdr - n + (i - 1) FOR j = 1 TO n - i b(i) = b(i) - a(iAdr + j) * b(i + j) NEXT j b(i) = b(i) / a(iAdr) NEXT i
sn o
DIM a(iES), b(n)
ri. co
m
Ana program
' norm iAdr = iStart zero = 0 FOR i = 1 TO n IF ABS(a(iAdr)) >= zero THEN zero = ABS(a(iAdr)) iAdr = iAdr + n - (i - 1) NEXT i zero = zero * Eps
END SUB ' CholeskyFull
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
136
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
w
sn o
w
w .e
em de r
Ahmet TOPÇU
tla
Ders notları 2014
15 PROGRAMLAR:
CholeskyBant1
138
15. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant1
15. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant11 Mühendislikte karşılaşılan problemlerin çoğunda A x=b denklem sisteminin Anxn katsayılar matrisi simetrik (AT=A), pozitif tanımlı (xT A x>0) ve bant şeklindedir. x
x
x
x x
x x
x x
x
x
x .
x .
x .
.
x
x x
x x
Simetrik
x
x11 x 21 . x x x x x n1
x12
...
x 22
...
.
.
xn 2
x1m b11 x 2 m b21 . = . x nm bn1
b12
...
b22
...
b1m b2 m . bnm
m
x
ri. co
A nxn x nxm = b nxm
x →
.
bn 2
.
tla
Bilgisayar belleğinden yer kazanmak amacıyla A nın sadece bant içindeki satırları A(nxiBant) tek boyutlu matrisinde depolanır: iBant
x
x
x
x x
x x
x x
x
x .
x x . x
n. satır 2. satır 1. satır A nın satırlarının Tek → [x x x x|x x x x| …|x 0 0 0] boyutlu matriste depolanması x x 0 Son satırlara eklenen sıfırlar x 0 0 x 0 0 0
sn o
x
x . x
. x
em de r
A nxn
x =
Simetrik
x
x x
1. kolon
Bnxm nin kolonlarının depolanması:
2. kolon
m. kolon
[b11 b21 …bn1| b12 b22 …bn2| …| b1m b2m …bnm]
w
w
w .e
Yukarıdaki şekilde x bant içinde ve sıfırdan farklı olduğu varsayılan terimleri göstermektedir. iBant bant genişliğidir, diyagonal ve diyagonali izleyen sıfırdan farklı terim sayısıdır: 1≤iBant≤n dir.
Bu tür denklem sisteminin çözümü için CholeskyBant1 alt programı kullanılabilir. Ekte QBASIC kodu verilen programda Anxn simetrik matrisinin bant içindeki satırları A(n x iBant) tek boyutlu matrisinde, bnxm nin kolonları b(nxm) tek boyutlu matriste depolanmış olmalıdır. CholeskyBant1 alt programı x bilinmeyenler matrisini ve ayrıca d, k gibi iki değer hesaplar. A nın determinantı det A=d.2k ile hesaplanabilir. d=0 olması durumunda A tekildir veya pozitif tanımlı değildir, çözüm yoktur.
Hesaplanan x çözümü b matrisinde depolanır. Bu nedenle x matrisi için programda boyut açılmamıştır. Hesap sonrası A ve b nin ilk değerleri kaybolur. A=UTU çarpanlarından U üst üçgeni(bant formunda) A matrisinde depolanır. b=I birim matris ve m=n olarak verilirse çözüm A-1 olur. 1
Teori ve sayısal örnekler için bak: bölüm 6 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
138
139
15. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant1
Örnek:
x12 10 10 x 22 1 − 10 x 32 7 7 x 42 = − 11 − 11 → x = ? x 52 3 3 x 62 8 8 x 72 14 14
Katsayılar matrisi A nın programda depolanışı: 2. satır
n. satır
3. satır
tla
1. satır
ri. co
10 2 − 3 − 1 x11 x 9 2 −1 3 21 x 31 12 3 0 5 Ax = b → 8 1 − 2 − 2 x 41 6 1 2 x 51 Simetrik 9 3 x 61 10 x 71
m
iBant=4
sn o
A [10 2 -3 -1 9 2 -1 3 12 3 0 5 8 1 -2 -2 6 1 2 0 9 3 0 0 10 0 0 0] Karşı taraf matrisi b nın programda depolanışı: 1. kolon
1. kolon
CholeskyBant1 sonucu
w
w
w .e
em de r
b [10 1 7 -11 3 8 14 10 -10 7 -11 3 8 14]
Çözüm:
2.78 2 − 2 − 4.43 3 4.43 x = − 3 − 4.32 2 3.72 − 2 − 3.19 1 0.75
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
139
140
ri. co
'--------------- Ana program CholeskyBant1-----------' Ax=b denklem sistemi çözümü Ana program ' A simetrik pozitif tanımlı bant matris ' Çağrılan programlar: CholeskyBant1, AsagiyukariHesap '------------------------------------------------DATA 7: 'Denklem sayısı n Denklem sayısı, bant genişliği ve karşı taraf sayısı verileri DATA 4: 'Band genişliği iBant DATA 2: 'karşı taraf sayısı m 'A matrisi: DATA 10,2,-3,-1 DATA 9,2,-1,3 DATA 12,3,0,5 DATA 8,1,-2,-2 A nın üst üçgeninin DATA 6,1,2,0 bant içindeki satırları DATA 9,3,0,0 DATA 10,0,0,0 'b matrisi: DATA 10,1,7,-11,3,8,14 B nin kolonları DATA 10,-10,7,-11,3,8,14
m
15. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant1
tla
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB CholeskyBant1 (n, iBant, a(), d, k) DECLARE SUB AsagiYukariHesap (n, iBant, a(), m, b())
sn o
Denklem sayısı, bant genişliği ve karşı taraf sayısı okunuyor
READ n, iBant, m CLS DIM a(n * iBant) ' A için yer ayır DIM b(n * m): ' b için yer ayır
A ve B matrisleri için bellekte yer ayrılıyor
em de r
'A nın bant içindeki terimlerini oku FOR I = 1 TO n * iBant READ a(I) NEXT I A nın bant içindeki satırları DATA satırlarından okunuyor 'B yi oku FOR I = 1 TO n * m B nin kolonları DATA satırlarından okunuyor READ b(I) NEXT I CALL CholeskyBant1(n, iBant, a(), d, k)
CholeskyBant1 alt programı çağrılıyor
IF d = 0 THEN PRINT "Matris pozitif tanımlı değil !" : END
CALL AsagiYukariHesap(n, iBant, a(), m, b())
AsagiYukariHesap alt programı çağrılıyor
Sonuçlar yazdırılıyor
w .e
PRINT "Determinant ve kondisyon hesabı için katsayılar:" PRINT "d="; d, "k="; k PRINT PRINT "Denklem sisteminin çözümü (CholeskyBant1):" FOR I = 1 TO m FOR j = 1 TO n PRINT b((I - 1) * n + j), NEXT j PRINT : PRINT NEXT I
w
w
END 'CholeskyBant1 ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
140
141
CholeskyBant1 alt programı A=UTU
Çarpanlarını hesaplar U üst üçgenini A da depolar
em de r
sn o
'Zero: sıfır varsayılacak sayı Zero = 0 FOR I = 1 TO n * iBant STEP iBant IF ABS(a(I)) > Zero THEN Zero = ABS(a(I)) NEXT I Zero = Zero * Eps 'Çarpanlara ayır IF n = 1 OR iBant = 1 THEN FOR I = 1 TO n IF a(I) <= Zero GOTO 100 a(I) = SQR(a(I)) NEXT I GOTO 400 ELSE IF a(1) <= Zero GOTO 100 a(1) = SQR(a(1)) FOR I = 2 TO iBant a(I) = a(I) / a(1) NEXT I END IF
tla
ri. co
SUB CholeskyBant1 (n, iBant, a(), d, k) '------------------------------------------------------------------' Doğrusal denklem sistemi çözümü ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1994 ' A(n,n)*x(n,m)=b(n,m) denklem sisteminin x(n,m) vektorü hesaplanır. ' CholeskiBant1 A matrisini üçgen çarpanlarına ayırır. Denklem sisteminin ' çözümü için CholeskiBant1 in hemen arkasından AsagiYukariHesap alt ' programının da çağrılması gerekir. ' n denklem sayısı, iBant yarı bant genişliğidir. ' A katsayılar matrisi simetrik ve pozitif tanımlı olmalıdır. ' A üst üçgeni A(n*iBant) tek boyutlu alanında sıra ile depolanmış olmalıdır. ' b nın kolonları b(n*m) matrisinde sıra ile depolanmış olmalıdır. ' x(n,m) çözümü b(n*m) matrisinde depolanır. ' A nın determinantı Det a=d*2^k ile hesaplanabilir. ' Program d=0 değeri ile dönerse, a matrisi tekildir veya pozitif ' tanımlı değildir ve CholeskyBant1 çözüm vermez. ' Bu programın FORTRAN kodu "DANKERT,j., Numerische Methoden der Mechanik, ' Springer, 1977" adlı kaynaktan alınmıştır. '------------------------------------------------------------------' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps
m
15. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant1
w
w
w .e
iBw1 = iBant - 1 irue = iBw1 * iBw1 - 1 IF iBant > 2 THEN iE = iBant FOR I = 2 TO iBw1 s = a(iE + 1) FOR j = I TO iE STEP iBw1 s = s - a(j) ^ 2 NEXT j IF s <= Zero THEN GOTO 100 s = SQR(s) a(iE + 1) = s s=1/s iEe = iE + 1 j=I+1 kkk = I
8
IF j > iBant THEN j = j + iBw1 kkk = kkk + iBw1 END IF IF j <= iE THEN iEe = iEe + 1 ss = a(iEe) kk = kkk FOR k = j TO iE STEP iBw1 ss = ss - a(k) * a(kk) kk = kk + iBw1 NEXT k a(iEe) = ss * s j=j+1 GOTO 8 END IF iE = iE + iBant a(iE) = a(iE) * s NEXT I END IF
iE = iBw1 * iBant FOR I = iBant TO n s = a(iE + 1) ia = iE - irue FOR j = ia TO iE STEP iBw1 s = s - a(j) ^ 2 NEXT j IF s <= Zero GOTO 100 s = SQR(s) a(iE + 1) = s s=1/s IF iBant <> 2 THEN iaa = ia + iBant iEe = iE + 1 FOR j = iaa TO iE STEP iBant ia = ia + iBw1 iEe = iEe + 1 ss = a(iEe) kk = j FOR k = ia TO iE STEP iBw1 ss = ss - a(k) * a(kk) kk = kk + iBw1 NEXT k a(iEe) = ss * s NEXT j END IF iE = iE + iBant a(iE) = a(iE) * s NEXT I
' determinant (WILKINSON) 400 d = 1: k = 0 FOR I = 1 TO n j = (I - 1) * iBant + 1 d = d * a(j) * a(j) 500 k = k + 4 IF ABS(d) >= 1 THEN d = d * .0625: GOTO 500 600 k = k - 4 IF ABS(d) < .0625 THEN d = d * 16: GOTO 600 NEXT I EXIT SUB 100 'Matris tekil veya pozitif tanımlı değil d = 0: k = 0 END SUB
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
141
142
w
w
ri. co
tla
w .e
em de r
FOR I = 1 TO nm STEP n b(I) = b(I) / a(1) ii = I - 1 jja = 0 ia = iBant + 1 FOR j = 2 TO n ij = ii + j s = b(ij) jog = ij - 1 IF j >= iBant THEN jug = ij - iBw1 jja = jja + iBant ja = jja ELSE jug = I ja = j END IF FOR k = jug TO jog s = s - a(ja) * b(k) ja = ja + iBw1 NEXT k b(ij) = s / a(ia) ia = ia + iBant NEXT j ia = nibw - iBw1 ii = ii + n b(ii) = b(ii) / a(ia) FOR j = 1 TO n1 ij = ii - j ia = ia - iBant s = b(ij) ja = ia + 1 jug = ij + 1 jog = ii IF j > iBw1 THEN jog = ij + iBw1 FOR k = jug TO jog s = s - a(ja) * b(k) ja = ja + 1 NEXT k b(ij) = s / a(ia) NEXT j NEXT I
Bu alt program CholeskyBant1 alt programının hemen arkasından çağrılır, Aşağı ve yukarı doğru hesap ile bilinmeyen matrisi x i hesaplayarak b nin üzerine depolar.
sn o
SUB AsagiYukariHesap (n, iBant, a(), m, b()) '---------------------------------------------------' CholeskyBant1 alt programından hemen sonra çağrılır. ' Üçgen çarpanlarına ayrılmıŸ katsayılar matrisini ' kullanarak bilinmeyenler matrisini hesaplar '---------------------------------------------------iBw1 = iBant - 1 nm = n * m nibw = n * iBant n1 = n - 1 IF iBant = 1 THEN FOR I = 1 TO m ia = (I - 1) * n FOR j = 1 TO n b(ia + j) = b(ia + j) / a(j) ^ 2 NEXT j NEXT I EXIT SUB END IF
m
15. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant1
END SUB 'AsagiYukariHesap
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
142
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
w
sn o
w
w .e
em de r
Ahmet TOPÇU
tla
Ders notları 2014
16 PROGRAMLAR:
CholeskyBant2
144
16. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant2
16. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant21
x x x
x x x x
x x x .
x x . x
x . x x
. x x x
x11 x 21 . x x x x x n1
x12 x 22
... ...
.
.
x1m b11 x 2 m b21 . = . x nm bn1
b12 b22
... ...
b1m b2 m . bnm
ri. co
x x
xn2
.
bn 2
tla
A nxn x nxm = b nxm
x →
m
Mühendislikte karşılaşılan problemlerin çoğunda A x=b denklem sisteminin Anxn katsayılar matrisi simetrik (AT=A), pozitif tanımlı (xT A x>0) ve bant şeklindedir.
.
Bilgisayar belleğinden yer kazanmak amacıyla A nın sadece bant içindeki sayıları n boyutlu dikdörtgen matrise depolanır: iBant
x x x
x Simetrik
iBant
iBant
x x x
x x x .
x x . x
sn o
x x
x . x x
. x x
x x x x x x x x → A nxiBand = x x x x x x x x 0 x 0 0 x x x 0 0 0 x 0
em de r
A nxn
x =
.
x
x x x x x x x
0 0
x x x x x x 0 0 0
Son satırlara eklenen sıfırlar
Yukarıdaki şekilde x bant içinde ve sıfırdan farklı olduğu varsayılan terimleri göstermektedir. iBant bant genişliğidir, diyagonal ve diyagonali izleyen sıfırdan farklı terim sayısıdır: 1≤iBant≤n dir.
w
w
w .e
Bu tür denklem sisteminin çözümü için CholeskyBant2 alt programı kullanılabilir. Ekte QBASIC kodu verilen programda Anxn simetrik matrisinin bant içindeki terimleri AnxiBant matrisinde, bnxm nin terimleri nxm matriste depolanmış olmalıdır. CholeskyBant2 alt programı x bilinmeyenler matrisini ve ayrıca d, k gibi iki değer hesaplar. A nın determinantı Det A=d.2k ile hesaplanabilir. d=0 olması durumunda A tekildir veya pozitif tanımlı değildir, çözüm yoktur. Hesaplanan x çözümü b matrisinde depolanır. Bu nedenle x matrisi için programda boyut açılmamıştır. Hesap sonrası A ve b nin ilk değerleri kaybolur. A=UTU çarpanlarından U üst üçgeni(bant formunda) A matrisinde depolanır. b=I birim matris ve m=n olarak verilirse çözüm A-1 olur. 1
Teori ve sayısal örnekler için bak: bölüm 6 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
144
145
16. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant2
Örnek: iBant=4
m
x12 10 10 x 22 1 − 10 x 32 7 7 x 42 = − 11 − 11 → x = ? x 52 3 3 x 62 8 8 x 72 14 14
ri. co
10 2 − 3 − 1 x11 x 9 2 −1 3 21 x 31 12 3 0 5 Ax = b → 8 1 − 2 − 2 x 41 Simetrik 6 1 2 x 51 9 3 x 61 10 x 71
iBant=4
tla
2 − 3 − 1 2 − 1 3 3 0 5 1 − 2 − 2 1 2 0 3 0 0 0 0 0
Son satırlara eklenen sıfırlar
sn o
Katsayılar matrisi A nın programda depolanışı
10 9 12 8 6 9 10
em de r
CholeskyBant2 sonucu
2.78 2 − 2 − 4.43 3 4.43 x = − 3 − 4.32 2 3.72 − 2 − 3.19 1 0.75
w
w
w .e
Çözüm:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
145
146
IF ABS(a(i, 1)) >= Zero THEN Zero = ABS(a(i, 1)) NEXT i Zero = Zero * Eps
DECLARE SUB CholeskyBant2 (n, iBant, a(), m, b(), d, k) CLS Denklem sayısı, bant genişliği READ n, iBant, m ve karşı taraf sayısı okunuyor DIM a(n, iBant), b(n, m)
sn o
A nın bant içindeki satırları DATA satırlarından okunuyor B nin kolonları DATA satırlarından okunuyor
CholeskyBant2 alt programı çağrılıyor
em de r
'b yi oku: FOR i = 1 TO m FOR j = 1 TO n READ b(j, i) NEXT j NEXT i
A ve B matrisleri için bellekte yer ayrılıyor
CALL CholeskyBant2(n, iBant, a(), m, b(), d, k)
PRINT "Determinant ve kondisyon hesabı için katsayılar:" PRINT "d="; d, "k="; k IF d = 0 THEN PRINT "Matris pozitif tanımlı değil !": END PRINT PRINT "Denklem sisteminin çözümü (CholeskyBant2):" FOR i = 1 TO m FOR j = 1 TO n Sonuçlar yazdırılıyor PRINT b(j, i), NEXT j PRINT : PRINT NEXT i
w
w .e
END ' CholeskyBant ana
w
iBant1 = iBant - 1 ' Çarpanlara ayır FOR i = 1 TO n IF a(i, 1) <= Zero GOTO 100 T = SQR(a(i, 1)) FOR j = 1 TO iBant a(i, j) = a(i, j) / T NEXT j FOR j = 1 TO iBant1 i1 = i + j IF i1 > n THEN GOTO 200 T = a(i, j + 1) FOR k = j TO iBant1 iv = 1 + k - j a(i1, iv) = a(i1, iv) - T * a(i, k + 1) NEXT k NEXT j 200 NEXT i
tla
DEFINT I-N DEFDBL A-H, O-Z
'A yı oku: FOR i = 1 TO n FOR j = 1 TO iBant READ a(i, j) NEXT j NEXT i
ri. co
'--------- Ana program CholeskyBant2----------Ana program ' Ax=b denklem sisteminin çözümü ' A simetrik pozitif tanınlı bant matris ' Çağrılan programlar: CholeskyBant '----------------------------------------------DATA 7: 'Denklem sayısı n Denklem sayısı, bant genişliği DATA 4: 'yarı bant genişliği iBant ve karşı taraf sayısı verileri DATA 2: 'karşı taraf sayısı m 'A matrisi: DATA 10,2,-3,-1 DATA 9,2,-1,3 DATA 12,3,0,5 A nın üst üçgeninin DATA 8,1,-2,-2 bant içindeki satırları DATA 6,1,2,0 DATA 9,3,0,0 DATA 10,0,0,0 'b matrisi: ' Zero: sıfır varsayılacak sayı DATA 10,1,7,-11,3,8,14 Zero = 0 B nin kolonları DATA 10,-10,7,-11,3,8,14 FOR i = 1 TO n
m
16. PROGRAMLAR: Doğrusal denklem sistemi çözümü-CholeskyBant2
CholeskyBant2 alt programı
SUB CholeskyBant2 (n, iBant, a(), m, b(), d, k) '---------------------------------------------------------' Doğrusal denklem sistemi çözümü ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1994 ' A(n,n)*x(n,m)=b(n,m) sisteminin x(n,m) vektorü hesaplanır. ' n denklem sayısı, iBant bant genişliğidir. ' A katsayılar matrisi simetrik ve pozitif tanımlı olmalıdır. ' A nın diyagonal ve sağındaki, bant içindeki, elemanları ' A(n,iBant) alanında depolanmış olmalıdır. ' b matrisi depolanmış olmalıdır. ' x(n,m) çözümü b(n,m) matrisinde depolanır. ' A nın determinantı det a=d*2^k ile hesaplanabilir. ' Program d=0 değeri ile dönerse, a matrisi tekildir veya ' pozitif tanımlı değildir ve CholeskyBant2 çözüm vermez. '---------------------------------------------------------' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps
' Yukarıdan aşağı hesap FOR m1 = 1 TO m FOR i = 1 TO n b(i, m1) = b(i, m1) / a(i, 1) FOR j = 1 TO iBant1 i1 = i + j IF i1 > n GOTO 300 T = a(i, j + 1) b(i1, m1) = b(i1, m1) - T * b(i, m1) NEXT j 300 NEXT i NEXT m1
Sonuçlar yazdırılıyor
' Aşağıdan yukarı hesap FOR m1 = 1 TO m b(n, m1) = b(n, m1) / a(n, 1) FOR i = 1 TO n - 1 k=n-i T=0 FOR j = 1 TO iBant1 i1 = j + k IF n < i1 GOTO 400 T = T + a(k, j + 1) * b(i1, m1) NEXT j 400 b(k, m1) = (b(k, m1) - T) / a(k, 1) NEXT i NEXT m1 ' determinant (WILKINSON) d = 1: k = 0 FOR i = 1 TO n d = d * a(i, 1) * a(i, 1) 500 k = k + 4 IF ABS(d) >= 1 THEN d = d * .0625: GOTO 500 600 k = k - 4 IF ABS(d) < .0625 THEN d = d * 16: GOTO 600 NEXT i EXIT SUB 100 'Matris tekil veya pozitif tanımlı değil d = 0: k = 0 END SUB 'CholeskyBant2
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
146
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
sn o
w
w .e
em de r
Ahmet TOPÇU
tla
Ders notları 2014
17 PROGRAMLAR: CHOLESKY Skyline(ufuk çizgisi) tekniği
148
17. PROGRAMLAR: CHOLESKY Skyline(ufuk çizgisi) tekniği
17. PROGRAMLAR: CHOLESKY Skyline(ufuk çizgisi) tekniği
x x x x
x x
x x
Simetrik
x x x x x x x x
x .
x1 b1 x b 2 2 x 3 b3 x x = x x . . . x x n bn
tla
x x
sn o
A nxn x nxm = b nxm
x →
ri. co
m
Mühendislikte karşılaşılan problemlerin çoğunda A x=b denklem sisteminin Anxn katsayılar matrisi simetrik (AT=A), pozitif tanımlı (xT A x>0) ve bant şeklindedir. Ayrıca bant içindeki kolonların yüksekliği (=kolonun diyagonal elemanı ile aynı kolonun en yukarıdaki sıfırdan farklı son elemanı arasındaki eleman sayısı) azdır. Kolonların en yukarıdaki sıfırdan farklı elemanlarının yatay çizgilerle birleştirilmesi sonucu oluşan hatta ufuk çizgisi(skyline) denilmektedir. Denklem sistemi
olsun. Bilgisayar belleğinden olabildiğince tasarruf sağlamak ve sıfırlar ile dört işlem yapmamak için özel bir depolama tekniği kullanılır: A nın üst üçgen matrisinin sadece ufuk çizgisi altındaki sayıları depolanır. Her kolonun, diyagonal elemandan başlanarak kolonun ufuk çizgisine kadar olan elemanları tek boyutlu A matrisinde satır olarak depolanır.
em de r
Ufuk çizgisi(skyline)
x x x x
w
w
x x x x
x x
Simetrik
x x
x x x x x x
x .
w .e
A nxn
x =
x x x x . x
2. kolon
1. kolon
3. kolon
4. kolon
n. kolon
A [x| x x |x x | x x x x|x x|xx|x x x x x x|. x|x . x x x x]
A nın kolonlarının tek boyutlu matriste depolanması
Çözümün yapılabilmesi için kolon yüksekliklerinin (kolonun ufuk çizgisi altındaki eleman sayısı) bilinmesi gerekir. Programdaki kH vektörü bu amaca yöneliktir. kH vektöründe kolonların yükseklikleri aşağıdaki gibi depolanır. Yukarıdaki A matrisi için örnek: kH [1 2 2 4 2 2 6 …]
Kolon yükseklikleri
Karşı taraf vektörünün depolanması: bn
[ b1
b2 … bn]
Çözüm için CHOLESKY metodu kullanılır. Aşağıda QBASIC kodu verilen CholeskySkyline alt programı ufuk çizgisi tekniği ile depolanmış katsayılar matrisi A yı, kolon yükseklikleri vektörü kH yı, karşı taraf vektörü b yi ve denklen sayısı n yi parametre olarak alır, x bilinmeyenler vektörünü hesaplar. x çözümü b vektöründe depolanır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
148
149
17. PROGRAMLAR: CHOLESKY Skyline(ufuk çizgisi) tekniği
iHata parametresi sıfır olarak dönerse çözüm bulunabilmiş anlamındadır. iHata sıfırdan farklı ise, A tekildir veya pozitif tanımlı değildir. Bu durumda iHata nın değeri çözümün kesildiği denklem numarasıdır. Örnek:
m
Ufuk çizgisi
tla
ri. co
3 − 5 x1 24 11 1 16 2 0 1 x2 − 28 13 0 4 3 x3 108 9 −1 0 x4 15 = Ax = b → 10 4 0 x5 14 12 4 x6 107 8 1 x7 − 12 Simetrik 26 x8 121
Katsayılar matrisi A nın programda depolanışı: 2. kolon
3. kolon
8. kolon
4. kolon
sn o
1. kolon
A [11 16 1 13 2 9 0 0 3 10 12 4 -1 4 8 26 1 4 0 0 3 1 -5] 1. diyagonal
3. diyagonal
2. diyagonal
4. diyagonal
6. kolonun yüksekliği
em de r
1. kolonun yüksekliği
8. diyagonal
Kolonların yükseklikleri: kH [1 2 2 4 1 4 1 8] 2. kolonun yüksekliği
8. kolonun yüksekliği
Karşı taraf matrisi b nın programda depolanışı:
b [14 -28 108 15 14 107 -12 121]
w
w
w .e
CholeskySkyline sonucu
Çözüm:
4 − 3 6 1 x= − 1 6 − 2 4
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
149
150
17. PROGRAMLAR: CHOLESKY Skyline(ufuk çizgisi) tekniği
DEFINT I-N DEFDBL A-H, O-Z
CLS
m ri. co
sn o
DECLARE SUB CholeskySkyline (n, a(), b(), kH(), iHata)
Ana program
tla
' Ana program CHOLESKY Skyline(Ufuk çizgisi) çözüm tekniği '--------------------------------------------------------' Ax=b Denklem sistemi çözümü ' A simetrik pozitif tanımlı ' Çağrılan alt programlar: CholeskySkyline '--------------------------------------------------------DATA 8 : ' denklem sayısı 'ufuk çizgisi yükseklikleri: Kolon yükseklikleri DATA 1,2,2,4,1,4,1,8 'A nın diyagonal-ufuk çizgisi arasındaki elemanları: DATA 11 DATA 16,1 DATA 13,2 A nın üst üçgeninin DATA 9,0,0,3 kolonları DATA 10 DATA 12,4,-1,4 DATA 8 DATA 26,1,4,0,0,3,1,-5 'Sağ taraf vektörü: DATA 24,-28,108,15,14,107,-12,121 B nin elemanları
Denklem sayısı okunuyor
em de r
READ n DIM kH(n), b(n) Kolon yükseklikleri ve karşı taraf için bellekte yer ayır 'A nın ufuk çizgisi yüksekliklerini oku: FOR i = 1 TO n READ kH(i) Kolon yüksekliklerini oku NEXT i 'A matrisinin eleman sayısının=A nın boyutunun belirlenmesi: iElemansayisi = 0 FOR i = 1 TO n iElemansayisi = iElemansayisi + kH(i) NEXT i DIM a(iElemansayisi): ' A matrisi için bellekte yer ayır 'A yı oku: FOR i = 1 TO iElemansayisi A nın kolonlarını oku READ a(i) NEXT i
A nın depolanacak toplam eleman sayısını hesapla
A matrisi için bellekte yer ayır
'Denklem sistemini çöz: CALL CholeskySkyline(n, a(), b(), kH(), iHata) IF iHata <> 0 THEN PRINT "Matris pozitif tanımlı değil, denklem no:"; iHata ELSE PRINT "Çözüm(CholeskySkyline):" FOR i = 1 TO n PRINT b(i); NEXT i END IF
Sonucu yaz
END 'Cholesky-Skyline ana
w
w
w .e
'sağ taraf vektörünü oku: FOR i = 1 TO n b yi oku READ b(i) NEXT i
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
150
151
17. PROGRAMLAR: CHOLESKY Skyline(ufuk çizgisi) tekniği
em de r
FOR i = 1 TO n kn = MaxA(i) kl = kn + 1 ku = MaxA(i + 1) - 1 kH = ku - kl IF kH < 0 GOTO 110
IF kH > 0 THEN k = i - kH ic = 0 KLT = ku FOR j = 1 TO kH ic = ic + 1 KLT = KLT - 1 ki = MaxA(k) nd = MaxA(k + 1) - ki - 1 IF nd > 0 THEN IF ic < nd THEN kk = ic ELSE kk = nd T=0 FOR L = 1 TO kk T = T + a(ki + L) * a(KLT + L) NEXT L a(KLT) = a(KLT) - T END IF k=k+1 NEXT j END IF
w .e
w
w
m ri. co
sn o
' diyagonal elemanların adresleri MaxA(1) = 1 Dmax = ABS(a(1)) IF n > 1 THEN FOR i = 2 TO n + 1 MaxA(i) = MaxA(i - 1) + kH(i - 1) NEXT i END IF
CholeskySkyline alt programı
tla
SUB CholeskySkyline (n, a(), b(), kH(), iHata) '-------------------------------------------------------------' Lineer denklem sistemi çözümü ' CHOLESKY Skyline(Ufuk çizgisi) çözüm tekniği ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1998 ' A(n,n)*x(n)=b(n) denklem sistemini ufuk çizgisi çözüm ' tekniği ile çözer. A simetrik ve pozitif tanımlı matristir. ' A nın kolonlarındaki diyagonali ile ufuk çizgisi ' arasındaki elemanları sıra ile A tek boyutlu matrisinde ' deplanmış olmalıdır. ' b(n) sağ tarafı b tek boyutlu matrisinde depolanmış olmalıdır. ' A nın diyagonal-ufuk çizgisi yüksekliği=kolonların eleman sayısı ' kH(n) vektöründe depolanmış olmalıdır. ' n: denklem sayısı ' iHata: hata değişkeni. Matris pozitif tanımlı ise iHata=0 olarak ' aksi halde iHata<>0 olarak döner. iHata<>0 durumunda çözüm yoktur ' ve çözümün kesildiği denklem numarasını belirtir. ' FORTRAN kodu BATHE, k.j, Page 448 den alınmıştır '---------------------------------------------------------------DIM MaxA(n + 1): ' Diyagonal elemanların adresleri iHata = 0 ' EpsMach EpsMach = 1 DO EpsMach = EpsMach / 2 s = 1 + EpsMach LOOP UNTIL s <= 1 EpsMach = 2 * EpsMach Zero = EpsMach
k=i b=0 FOR kk = kl TO ku k=k-1 ki = MaxA(k) T = a(kk) / a(ki) b = b + T * a(kk) a(kk) = T NEXT kk a(kn) = a(kn) - b
' Aşağı doğru hesap FOR i = 1 TO n kl = MaxA(i) + 1 ku = MaxA(i + 1) - 1 IF ku - kl >= 0 THEN k=i T=0 FOR kk = kl TO ku k=k-1 T = T + a(kk) * b(k) NEXT kk b(i) = b(i) - T END IF NEXT i ' Yukarı doğru hesap FOR i = 1 TO n k = MaxA(i) b(i) = b(i) / a(k) NEXT i IF n = 1 THEN EXIT SUB i=n FOR L = 2 TO n kl = MaxA(i) + 1 ku = MaxA(i + 1) - 1 IF ku - kl >= 0 THEN k=i FOR kk = kl TO ku k=k-1 b(k) = b(k) - a(kk) * b(i) NEXT kk END IF i=i-1 NEXT L
END SUB ' CholeskySkyline
110 IF a(kn) <= Zero THEN iHata = i: EXIT SUB NEXT i
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
151
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
18 PROGRAMLAR: Ters matris hesabı (GAUSS-JORDAN tekniği)
153
18. PROGRAMLAR: Ters matris hesabı-Gauss-Jordan tekniği
18. PROGRAMLAR: Ters matris hesabı-Gauss-Jordan tekniği1
m
Sayısal hesaplarda ters matrisin teorik önemi büyük olmakla birlikte, zorunlu olmadıkça hesabından kaçınılır. Hesaplanması zorunlu durumlarda aşağıda kodu verilen GaussJordan alt programı kullanılabilir. Ters matris GAUSS, CROUT, DOOLITLE ve COLESKY metotları ile de hesaplanabilir. Ancak Tüm bu metotlar GAUSS-JORDAN metodundan iki kat daha fazla ana bellek gerektirirler. Ters matris daima tam dolu olduğundan bant özelliğinden yararlanılamaz.
a12 a 22 . an2
... a1n ... a 2 n ... . ... a nn
tla
A nxn
a11 a = 21 . a n1
ri. co
GaussJordan alt programı
−1
Örnek:
1 1 1 , 3 2
A =? -1
GaussJordan sonucu
w
w
w .e
em de r
5 8 − 4 4 2 9 − 3 0 A = 0 1 − 7 1 0 −5 3 2 6 3 2 0
sn o
matrisinin A nxn ters matrisini GAUSS-JORDAN tekniği ile hesaplar. Pivot eleman satırda aranır ve gerekirse kolonlara yer değiştirilir. Ters matris A nın üzerine depolanır. Program iHata≠0 ile dönerse det A=0 dır, ters matris hesaplanmaz.
Çözüm:
A
1
−1
50.2759 − 23.6207 − 23.7241 11.0345 − 21.4138 2.8276 − 1.3793 − 6.0345 2.9655 2.5517 = 11.2069 11.2414 − 5.3448 10.1379 − 23.7586 20.2414 − 9.3448 18.1379 − 42.7586 20.2069 55.4138 55.4828 − 25.6897 50.2759 − 117.5172
Teori ve sayısal örnekler için bak: bölüm 8 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
153
154
'---------------- Ana program GaussJordan------------' Ters matris hesabı ' Çağrılan alt programlar: GaussJordan '----------------------------------------------------DATA 5: ' Matrisin boyutu ' A matrisi: DATA 8, -4, 4, 5, 1 DATA 2, 9, -3, 0, 1 DATA 0, 1, -7, 1, 1 A nın satırları DATA 3, 2, 0, -5, 3 DATA 6, 3, 2, 0, 2
Ana program
ri. co
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB GaussJordan (n, A(), iHata)
A nın boyutu okunuyor A matrisi için bellekte yer ayır A okunuyor
CALL GaussJordan(n, A(), iHata)
GAUSSJORDAN alt programını çağır
Sonucu yaz
em de r
GAUSSJORDAN Alt programı
w
w
w .e
SUB GaussJordan (n, A(), iHata) '---------------------------------------------------' Ters matris hesabı (GAUSS-JORDAN tekniği) ' Dr. ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1994 ' A(n,n) nin tersi GAUSS-JORDAN tekniği ile hesaplanır ' A matrisi çağıran programda depolanmış olmalıdır. ' Ters matris A(n,n) üzerinde depolanır. ' n:matrisin boyutu ' iSp(n): yadımcı vektor(kolon değiştirme bilgilerini içerir) ' ihata<>0 ise A tekildir, tersi hesaplanmaz. ' iHata=0 ise ters matris hesaplanmıştır. '----------------------------------------------------DIM iSp(n): 'kolon değiştirme vektörü iHata = 0 ' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps
' Zero: sıfır varsayılacak sayı Zero = 0 FOR j = 1 TO n iSp(j) = j FOR i = 1 TO n T = ABS(A(i, j)) IF T >= Zero THEN Zero = T NEXT i NEXT j Zero = Zero * Eps
' Pivot eleman ve pivot kolonu FOR i = 1 TO n pivot = 0 FOR k = i TO n T = ABS(A(i, k)) IF T > pivot THEN iVer = k: ' Pivot kolonu pivot = T: ' Pivot elemanı END IF NEXT k
sn o
IF iHata <> 0 THEN PRINT "Matris Tekil !": END PRINT "Ters matris (GaussJordan):" FOR i = 1 TO n FOR j = 1 TO n PRINT A(i, j); NEXT j PRINT NEXT i END ' GaussJordan ana
tla
CLS READ n DIM A(n, n) FOR i = 1 TO n FOR j = 1 TO n READ A(i, j) NEXT j NEXT i
m
18. PROGRAMLAR: Ters matris hesabı-Gauss-Jordan tekniği
' Kolon lineer bağımlımı ? IF pivot <= Zero THEN iHata = 1: EXIT SUB IF iVer = i THEN T = -1 / A(i, i) A(i, i) = -1 FOR k = 1 TO n A(k, i) = A(k, i) * T NEXT k ELSE ' Kolon değiştir iSv = iSp(i) iSp(i) = iSp(iVer) iSp(iVer) = iSv aT = -1 / A(i, iVer) A(i, iVer) = -1 FOR k = 1 TO n T = A(k, i) A(k, i) = A(k, iVer) * aT A(k, iVer) = T NEXT k END IF ' Çarpım FOR k = 1 TO n IF k <> i THEN T = A(i, k) A(i, k) = 0 FOR j = 1 TO n A(j, k) = A(j, k) + A(j, i) * T NEXT j END IF NEXT k NEXT i ' Satır değiştir FOR j = 1 TO n iSv = iSp(j) IF j <> iSv THEN FOR k = j + 1 TO n IF iSp(k) = j THEN EXIT FOR NEXT k iSp(k) = iSp(j) FOR i = 1 TO n T = A(j, i) A(j, i) = A(k, i) A(k, i) = T NEXT i END IF NEXT j END SUB ' GaussJordan
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
154
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
19 PROGRAMLAR: Simetrik Ters matris (GAUSS-JORDAN tekniği)
156
19. PROGRAMLAR: Simetrik ters matris hesabı-GaussJorSim
19. PROGRAMLAR: Simetrik ters matris hesabı-GaussJorSim
m
Sayısal hesaplarda ters matrisin teorik olarak önemi büyük olmakla birlikte, zorunlu olmadıkça hesabından kaçınılır. Hesaplanması zorunlu durumlarda aşağıda kodu verilen GaussJorSim alt programı simetrik matrisler için kullanılabilir. Simetrik ters matris COLESKY metodu ile de hesaplanabilir, ancak GAUSS-JORDAN metodundan iki kat daha fazla ana bellek gerektirir. Ters matris daima tam dolu bir matris olduğundan bant özelliğinden yararlanılamaz.
... a1n ... a 2 n ... . ... a nn
tla
A nxn
a11 a12 a 22 = . . Simetrik
ri. co
GaussJordan alt programı
−1
Örnek:
2 5 4 4 4
4 2 4 4 4 4 6 2 2 , 2 9.5 2 2 2 32
A =? -1
GaussJorSim sonucu
w
w
w .e
em de r
4 2 A = 4 2 4
sn o
matrisinin A nxn ters matrisini GAUSS-JORDAN tekniği ile hesaplar. Pivot eleman satırda aranır ve gerekirse kolonlara yer değiştirilir. Ters matris A nın üzerine depolanır. Program iHata≠0 ile dönerse det A=0 dır, ters matris hesaplanmaz.
Çözüm:
A
−1
3.0208 − 4.0625 − 1.2250 − 0.5417 3.9063 3.0208 3.0694 − 3.5417 − 1.0833 − 0.4722 = − 4.0625 − 3.5417 4.6250 1.2500 0.5833 0.5000 0.1667 − 1.1250 − 1.0883 1.2500 − 0.5417 − 0.4722 0.5833 0.1667 0.11111
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
156
157
'--------------- Ana program GaussJorSim----------' Simetrik matrisin tersinin hesabı ' Çağrılan alt programlar: GaussJorSim '-------------------------------------------------DATA 5: ' Matrisin boyutu ' A matrisi DATA 4, 2, 4, 2 ,4 DATA 5, 4, 4 ,4 A nın satırları DATA 6, 2 ,2 DATA 9.5 ,2 DATA 32
Ana program
ri. co
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB GaussJorSim (n, a(), iHata)
CALL GaussJorSim(n, a(), iHata)
tla
A nın boyutu okunuyor
CLS READ n A matrisi için bellekte yer ayır DIM a(n, n) ' matrisinin üt üçgenini oku, simetriye tamamla FOR i = 1 TO n FOR j = i TO n A okunuyor READ a(i, j) a(j, i) = a(i, j) NEXT j NEXT i
m
19. PROGRAMLAR: Simetrik ters matris hesabı-GaussJorSim
GAUSSJORsim alt programını çağır
Sonucu yaz
em de r
PRINT "Ters matris(GaussJorSim):" FOR i = 1 TO n FOR j = 1 TO n PRINT a(i, j); NEXT j PRINT PRINT NEXT i
sn o
IF iHata <> 0 THEN PRINT "Matris tekil (GaussJorSim)": END
END 'GaussJorSim ana
GAUSSJORSim Alt programı
w
w
w .e
SUB GaussJorSim (n, a(), iHata) '-----------------------------------------------------' Ters matris hesabı ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1995 ' a(n,n) simetrik ve pozitif tanımlı matrisin tersi ' hesaplanarak a(n,n) üzerinde depolanır. ' Pivot arama yapılmaz. ' a çağıran programda depolanmış olmalıdır. ' iHata=0 ise ters matris hesaplanmıştır. ' iHata<>0 ise matris tekildir, tersi hesaplanmaz. '-----------------------------------------------------' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps iHata = 0 Zero = 0 FOR i = 1 TO n IF ABS(a(i, i)) >= Zero THEN Zero = ABS(a(i, i)) NEXT i Zero = Zero * Eps FOR i = 1 TO n IF ABS(a(i, i)) <= Zero THEN iHata = 1: EXIT SUB T = -1 / a(i, i) a(i, i) = -1 FOR k = 1 TO n a(k, i) = a(k, i) * T NEXT k ' Çarpım FOR k = 1 TO n IF k <> i THEN T = a(i, k) a(i, k) = 0 FOR j = 1 TO n a(j, k) = a(j, k) + a(j, i) * T NEXT j END IF NEXT k NEXT i END SUB 'GaussJorSim
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
157
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz Ahmet TOPÇU
em de r
Noktaları en iyi temsil eden eğri: y= -3.0084+11.9666x-6.9991x2+1.0017x3
sn o
tla
Ders notları 2014
AnxmXm=bn
w
w
w .e
n≠m
20
PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı doğrusal denklem sistemleri
• n≥m durumu: Dengeleme hesabı
En küçük kareler metodu ile eğri(polinom) uydurma QR çarpanlara ayırma metodu • n≤m durumu: Sağ ters matris ve çekirdek (GAUSS-JORDAN tekniği)
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
159
20. PROGRAMLAR En küçük kareler metodu ile en uygun eğri(polinom) uydurma -LeastSquares
ri. co
m
En uygun eğri uydurma problemi(curve fitting); gözlem, ölçüm, deney veya istatistiksel verilerin değerlendirilmesi ve yorumlanmasını basitleştirmek için kullanılan bir yoldur.
tla
Verilmiş (x1,y1), (x2,y2), …, (xm,ym) değerleri x-y eksen takımında gösterildiğinde, notaların bir doğru veya eğri üzerinde olmadığı, x-y düzleminde serpiştirildiği görülür. Bunun nedeni verilerin hata içirmesidir.
sn o
Amaç, bu noktaları en az hata ile temsil eden bir doğru veya eğrinin denkleminin bulunmasıdır. Yukarıda, solda verilen noktaların bir doğru ile temsil edilebileceği görülmektedir. Bir doğrunun genel denklemi y=a0+a1x dir. Bilinmeyen 2 dir: a0 ve a1. Bu doğrunun denklemini, yani a0 ve a1 parametrelerini belirlemek, için sadece iki noktanın koordinatlarını bilmek yeter. Fakat çok sayıda, m tane koordinatları bilinen nokta vardır. Hepsinin de doğrunun denklemini sağlaması imkânsızdır. Noktaların koordinatları doğru denkleminde yerine konduğunda denklemi sağlamayacak, bir miktar hata olacaktır.
em de r
LeastSquares programı; xi, yi değerleri bilinen m noktayı temsil edecek y=a0+a1x+a2x2+…+anxn polinomunun a0, a1, ,a2, …, an katsayılarını GAUSS’un en küçük kareler metodundaki normal denklemleri kullanarak minimum hata ile hesaplar. Teorik bağıntılar ve sayısal örnekler için için bak: Bölüm 9. y
Örnek 1:
Nokta no xi yi
1 4 3.3
2 6 5.3
3 8 7.4
4 10 6.9
5 12 9.0
6 14 8.6
7 16 10.8
8 18 12.4
9 20 12.0
10 22 13.2 x 0
2 4
6
8 10 12 14 16 18 20 22 24
w
w
w .e
Noktalarını minimum hata ile temsil eden y=a0+a1x doğrusunun a0 ve a1 katsayılarını LeastSquares programı ile bulunuz. El çözümü için bakınız: Bölüm 9, örnek 3.
Nokta sayısı m=10, polinomun derecesi n=1 (doğru denklemi) dir. n, m ve noktaların koordinatları LeastSquares ana programına aşağıdaki gibi verilmelidir: n = 1: 'Polinomun derecesi m = 10: 'Nokta sayısı 'x ordinatları DATA 4,6,8,10,12,14,16,18,20,22 'y ordinatları DATA 3.3,5.3,7.4,6.9,9.0,8.6,10.8,12.4,12.0,13.2 LeastSquares programının sonucu
Noktaları en iyi temsil eden doğru: y=2.1024+0.5221 x
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
159
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
160
Örnek 2:
4 10 5
5 12 3
6 14 2
m
3 7 5
8
2 4 4
6
1 2 1
4
xi yi
2
Nokta no
ri. co
Noktalarını minimum hata ile temsil eden y=a0+a1x+a2x2 eğrisinin a0, a1 ve a2 katsayılarını LeastSquares programı ile bulunuz. El çözümü için bakınız: Bölüm 9, örnek 4.
Nokta sayısı m=6, polinomun derecesi n=2 (parabol denklemi) dir. n, m ve noktaların koordinatları LeastSquares ana programına aşağıdaki gibi verilmelidir:
tla
n = 2: 'Polinomun derecesi m = 6: 'Nokta sayısı DATA 2,4,7,10,12,14: 'x ordinatları DATA 1,4,5,5,3,2: 'y ordinatları
Noktaları en iyi temsil eden eğri: y= -1.5988+1.6791x-0.1035x2
em de r
sn o
LeastSquares programının sonucu
Örnek 3:
Nokta no xi yi
1 0.0 -3.0
2 0.5 1.3
3 1.0 3.0
4 1.5 2.6
5 2.0 1.0
6 2.5 -1.3
7 3.0 -3.0
8 3.5 -4.0
9 4 -3.0
10 4.5 0.5
11 5.0 7
Noktalarını minimum hata ile temsil eden y=a0+a1x+a2x2+a3x3 eğrisinin a0, a1, a2 ve a3 katsayılarını LeastSquares programı ile bulunuz.
w
w
w .e
Nokta sayısı m=11, polinomun derecesi n=3 tür. n, m ve noktaların koordinatları LeastSquares ana programına aşağıdaki gibi verilmelidir: n = 3: 'Polinomun derecesi m = 11: 'Nokta sayısı 'x ordinatları DATA 0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5 'y ordinatları DATA -3,1.3,3,2.6,1,-1.3,-3,-4,-3,0.5,7
Noktaları en iyi temsil eden eğri: y= -3.0084+11.9666x-6.9991x2+1.0017x3
LeastSquares programının sonucu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
160
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
'---------------Ana program LeastSquares-----------------------' Ahmet TOPÇU, Eskişehir, 2010 ' Koordinatları bilinen m notayı en iyi temsil eden ve hataların ' karelerinin toplamı en küçük olan y=a0+a1x+a2x^2+...+anx^n ' polinomunun a0, a1, a2,...,an katsayıları hesaplanır.
LeastSquares ana programı
' ' ' '
Çıktı: x(n+1): a0, a1, ..., an katsayılarının depolandığı vektör hTh>=0: hataların karelerinin toplamı hTh<0 : hata oluştu, hesap yapılmadı
ri. co
Veri: n: bulunacak polinomun derecesi. 01 olmalıdır. x(m): x1,x2,...,xm ordinatlarının depolandığı vektör y(m): y1,y2,...,ym ordinatlarının depolandığı vektör
m
' Metod: ' En küçük kareler metodu(Least Squares)-dengeleme hesabı ' ' ' ' '
' Çağrılan alt program: LeastSquares '---------------------------------------------------------------
tla
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB LeastSquares (n, m, x(), y(), hTh) n = 1: 'Polinomun derecesi m = 10: 'Nokta sayısı 'x ordinatları DATA 4,6,8,10,12,14,16,18,20,22 'y ordinatları DATA 3.3,5.3,7.4,6.9,9.0,8.6,10.8,12.4,12.0,13.2
Örnek 1 in verileri
sn o
'n = 2: 'Polinomun derecesi 'm = 6: 'Nokta sayısı ' DATA 2,4,7,10,12,14: 'x ordinatları ' DATA 1,4,5,5,3,2: 'y ordinatları
161
em de r
'n = 3: 'Polinomun derecesi 'm = 11: 'Nokta sayısı 'x ordinatları ' DATA 0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5 'y ordinatları ' DATA -3,1.3,3,2.6,1,-1.3,-3,-4,-3,0.5,7
Örnek 2 nin verileri ( ' işareti bu satırların devre dışı olduğu anlamındadır)
Örnek 3 ün verileri ( ' işareti bu satırların devre dışı olduğu anlamındadır)
CLS : ' ekranı temizle DIM x(m), y(m) FOR i = 1 TO m READ x(i) NEXT i FOR i = 1 TO m READ y(i) NEXT i
xi ve yi değerleri için bellekte yer ayır
xi değerlerini oku
yi değerlerini oku
CALL LeastSquares(n, m, x(), y(), hTh)
LeastSquares alt programını çağır, polinomun katsayılarını hesapla
w
w
w .e
IF hTh < 0 THEN PRINT "n veya m hatalı veya sayı taşması (LeastSquares)!" END END IF
' Çıktıları ekrana yaz PRINT n; ".derece polinomun katsayıları(LeastSquares):" FOR i = 1 TO n + 1 PRINT x(i); Hesaplanan katsayıları yaz NEXT PRINT PRINT PRINT n; ". derece polinom:" PRINT "y(x)="; FOR i = 1 TO n + 1 a = x(i) IF a < 0 THEN a$ = "-" ELSE a$ = "+" a = ABS(a) k=i-1 IF k < 1 THEN PRINT a$; a; IF k = 1 THEN PRINT a$; a; "X"; IF k > 1 THEN PRINT a$; a; "X^"; k; NEXT i PRINT PRINT PRINT "Hataların karelerinin toplamı (Ypolinom-Yveri)^2="; hTh PRINT
Polinomu yaz
END ' LeastSquares ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
161
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
' ' ' '
Çıktı: x(n+1): a0, a1, ..., an katsayılarının depolandığı vektör hTh>=0: hataların karelerinin toplamı hTh<0 : n veya m hatalı veya sayı taşması, hesap yapılmadı
em de r
p(1, 1) = 1 xsum = 0 ysum = 0 FOR j = 1 TO m xsum = xsum + x(j) NEXT j p(2, 2) = 1 p(2, 1) = -xsum / m
sn o
' Çağrılan alt program: Yok '----------------------------------------------------------hTh = -1 IF m < 2 OR n <= 0 THEN EXIT SUB IF n >= m THEN n = m - 1 m1 = m + 1 n1 = n + 1 DIM p(m1, m), a(n + 1): 'yardımcı matrisler ' huge: yuvarlama hatalarını ve sayı taşmasını önlemek için ' en büyük sayı varsayımı huge = 1D+30 FOR i = 1 TO m1 FOR j = 1 TO m p(i, j) = 0 NEXT j NEXT i
FOR i = 3 TO n1 ii = i - 1 ix = i - 2 xsum = 0 ysum = 0 usum = 0 zsum = 0 FOR k = 1 TO m sumy = 0 sumx = 0 FOR L = 1 TO i sumy = sumy + p(ii, L) * x(k) ^ (L - 1) sumx = sumx + p(ix, L) * x(k) ^ (L - 1) NEXT L xsum = xsum + x(k) * sumy * sumy ysum = ysum + sumy * sumy usum = usum + x(k) * sumy * sumx zsum = zsum + sumx * sumx NEXT k IF ABS(ysum) > huge OR ABS(zsum) > huge THEN EXIT SUB b = xsum / ysum g = -usum / zsum p(i, 1) = -b * p(ii, 1) + g * p(ix, 1) FOR j = 2 TO i jj = j - 1 p(i, j) = p(ii, jj) - b * p(ii, j) + g * p(ix, j) NEXT j NEXT i
w .e
w
w
ri. co
Veri: m: nokta sayısı. m>1 olmalıdır. n: polinomun derecesi. 0
tla
' ' ' ' '
LeastSquares alt programı
m
SUB LeastSquares (n, m, x(), y(), hTh) '----------------------------------------------------------' Koordinatlari x(1),y(1),...,x(m),y(m) olarak verilmiş m ' noktayı en iyi temsil eden y(x)=a0+a1*x+a2*x^2+...+an*x^n ' polinom eğrisinin a0,a1,a2,...,an katsayıları en küçük ' kareler metodu ve ortogonal fonksiyonlar kullanılarak ' hesaplanır.
162
FOR i = 1 TO n1 xsum = 0 ysum = 0 FOR k = 1 TO m sumz = 0 FOR L = 1 TO i sumz = sumz + p(i, L) * x(k) ^ (L - 1) NEXT L xsum = xsum + y(k) * sumz ysum = ysum + sumz * sumz NEXT k
IF ABS(ysum) > huge THEN EXIT SUB p(m1, i) = xsum / ysum NEXT i
FOR i = 1 TO n1 a(i) = 0 FOR j = 1 TO i a(j) = a(j) + p(i, j) * p(m1, i) NEXT j NEXT i ' hataların karelerinin toplamını hesapla hTh = 0 FOR i = 1 TO m x = x(i) ypolinom = 0 FOR k = 1 TO n1 ypolinom = ypolinom + a(k) * x ^ (k - 1) NEXT k hTh = hTh + (y(i) - ypolinom) ^ 2 NEXT i ' Polinomun katsayılarını x vektörüne kopyala FOR i = 1 TO n1 x(i) = a(i) NEXT i END SUB ' LeastSquares
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
162
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
163
Dengeleme hesabı: QR çarpanlara ayırma metodu1 - QR: Dengeleme hesabında karşılaşılan
m
Anxm x m = b m
m 1
1
≈
x A
ri. co
doğrusal denklem sisteminin denklem sayısı bilinmeyen sayısından fazladır, n>m. Anxm kolon düzenli, yani Rank A=m dir. Denklem sistemi şematik olarak
b
m
n
tla
n
Örnek 1:
sn o
şeklindedir. Denklemler uyumlu olmadığından denklemi sağlayan tam doğru bir çözüm bulmak mümkün değildir. x çözümü minimum hata içerecek şekilde hesaplanır. Aşağıda Qbasic kodu verilen QR alt programı bu amaca yöneliktir.
Bölüm 9, örnek 2 de el çözümü verilmiş olan dengeleme probleminin
em de r
1 161.678 1 h 159.277 denklem sisteminde n=5 denklem ve m=2 bilinmeyen vardır, 3 ≈ 161.685 A x ≈ b → 1 h 1 4 159.265 1 − 1 2.410
n>m dir. n, m, A ve b nin değerleri
h satırları ile QR programına verilerek x = 3 bilinmeyen vektörü hesaplanmıştır. h4
w
w
w .e
DATA 5,2 : ' n ve m nin değeri ' a matrisi: DATA 1,0 DATA 0,1 DATA 1,0 DATA 0,1 DATA 1,-1 ' b vektörü: DATA 161.678,159.277,161.685,159.265,2.410
QR programının sonucu
h 161 .681375 → x = 3 = h4 159 .271125 Hataların karelerinin toplamı=0.000097
1
Teori ve sayısal örnekler için bak: Bölüm 9 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
163
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
164
Örnek 2:
ri. co
4 1 2 1 1 4 16 a0 4 1 7 49 5 Ax ≈ b → a1 ≈ 1 10 100 a 5 1 12 144 2 3 2 1 14 196
m
QR programı en uygun eğri uydurma problemlerinin çözümü için de kullanılabilir. Bölüm 9, örnek 4 de el çözümü verilmiş olan en uygun eğrinin bulunması probleminin
em de r
sn o
DATA 6,3: ' n ve m nin değeri ' a matrisi: DATA 1,2,4 DATA 1,4,16 DATA 1,7,49 DATA 1,10,100 DATA 1,12,144 DATA 1,14,196 ' b matrisi: DATA 1,4,5,5,3,2
tla
denklem sisteminde n=6 denklem ve m=3 bilinmeyen vardır, n>m dir. n, m, A ve b nin değerleri
satırları ile QR programına verilerek y=a0+a1x+a2x2 eğrisinin a0, a1 ve a2 katsayıları hesaplanmıştır. QR programının sonucu
Noktaları en iyi temsil eden eğri: y= -1.5988+1.6791x-0.1035x2
w
w
w .e
a0 = −1.5988 a1 = 1.6791
a2 = −0.1035
Noktaları en küçük hata ile temsil eden eğrinin denklemi: y= -1.5988+1.6791x-0.1035x2
olur.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
164
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
QR ana programı
m
'------------------- Ana program QR---------------------------------' Dr. Ahmet TOPÇU, ESKİŞEHİR, 2010 ' Denklem sayısı bilinmeyen sayısından büyük olan doğrusal ' a(n,m)x(m)=b(n) denklem sistemi hataların karelerinin toplamı ' minimum olacak şekilde QR çarpanlara ayırma metodu ile çözülür. ' n>=m ve a nın kolonları doğrusal bağımsız olmalıdır, yani rank(a)=m. ' Bu program en uygun eğri uydurma problemleri için de kullanılabilir.
DEFINT I-N DEFDBL A-H, O-Z
tla
1. örneğin verileri
2. örneğin verileri ( ' işareti ile devre dışı bırakılmış)
sn o
'DATA 6,3: ' n ve m nin değeri ' a matrisi: 'DATA 1,2,4 'DATA 1,4,16 'DATA 1,7,49 'DATA 1,10,100 'DATA 1,12,144 'DATA 1,14,196 ' b matrisi: 'DATA 1,4,5,5,3,2
ri. co
' Kullanılan metot: QR çarpanlara ayırma yöntemi ' Çağrılan alt programlar: QR '--------------------------------------------------------------------A nın satır ve kolon sayısı DATA 5,2 : ' n ve m nin değeri ' a matrisi: DATA 1,0 A nın satırları DATA 0,1 DATA 1,0 DATA 0,1 DATA 1,-1 ' b vektörü: b nin satırları DATA 161.678,159.277,161.685,159.265,2.410
165
DECLARE SUB QR (a(), b(), n, m, x(), hTh) CLS
em de r
A nın boyutlarını oku READ n, m DIM a(n, m), x(m), b(n) Matrisler çin bellekte yer ayır
' A yı oku: FOR i = 1 TO n FOR j = 1 TO m READ a(i, j) NEXT j NEXT i ' b yi oku: FOR i = 1 TO n READ b(i) NEXT i
A yı oku
b yı oku
CALL QR(a(), b(), n, m, x(), hTh)
w .e
IF hTh < 0 THEN PRINT "Çözüm bulunamadı(QR) !" END END IF
PRINT "Denklem sisteminin çözümü (QR):" FOR i = 1 TO m PRINT x(i); NEXT i PRINT PRINT IF n > m THEN PRINT "Hataların karelerinin toplamı="; hTh
END
Sonuçları yaz
' QR ana
w
w
QR alt programını çağır
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
165
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
' input a(n,m): coefficient matrix ' b(n): right side vector with length n ' n: number of equations ' m: number of uknowns ' output: ' a(n,m): A and R matricies. ' x(m) : solution vector.
m
' This program can be used for curve fitting problems olso.
QR alt programı
ri. co
SUB QR (a(), b(), n, m, x(), hTh) '----------------------------------------------------------------------' Solves the overdetermined linear system a(n,m)x(m)=b(n) using ' the QR factorization with Householder transformation, where n>=m. ' The solution x(m) is found in least squares sens, so that Euclidean ' norm ||Ax-b|| will be minimum. ' Method used: ' orthogonalization: Householder transformation ' Decomposition: QR algorithm ' Coefficient matrix a(n,m) will be transform to A=QR, where Q is an ' othogonal matrix and R is an upper triangular non-singular matrix. ' Constraints: n>=m and rank(a)=m
166
sn o
tla
' hTh<0 : the condition n>=m not held or R is singular, so no solution ' hTh>=0: sum of squares of errors, solution found ' Subroutines called: none ' Fortran code: www.stat.berkeley.edu/~stark/code/index.htm ' Original file name: qr.f '-----------------------------------------------------------------------hTh = -1 ' Check if the system is not overdetermined IF n < m THEN EXIT SUB Zero = 1E-30: 'assumed smallest number. FOR j = 1 TO m ' Find constants for Housholder rotation and diagonal entry sq = 0 FOR i = j TO n sq = sq + a(i, j) ^ 2 NEXT i ' Check if column is linear dependent IF sq < Zero THEN EXIT SUB
em de r
Sign = SQR(sq) IF a(j, j) >= 0 THEN Qv1 = Sign ELSE Qv1 = -Sign Qv1 = -Qv1 u1 = a(j, j) - Qv1 a(j, j) = Qv1 j1 = j + 1 Rotate remaining columns of sub-matrix FOR jj = j1 TO m Dot = u1 * a(j, jj) FOR i = j1 TO n Dot = Dot + a(i, jj) * a(i, j) NEXT i Con = Dot / ABS(Qv1 * u1) FOR i = j1 TO n a(i, jj) = a(i, jj) - Con * a(i, j) NEXT i a(j, jj) = a(j, jj) - Con * u1 NEXT jj Rotate b vector Dot = u1 * b(j) FOR i = j1 TO n Dot = Dot + b(i) * a(i, j) NEXT i Con = Dot / ABS(Qv1 * u1) b(j) = b(j) - Con * u1 FOR i = j1 TO n b(i) = b(i) - Con * a(i, j) NEXT i NEXT j Solve triangular system by back-substitution FOR i = 1 TO m x(i) = 0 NEXT i FOR ii = 1 TO m i = m - ii + 1 Sum = b(i) FOR j = i + 1 TO m Sum = Sum - a(i, j) * x(j) NEXT j Check if trianguler system is singular IF ABS(a(i, i)) < Zero THEN EXIT SUB x(i) = Sum / a(i, i) NEXT ii Find residual in overdetermined case hTh = 0 FOR i = m + 1 TO n hTh = hTh + b(i) ^ 2 NEXT i
'
'
w
w
w .e
'
'
'
END SUB ' end of QR Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
166
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
167
Sağ ters matris ve çekirdek hesabı-BoBx1: Satır düzenli Anxm matrisinde n≤m olmak üzere A Bx = 0
m
A B0 = I
ri. co
Koşullarını sağlayan Bx matrisine A nın çekirdeği(Kern, null space), Bo matrisine de A nın sağ ters matrisi(right inverse) denir. Denklem sayısı bilinmeyen sayısından az olan denklem sistemlerinin homojen ve inhomojen çözümünün doğrudan bulunmasını sağlar. Bx homojen çözüme, Bo inhomojen çözüme karşılık gelir. n
tla
n
B0
m
A
m m
Inxn
n
sn o
m
Bx
A
0nxd
n
em de r
BoBx alt programı bu amaca yöneliktir. A matrisi için çağıran programda mxm boyutunda yer ayrılmış ve A nın n satırı depolanmış olmalıdır. Bo ve Bx matrisleri A nın üzerine depolanır. İlk n kolon Bo sonraki d=m-n kolon Bx dir. m
A
n
m
A nın depolanan satırları
A için bellekte ayrılan yer mxm dir
m
n
B0
Bx
m
n=m durumunda Bo=A-1 dir, bu durumda Bx tanımsızdır.
w .e
iHata=0 olarak dönerse Bo ve Bx hesaplanmıştır, aksi halde hesap yarıda kesilmiştir.
w
w
Örnek:
A 8 x10
1
0 − 0.7071 − 1 0 0 0 0 0 0 0 − 1 0 − 0.7071 0 0 0 0 0 0 0 0 −1 0 0 − 0.7071 0 0 0 0 0 1 0 0 0 0.7071 0 0 0 0 0 = , 0 1 0.7071 0 0 0 − 0.7071 − 1 0 0 0 0.7071 0 0 1 0.7071 0 0 0 0 0 0 0 1 0.7071 0 0 0 − 0.7071 − 1 0 0 0 − 0.7071 − 1 0 0 − 0.7071 0 0
Bo = ? , B x = ?
Teori ve sayısal örnekler için bak: bölüm 10 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
167
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
168
ri. co
m
BoBx programının sonucu
Çözüm:
0 − 0.7071 − 0.7071 0 1 0 − 0 . 7071 0 1 0 Bx = − 0.7071 − 0.7071 0 1 − 0.7071 0 0 1 0 − 0.7071
em de r
sn o
tla
0 0 1 0 0 0 0 0 0 0 −1 0 0 0 0 0 0 − 1.4142 0 − 1.4141 0 0 0 0 − 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 B0 = 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 −1 −1 −1 −1 0 0 0 0 0 − 1.4142 0 − 1.4141 0 − 1.4142 0 − 1.4142 − 1 2 0 2 0 1 −1 1
' ---------------------Ana program BoBx---------------------------' Dr. ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1995 ' a(n,m) matrisinin sağ ters matris ve çekirdek hesabı
Ana program BoBx
' Veri: ' a(n,m): satır düzenli matris. mxm boyutlu tanımlanmalıdır ' a nın elemanları ilk n satır ve m kolona depolanmalıdır. ' n,m: matrisin satır ve kolon sayısı, n<=m olmalıdır. ' Çıktı: ' Bo(m,n): a nın ilk n kolonunda depoludur. ' Bx(m,d): a nın son d kolonunda depoludur. d=m-n dir. ' n=m durumunda Bx tanımsızdır, hesaplanmaz ve Bo a nın tersidir.
w
w
w .e
' Çağrılan alt programlar: BoBx '-----------------------------------------------------------------A nın satır ve kolon sayısı DATA 8, 10: ' a nın satır ve kolon sayısı ' Matrix a: DATA 0, 0,-.7071, -1, 0, 0, 0, 0, 0, 0 DATA -1, 0,-.7071, 0, 0, 0, 0, 0, 0, 0 DATA 0,-1, 0, 0,-.7071, 0, 0, 0, 0, 0 A nın satırları DATA 1, 0, 0, 0, .7071, 0, 0, 0, 0, 0 DATA 0, 1, .7071, 0, 0, 0,-.7071,-1, 0, 0 DATA 0, 0, .7071, 0, 0, 1, .7071, 0, 0, 0 DATA 0, 0, 0, 1, .7071, 0, 0, 0,-.7071,-1 DATA 0, 0, 0, 0,-.7071,-1, 0, 0,-.7071, 0 DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB BoBx (n, m, a(), iSp(), iHata) CLS READ n, m DIM a(m, m) DIM iSp(m) FOR i = 1 TO n FOR j = 1 TO m READ a(i, j) NEXT j NEXT i
A nın satır ve kolon sayısını oku A için bellekte mxm boyutlu yer ayır
A yı oku BoBx alt programını çağır
Devamı var CALL BoBx(n, m, a(), iSp(), iHata)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
168
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
Devamı
IF m > n THEN PRINT "Doğrusal bağımlı kolonların numarası(BoBx):" FOR i = n + 1 TO m PRINT iSp(i); NEXT i PRINT PRINT
Doğrusal bağımlı kolonların numaralarını yaz
tla
END 'BoBx ana
sn o
PRINT "Sağ ters matris Bo ın kolonları(BoBx):" FOR i = 1 TO n FOR j = 1 TO m Bo ın kolonlarını yaz PRINT a(j, i); NEXT j PRINT NEXT i PRINT
ri. co
PRINT "Çekirdek Bx in kolonları(BoBx):" FOR i = n + 1 TO m FOR j = 1 TO m Bx in kolonlarını yaz PRINT a(j, i); NEXT j PRINT NEXT i END IF PRINT
m
IF iHata = 1 THEN PRINT "Matrisin satırları düzensiz(BoBx)" END END IF
169
BoBx alt programı
em de r
SUB BoBx (n, m, a(), iSp(), iHata) ' Sağ ters matris ve çekirdek hesabı '---------------------------------------------------------------------' Dr. ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1995 ' a(n,m) matrisinin Bo sağ ters matrisi ve Bx çekirdeği GAUSS-JORDAN ' tekniği ile a*Bo=I ve a*Bx=0 koşulları sağlanacak şekilde hesaplanır. ' a(n,m) çağıran programda mxm boyutlu olak tanımlanmış ve n tane satırı ' depolanmış olmalıdır. ' A nın satır düzenli olduğu ve n<=m olduğu varsayılmaktadır.
' BoBx çağrıldıktan sonra a nın ilk n kolonu Bo(m,n) sağ ters matrisini, ' son d=m-n kolonu Bx(m,d) çekirdeğini içerir. ' n=m durumunda sağ ters matris a nın tersine eşittir, Bx tanımsızdır. ' ' ' '
Satırlar doğrusal bağımlı ise hesap kesilir iHata<>0 döner, Bo ve Bx hesaplanmaz. iSp(m) vektörü çağıran programda tanımlanmış olmalıdır. iSp de kolon numaraları saklanır, son d kolon doğrusal bağımlılardır.
w
w
w .e
' Çağrılan alt program: yok '---------------------------------------------------------------------iHata = 0 ' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps ' Zero: Sıfır varsayılacak değer IF m - n < 0 THEN iHata = 1: EXIT SUB ' Norm zero = 0 FOR j = 1 TO m iSp(j) = j FOR i = 1 TO n Norm = ABS(a(i, j)) IF Norm > zero THEN zero = Norm NEXT i NEXT j zero = zero * Eps FOR i = 1 TO n ' satırda pivot ara Pivot = 0 FOR k = i TO m at9 = ABS(a(i, k)) IF at9 > Pivot THEN iV = k: ' pivot column Pivot = at9: ' pivot eleman END IF NEXT k
Devamı var
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
169
20. PROGRAMLAR: Denklem sayısı bilinmeyen sayısından farklı denklem sistemleri
ri. co
sn o
' Transformasyon matrisi ile çarp FOR k = 1 TO m IF k <> i THEN at9 = a(i, k) a(i, k) = 0 FOR j = 1 TO n a(j, k) = a(j, k) + a(j, i) * at9 NEXT j END IF NEXT k NEXT i
m
Devamı
tla
' Satır doğrusal bağımlı mı kontrol IF Pivot < zero THEN iHata = 1: EXIT SUB IF iV > i THEN ' i ve iSv nolu kolonları değiş iSv = iSp(i) iSp(i) = iSp(iV) iSp(iV) = iSv at9 = -1 / a(i, iV) a(i, iV) = -1 FOR k = 1 TO n agrz = a(k, i) a(k, i) = a(k, iV) * at9 a(k, iV) = agrz NEXT k ELSE at9 = -1 / a(i, i) a(i, i) = -1 FOR k = 1 TO n a(k, i) = a(k, i) * at9 NEXT k END IF
170
em de r
' İşaret değiş, nxm boyutlu alanı m*m boyuta dönüştür FOR i = 1 TO n FOR j = n + 1 TO m a(i, j) = -a(i, j) NEXT j NEXT i FOR i = n + 1 TO m FOR j = 1 TO m a(i, j) = 0 NEXT j a(i, i) = 1 NEXT i
w .e
' Satırlara yer değiştir FOR j = 1 TO m iSv = iSp(j) IF j <> iSv THEN FOR k = j + 1 TO m IF iSp(k) = j THEN EXIT FOR NEXT k iSp(k) = iSv FOR i = 1 TO m at9 = a(j, i) a(j, i) = a(k, i) a(k, i) = at9 NEXT i END IF NEXT j 'BoBx
w
w
END SUB
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
170
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
21 PROGRAMLAR: İterasyon ile denklem sistemi çözümü Gauss-Seidel metodu
21. PROGRAMLAR: İterasyon ile denklem sistemi çözümü-GAUSS-SEIDEL iterasyon yöntemi
172
21. PROGRAMLAR: İterasyon ile denklem sistemi çözümü-GAUSS-SEIDEL iterasyon yöntemi1
m
Ekte verilen program A x=b lineer cebirsel denklem sistemini GAUSS-SEIDEL iterasyon yöntemi ile çözer. Anxn katsayılar matrisi ve bn karşı taraf vektörü çağıran programda depolanmış olmalı ve ayrıca xn vektörü de boyutlandırılmış olmalıdır.
ri. co
GAUSS-SEIDEL yöntemi Anxn kesin diyagonal ağırlıklı ise veya simetrik ve pozitif tanımlı ise daima yakınsar (sonuç verir). Diğer matris tiplerinde çözüm yakınsamayabilir. Yöntemin gereği olarak A nın diyagonal elemanları sıfırdan farklı olmalıdır. Bu nedenle program A nın diyagonal elemanları mutlak değerce en büyük olacak şekilde denklemlerin sırasını çözüm öncesi değiştirir. Tüm diyagonal elemanlar sıfırdan farklı yapılamazsa program hesabı yarıda keser ve çağıran programa geri döner.
tla
İterasyon sayısı Eps istenilen hassasiyetine bağlıdır. İterasyon sayısı Maxit aşılırsa veya Eps hassasiyetine ulaşılamazsa veya çözüm ıraksarsa hesap kesilir, iHata≠0 değeri ile döner.
Örnek 1:
em de r
2 3 − 1 x1 80 10 1 − 20 − 1 3 x 40 2 = 1 1 − 10 2 x3 40 2 − 1 − 1 30 x 4 120
sn o
A nın kesin diyagonal ağırlıklı2 olmaması veya simetrik ve pozitif tanımlı olmaması durumunda çözümün yakınsayacağı garanti edilemez, bu durumda GAUSS-SEIDEL yöntemi önerilmez. Çok büyük denklem sistemlerin GAUSS veya CHOLESKY direkt yöntemleri ile çözümü sınırlı bellek açısından sorun yaratırsa veya A seyrek (sparse) matris ise GAUSSSEIDEL tercih edilebilir.
GaussSeidel alt programının sonucu
w .e
Örnek 2:
2 3 − 1 x1 80 10 1 − 20 − 1 3 x 40 2 = 1 1 − 1 2 x 3 40 − 1 − 1 1 x 4 120 2
(Kesin diyagonal ağırlıklı değil. Çözüm var fakat iterasyon yöntemi çözümüne güvenilmez!)
Çözüm var, fakat GaussSeidel ıraksıyor
w
w
(kesin Diyagonal ağırlıklı)
1 2
Teori ve sayısal örnekler için bak: bölüm 7 Bak: Bölüm 1, sayfa 15 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
172
21. PROGRAMLAR: İterasyon ile denklem sistemi çözümü-GAUSS-SEIDEL iterasyon yöntemi
CLS
Denklem sayısı okunuyor
READ n DIM a(n, n), b(n), x(n) FOR i = 1 TO n FOR j = 1 TO n READ a(i, j) NEXT j NEXT i
A matrisi, b vektörü ve x çözüm vektörü için bellekte yer ayır A okunuyor
PRINT "İterasyon sayısı="; itersay
A okunuyor
em de r
SELECT CASE ihata CASE 0 PRINT "Denklem sisteminin çözümü (GaussSeidel):" FOR i = 1 TO n PRINT x(i); Sonuç yazdırılıyor NEXT i CASE 1 PRINT "Matris tekil!" CASE 2 PRINT "Max itersayon sayısı aşıldı!" CASE 3 PRINT "İstenilen hassasiyete varılamadı!" CASE 4 PRINT "Çözüm ıraksıyor!" END SELECT
w
w
w .e
END 'Gauss-Seidel ana sonu
m
sn o
GaussSeidel alt FOR i = 1 TO n programını çağır b okunuyor READ b(i) NEXT i CALL GaussSeidel(n, a(), b(), x(), itersay, ihata)
SUB GaussSeidel (n, a(), b(), x(), itersay, ihata) '-----------------------------------------------------------' Doğrusal denklem sistemi çözümü (GaussSeidel) Ana program ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1994 ' A(n,n)*x(n)=b(n) denklem GAUSS-SEIDEL iterasyon ' yöntemi ile çözülerek x(n) vektörü hesaplanır. ' A, b matrisleri çağıran programda depolanmış ve x ' vektörü boyutlandırılmış olmalıdır. ' Maxit: öngörülen maksimum iterasyon sayısıdır ' Eps: hassasiyet ' iHata=0: çözüm yakınsadı ' iHata=1: diyagonal eleman sıfır, matris tekil ' iHata=2: Max iterasyon sayısı aşıldı ' iHata=3: istenilen hassasiyete varılamadı ' iHata=4: çözüm ıraksıyor, sayı taşması tehlikesi! '-----------------------------------------------------------' EpsMach EpsMach = 1 DO EpsMach = EpsMach / 2 s = 1 + EpsMach LOOP UNTIL s <= 1 EpsMach = 2 * EpsMach
ri. co
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB GaussSeidel (n, a(), b(), x(), itersay, ihata)
GaussSeidel Alt programı
tla
'----------- ana program GAUSS-SIDEL--------' iterasyon yöntemi ile denklem istemi çözümü ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 1994 ' Çağrılan alt programlar: GaussSeidel '-------------------------------------------DATA 4: ' denklem sayısı 'a matrisi: A nın satırları DATA 10, 2, 3, -1 DATA 1, -20,-1, 3 DATA 1, 1,-10, 2 DATA 2, -1,-1, 30 Karşı taraf vektörü b 'b matrisi: DATA 80,40,40,120
173
ihata = 0 maxit = 200: ' maximum iterasyon sayısı Eps = .000001: 'tolerans itersay = 0: ' iterasyon no
' Pivot eleman ara, diyagonal elemanı<>0 yap FOR i = 1 TO n T = ABS(a(i, i)): iV = i: x(i) = 0 FOR j = i + 1 TO n IF ABS(a(j, i)) > T THEN iV = j: T = ABS(a(j, i)) NEXT j IF T < EpsMach THEN ihata = 1: EXIT SUB IF iV > i THEN ' i ve iV satırlarını değiş FOR j = 1 TO n T = a(i, j) a(i, j) = a(iV, j) a(iV, j) = T NEXT j T = b(i) b(i) = b(iV) b(iV) = T END IF NEXT i ' İterasyon DO h=0 FOR i = 1 TO n T=0 FOR j = 1 TO n T = T + a(i, j) * x(j) NEXT j T = T - a(i, i) * x(i) YeniX = (b(i) - T) / a(i, i) h = (x(i) - YeniX) ^ 2 x(i) = YeniX NEXT i h = SQR(h) itersay = itersay + 1 LOOP UNTIL (itersay > maxit OR h <= Eps OR h > 1E+35) IF itersay > maxit THEN ihata = 2 IF h > Eps THEN ihata = 3 IF h > 1E+35 THEN ihata = 4 END SUB ' GaussSeidel sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
173
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
22 PROGRAMLAR: İterasyon ile denklem sistemi çözümü CG (Conjugate Gradient) metodu
22. PROGRAMLAR: İterasyon ile denklem sistemi çözümü-CG (Conjugate Gradient) metodu
175
22. PROGRAMLAR: İterasyon ile denklem sistemi çözümü-CG (Conjugate Gradient) metodu1
m
Ekte verilen program A x=b lineer cebirsel denklem sistemini CG iterasyon yöntemi ile çözer. Anxn simetrik-pozitif tanımlı matrisi ve bn vektörü çağıran programda depolanmış olmalı ve ayrıca xn vektörü de boyutlandırılmış olmalıdır.
ri. co
GG metodu sadece simetrik ve pozitif tanımlı matrisler içindir. Bu koşulu sağlamayan denklem sistemlerinde kullanılmaz! Maksimum iterasyon sayısı, teorik olarak, n kadardır. Ancak, yuvarlama hataları nedeniyle fazladan 1-2 iterasyon daha gerekebilir.
İterasyon sırasında A nın pozitif tanımlı olmadığı anlaşılırsa veya n+2 iterasyon sonunda çözüm yakınsamazsa CG alt programı iHata ≠0 ile döner.
tla
A simetrik ve pozitif tanımlı ise, CG metodu en uygun iterasyon metodudur. İterasyon sırasında A nın elemanları değişmediğinden, bellekte çözümü mümkün olmayan çok büyük denklem sistemlerinin çözümünde öncelikle tercih edilir.
1 1 0 x1 1 4 0 1 x 2 2 , x=? = 0 4 1 x 3 0 1 1 4 x 4 1
GG alt programının sonucu
em de r
4 1 1 0
sn o
Örnek:
w
w
w .e
0.1667 0.4167 x= − 0.0833 0.1667
1
Teori ve sayısal örnekler için bak: bölüm 7
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
175
DATA 4 ' a matrisi: DATA 4,1,1,0 DATA 4,0,1 DATA 4,1 DATA 4 ' b karşı taraf vektörü: DATA 1,2,0,1
tla
A nın üst üçgen kısmının satırları
Karşı taraf vektörü b
sn o
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB CG (n, a(), b(), x(), iTer, iHata) CLS READ n
Ana program
ri. co
'-------- Ana program CG(Conjugate Gradient Metodu)---------------' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 2006 ' a(n,n)*x(n)=b(n) doğrusal denklem sistemi CG (Conjugate Gradient) ' iterasyon metodu ile çözülerek x(n) vektörü hesaplanır. ' a ve b matrisleri çağıran programda depolanmış ve x ' vektörü boyutlandırılmış olmalıdır. ' a(n,n): simetrik pozitif tanımlı matris(sadece üst üçgen gerekir) ' b(n): karşı taraf vektörü ' x(n): bilinmeyenler vektörü ' n: Denklem sayısı ' Çağrılan alt programlar: CG '------------------------------------------------------------------
176
m
22. PROGRAMLAR: İterasyon ile denklem sistemi çözümü-CG (Conjugate Gradient) metodu
Denklem sayısı okunuyor
A matrisi, b vektörü ve x çözüm vektörü için bellekte yer ayır
em de r
DIM a(n, n), x(n), b(n)
' a nın üst üçgen kısmını oku FOR i = 1 TO n FOR j = i TO n READ a(i, j) NEXT j A nın üst üçgen kısmı okunuyor NEXT i ' b yi oku FOR i = 1 TO n READ b(i) NEXT i
b okunuyor
CG alt programı çağrılıyor
CALL CG(n, a(), b(), x(), iTer, iHata) IF iHata <> 0 THEN PRINT "HATA(CG)= "; iHata: END
w .e
PRINT "Denklem sisteminin çözümü(CG):" FOR i = 1 TO n PRINT x(i); A okunuyor NEXT i PRINT PRINT "İterasyon sayısı="; iTer
Çözüm yazdırılıyor
w
w
END ' CG ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
176
22. PROGRAMLAR: İterasyon ile denklem sistemi çözümü-CG (Conjugate Gradient) metodu
SUB CG (n, a(), b(), x(), iTer, iHata) '------------------------------------------------------------------' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 2006 ' Ax=b doğrusal denklem sistemi CG (Conjugate Gradient) ' iterasyon metodu ile çözülür, x bilinmeyenler vektörü hesaplanır.
Çıktılar: x(n): Bilinmeyenler vektörü iTer: iterasyon sayısı iHata: = 0: çözüm bulundu = 1: çözüm bulunamadı(a tekildir veya pozitif tanımlı değildir) = 2: n+2 iterasyon yapıldı fakat çözüm yakınsamadı
' r(n), s(n) ve aSi(n) ara değer vektörleridir '------------------------------------------------------------------DIM r(n) DIM s(n) DIM aSi(n) ' a * s çarpımı depolanır
em de r
iHata = 0 iTer = 0 ' n=1 durumu IF n = 1 THEN IF a(1, 1) = 0 THEN iHata = 1 ELSE x(1) = b(1) / a(1, 1) EXIT SUB END IF END IF
sn o
' EpsMach: Kullanılan bilgisayarda sıfır varsayılan en küçük sayı EpsMach = 1 DO EpsMach = EpsMach / 2 s = 1 + EpsMach LOOP UNTIL s <= 1 EpsMach = 2 * EpsMach Epsilon = EpsMach
' başlangıç vektörleri x, r, s hazırla FOR i = 1 TO n x(i) = 0 r(i) = b(i) s(i) = r(i) NEXT i
w
w
w .e
' B nin öklid normu bNorm = 0 FOR i = 1 TO n bNorm = bNorm + b(i) * b(i) NEXT i IF bNorm = 0 THEN EXIT SUB bNorm = SQR(bNorm)
' İterasyona başla iTer = 1 DO ' Hesapla: Alfa = [s(transpoz)*r]/[s(transp)*(a*s)] Pay = 0 Payda = 0 FOR i = 1 TO n Pay = Pay + s(i) * r(i) T=0 FOR j = i TO n T = T + a(i, j) * s(j) NEXT j FOR j = 1 TO i - 1 T = T + a(j, i) * s(j) NEXT j aSi(i) = T Payda = Payda + s(i) * T NEXT i
m
' ' ' ' ' ' '
ri. co
Veriler: n: Denklem sayısı a(n,n): simetrik ve pozitif tanımlı katsayılar matrisi. a nın sadece üst üçgen kısmı kullanılır b(n): karşıtaraf vektörü
CG alt programı
tla
' ' ' ' '
177
' a matrisi tekil mi? Veya pozitif tanımlı değil mi? Kontrol et IF Payda <= 0 THEN iHata = 1 EXIT SUB END IF Alfa = Pay / Payda
' Hesapla: x=x+Alfa*s ve r=r-Alfa*aSi ' Hesapla: rNorm=r nin öklid normu rNorm = 0 FOR i = 1 TO n x(i) = x(i) + Alfa * s(i) r(i) = r(i) - Alfa * aSi(i) rNorm = rNorm + r(i) * r(i) NEXT i rNorm = SQR(rNorm) / bNorm ' Yakınsamayı kontrol et (en az iki iterasyondan sonra) IF iTer >= 2 AND rNorm <= Epsilon THEN EXIT SUB ' Hesapla: Beta = -[r(transpoz)*(a*s)]/[s(transpoz)*(a*s)] Pay = 0 FOR i = 1 TO n Pay = Pay + r(i) * aSi(i) NEXT i Beta = -Pay / Payda ' Hesapla: s = r + Beta * s FOR i = 1 TO n s(i) = r(i) + Beta * s(i) NEXT i iTer = iTer + 1 LOOP UNTIL iTer > n + 2 iHata = 2 END SUB ' CG sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
177
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
23 PROGRAMLAR: İterasyon ile denklem sistemi çözümü PCG (Preconditioned Conjugate Gradient) metodu
23. PROGRAMLAR: iterasyon ile denklem sistemi çözümü - PCG (Preconditioned Conjugate Gradient) metodu 179
23. PROGRAMLAR: iterasyon ile denklem sistemi çözümü - PCG (Preconditioned Conjugate Gradient) metodu
Kondisyon iyileştirmesi
D-1/2A D-1/2 D1/2 x= D-1/2b
Burada D-1/2 matrisine D nin karekökü denir ve
→ D −1 / 2 ... a nn
1 a 22
sn o
dir.
...
1 a nn
tla
a 11 a 22 D=
1 a 11 =
ri. co
A
m
Ekte verilen program simetrik katsayılı A x=b lineer cebirsel denklem sistemini PCG iterasyon yöntemi ile çözer. Çözüm öncesi A matrisinin kondisyonu iyileştirilir. İyileştirme A nın diyagonal elemanlarından oluşan D diyagonal matrisi yardımıyla yapılır:
Anxn simetrik-pozitif tanımlı matrisi ve bn vektörü çağıran programda depolanmış olmalı ve ayrıca xn vektörü de boyutlandırılmış olmalıdır.
em de r
PCG metodu sadece simetrik ve pozitif tanımlı matrisler içindir. Bu koşulu sağlamayan denklem sistemlerinde kullanılmaz! Maksimum iterasyon sayısı, teorik olarak, n kadardır. Ancak, yuvarlama hataları nedeniyle fazladan 1-2 iterasyon daha gerekebilir. İterasyon sırasında A nın pozitif tanımlı olmadığı anlaşılırsa veya n+2 iterasyon sonunda çözüm yakınsamazsa PCG alt programı iHata ≠0 ile döner. A simetrik ve pozitif tanımlı ise, PCG metodu en uygun iterasyon metodudur. İterasyon sırasında A nın elemanları değişmediğinden, bellekte çözümü mümkün olmayan çok büyük denklem sistemlerinin çözümünde öncelikle tercih edilir.
Örnek:
PGG alt programının sonucu
w
w
w .e
33 0 − 10 0 0 x1 3 43 0 14 0 x 2 13 28 0 1 x 3 = 76 , x=? 55 0 x 4 206 Sim 67 x5 137
1 − 1 x=3 4 2 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
179
23. PROGRAMLAR: iterasyon ile denklem sistemi çözümü - PCG (Preconditioned Conjugate Gradient) metodu 180
sn o
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB PCG (n, a(), b(), x(), iTer, iHata) CLS
m
tla
' Çağrılan alt programlar: PCG '----------------------------------------------------------------------A nın boyutu DATA 5 ' a matrisi DATA 33,0,-10,0,0 A nın üst üçgen kısmının satırları DATA 43,0,14,0 DATA 28,0,1 DATA 55,0 DATA 67 'b matrisi Karşı taraf vektörü b DATA 3,13,76,206,137
PCG ana programı
ri. co
'----- Ana program PCG(Preconditioned Conjugate Gradient Method)-------' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 2006 ' a(n,n)*x(n)=b(n) doğrusal denklem sistemi PCG (Preconditioned Conjugate ' Gradient) iterasyon metodu ile çözülür, x(n) vektörü hesaplanır. ' a ve b matrisleri çağıran programda depolanmış ve x ' vektörü boyutlandırılmış olmalıdır. ' a(n,n): simetrik pozitif tanımlı matris(sadece üst üçgen gerekir) ' b(n): karşı taraf vektörü ' x(n): bilinmeyenler vektörü ' n: Denklem sayısı
Denklem sayısı okunuyor
READ n DIM a(n, n), x(n), b(n)
A matrisi, b vektörü ve x çözüm vektörü için bellekte yer ayır
em de r
' a nın üst üçgen kısmını oku FOR i = 1 TO n FOR j = i TO n READ a(i, j) A nın üst üçgen kısmı okunuyor NEXT j NEXT i ' b yi oku FOR i = 1 TO n READ b(i) NEXT i
b okunuyor
PCG alt programı çağrılıyor
CALL PCG(n, a(), b(), x(), iTer, iHata) IF iHata <> 0 THEN PRINT "HATA(PCG)="; iHata: END
Çözüm yazdırılıyor
w .e
PRINT "Denklem sisteminin çözümü(PCG):" FOR i = 1 TO n PRINT x(i); A okunuyor NEXT i PRINT PRINT "İterasyon sayısı="; iTer
w
w
END ' PCG ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
180
23. PROGRAMLAR: iterasyon ile denklem sistemi çözümü - PCG (Preconditioned Conjugate Gradient) metodu 181
' ' ' ' ' ' '
Çıktılar: x(n): Bilinmeyenler vektörü iTer: iterasyon sayısı iHata: = 0: Çözüm bulundu = 1: Çözüm bulunamadı(a tekildir veya pozitif tanımlı değildir) = 2: n+2 iterasyon yapıldı fakat çözüm yakınsamadı
em de r
w
w
w .e
' Kondisyonun iyileştir(preconditioning) FOR i = 1 TO n d(i) = 1 / SQR(a(i, i)) NEXT i FOR i = 1 TO n FOR j = i TO n a(i, j) = d(i) * a(i, j) * d(j) NEXT j b(i) = b(i) * d(i) NEXT i ' başlangıç vektörleri x, r, s hazırla FOR i = 1 TO n x(i) = 0 r(i) = b(i) s(i) = r(i) NEXT i ' b nin öklid normu bNorm = 0 FOR i = 1 TO n bNorm = bNorm + b(i) * b(i) NEXT i IF bNorm = 0 THEN EXIT SUB bNorm = SQR(bNorm)
' İterasyona başla iTer = 1 DO ' Hesapla: Alfa = [s(transpoz)*r]/[s(transp)*(a*s)] Pay = 0 Payda = 0 FOR i = 1 TO n Pay = Pay + s(i) * r(i) T=0 FOR j = i TO n T = T + a(i, j) * s(j) NEXT j FOR j = 1 TO i - 1 T = T + a(j, i) * s(j) NEXT j
sn o
' EpsMach: Kullanılan bilgisayarda sıfır varsayılan en küçük sayı EpsMach = 1 DO EpsMach = EpsMach / 2 s = 1 + EpsMach LOOP UNTIL s <= 1 EpsMach = 2 * EpsMach Epsilon = EpsMach iHata = 0 iTer = 0 ' n=1 durumu IF n = 1 THEN IF a(1, 1) = 0 THEN iHata = 1 ELSE x(1) = b(1) / a(1, 1) EXIT SUB END IF END IF
ri. co
Veriler: n: Denklem sayısı a(n,n): simetrik ve pozitif tanımlı katsayılar matrisi. a nın sadece üst üçgen kısmı kullanılır b(n): karşıtaraf vektörü
tla
' ' ' ' '
' d(n), r(n), s(n) ve aSi(n) ara değer vektörleridir ' ' çağrılan programlar: yok '---------------------------------------------------------------------DIM d(n) DIM r(n) DIM s(n) DIM aSi(n) ' a * s çarpımı depolanır
PCG alt programı
m
SUB PCG (n, a(), b(), x(), iTer, iHata) '------------------------------------------------------------------' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 2006 ' Ax=b doğrusal denklem sistemi PCG (Preconditioned Conjugate ' Gradient) iterasyon metodu ile çözülür, x bilinmeyenler vektörü ' hesaplanır.
aSi(i) = T Payda = Payda + s(i) * T NEXT i
' a matrisi tekil mi? Veya pozitif tanımlı değil mi? Kontrol et IF Payda <= 0 THEN iHata = 1 EXIT SUB END IF Alfa = Pay / Payda ' Hesapla: x=x+Alfa*s ve r=r-Alfa*aSi ' Hesapla: rNorm=r nin öklid normu rNorm = 0 FOR i = 1 TO n x(i) = x(i) + Alfa * s(i) r(i) = r(i) - Alfa * aSi(i) rNorm = rNorm + r(i) * r(i) NEXT i rNorm = SQR(rNorm) / bNorm ' Yakınsamayı kontrol et (en az iki iterasyondan sonra) IF iTer >= 2 AND rNorm <= Epsilon THEN FOR i = 1 TO n x(i) = d(i) * x(i) NEXT i EXIT SUB END IF ' Hesapla: Beta = -[r(transpoz)*(a*s)]/[s(transpoz)*(a*s)] Pay = 0 FOR i = 1 TO n Pay = Pay + r(i) * aSi(i) NEXT i Beta = -Pay / Payda ' Hesapla: s = r + Beta * s FOR i = 1 TO n s(i) = r(i) + Beta * s(i) NEXT i iTer = iTer + 1 LOOP UNTIL iTer > n + 2 iHata = 2 END SUB ' PCG sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
181
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
24 PROGRAMLAR: İterasyon ile seyrek denklem sistemi çözümü PCGsparse (Preconditioned Conjugate Gradient) metodu
24. PROGRAMLAR: iterasyon ile seyrek katsayılı denklem sistemi çözümü- PCGsparse (Preconditioned Conjugate Gradient) metodu183
24. PROGRAMLAR: iterasyon ile seyrek katsayılı denklem sistemi çözümüPCGsparse (Preconditioned Conjugate Gradient) metodu
A
Kondisyon iyileştirmesi
D-1/2A D-1/2 D1/2 x= D-1/2b
m
Ekte verilen program katsayılar matrisi simetrik ve seyrek olan A x=b doğrusal cebirsel denklem sistemini PCG iterasyon yöntemi ile çözer. Çözüm öncesi A seyrek matrisinin kondisyonu iyileştirilir. İyileştirme A nın diyagonal elemanlarından oluşan D diyagonal matrisi yardımıyla yapılır:
a13
a14
0
0
a33
a34
0
a44
0
0
0 a25 0 0 a55
Seyrek matris
Simetri dikkate alınmaz!
ia → [ 1 1 1 2 2 3 3 3 4 4 5 5 ] ja → [ 1 3 4 2 5 1 3 4 2 4 2 5 ]
Sadece sıfırdan farklı tüm elemanlar tek boyutlu a vektöründe depolanmış olmalı
sn o
a → [a11 a13 a14 a 22 a 25 a 31 a 33 a 34 a 42 a 44 a 52 a 55 ]
tla
a11 0 0 a 22 a = a31 0 0 a42 0 a52
ri. co
Anxn simetrik-pozitif tanımlı matrisi ve bn vektörü çağıran programda aşağıdaki gibi depolanmış olmalıdır:
Sıfırdan farklı elemanların satır numaraları ia vektörde depolanmış olmalı
Sıfırdan farklı elemanların kolon numaraları ja vektörde depolanmış olmalı
em de r
PCG metodu sadece simetrik ve pozitif tanımlı matrisler içindir. Bu koşulu sağlamayan denklem sistemlerinde kullanılmaz! Maksimum iterasyon sayısı, teorik olarak, n kadardır. Ancak, yuvarlama hataları nedeniyle fazladan 1-2 iterasyon daha gerekebilir. İterasyon sırasında A nın pozitif tanımlı olmadığı anlaşılırsa veya n+2 iterasyon sonunda çözüm yakınsamazsa PCG alt programı iHata ≠0 ile döner. A simetrik ve pozitif tanımlı olmak kaydıyla, PCG metodu en uygun iterasyon metodudur. İterasyon sırasında A nın elemanları değişmediğinden, bellekte çözümü mümkün olmayan çok büyük denklem sistemlerinin çözümünde öncelikle tercih edilir.
Örnek:
Seyrek ve simetrik matris
w
w
w .e
33 0 − 10 0 0 x1 3 0 43 0 14 0 x 2 13 , x=? A x = b → − 10 0 28 0 1 x 3 = 76 0 55 0 x 4 206 0 14 0 0 1 0 67 x 5 137
Verilerin hazırlanması:
Denklem satısı n=5 A nın Sıfırdan farklı elman sayısı iTes=11 A nın depolanma şekli: a
[33 -10 43 14 -10 28 1 14 55 1 67]
A nın sıfırdan farklı tüm elemanları(simetri dikkate alınmaz!)
iA
[1
1
2
2
3
3
3 4 4 5 5]
Sıfırdan farklı elemanların satır numaraları
jA
[1
3
2
4
1
3
5 2 4 3 5]
Sıfırdan farklı elemanların kolon numaraları
b
[3 13 76 206 137]
Karşı taraf vektörü
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
183
1 − 1 x= 3 4 2
ri. co
PCGsparse alt programının sonucu
'----- Ana program PCGsparse(Preconditioned Conjugate Gradient Metodu)--' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 2010 ' a(n,n)*x(n)=b(n) doğrusal denklem sistemi PCGsparse (Preconditioned ' Conjugate Gradient) iterasyon metodu ile çözülerek x(n) vektörü ' hesaplanır.
PCG ana programı
tla
' a(n,n): simetrik pozitif tanımlı seyrek(sparse) matris ' b(n): karşı taraf vektörü ' x(n): bilinmeyenler vektörü ' n: Denklem sayısı
m
24. PROGRAMLAR: iterasyon ile seyrek katsayılı denklem sistemi çözümü- PCGsparse (Preconditioned Conjugate Gradient) metodu184
sn o
' a(n,n) seyrek matrisisinin sadece sıfırdan farklı sayıları ' a(iTes) bir boyutlu vektöründe depolanır ' sıfırdan farklı elemaların satır numaraları iA(iTes), kolon numaraları ' jA(iTes) vektörlerinde depolanır ' iTes: a nın sıfırdan farklı eleman sayısıdır. ' iA(ites): a nın sıfırdan farklı olan a(i,j) elemanlarının i satır ' numaralarının depolandığı vektördür ' jA(ites): a nın sıfırdan farklı olan a(i,j) elemanlarının j satır ' numaralarının depolandığı vektördür ' DATA satırları iA, jA, a(i,j) sırasında düzenlenmıştir
em de r
' Çağrılan alt programlar: PCGsparse '-----------------------------------------------------------------DATA 5: ' denklem sayısı n DATA 11: ' A nın sıfırdan farklı sayı sayısı iTes 'A nın sıfırdan farklı sayıları: iA, jA, a(i,j) DATA 1,1,33, 1,3,-10 DATA 2,2,43, 2,4,14 i, j, a(i,j) değerleri DATA 3,1,-10, 3,3,28, 3,5,1 DATA 4,2,14, 4,4,55 DATA 5,3,1, 5,5,67 'b karşı taraf vektörü: DATA 3,13,76,206,137
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB PCGsparse (n, ites, iA(), jA(), a(), b(), x(), iTer, iHata)
w
w
w .e
CLS
READ n
Denklem sayısı okunuyor
Sıfırdan farklı eleman sayısı
READ ites
DIM a(ites), iA(ites), jA(ites), x(n), b(n)
' a nın elemanlarını oku FOR i = 1 TO ites READ iA(i), jA(i), a(i) NEXT i ' b yi oku FOR i = 1 TO n READ b(i) NEXT i
A , iA ve ja için yer ayır
iA, jA ve a değerleri okunuyor
Karşı taraf vektörü okunuyor
CALL PCGsparse(n, ites, iA(), jA(), a(), b(), x(), iTer, iHata)
PCGsparse alt programı çağrılıyor
IF iHata <> 0 THEN PRINT "HATA(PCGsparse)="; iHata: END PRINT "Denklem sisteminin çözümü(PCGsparse):" FOR i = 1 TO n PRINT x(i); NEXT i PRINT PRINT "İterasyon sayısı="; iTer
Çözüm yazdırılıyor
END ' PCGsparse ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
184
24. PROGRAMLAR: iterasyon ile seyrek katsayılı denklem sistemi çözümü- PCGsparse (Preconditioned Conjugate Gradient) metodu185
' ' ' ' ' ' '
Çıktılar: x(n): bilinmeyenler vektörü iTer: iterasyon sayısı iHata: = 0: Çözüm bulundu = 1: Çözüm bulunamadı(a tekildir veya pozitif tanımlı değildir) = 2: n+2 iterasyon yapıldı fakat çözüm yakınsamadı
' d(n), r(n), s(n) ve aSi(n) ara değer vektörleridir
m
Veriler: n: Denklem sayısı iTes: a nın sıfırdan farklı eleman sayısı(simetri dikkate alınmaz) iA(ites): a nın sıfırdan farklı olan a(i,j) elemanlarının i satır numaralarının depolandığı vektör jA(ites): a nın sıfırdan farklı olan a(i,j) elemanlarının j satır numaralarının depolandığı vektör a(iTes) seyrek matrisisinin sıfırdan farklı tüm elemanları(simetri dikkate alımmaz, tüm elemanlar verilir) b(n): karşı taraf vektörü
' İterasyona başla iTer = 1 DO ' Hesapla: Alfa = (s(transpoz) * r) / (s(transp) * (a * s)) pay = 0 FOR i = 1 TO n pay = pay + s(i) * r(i) NEXT i
tla
' ' ' ' ' ' ' ' ' '
PCGsparse alt programı
ri. co
SUB PCGsparse (n, ites, iA(), jA(), a(), b(), x(), iTer, iHata) '----------------------------------------------------------------------' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKİŞEHİR, 2010 ' a(n,n)*x(n)=b(n) doğrusal denklem sistemi PCGsparse ' (Preconditioned ' Conjugate Gradient) iterasyon metodu ile çözülerek x(n) vektörü ' hesaplanır. a matrisinin kondisyonu çözüm öncesi iyileştirilir. ' a(n,n): simetrik pozitif tanımlı seyrek(sparse) matris ' b(n): karşı taraf vektörü ' x(n): bilinmeyenler vektörü
sn o
' Çağrılan alt programlar: yok '----------------------------------------------------------------------DIM d(n) 'a nın diyagonal elemanları DIM r(n) 'iterasyon başlangıç vektörü DIM s(n) 'iterasyon başlangıç vektörü DIM aSi(n) ' a * s çarpımı
' hesapla: a*s FOR i = 1 TO n aSi(i) = 0 NEXT i
em de r
' EpsMach: Kullanılan bilgisayarda sıfır varsayılan en küçük sayı EpsMach = 1 DO EpsMach = EpsMach / 2 s = 1 + EpsMach LOOP UNTIL s <= 1 EpsMach = 2 * EpsMach epsilon = EpsMach
w
w
w .e
iHata = 0 iTer = 0 ' n=1 durumu IF n = 1 THEN IF a(1) = 0 THEN iHata = 1 ELSE x(1) = b(1) / a(1) EXIT SUB END IF END IF
'kondisyonu iyileştir(Jacobi) FOR i = 1 TO ites iA = iA(i) IF iA = jA(i) THEN d(iA) = SQR(a(i)) b(iA) = d(iA) * b(iA) END IF NEXT i FOR i = 1 TO ites iA = iA(i) jA = jA(i) a(i) = d(iA) * a(i) * d(jA) NEXT i ' x, r, s başlangıç vektörlerini hazırla FOR i = 1 TO n x(i) = 0 r(i) = b(i) s(i) = r(i) NEXT i ' B nin öklid normu bNorm = 0 FOR i = 1 TO n bNorm = bNorm + b(i) * b(i) NEXT i IF bNorm = 0 THEN EXIT SUB bNorm = SQR(bNorm)
FOR i = 1 TO ites aSi(iA(i)) = aSi(iA(i)) + a(i) * s(jA(i)) NEXT i
'Hesapla s(transpoz)*(aSi) payda = 0 FOR i = 1 TO n payda = payda + s(i) * aSi(i) NEXT i ' a matrisi tekil mi? Veya pozitif tanımlı değil mi? Kontrol et IF payda <= 0 THEN iHata = 1 EXIT SUB END IF alfa = pay / payda ' Hesapla: x=x+Alfa*s ve r=r-Alfa*aSi ' Hesapla: rNorm=r nin öklid normu rNorm = 0 FOR i = 1 TO n x(i) = x(i) + alfa * s(i) r(i) = r(i) - alfa * aSi(i) rNorm = rNorm + r(i) * r(i) NEXT i rNorm = SQR(rNorm) / bNorm ' Yakınsamayı kontrol et (en az iki iterasyondan sonra) IF iTer > 1 AND rNorm <= epsilon THEN FOR i = 1 TO n x(i) = d(i) * x(i) NEXT i EXIT SUB END IF ' Hesapla: Beta = -[r(transpoz)*(a*s)]/[s(transpoz)*(a * s)] pay = 0 FOR i = 1 TO n pay = pay + r(i) * aSi(i) NEXT i beta = -pay / payda ' Hesapla: s = r + Beta * s FOR i = 1 TO n s(i) = r(i) + beta * s(i) NEXT i iTer = iTer + 1 LOOP UNTIL iTer > n + 2 iHata = 2 END SUB ' PCGsparse sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
185
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
em de r
sn o
Ahmet TOPÇU
tla
Ders notları 2014
Katsayılar matrisi
a11 a 21 . an1
a12
a22
an 2
Özdeğer
... a1n x1 x1 x ... a2 n x2 = λ 2 . . ... ... ann xn xn
Özvektör
w
w
w .e
Özvektör
Ax=λx
25 ÖZDEĞER PROBLEMİ Matrisin özdeğerleri ve özvektörleri Standart özdeğer problemi
25. STANDART ÖZDEĞER PROBLEMİ
187
25. STANDART ÖZDEĞER PROBLEMİ
a11 a 21 x1 + a 22 x 2 + ... + a 2 n x n = λx 2 → a 21 . ... a n1 x1 + a n 2 x 2 + ... + a nn x n = λx n a n1
... a1n x1 x1 x ... a 2 n x 2 = λ 2 . . ... ... a nn x n xn
a12 a 22 an2
Özvektör Özdeğer Özvektör
Katsayılar matrisi
Ax = λ x
(25.1)
ri. co
a11 x1 + a12 x 2 + ... + a1n x n = λx1
m
Mühendislik bilimlerinin hemen her dalında, özellikle dinamik ve stabilite problemlerinde standart özdeğer problemi adı verilen
(25.2)
a11 a A x = λ I x = 21 . a n1
sn o
25.1 denklemi, I birim matris olmak üzere
... a1n x1 1 0 ... 0 x1 0 1 ... 0 x ... a 2 n x 2 2 = 0 − λ . . ... ... . ... a nn x n 0 0 ... 1 x n
a12 a 22
em de r
an2
a11 a ( A − λ I ) x = ( 21 . a n1
... a1n 1 0 ... 0 x1 0 1 ... 0 x ... a 2 n ) 2 = 0 − λ . ... ... . ... a nn 0 0 ... 1 x n
a12 a 22
an2
Özdeğer
w
w
w .e
a11 − λ a ( A − λ I ) x = 21 . a n1
tla
tipinde denklem sistemi ile karşılaşılır. Burada Anxn gerçek sayılardan oluşan bir kare matris, λ sabit bir sayı, x sıfırdan farklı bir vektördür. 25.1 ifadesine standart özdeğer problemi, λ ya A nın özdeğeri, x e A nın özvektörü denir. A bilinir λ ve x bilinmez. 25.1 denklemini sağlayan λ sabitinin ve x≠0 vektörünün hesabı istenir. Özdeğer problemi karşı tarafı da bilinmeyen bir denklem sistemidir.
Özvektör
a1n x1 a 2 n x 2 =0 . ... ... a nn − λ x n
a12 ... a 22 − λ ... an2
Homojen denklem sistemi
(25.3)
olarak yazılabilir. Demek ki, özdeğer problemi kare katsayılı bir homojen denklem sistemidir. Ancak, çözüm homojen denklem sisteminin çözümü kadar basit değildir. Çünkü hem λ hem de x bilinmemektedir. Bölüm 10 da kare katsayılı bir homojen denklem sisteminin sıfırdan farklı çözümünün olabilmesi için katsayılar matrisinin tekil, yani determinantının sıfır olması gerektiği açıklanmıştı. O halde, 25.3 ün x≠0 çözümünün olabilmesi için
a11 − λ det( A − λ I ) =
a 21 . a n1
a12
...
a1n
a 22 − λ ... ...
a 2n
an2
=0
(25.4)
... a nn − λ
olmalıdır. 25.3 ve 25.4 bağıntılarının anlamı şudur: determinantını sıfır yapan bir sayıdır.
λ
λ
özdeğeri, katsayılar matrisi A nın
özdeğerini hesaplamak için; katsayılar matrisinin
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
187
25. STANDART ÖZDEĞER PROBLEMİ
λ
diyagonal elemanlarından
188
çıkartılır, oluşan matrisin determinantı hesaplanır, sıfıra
eşitlenir, λ özdeğerinin sayısal değeri bulunur. λ nın sayısal değeri 25.3 de yerine konur, homojen denklem sistemi çözülür, özdeğer vektörü x hesaplanır.
x=?
25.3 e göre:
x1 0 x = 0 −3−λ 2 1 − λ x3 0
tla
2 − λ
ri. co
2 x1 x1 A x = λ x → − 3 x 2 = λ x 2 , λ=? x3 1 x3
m
Örnek 1: Diyagonal matrisin özdeğer problemi
sn o
25.4 e göre, katsayılar matrisinin determinantı sıfır olmalı:
2 − λ 2− λ = =0 det −3− λ −3− λ 1 − λ 1− λ
em de r
Hatırlatma: diyagonal matrisin determinantı diyagonal elemanların çarpımıdır
2−λ
−3−λ
= (2 − λ )(−3 − λ )(1 − λ ) = 0
1− λ
λ − 7λ + 6 = 0 λ1 = 2, λ 2 = −3, λ3 = 1 3
Üç farklı özdeğer var, her biri katsayılar matrisi A nın determinantını sıfır yapar. 25.3 e göre üç özdeğere karşılık üç farklı x1, x2 ve x3 özvektörü olacaktır.
w .e
w
w
3. derece polinomunun 3 kökü vardır ≡ determinatı sıfır yapan 3 adet λ vardır ≡ 3 adet özdeğer vardır.
λ1=2 özdeğeri homojen denklemde yerine konarak x1 hesaplanır:
x1
λ1
2 − λ1
− 3 − λ1
λ1
x1
x1 0 2 − 2 x1 0 x = 0 → x = 0 −3−2 2 2 1 − λ1 x3 0 1 − 2 x3 0 λ1=2 özdeğerine ait özvektör
x1
0 x1 0 −5 x = 0 2 − 1 x3 0
Homojen denklem sisteminde x1 serbest değişken olmuştur, çünkü 0x1=0 eşitliği vardır. O halde x1 için herhangi bir değer seçilebilir.. Basit olması için x1=1 seçelim. Son iki denklemden: -5x2=0 x2=0 -1x3=0 x3=0 bulunur.
1 x1 = 0 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
188
25. STANDART ÖZDEĞER PROBLEMİ
189
λ2=-3 özdeğeri homojen denklemde yerine konarak x2 hesaplanır:
− 3 − λ2
x1 0 2 − (−3) x1 0 x = 0 → x = 0 − 3 − (−3) 2 2 1 − λ 2 x 3 0 1 − ( −3) x 3 0
x2
5 x1 0 0 x = 0 2 4 x 3 0
Homojen denklem sisteminde x2 serbest değişken olmuştur, çünkü 0x2=0 eşitliği vardır. O halde x2 için herhangi bir değer seçilebilir. x2=1 seçelim. İlk ve son denklemden: 5x1=0 x1=0 4x3=0 x3=0 bulunur.
λ2=-3 özdeğerine ait özvektör
ri. co
2 − λ 2
x2
λ2
m
x2
λ2
0 x 2 = 1 0
λ3=1 özdeğeri homojen denklemde yerine konarak x3 hesaplanır:
tla
− 3 − λ3
x3
x1 0 2 − 1 x1 0 x = 0 → x = 0 − 3 −1 2 2 1 − λ3 x3 0 1 − 1 x3 0
x3
Homojen denklem sisteminde x3 serbest değişken olmuştur, çünkü 0x3=0 eşitliği vardır. O halde x3 için herhangi bir değer seçilebilir. x3=1 seçelim. İlk iki denklemden: 1x1=0 x1=0 -4x2=0 x2=0 bulunur.
em de r
1 x1 0 − 4 x = 0 2 0 x 3 0
sn o
2 − λ3
λ3
x3
λ3
λ3=1 özdeğerine ait özvektör
0 x 3 = 0 1
Kontrol: Özdeğerler A xi = λi xi bağıntısını sağlamalıdır.
2 1 1 2 2 A x1 = λ1 x1 → − 3 0 = 20 → 0 = 0 0 0 0 1 0
w
w
w .e
2 0 0 0 0 A x 2 = λ 2 x 2 → − 3 1 = −31 → − 3 = − 3 0 0 0 1 0
2 0 0 0 0 A x 3 = λ3 x 3 → − 3 0 = 10 → 0 = 0 1 1 1 1 1
Görüldüğü gibi, özdeğerler ve özvektörler özdeğer problemini sağlamaktadır.
Genelleştirme: •
Anxn diyagonal matrisinin n tane özdeğeri vardır, λi=aii dir. λi=aii nin özvektörü birim matrisin i. vektörüdür.
•
Inxn birim matrisinin özdeğerlerinin tümü aynı, λi=1 dir. λi nin özvektörü birim matrisin i. vektörüdür.
•
Onxn sıfır matrisinin özdeğerlerinin tümü sıfırdır., λi=0 dir. Özvektörleri keyfi herhangi bir vektördür.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
189
25. STANDART ÖZDEĞER PROBLEMİ
190
Örnek 2: Üst üçgen matrisin özdeğer problemi
2 x1 2 1 x1 U x = λ x → − 3 − 1 x 2 = λ x 2 , λ=? x3 1 x3
m
x=?
2 − λ
2 x1 0 2 − λ − 3 − λ − 1 x2 = 0 , det 1 − λ x3 0
ri. co
25.3 ve 25.4 e göre
2 − 3 − λ − 1 = 0 olmalı. 1 − λ
1
1
1
2
−3−λ
− 1 = 0 → (2 − λ )(−3 − λ )(1 − λ ) = 0 1− λ
λ3 − 7λ + 6 = 0 λ1 = 2, λ2 = −3, λ3 = 1
sn o
2−λ
tla
Üst üçgen matrisin determinantı diyagonal elemanların çarpımına eşittir:
Üç farklı özdeğer var, her biri katsayılar matrisi A nın determinantını sıfır yapar. 25.3 e göre üç özdeğere karşılık üç farklı x1, x2 ve x3 özvektörü olacaktır. λ1=2 özdeğeri homojen denklemde yerine konarak x1 hesaplanır:
x1
em de r
λ1
1 2 x1 0 2 − 2 − 3 − 2 - 1 x 2 = 0 1 − 2 x3 0
λ1=2 özdeğerine ait özvektör
x1
w
w
w .e
2 x1 0 0 1 − 5 - 1 x = 0 2 − 1 x3 0
Son iki denklemden: -1x3=0 x3=0 -5x2-1x3=0 x2=0 bulunur. Birinci denklemde 0x1+1x2+2x3=0 dır. x2= x3=0 yerine konulunca: 0x1=0 olur. O halde x1 serbest değişkendir. Her değer seçilebilir: x1=1
1 x 1 = 0 0
λ2=-3 özdeğeri homojen denklemde yerine konarak x2 hesaplanır:
λ2
x2
1 2 x1 0 2 − (−3) − 3 − (−3) - 1 x 2 = 0 1 − (−3) x3 0 x2
5 1 2 x1 0 0 - 1 x = 0 2 4 x3 0
λ2=-3 özdeğerine ait özvektör
Son denklemden: 4x3=0 x3=0
İkinci denklemde 0x2-1x3=0 dır. x3=0 yerine konulunca 0x2=0 olur. O halde x2 serbest değişkendir, her değer seçilebilir, x2=1 seçelim. Birinci denklemden: 5x1+1x2+2x3=0. x2 ve x3 değerleri .
.
- 0.2 x 2 = 1 0
yerine konarak 5x1+1 1+2 0=0 dan x1=-1/5=-0.2 bulunur.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
190
25. STANDART ÖZDEĞER PROBLEMİ
191
λ3=1 özdeğeri homojen denklemde yerine konarak x3 hesaplanır:
λ3
x3
1 1 2 x1 0 − 4 - 1 x = 0 2 0 x3 0
Son denklemde: 0x3=0 dır. O halde x3 serbest değişkendir, her değer seçilebilir, x3=1 seçelim. 2. ve 3. denklemden: x2=(0-(-1).1)/(-4)= - 0.25 x1=(0-2.1-1. (-0.25))/1= - 1.75
- 1.75 x 3 = - 0.25 1
tla
Kontrol: Özdeğerler A xi = λi xi bağıntısını sağlamalıdır.
λ3=1özdeğerine ait özvektör
ri. co
x3
m
1 2 x1 0 2 − 1 − 3 − 1 - 1 x 2 = 0 1 − 1 x3 0
sn o
2 1 2 1 1 2 2 U x 1 = λ1 x 1 → − 3 − 1 0 = 2 0 → 0 = 0 0 0 0 1 0
em de r
2 - 0.2 2 1 - 0.2 0.6 0.6 U x 2 = λ 2 x 3 → − 3 − 1 1 = −3 1 → 3 = 3 0 0 0 1 0
2 - 1.75 - 1.75 2 1 - 1.75 - 1.75 U x 3 = λ3 x 3 → − 3 − 1 - 025 = 1 - 025 → - 025 = - 025 1 1 1 1 1 Özdeğerler ve özvektörler özdeğer problemini sağlamaktadır. Genelleştirme: nxn boyutlu alt veya üst üçgen matrisin özdeğerleri diyagonal elemanlarına eişittir.
w
w
w .e
Örnek 3: 2x2 matrisin özdeğer problemi
x − 7 − 2 x1 Ax = λ x → = λ 1 , λ=? 2 − 2 x 2 x2
x=?
4.3 ve 4.4 e göre
− 2 x1 0 − 7 − λ − 7 − λ = , det 2 − 2 − λ x 2 0 2
−2 = 0 olmalı. − 2 − λ
Hatırlatma: 2x2 matrisin determinantı=Diyagonal elemanların çarpımı - diğer diyagonal elemanların çarpımıdır.
−7−λ
−2
2
−2−λ
= 0 → (−7 − λ )(−2 − λ ) − 2 ⋅ (−2) = 0 → λ2 + 9λ + 18 = 0 → λ1 = −6, λ2 = −3
İki farklı özdeğer var, her biri katsayılar matrisi A nın determinantını sıfır yapar. 25.3 e göre iki özdeğere karşılık iki farklı x1 ve x2 özvektörü olacaktır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
191
25. STANDART ÖZDEĞER PROBLEMİ
192
λ1=-6 özdeğeri homojen denklemde yerine konarak x1 hesaplanır:
x1
λ1
x1
λ1=-6 özdeğerine ait özvektör
Son denklemde: 0x2=0 x2 serbest değişkendir, her değer seçilebilir, x2=1 seçelim. Birinci denklemden: -1x1-2x2=0 dır -1x1-2.1=0
x1=-2 olur.
- 2 x1 = 1
ri. co
− 1 − 2 x1 0 = 0 0 x2 0
m
− 2 x1 0 − 7 − (−6) − 1 − 2 x1 0 − 1 − 2 x1 0 = → = → basit GAUSS → = 2 − 2 − (−6) x2 0 4 x 2 0 0 x 2 0 2 0
λ2=-3 özdeğeri homojen denklemde yerine konarak x2 hesaplanır:
x2
λ2
x2
tla
− 2 x1 0 − 4 − 2 x1 0 − 7 − (−3) − 4 − 2 x1 0 = → = → basit GAUSS → = 2 − 2 − (−3) x 2 0 2 1 x 2 0 0 x 2 0 0
sn o
Birinci denklemden: -4x1-2x2=0 dır -4x1-2.1=0
x1=-0.5 olur.
λ2=-3 özdeğerine ait özvektör
- 0.5 x2 = 1
em de r
− 4 − 2 x1 0 = 0 0 x 2 0
Son denklemde: 0x2=0 x2 serbest değişkendir, her değer seçilebilir, x2=1 seçelim.
Kontrol:
− 7 − 2 − 2 − 2 12 12 A x1 = λ1 x1 → = −6 → = 2 − 2 1 1 − 6 − 6 − 7 − 2 − 0 .5 − 0 .5 1.5 1.5 A x 2 = λ2 x 2 → = − 3 → = 2 − 2 1 1 − 3 − 3
w
w
w .e
Örnek 4: Sanal özdeğerler
x − 2 − 2 x1 Ax = λ x → = λ 1 , λ=? 2 − 2 x 2 x2
x=?
4.3 ve 4.4 e göre
− 2 x1 x1 − 2 − λ − 2 − λ = , det 2 − 2 − λ x2 x2 2
−2 = 0 olmalı. − 2 − λ
Hatırlatma: 2x2 matrisin determinantı=Diyagonal elemanların çarpımı - diğer diyagonal elemanların çarpımıdır.
−2−λ
−2
2
−2−λ
Hatırlatma:
= 0 → (−2 − λ )(−2 − λ ) − 2 ⋅ (−2) = 0 → λ2 + 4λ + 8 = 0 → λ1 = −2 − 2i, λ 2 = −2 + 2i
i = − 1, i 2 = −1 dır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
192
25. STANDART ÖZDEĞER PROBLEMİ
193
İki farklı sanal özdeğer var, her biri katsayılar matrisi A nın determinantını sıfır yapar. 25.3 e göre her iki özdeğere karşılık iki farklı x1 ve x2 özvektörü olacaktır. λ1=-2-2i özdeğeri homojen denklemde yerine konarak x1 hesaplanır: x1
GAUSS’u kolayca uygulamak için satırlar değiştirildi
x1
m
λ1
Basit GAUSS uygulandıktan sonra
Birinci denklemden: 2x1+2ix2=0 dır 2x1+2.i. 1=0
x1=-i olur.
λ1=-2-2i özdeğerine ait özvektör
-i x1 = 1
tla
2 2i x1 0 0 0 x = 0 2
Son denklemde: 0x2=0 x2 serbest değişkendir, her değer seçilebilir, x2=1 seçelim.
ri. co
−2 − 2 − (−2 − 2i) x1 0 2i − 2 x1 0 2 2i x1 0 = → = → = 2 − 2 − (−2 − 2i) x 2 0 2 2i x 2 0 2i − 2 x 2 0
λ2
sn o
λ2=-2+2i özdeğeri homojen denklemde yerine konarak x2 hesaplanır:
x2
x2
GAUSS’u kolayca uygulamak için satırlar değiştirildi
em de r
−2 x1 0 − 2i − 2 x1 0 − 2 − (−2 + 2i ) 2 − 2i x1 0 = → = → = 2 − 2 − (−2 + 2i) x 2 0 2 − 2i x 2 0 − 2i − 2 x 2 0 Basit GAUSS uygulandıktan sonra
2 − 2i x1 0 0 0 x = 0 2
Son denklemde: 0x2=0 x2 serbest değişkendir, her değer seçilebilir, x2=1 seçelim. Birinci denklemden: 2x1-2ix2=0 dır 2x1-2.i. 1=0
x1=i olur.
λ2=-2+2i özdeğerine ait özvektör
i x2 = 1
Kontrol:
w .e
− i 2i − 2 2i − 2 − 2 − 2 − i = ( −2 − 2i ) → A x 1 = λ1 x1 → = 2 − 2 1 1 − 2i − 2 − 2i − 2
w
w
− 2 − 2 i i − 2i − 2 − 2i − 2 A x 2 = λ2 x 2 → = (−2 + 2i ) → = 2 − 2 1 1 2i − 2 2i − 2
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
193
25. STANDART ÖZDEĞER PROBLEMİ
194
Özdeterminant ve özdenklem 25.4 bağıntısı ile verilen
. a n1
a1n a 2n
... ... a nn − λ
an2
=0
m
det( A − λ I ) =
a12 ... a 22 − λ ...
ri. co
a11 − λ a 21
Determinantına özdeterminat veya karakteristik determinant denir. Sayısal örneklerden de anlaşıldığı gibi, bu determinant hesaplandığında λ ya bağlı n. derece bir polinom elde edilir:
det( A − λ I ) = λn + a1λn −1 + a 2 λn − 2 + ... + a n −1λ + a n = 0
(25.5)
vardır.
Her bir
sn o
Özdeğerler matrisi ve özvektörler matrisi
tla
Bu polinoma özdenklem veya özpolinom veya karakteristik denklem denir. n. Dereceden olan özdenklemin n tane kökü vardır. Dolayısıyla A nın determinantını sıfır yapan n tane özdeğer vardır: λ1 , λ2 ,..., λn . Her bir özdeğere karşılık gelen n tane de özvektör x1, x2, …, xn
λi ve xi çifti 25.1 özdeğer problemini sağlar:
Ax 1 = λ1 x 1 Ax 2 = λ2 x 2
A[x 1
... x n ] = [λ1 x1
x2
λ 2 x 2 ... λ n x n ] → A X = X Λ
em de r
... Ax n = λ n x n
XΛ
X
AX = X Λ Burada
Λ
λ1 Λ=
ve
X
matrisleri
λ2
.
w .e
w
w
(25.6)
, X = [x 1 λn
x2
... x n ]
Özdeğer ve özvektörlerin bir araya toplandığı matrislerdir. Çoğu kez Λ matrisine spektral matris X matrisine de modal matris adı verilir. Herhangi bir özdeğer sıfır olabileceğinden
Λ
−1
özdeğerler matrisi tekil olabilir, Λ her zaman tanımlı olmayabilir. Özvektörler 25.3 homojen denklem sisteminin temel çözüm kümesidir ve doğrusal bağımsızdırlar. Dolayısıyla nxn −1 boyutlu X modal matrisi tekil değildir, yani tersi X vardır. Bu özellik nedeniyle, 25.6 ifadesi
X
−1
AX = X
−1
olduğu görülür.
AX X
−1
XΛ→ X X
= X ΛX
−1 −1
−1
X
−1
ile soldan çarpılırsa
AX = Λ
(25.7)
ile sağdan çarpılırsa
→ A = X ΛX
−1
olur. Son özellik kullanılarak A nın n. Kuvveti için: −1
−1
−1
−1
A = A A A... A A = X Λ X X Λ X X Λ X .... X Λ X X Λ X n
A = XΛ X n
n
−1
→ X Λ Λ Λ...Λ Λ X
−1
−1
Özvektörlerin doğrusal birleşimi: yazılabilir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
194
25. STANDART ÖZDEĞER PROBLEMİ
195
xi özvektörünün herhangi bir gerçek ci sayısı ile çarpılması veya bölünmesi sonucunda elde edilen yeni vektör de bir özvektördür. Çünkü cixi ile de
A(ci x i ) = λi (ci x i )
(25.8)
m
sağlanır. Bu önemli özellik nedeniyle, istenirse, ci herhangi bir gerçek sayı seçilebilir. Özvektörlerin
~ x = c1 x 1 + c 2 x 2 + ... + c n x n
ri. co
doğrusal birleştirilmesi ile oluşan yeni ~ x de bir özvektördür ve 25.1 i sağlar. Bu açıklamalardan şu sonuca varılır: Herhangi bir Anxn matrisinin n tane özdeğeri, n tane temel özvektörü, fakat sonsuz özvektörü vardır. Normalleştirilmiş özvektör
25.8 deki ci katsayısının seçiminde uygulamada farklı yaklaşımlar vardır:
tla
1. Basitliği nedeniyle, xi özvektörünün hesabı sırasında serbest değişken genellikle 1 alınır. Bu ci=1 anlamındadır. ci=1 alınarak hesaplanan özvektör temel özvektördür. Yukarıdaki sayısal örneklerin tümünde serbest değişkenler 1 seçilmişti.
sn o
2. Bazı uygulamalarda özvektörün en büyük elemanının 1 olması istenir. Bunun için, xi temel özvektörü hesaplandıktan sonra, xi nin elemanlarından mutlak değeri en büyük olan sayı ci olarak alınır, xi nin tüm elemanları ci ye bölünür. Oluşan yeni özvektörün en büyük elemanı 1 olur. Bu yolla hesaplanan özvektöre normalleştirilmiş özvektör denir. Önceki sayfalarda verilen örnek 2 den: Normalleştirilmiş özvektör
Temel özvektör
em de r
1 - 1.75 - 1.75 1 ~ x 3 = - 0.25 → c 3 = −1.75 → x 3 = - 0.25 = 0.142857 − 1.75 1 1 - 0.571429
Hem
x3
hem de
~ x 3 örnek 2 deki
özdeğer problemini sağlarlar.
3. Bazı uygulamalarda xi temel özvektörü hesaplandıktan sonra xi nin uzunluğunun 1 olması istenir. Genel olarak; herhangi bir x= [x1 x2 … xn]T vektörünün uzunluğu T x = x x = x12 + x 22 + ... + x n2 ile tanımlanır. x vektörünün uzunluğunu 1 yapmak için sabit
bir c sayısı ile çarpmak gerekir:
x = c( x )(c x) = c 2 ( x12 + x 22 + ... + x n2 ) = 1 → c x12 + x 22 + ... + x n2 = 1 → c =
1
T
x + x + ... + x n2 2 1
2 2
w
w
w .e
dir. ~ x = c x ile hesaplanacak yeni vektörün uzunluğu 1 olacaktır:
~ x=
x1 x 1 2 2 2 2 . x1 + x 2 + ... + x n xn
Demek ki bir vektörün uzunluğunun 1 olması istenirse o vektörün elemanlarını o vektörün uzunluğuna bölmek gerekir. Önceki sayfalarda verilen örnek 2 den:
- 1.75 x3 özvektörünün uzunluğu x 3 = - 0.25 → x 3 = 1.75 2 + 0.25 2 + 12 = 2.031010 1 - 1.75 - 0.861640 ~ 1 - 0.25 = - 0.123091 Hem x 3 hem de x 3 örnek 2 deki özdeğer ~ x3 = problemini sağlarlar. 2.031010 1 0.492366 x3 ün uzunluğu x3
Uzunluğu 1 olan yeni özvektör
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
195
25. STANDART ÖZDEĞER PROBLEMİ
196
T ~ x = ~ x3 ~ x = 0.8616402 + 0.1230912 + 0.4923662 = 0.999999 ≈ 1
Kontrol:
1.
Özdeğer problemi sadece kare matrisler için tanımlıdır.
2.
Anxn matrisinin daima n tane özdeğeri,
3.
λi
4.
Her λi özdeğerine karşılık gelen bir xi özvektörü vardır.
m
Özdeğer ve özvektörlerin bazı önemli özellikleri
özdeğeri A matrisinin determinantını sıfır yapar.
λi ve
sağlar.
ri. co
λ1 , λ2 ,..., λn vardır. xi çifti beraber
( A − λi I ) x i = 0
bağıntısını
Özdeğerler pozitif, negatif, sıfır gerçek sayıları olabildiği gibi sanal sayılar da olabilir.
6.
Özvektörlerin elemanları gerçek ve sanal sayılardan oluşabilir.
7.
Elemanları gerçek sayılardan oluşan A simetrik (AT=A) ise, tüm özdeğerler de gerçek sayılardan oluşur. Simetrik matrisin özvektörleri ortogonaldır: XTX=I
8.
A simetrik (AT=A) ve pozitif tanımlı ise tüm özdeğerler de pozitiftir.
9.
Bazı özdeğerler birbirine eşit olabilir. Fakat Eşit özdeğerlerin özvektörleri mutlaka farklıdır. Çünkü özvektörler doğrusal bağımsızdır. Örneğin
birim matrisinde
λ1 = λ2 = λ3 = 1
1 0 0 , , x1 = 0 x 2 = 1 x 3 = 0 0 0 1
sn o
1 1 1
tla
5.
ve özvektörler
dır. Görüldüğü gibi, özdeğerler birbirine eşit fakat özvektörler birbirinden farklıdır. 10. xi özvektörünün herhangi bir gerçek c sayısı ile çarpılması veya bölünmesi sonucunda elde edilen yeni vektör de bir özvektördür. Yanı yeni vektör cxi ile de
( A − λi I )(c x i ) = 0 sağlanır.
Bu önemli özellik
em de r
nedeniyle, istenirse, c herhangi bir gerçek sayı seçilebilir.
11. A ve AT aynı özdeğerlere sahiptir, fakat özvektörleri genelde farklıdır. 12. Anxn ve Bnxn kare matrisler olmak üzere A B ve B A matrisleri aynı özdeğerlere sahiptir. 13. A nın özdeğeri
λi
ise A -1 in özdeğeri
1 λi
dir.
λi = 0
durumunda
1 λi
tanımsızdır, bu ise A nın tekil ve
A-1 in olmadığı anlamındadır.
14. Anxn matrisinin izi özdeğerlerin toplamına eşittir: İz A=a11+ a22+…+ ann= λ1
+ λ 2 + ... + λ n .
15. Anxn matrisinin determinantı özdeğerlerin çarpımına eşittir: det A= λ
1
⋅ λ2 ⋅ ... ⋅ λn .
w
w
w .e
Dolayısıyla, özdeğerlerden herhangi biri sıfırsa,
λi = 0
, det A=0 dır ve A-1 tanımsızdır.
Özdeğer ve özvektörün geometrik yorumu
A x=λx bağıntısından hesaplan λ özdeğeri ve x özvektörü şu şekilde yorumlanabilir: A matrisi x vektörünü λ kadar büyütmekte veya küçültmektedir. x vektörünün doğrultusu değişmemekte fakat yönü değişebilmektedir. λ pozitif ise x ve λx aynı yönde, aksi hale ters yöndedirler.
x x
x
x Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
196
25. STANDART ÖZDEĞER PROBLEMİ
197
3 −1 0 A = − 1 2 − 1 verildiğine göre ( A − λ I ) x = 0 özdeğer problemini çözünüz. 0 − 1 3
m
Örnek 5: 3x3 matrisin özdeğer problemi
Bu şu anlama gelmektedir: A nın determinantını sıfır yapan λ1 , λ2 , λ3 özdeğerlerini ve her bir
ri. co
özdeğere ait x1 , x 2 , x 3 vektörlerini, ( A − λi I ) x i = 0 bağıntısını sağlayacak şekilde, bulunuz. Özdeğerlerin hesabı:
( A − λ I )x = 0
x≠0 çözümü arandığından, determinantı sıfır olmalıdır:
bağıntının
−1
0 2 − λ − 1 = 0 − 1 3 − λ
sağlanabilmesi
sn o
3 − λ f (λ ) = det − 1 0
bu
Özdeğer problemi
tla
0 x1 0 3 − λ − 1 − 1 2 − λ − 1 x = 0 2 0 − 1 3 − λ x3 0
için,
katsayılar
matrisinin
Laplace açılımı(1.kolona göre):
f (λ ) = (−1) (1+1) (3 − λ )
2−λ
−1
+ (−1) (1+ 2 ) (−1)
f (λ ) = −λ3 + 8λ2 − 19λ + 12 = 0 Son
terimin
0
−1 3 − λ
em de r
−1 3 − λ f (λ ) = (3 − λ )[(2 − λ )(3 − λ ) − 1] + (−3 + λ ) = 0
−1
=0
Özdenklemin MÜLLER programı ile bulunan kökleri(Bak: Bölüm 36, sayfa 294)
özdenklem
1.3.4=12
çarpanlarından
kökler λ1 = 1, λ2 = 3, λ3 = 4 bulunur.
Bunlar
A
nın
özdeğerleridir, A nın determinantını sıfır yaparlar. Özdenklemin kökleri uygun bir programla da bulunabilir, derecesi 5 ve yukarı olan problemlerde zaten başka çare yoktur(kök bulma programları için bak: bölüm 36). Özvektörlerin hesabı:
w
w
w .e
x i özvektöleri ( A − λi I ) x i = 0 homojen denkleminden hesaplanır. En uygun yöntem GAUSS
indirgeme metodudur. İndirgeme sonucunda A − λi I katsayılar matrisi eşdeğer bir üst üçgen
matrise dönüşür. Üçgen matrisin diyagonal elemanı sıfır olur. Bu determinantın sıfır olduğu anlamındadır. Sıfır diyagonale ve karşı tarafa herhangi bir sabit ci sayısı yazılır. Bu özvektörün ci katının da bir özvektör olduğu özelliğinden yararlandığımız anlamına gelir. Basitliği nedeniyle çoğu kez ci=1 tercih edilir. Yukarı doğru hesap yapılarak özvektörün tüm terimleri belirlenir.
λ1 = 1 için özvektörün hesabı: 3 − λ −1 0
−1 2−λ −1
0 x1 0 − 1 x2 = 0 3 − λ x3 0 {
λ = λ1 = 1 alınır. .
x1
0 x1 0 3 − 1 − 1 − 1 2 − 1 − 1 x = 0 2 0 − 1 3 − 1 x3 0 { x1
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
197
25. STANDART ÖZDEĞER PROBLEMİ
2 − 1 0 x1 0 0 0.5 − 1 x = 0 2 0 0 0 x3 0
Yukarı doğru hesap ile tüm bilinmeyenler belirlenir
Normalleştirilmiş özvektör (uzunluğu=1)
tla
−1
0 x1 0 − 1 x 2 = 0 3 − λ x3 0
Normalleştirilmiş özvektör (en büyük terim=1)
1 0.408248 2 = 0.816497 2 2 2 1 + 2 + 1 1 0.408248
0 x1 0 3 − 3 − 1 − 1 2 − 3 − 1 x = 0 2 0 − 1 3 − 3 x 3 0 {
0 − 1 0 x1 0 − 1 − 1 − 1 x = 0 2 0 − 1 0 x3 0
sn o
−1 2−λ
e ait temel özvektör
1
~ x1 =
λ2 = 3 için özvektörün hesabı: 3 − λ −1 0
1 0 . 5 1 ~ x 1 = 2 = 1 2 1 0.5
3.diyagonal sıfırdır. x3 serbest değişkendir. Diyagonale ve karşı tarafa 1 yazılır: 1.x3=1
2 − 1 0 x1 0 0 0.5 − 1 x = 0 2 0 0 1 x3 1
λ1 = 1
m
x1 1 x1 = x2 = 2 x3 1
Homojen denklem sistemi GAUSS ile indirgenir.
ri. co
2 − 1 0 x1 0 − 1 1 − 1 x = 0 2 0 − 1 2 x3 0
198
Homojen denklem sistemi GAUSS ile indirgenir.
x2
GAUSS ile: − 1 − 1 − 1 x1 0 0 − 1 0 x = 0 2 0 − 1 0 x3 0
em de r
− 1 − 1 − 1 x1 0 0 − 1 0 x = 0 2 0 0 0 x3 0
− 1 − 1 − 1 x1 0 0 − 1 0 x = 0 2 1 x3 1 0 0
Normalleştirilmiş özvektör (en büyük terim=1)
λ2 = 3 e ait
− 1 1 x1 − 1 temel özvektör 1 ~ x2 = 0 = 0 x 2 = x2 = 0 −1 1 − 1 x 3 1
~ x2 =
3.diyagonal sıfırdır. x3 serbest değişkendir. Diyagonale ve karşı tarafa 1 yazılır: 1.x3=1. Yukarı doğru hesap ile tüm bilinmeyenler belirlenir.
Normalleştirilmiş özvektör (uzunluğu=1)
− 1 − 0.707108 0= 0 12 + 0 + 12 1 0.707108 1
w
w
w .e
λ3 = 4 için özvektörün hesabı: 3 − λ −1 0
−1 2−λ −1
0 x1 0 − 1 x 2 = 0 3 − λ x3 0
0 x1 0 3 − 4 − 1 − 1 2 − 4 − 1 x = 0 2 0 − 1 3 − 4 x 3 0 {
Homojen denklem sistemi GAUSS ile indirgenir.
x3
GAUSS ile: − 1 − 1 0 x1 0 0 − 1 − 1 x = 0 2 0 − 1 − 1 x3 0
λ3 = 4
− 1 − 1 0 x1 0 0 − 1 − 1 x = 0 2 0 0 0 x 3 0 e ait
− 1 − 1 0 x1 0 0 − 1 − 1 x = 0 2 0 0 1 x 3 1
Normalleştirilmiş özvektör (en büyük terim=1)
temel özvektör
x1 1 x 3 = x 2 = − 1 x 3 1
− 1 − 1 0 x1 0 − 1 − 2 − 1 x = 0 2 0 − 1 − 1 x3 0
1 1 1 ~ x 3 = − 1 = − 1 1 1 1
~ x3 =
3.diyagonal sıfırdır. x3 serbest değişkendir. Diyagonale ve karşı tarafa 1 yazılır: 1.x3=1. Yukarı doğru hesap ile tüm bilinmeyenler belirlenir. Normalleştirilmiş özvektör (uzunluğu=1)
1 0.577350 − 1 = − 0.577350 12 + 12 + 12 1 0.577350 1
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
198
25. STANDART ÖZDEĞER PROBLEMİ
199
Özdeğerler matrisi ve temel özvektörler matrisi: Özdeğerler matrisi
Normalleştirilmiş modal matris (her vektörün uzunluğu=1)
m
Normalleştirilmiş modal matris(en büyük eleman=1)
Modal matris (temel özvektörler)
ri. co
1 − 1 1 X = 2 0 − 1 1 1 1
1 Λ = 3 , 4
~
~
tla
0.408248 − 0.707108 0.577350 ~ X = 0.816497 0 − 0.577350 0.408248 − 0.707108 0.577350
1 0. 5 1 ~ X = 1 0 − 1 , 0.5 − 1 1
Kontrol: A X = X Λ ve A X = X Λ ile çözümler kontrol edilebilir.
sn o
Özdeğer problemi çözüm metotları
Özdeğer problemi, sayfa 158 de açıklandığı gibi, 1. determinant hesabı 2. homojen denklem sistemi çözümünden ibarettir. Çözümün yükü ve zorluğu özdeğerlerin belirlenmesindedir. Çözüm için direkt ve iterasyon metotları kullanılmaktadır.
em de r
Direkt metotlar bir takım işlemler sonrası 25.5 bağıntısında verilen özdenklemi kurar ve çözerler. Büyük denklem sistemleri için uygun değildirler. Çünkü n. derece olan özdenklem≡özpolinomun n tane kökünün bulunması büyük nümerik sorunlar yaratır. Çok basit bir örnek ile açıklayalım: Özdeğerler
Özvektörler
w
w
w .e
100 1 x1 100 x1 1 x x 110 110 2 2 120 1 x3 x3 120 A= , X = = λ → Λ = 130 1 x x 130 4 4 x5 x5 140 1 140 150 1 150 x6 x6
Diyagonal katsayılı özdeğer probleminin 6 adet özdeğeri, elemanlarına eşittir. Özvektörleri de birim matristir. Özdenklem
bilindiği
gibi,
diyagonal
100 − λ
det( A − λ I ) =
110 − λ 120 − λ 130 − λ 140 − λ 150 − λ
det( A − λ I ) = (100 − λ )(110 − λ )((120 − λ )(130 − λ )(140 − λ )(150 − λ ) = 0
λ 6 − 750 λ 5 + 233500 λ 4 − 38625000 λ 3 + 3580240000 λ 2 − 176310000000 λ + 3603600000000 = 0 dır. Görüldüğü gibi, bu çok basit ve çok küçük problemde bile polinomun katsayıları çok büyüktür. 6 adet λi özdeğerlerinin bu polinomdan hesaplanması yuvarlama hatalarının çok Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
199
25. STANDART ÖZDEĞER PROBLEMİ
200
büyük olacağı anlamındadır. Çok büyük özdeğer problemlerinde sayı taşması kaçınılmazdır. Bu nedenle, büyük boyutlu özdeğer problemlerinde, iterasyon yöntemleri tercih edilir.
w
w
w .e
em de r
sn o
tla
ri. co
m
Çok sayıdaki iterasyon yöntemlerinden determinant arama, power(MISES), invers power, JACOBI, ARNOLDI, LANCZOS, QR, HOUSEHOLDER, GIVENS gibi metotlarının adı verilebilir. İterasyon yöntemleri el hesapları için fazlasıyla karmaşıktır. Bu nedenle adı, geçen yöntemlerin teorisi yerine sadece bazı yöntemlerin programları verilecektir(Bak: bölüm 27)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
200
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
tla
Ders notları 2014
em de r
sn o
Ahmet TOPÇU
Rijitlik matrisi
Kütle matrisi
Ax=λx
Kφ − ω M φ = 0 2
w
w
w .e
Açısal frekans
Titreşim modu
x
26 GENEL ÖZDEĞER PROBLEMİ Yapı serbest titreşim açısal frekans, periyot, frekans ve modlarının hesabı
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
202
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI Bir yapının serbest titreşim frekans denklemi
Kφ − ω 2 M φ = 0
m
(26.1)
ile verilir. Burada
ri. co
K :yapının rijitlik matrisi (simetrik, bant ve pozitif tanımlı) M :yapının kütle matrisi (simetrik bant, genelde diyagonal) ω yapının açısal titreşim frekansı φ :Yapının ω ya karşılık gelen titreşim formu (modu).
K ve M bilinir ω ve φ hesaplanır. λ = ω 2 alınarak (26.1) ifadesi
Kφ − λ M φ = 0 ( K − λ M )φ = 0
tla
(26.2)
(26.3)
Şeklinde yazılabilir. (26.3) ifadesine genel özdeğer problemi denir. 25.3 bağıntısı ile verilen standart özdeğer probleminden farklıdır (M≠I ). λ1 , λ2 ,...λn özdeğerlerinin ve her özdeğere gelen
φ 1 , φ 2 , ..., φ n
özvektörlerinin
hesaplanabilmesi
sn o
karşılık
için
26.3
genel
özdeğer
probleminin 25.3 tipindeki standart özdeğer problemine dönüştürülmesi gerekir. Çünkü bazı nümerik yöntemler (POWER-MISES, JACOBI, gibi) sadece standart özdeğer problemini çözerler.
em de r
Özdeğer, açısal frekans, periyot ve frekans arasındaki ilişki: Açısal frekans:
λi = ωi2 olduğundan ω i = λi
(26.4)
dir. ωi nin birimi rad/s dir.
Periyot:
w
w
w .e
Fizik, dinamik veya yapı dinamiği derslerinden hatırlanacağı gibi açısal frekans ile periyot arasında
T =
2π
ω
(26.5)
Bağıntısı vardır. Dolayısıyla yapının titreşim periyotları
Ti =
2π
ωi
(26.6)
dir. Ti nin birimi s dir. Bir titreşim sürecinin kaç saniye sürdüğü anlamındadır. Frekans:
Periyodun tersidir.
fi =
1 Ti
(26.7)
f i nin birimi Hz (Hertz) dir. Bir saniyede kaç titreşim yaptığı anlamındadır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
202
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
203
Genel özdeğer probleminin standart özdeğer problemine dönüştürülmesi
1.Yol:
−1
I =M M
(M
−1
K − λM
alınarak
( A − λ I )φ = 0
−1
M )φ = 0
ifadesinde
−1
A=M K
ri. co
det M≠0 ise, 26.3 ifadesi M-1 ile soldan çarpılarak oluşan
m
Özdeğer ve özvektör hesaplayan algoritmalar genelde standart özdeğer problemini çözerler. Bu nedenle genel özdeğer problemi standart özdeğer problemine dönüştürülür. Dönüştürme farklı yollarla yapılabilir.
ve
(26.8)
Hesap sırası:
4. A nın özdeğerleri
sn o
1. K ve M hesaplanır. 2. M-1 hesaplanır. 3. A= M-1K hesaplanır( simetrik değil ve tam dolu!).
λ1 , λ2 ,...λn ve φ 1 , φ 2 ,...φ n
özvektörleri(yapının titreşim modları) bulunur.
ωi = λi den bulunur. 2π den bulunur. Ti = ωi
5. Açısal Frekanslar
fi =
1 Ti
em de r
6. Periyotlar
tla
Standart özdeğer problemi elde edilir. K ve M simetrik ve bant olmasına rağmen A tam doludur ve simetrik değildir! Siemetrik olmayan özdeğer problemi daha çok bellek, işlem gerektirir ve çözümü zorluk yaratır. Bu nedenle 1.yol genelde tercih edilmez.
7. Frekanslar
den bulunur.
2.Yol:
Det M=0 ise 1. yol uygulanamaz. K daima pozitif tanımlı ve det K≠0 dır. 26.3 ifadesi K-1 ile sağdan çarpılarak oluşan -1
λ
−1
−1
( K K − λ K M )φ = 0
ile çarpılarak bulunan
(−
ifadesinde
1
λ
−1
I =K K
I + A)φ = 0
ve
ifadesinde
−1
A= K M
λ′ =
1
λ
alınarak
(I − λ A)φ = 0
olur. Her iki tarafı -
alınır ve düzenlenirse
w
w
w .e
( A − λ ' I )φ = 0
Standart özdeğer problemi elde edilir. K ve M simetrik ve bant olmasına rağmen A tam doludur ve simetrik değildir, 2.yol da genelde tercih edilmez. Hesap sırası:
1. K ve M hesaplanır. 2. K-1 hesaplanır. 3. A= K-1M hesaplanır( simetrik değil ve tam dolu!). 4. A nın özdeğerleri
λ1′, λ2′ ,..., λn′
5. Açısal Frekanslar
ω i = λi =
6. Periyotlar
7. Frekanslar
Ti =
2π
fi =
ωi 1 Ti
ve
φ 1 , φ 2 ,...φ n
1 λ i′
özvektörleri(yapının titreşim modları) bulunur.
den bulunur.
den bulunur.
den bulunur.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
203
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
204
3.Yol: 1. ve 2. yol K ve M nin simetrik ve bant yapısını bozar. Aşağıda verilen, simetriyi bozmayan, yol tercih edilir. M kütle matrisi pozitif tanımlı olmak kaydıyla Cholesky yöntemi1 ile T
şeklinde üçgen çarpanlarına ayrılabilir. ifadesi
KU
−T
U φ − λU U φ = 0 T
T
(U
−1 T
) =U
−T
ile gösterilir ve
=I
T
özelliği kullanılırsa 26.2
olarak yazılabilir.
x =U φ T
alınırsa
U −T U
m
(26.9)
ri. co
M = UU
(26.10)
KU
−1
U U =I
−T
dir.
x − λU x = 0 −1
U KU
−T
olur. Bu ifade
=A
U
−1
ile soldan çarpılarak
alınarak
Veya
( A − λ I )x = 0
sn o
Standart özdeğer problemi elde edilir. Hesap sırası:
−T
−1
x − λU U x = 0
tla
Ax − λ I x = 0
−1
U KU
bulunur.
(26.11)
1. K ve M hesaplanır. 2. M Cholesky ile üçgen çarpanlara ayrılarak U, U-1, U-T hesaplanır.
Not: M nin diyagonal olması durumunda U da diyagonaldir(Cholesky gerekmez!): -1
-T
u ii = mii
. U nun
-1
em de r
hesaplanması gerekmez, U = U dir, U doğrudan
U
−1
=U
−T
1 m 11 =
1
m 22
...
1
m nn
T
ile hesaplanır.
3. A = U-1 K M-T simetrik fakat tam dolu matrisi hesaplanır.
w
w
w .e
Not: M diyagonal yapıya sahipse A= U-1 K U-1 ile hesaplanır, A simetriktir ve K ile aynı bant genişliğine sahiptir. 5. A nın özdeğerleri
λ1 , λ 2 ,..., λ n ve özvektörleri x 1 , x 2 ,..., x n
6. 26.10 ifadesine göre φ
i
=U
−T
xi
bulunur.
dir. Bu bağıntı kullanılarak yapının titreşim modları
φ 1 , φ 2 ,...φ n
hesaplanır.
ω i = λi den bulunur. 2π den bulunur. 8. Periyotlar T = i ωi 1 den bulunur. 9. Frekanslar f = i Ti 7. Açısal frekanslar
-------------------------1
Bak: bölüm 6. Simetriden dolayı M=U UT veya M=UT U şeklinde üçgen çarpanlarına ayrılabilir. Burada M=U UT tercih edilmiştir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
204
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
205
Yapının titreşim modeli
ri. co
m
Teorisi basit olmasına rağmen, özdeğer hesabı çok yoğun ve karmaşık hesap gerektirir. Bu nedenle, bir yapının serbest titreşim periyot ve modlarının belirlenmesi için çoğu kez basit modeller kullanılır. Genellikle kat döşeme ve kirişlerinin sonsuz rijit olduğu, deforme olmadığı, kat kütlelerinin sadece yatay yönde gidip-geldiği fakat dönmediği varsayılır. Bu durumda yatay bir kuvvet(örneğin deprem) sadece yatay yer değiştirme oluşturacak ve kolonlarının kesme rijitliği direnim gösterecektir varsayabiliriz. Bu varsayıma göre yapıyı kütleleri kat seviyesinde toplanmış bir konsol ile modelleyebiliriz.
tla
Aşağıdaki şekilde görülen üç katlı yapının serbest titreşim frekans, periyot ve modları, genelliği bozmadan, örnek olarak hesaplanacaktır. Kat kütleleri kat seviyelerinde toplanmıştır.
sn o
L2
L3
E: Malzeme elastisite modülü Ii : i. Kolonun titreşim yönündeki atalet momenti Li : i. Kolonun boyu 12EIi :Yapının i.kolonunun kesme rijitliği ki = 3
L
i
mi : i. katın toplam kütlesi
Li
k i' : i. katın kolonlarının kesme rijitliklerinin toplamı
em de r
L1
12 EI − 3 i Li
12 EI i L3i
olmak üzere model sistemin K rijitlik ve M kütle matrisi:
k1' + k 2' K = − k 2' 0
− k 2' k 2' + k 3' −k
Simetrik ve bant
m1 M = 0 0
0 m2 0
0 0 m3
diyagonal
26.3 e göre serbest titreşim denklemi ( K − λ M )φ = 0 :
w .e
w
w
' 3
0 − k 3' k 3'
k1' + k 2' ( − k 2' 0
− k 2' k 2' + k 3' −k
' 3
0 m1 ' − k 3 − λ 0 0 k 3'
0 m2 0
0 φ1 0 ) φ 2 = 0 m 3 φ 3
(26.12)
dir. Aşağıdaki sayısal örneklerin çözümünde bölüm 27-34 de verilen özdeğer-özvektör hesaplayan ve bölüm 35 verilen polinom kökleri bulan programlar kullanılacaktır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
205
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
206
Sayısal örnek 1:
Titreşim yönü
m3=20 t
.
k6 m2
m2=25 t k3
k4
k1
.
m1
3
k’1= k1+k2=18632.81+18632.81=37265.62 kN/m k’2= k3+k4=44166.67+44166.67=88333.34 “ k’3= k5+k6=44166.67+44166.67=88333.34 “
k’1=k1+k2
k2
2
k1=k2=12 99375/4 =18632.81 KN/m . 3 k3=k4= k5=k6=12 99375/3 =44166.67 KN/m
k’2=k3+k4
m1=40 t
3
E=31800 10 kN/m (C30/37 betonu için TS 500-2000 den) . . 3 -3 4 Ii =0.3 0.5 /12=3.125 10 m (i=1, 2, … ,6 tüm kolonlarda aynı) 2 E Ii =99375 kN m
k’3=k5+k6
tla
k5
Metre, Ton, Kilo Newton ve Saniye birimleri kullanılacaktır.
m3
ri. co
Titreşim yönü
m
Şekilde verilen çerçeve C30/37 betonu ile inşa edilecektir. Tüm kolonların kesitleri aynıdır. En büyük ve en küçük Serbest titreşim frekanslarını, periyotlarını ve titreşim modlarını bulunuz.
m1=40 t, m2=25 t, m3=20 t 0.3
0.3
− k 2' k 2' + k 3' − k 3'
Model
0 37265.62 + 88333.34 − 88333.34 − k 3' = ' k 3 0
− 88333.34 0 88333.34 + 88333.34 − 88333.34 − 88333.34 88333.34
em de r
k 1' + k 2' K = − k 2' 0
0.5 m
Yapı
sn o
0.5 m
0 125598.96 − 88333.34 K = − 88333.34 176666.68 − 88333.34 0 − 88333.34 88333.34 m1 0 M = 0 m2 0 0
0 40 0 0 0 = 0 25 0 m3 0 0 20
w
w
w .e
Serbest titreşim denklemi
( K − λ M )φ = 0 :
0 125598.96 − 88333.34 40 0 0 (− 88333.34 176666.68 − 88333.34 − λ 0 25 0 )φ = 0 0 0 20 0 − 88333.34 88333.34 14444444244444443 144244 3 K
(26.13)
M
1. yol izlenerek 26.13 den özdeğer, özvektör, açısal frekans, periyot, frekans ve mod hesabı
M
−1
0 0 0 0.025 3139.97 − 2208.33 −1 = 0 0.04 0 → A = M K = − 3533.33 7066.67 − 3533.33 0 0 0.05 0 − 4416.67 4416.67
0 3139.97 − 2208.33 1 φ 1 ( A − λ I )φ = 0 → ( − 3533.33 7066.67 − 3533.33 − λ 1 )φ 2 = 0 0 − 4416.67 4416.67 1 φ 3
Simetrik değil!
26.13 genel özdeğer probleminin standart özdeğer problemine dönüştürülmüş eşdeğeri
(26.14)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
206
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
207
a) ( A − λ I )φ = 0 ın en büyük özdeğeri ve özvektörü:
m
26.14 de A simetrik değildir. JACOBI kullanılamaz. Bölüm 28 de verilen PowerMises programı kullanarak en büyük özdeğer ve buna ait özvektör(titreşim modu) bulunabilir. A matrisi programa verilirse: -0.30 Titreşim modu:
λ
-0.71
En büyük açısal frekans: ω = λ = 10623.6 = 103.1 rad/s
2π = 0.06 s ω 103.1 1 1 En büyük frekans: f = = = 16.7 Hz T 0.06
2π
=
tla
En küçük periyot: T =
1
ri. co
En büyük özdeğer: λ = 10623.6
− 0 . 30 φ = 1 − 0 . 71
Mod
b) ( A − λ I )φ = 0 ın en küçük özdeğeri ve özvektörü:
sn o
En küçük özdeğer ve buna ait özvektör bölüm 29 da verilen PowerTers programı ile bulunabilir. 26.14 bağıntısındaki A programa verilirse: 0.73
em de r
λ
En küçük özdeğer: λ = 377.9
Titreşim modu:
0.73 φ = 0.91 1
0.91
1
En küçük açısal frekans: ω = λ = 377.9 = 19.44 rad/s En büyük periyot: T =
En küçük frekans: f =
2π
ω
=
2π = 0.32 s 19.44
1 1 = = 3.1 Hz T 0.32
En küçük özdeğer En büyük periyot Mod
w
w
w .e
3. yol ile 26.13 den özdeğer, özvektör, açısal frekans, periyot, frekans ve mod hesabı:
M diyagonal olduğundan Cholesky gerekmez, U-1 doğrudan hesaplanır.
U
U
−1
−1
1 40 0 0 0.1581 0 0 = 0 1 25 0 = 0 0 .2 0 0 0 1 20 0 0 0.2236
0 19857.20 − 13965.50 K = − 17666.67 35333.34 − 17666.67 , 0 − 19751.33 19751.33
Serbest titreşim denklemi ( A − λ I ) x = 0 :
A=U
−1
KU
−1
Simetrik ve bant
0 3139.42 − 2793.10 = − 2793.10 7066.67 − 3950.27 0 − 3950.27 4416.40
Dikkat: 26.10 a göre
0 3139.42 − 2793.10 1 0 0 x1 (− 2793.10 7066.67 − 3950.27 - λ 0 1 0) x 2 = 0 0 0 1 x3 0 − 3950.27 4416.40
x=M
1/ 2
φ
dir
26.13 genel özdeğer probleminin standart özdeğer problemine dönüştürülmüş eşdeğeri
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
207
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
208
A nın tüm özdeğerleri ve özvektörleri:
1
x1
2
x2
3
x3
λ λ
ri. co
λ
m
A matrisi simetriktir. Bölüm 30 da verilen Jacobi programı kullanılarak tüm özdeğer ve özvektörler bulunabilir:
En küçük özdeğer En büyük periyot
λ 2 = 10623.22
ω 2 = 10623.22 = 103.07 rad/s
λ3 = 3621.45
ω 3 = 3621.45 = 60.18 rad/s
Modlar: 26.10 dan bulunur.
ω1 = 19.44 rad/s için:
2π = 0.32 s 19.44 2π T2 = = 0.06 s 103.07 2π T3 = = 0.10 s 60.18 T1 =
1 = 3.1 Hz 0.32 1 f2 = = 16.7 Hz 0.06 1 f3 = = 10 Hz 0.10 f1 =
tla
ω1 = 377.82 = 19.44 rad/s
sn o
λ1 = 377 .82
0.73
0 1 0.1581 0.73 0.1581 0 0 0 .2 0 0.9887 = 0.1977 → φ 1 = 0.91 0 0 0.2236 0.9671 0.2162 1
em de r
φ 1 = M −1 x1 =
ω 2 = 103.07 rad/s için:
0 − 0.3732 − 0.0590 0.1581 0 − 0.30 = 0.2000 → φ = 1 0 0.2 0 1 2 0 − 0.71 0 0.2236 − 0.6364 − 0.1423
1
1. Mod
-0.30
w .e
φ 2 = M −1 x 2 =
w
w
0.91
1
-0.71
2. Mod
ω 3 = 60.18 rad/s için: 0 1 0.1581 0 0.1581 − 0.82 0 .2 0 − 0.1726 = − 0.0345 → φ 3 = 0.18 φ 3 = M x3 = 0 0 1 0 0.2236 − 0.8576 − 0.1918 −1
-0.82
1.80
1
3. Mod
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
208
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
209
26.13 genel özdeğer probleminin standart özdeğer problemine dönüştürülmeden çözümü a)El ile özdeğer, frekans ve periyotların hesabı:
0
− 88333.34
0 40 0 0 − 88333.34 − λ 0 25 0 )φ = 0 → − 88333.34 88333.34 0 0 20 176666.68
125598.96 - 40λ − 88333.34 0
− 88333.34
176666.68 - 25λ − 88333.34
0 − 88333.34 φ = 0 88333.34 - 20λ
ri. co
125598.96
(− 88333.34
m
Serbest titreşim denklemi ( K − λ M )φ = 0 :
El hesaplarını basitleştirmek için tüm terimleri 20 değerine bölelim. φ ≠ 0 olduğundan eşitliğin sağlanabilmesi için katsayılar matrisinin determinantı sıfır olmalıdır. − 4416.67 8833.33 - 1.25λ − 4416.67
6279.95 - 2λ φ = 0 → f (λ ) = − 4416.67 4416.67 - λ 0 0 − 4416.67
SARRUS kuralına göre:
− 4416.67 8833.33 - 1.25λ − 4416.67
0 − 4416.67 = 0
4416.67 - λ
tla
6279.95 - 2λ − 4416.67 0
f (λ ) = (6279 .95 − 2λ )(8833 .33 − 1.25 λ )( 4416 .67 − λ ) − 4416 .67 3 − 4416 .67 2 (6279 .95 − 2λ ) = 0
Polinomun katsayılarının çok büyük olduğuna dikkat ediniz.
sn o
f ( λ ) = 2.5λ3 − 36558 .30 λ2 + 1.0965 ⋅ 108 λ − 3.63469 ⋅ 1010 = 0
NEWTON-RAPHSON metodu ile kökler hesaplanırsa(bak: bölüm 36): λ
1
em de r
λ 2 λ 3
En küçük özdeğer En büyük periyot
2π = 0.32 s 19.44 2π λ 2 = 3621.87 ω 2 = 3621 .87 = 60.18 rad/s T2 = = 0.10 s 60.18 λ3 = 10623.59 ω 3 = 10623.59 = 103.07 rad/s T3 = 2π = 0.06 s 103.07
λ1 = 377.85
ω1 = 377.85 = 19.44 rad/s
T1 =
1 = 3.1 Hz 0.32 1 f2 = = 10 Hz 0.10 1 f3 = = 16.7 Hz 0.06 f1 =
w
w
w .e
a)Eigen04 programı(bak: bölüm 34) ile özdeğer, frekans, periyot ve modların hesabı: 26.13 genel özdeğer probleminin K ve M matrisi programa verilierek
λ ve φ hesaplanabilir: i i 0.73
λ
1
λ
φ
2
φ
λ
3
φ
-0.30
0.91
1
1 1
2
-0.82
1.80
-0.71
1
3
2π λ1 = 377.85 ω1 = 377.85 = 19.44 rad/s T1 = = 0.32 s 19.44 2π λ 2 = 3621.87 ω 2 = 3621 .87 = 60.18 rad/s T2 = = 0.10 s 60.18 λ3 = 10623.55 ω 3 = 10623.55 = 103.07 rad/s T3 = 2π = 0.06 s 103.07
1. Mod
2. Mod
3. Mod
1 f1 = = 3.1 Hz 0.32 1 f2 = = 10 Hz 0.10 1 f3 = = 16.7 Hz 0.06
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
209
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
210
Sayısal Örnek 21:
Verilerin hazırlanması:
Ton, metre, kilo Newton ve saniye birimleri kullanılacaktır. .
6
2
.
8
2
ri. co
m
Şekilde görülen kafes kiriş IPB200 profili ile üretilecektir. Profil elemanların kütleri düğümlerde toplanmış varsayılmaktadır. Her noktada ayrıca 40 kg ek kütle vardır. Sistemin tüm serbest titreşim frekans, periyot ve modlarını belirleyiniz.
tla
E=2.1 10 N/mm =2.1 10 kN/m (Yapı çeliği elastisite modülü) . -4 2 IPB 200 için profil tablosundan: A=78.1 10 m (kesit alanı), m=61.3 kg/m (birim boy kütlesi) EA=1640100 kN
sn o
Düğümlerdeki kütleler: Çubuk boyları: L=10 m (yatay elemanlarda), L=7.0711 m (diyagonal elemanlarda) . m1= m2=40+61.3(10+2 (7.0711)/2=780 kg=0.78 t . Düğümdeki kütle= 40 kg sabit kütle + düğüme m3=40+61.3(2 10+2.7.0711)/2=1086 kg=1.086 t birleşen elemanların toplam kütlelerinin yarısı m4=m5=40+61.3(10+7.0711/2=563 kg=0.563 t Sonlu Elemanlar Metodu ile çözüm:
• • •
Sistemin 2x5=10 serbestlik derecesi vardır (her düğümde X ve Y yönünde). Her kafes elemanın global rijitlik matrisi kurulur. Direkt rijitlik metodu ile elemanların rijitlik matrisleri sistem rijitlik matrisi K ya eklenir. K nın boyutu 10x10 dur. 10x10 boyutlu kütle matrisi M kurulur. Kütleler düğüm noktalarına toplanarak modellendiğinden M diyagonaldir. K φ − ω 2 M φ = 0 serbest titreşim genel özdeğer denklemi oluşturulur, 10 denklem vardır.
em de r
• • •
Sistemin sınır şartları K φ − ω 2 M φ = 0 denklemine işlenir. 4 noktası Y yönünde, 5 noktası
hem X hem de Y yönünde serbest değildir. Sistem bu yönlerde(8., 9. ve 10. yönlerde) deplasman ve titreşim yapamaz. 8.,9. ve 10. satır ve sütunlar K φ − ω 2 M φ = 0
•
bağıntısından çıkartılır. 7 serbestlik derecesi kalır. Sınır şartları işlenmiş 7 serbestlik dereceli K φ − ω 2 M φ = 0 genel özdeğer probleminde
λ = ω 2 dönüşümü yapılır, K φ − λ M φ = 0 olur.
K ve M matrisi Eigen04(bak bölüm 34) programına verilerek λi özdeğerleri ve φi özvektörleri(modlar) hesaplanır.
w .e
• •
ω i = λi ,
Ti =
2π
ωi
,
fi =
1 den açısal frekanslar, periyotlar bulunur. Ti
L=
Y
x2
E,
A ,L
w
Lo ka ek l se n
x1
w
Düzlem kafes elemanın global rijitlik matrisi:
ku = s
1
∆X 2 + ∆Y 2 ∆X α11 = Cos α = L ∆Y α12 = Sin α = L 2 α11 α11α12 α α α122 EA 11 12 k= L − α112 − α11α12 − α α − α122 11 12
− α112 − α11α12
α112 α11α12
− α11α12 − α122 α11α12 α122
Bu örneğin anlaşılabilmesi için sonlu elemanlar metodu bilgisi gerekir. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
210
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
∆X
∆Y
5 5 1 1 3 3 2
5 10 5 10 5 10 5
5 0 -5 0 -5 0 -5
1 3 3 2 2 4 4
L 7.07 10 7.07 10 7.07 10 7.07
0.7071 1 0.7071 1 0.7071 1 0.7071
0.7071 0 -0.7071 0 0.7071 0 -0.7071
231980 164010 231980 164010 231980 164010 231980
EA 2 α11 L 115988 164010 115988 164010 115988 164010 115988
EA α11α12 L 115988 0 -115988 0 115988 0 -115988
EA 2 α12 L 115988 0 115988 0 115988 0 115988
m
1 2 3 4 5 6 7
i j
ri. co
Eleman
Gerekli büyüklükler tablosu EA ∆X ∆Y α11 = α12 = L L L
211
a=115988, b=164010 olmak üzere elemanların global rijitlik matrisleri: b 0 2 k = − b 0
0 − b 0 a −a −a a − a a 0 0 0 a − a 3 k = − a a 0 b 0 a − a 0 0 0 a − a − a a
a − a − a a a a − a − a 5 k = − a − a a a a − a − a a
b 0 6 k = − b 0
0 − b 0 a −a −a a − a a 0 0 0 a − a 7 k = − a a 0 b 0 a − a 0 0 0 a −a −a a
0 − b 0 0 0 b 0 0 0 0 0 0
sn o
Sistem rijitlik matrisi:
b 0 4 k = − b 0
tla
a − a − a a a a − a − a 1 k = − a − a a a − a − a a a
w
w
w .e
em de r
−b 0 −a a 0 0 − a − a 2a + b 0 0 a a − a − a − a 2 0 0 0 0 −b 0 2a + b 0 −a −a −a a 0 0 0 0 0 2 a − a − a a − a 0 0 −a a −a − a 2a + 2b 0 −b −b 0 0 K= a − a − a − a 0 2 a 0 0 0 0 0 0 −a a −b 0 a+b −a 0 0 0 a −a 0 0 −a a 0 0 0 −a −a −b 0 0 0 0 0 a+b a −a 0 0 0 0 0 0 a a − a
Sistem kütle matrisi: m1 0 0 0 0 M = 0 0 0 0 0
0 m1 0
0 0 m2
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0
0 0
m2 0
0 m3
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
m3 0
0 m4
0 0
0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
m4 0 0
0 m5 0
0 0 0 0 0 0 m5 0 0 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
211
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
212
K φ − ω 2 M φ = 0 titreşim denklemi: 4
5
6
7
8
9
10
1 2a + b 0 −b 0 −a 0 0 − a − a a m1 0 0 0 m 0 2 0 2a 0 0 −a 0 0 − a − a a 1 0 0 m2 3 −b 0 2a + b 0 −a −a −a 0 0 a 4 0 0 0 2a 0 0 −a −a −a a 0 0 0 0 0 0 5 −a −a − a 2a + 2b 0 −b 0 −b 0 a φ − ω 2 6 a −a −a −a 0 2a 0 0 0 0 0 0 0 0 0 0 7 0 0 −a −b 0 a+b −a 0 0 a 8 0 0 0 0 0 0 a −a −a a 0 0 0 0 0 0 9 −a 0 0 0 0 0 a+b a −a −b 10 − a 0 0 0 0 0 0 a a −a 0 0 0
0
0
0
0
0
0
0 0
0 0
0 0
0 0
0 0
0 0
m2
0
0
0
0
0
0 0
m3 0
0 m3
0 0
0 0
0 0
0 0 0 0 0 0 0 0 0 0 φ = 0 0 0 0 0 0 0 0 m5 0
3
4
5
6
7
8
9
10
1
2
ri. co
2
m
3
1
Sınır şartlarının işlenmesi:
0
0
0
m4
0
0
0 0
0 0
0 0
0 0
m4 0
0 m5
0
0
0
0
0
0
tla
4 nolu düğümdeki m4 kütlesi Y yönünde salınım yapamaz. 8. satır ve 8. kolon silinmelidir! 5 nolu düğümdeki m4 kütlesi hem X hem de Y yönünde salınım yapamaz. 9. ve 10. satırlar ve kolonlar silinmelidir!
sn o
Satırlar silindikten sonra 7 serbestlik derecesi, dolayısıyla 7 denklem, kalır. Genel özdeğer problemi: K
em de r
1 395986 0 2 231976 Simetrik 0 3 − 164010 395986 0 0 0 231976 4 φ 5 − 115988 115988 − 115988 − 115988 559996 0 6 115988 − 115988 − 115988 − 115988 231976 0 0 − 115988 115988 − 164010 7 0 279998 0 0.78 M 0 0 . 78 0 0.78 2 −ω 0.78 φ = 0 0 1.086 1 . 086 0 0 0 . 563
olur.
λ = ω 2 alınarak ( Aφ − λ M )φ = 0 genel özdeğer probleminin yukarıda hesaplanan K ve M
matrisleri Eigen04 programına verilirse özdeğerler ve özvektörler bulunur:
Özdeğerler ve normalleştirilmiş özvektörler (≡ modlar)
w
w
w .e
Özdeğer ve özvektörlerin hesabı:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
212
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
Açısal frekans, periyot, frekans ve modlar:
λ1 = 26854.29
ω1 = 26854.29 = 163.87 rad/s
1
2
T1 =
3
213
2π = 0.038 s 163.87
4
5
f1 =
1 = 26.3 Hz 0.038
Nokta no
φ 1 = [− 0.54 076 − 0.25 0.70 − 0.40 1 − 0.65 0 0 0]
m
T
ri. co
5 noktasının x ve y yönü sıfır deplasmanı eklendi 4 noktasının y yönü sıfır deplasmanı eklendi
1
1. mod
ω 2 = 73250.87 = 270.65 rad/s
1
2
3
4
2π = 0.023 s 270.65
tla
λ 2 = 73250.87
T2 =
5
f2 =
1 = 43.5 Hz 0.023
Nokta no
φ 2 = [0.49 − 0.02 1 0.44 0.74 0.71 0.78 0 0 0]
sn o
T
em de r
2. mod
λ 3 = 202211 .35
ω 3 = 202211 .35 = 449 .70 rad/s
1
2
3
T3 =
4
2π = 0.014 s 449.70 5
f3 =
1 = 71.4 Hz 0.014
Nokta no
φ 3 = [0.08 − 0.73 − 0.22 1 0.25 − 0.21 − 0.60 0 0 0]
3. mod
λ 4 = 368285 .80 ω 4 = 368285 .80 = 606 .87 rad/s T4 = 1
2
3
4
2π = 0.010 s 606.87 5
f4 =
1 = 100 Hz 0.010
Nokta no
φ 4 = [0.86 1 0.23 0.40 − 0.06 − 0.53 − 0.40 0 0 0] T
1
w
w
w .e
1
T
4. mod
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
213
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
λ 5 = 539752 .33 ω 5 = 539752 .33 = 734 .68 rad/s 1
2
T5 =
3
2π = 0.009 s 734.68
4
5
214
f5 =
1 = 111.1 Hz 0.009
Nokta no
φ 5 = [− 0.77 0.64 − 0.62 0.48 0.63 − 0.41 1 0 0 0]
m
T
ri. co
5. mod
1
ω 6 = 750850 .20 = 866 .5 rad/s 2
2π = 0.007 s 866.5
tla
λ 6 = 750850 .20
3
T6 =
4
5
f6 =
1 = 142.9 Hz 0.007
f7 =
1 = 142.9 Hz 0.007
Nokta no
φ 6 = [− 0.67 − 0.10 1 0.53 − 0.74 − 0.42 0.46 0 0 0]
sn o
T
em de r
6. mod
λ 7 = 875544 .82 1
ω 7 = 875544 .82 = 935 .71 rad/s 2
3
T7 = 4
2π = 0.007 s 935.71 5
Nokta no
7. mod
w
w
w .e
φ T7 = [0.67 − 0.20 − 0.62 0.37 − 0.60 0.18 1 0 0 0]
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
214
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
215
Şekilde görülen betonarme kiriş C30/37 betonu ile yapılacaktır. Kirişi dört eşit paçaya bölerek serbest titreşim denklemini kurunuz. İlk üç açısal frekansını, periyodunu ve frekansını bulunuz, bunlara ait titreşim modlarını çiziniz.
ri. co
m
70 cm
Titreşim yönü
Sayısal Örnek 32:
Model:
12 EI / L3 6 EI / L2 k= − 12 EI / L3 2 6 EI / L
6 EI / L2 4 EI / L
− 12 EI / L3 − 6 EI / L2
− 6 EI / L2 2 EI / L
12 EI / L3 − 6 EI / L2
6 EI / L2 2 EI / L − 6 EI / L2 4 EI / L
54 − 13L 13L − 3L2 156 − 22 L − 22 L 4 L2
em de r
22 L 156 22 L 4 L2 mL m= 13L 420 54 2 − 13L − 3L
sn o
tla
Sistem her biri 3 m boyunda 4 adet eleman ile modellenmiş, boyuna uzama olmadığı varsayılmıştır. Eleman lokal rijitlik ve yayılı kütle matrisi aşağıda verilmiştir(sonlu elemanlar metodu). Global ve lokal eksenler çakıştığından transformasyon matrisi birim matristir, transformasyona gerek yoktur.
Verilerin hazırlanması:
Ton, metre, kilo Newton ve saniye birimleri kullanılacaktır. Betonarme betonunun birim kütlesi: 2.5 ton/m3 (TS 498-1997 den) . C30/37 için elastisite modülü: E=31800 N/mm2=31.8 106 kN/m2 (TS 500-2000 den)
w .e
w
w
.
.
Kesit atalet momenti: I=0.30 0.70/12=8575 10-6 m4 . . . EI=31.8 106 8575 10-6=272685 kNm2 Eleman boyu: L=3 m . . Elemanın birim boy kütlesi: m=0.30 0.70 2.5=0.525 t/m
Sistemin serbest titreşim denklemi
Kφ − ω 2 M φ = 0 Burada K sistemin rijitlik matrisi, M kütle matrisi ve alınarak
ω
açısal titreşim frekansıdır. λ = ω 2
( K − λ M )φ = 0
2
Bu örneğin anlaşılabilmesi için sonlu elemanlar metodu bilgisi gerekir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
215
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
216
Özdeğer problemi elde edilir. K ve M direkt rijitlik metodu ile kurulur. Her noktada iki serbestlik derecesi (bir düşey deplasman ve bir dönme) olduğundan bu matrisler 2.5=10 satır ve kolonludur.
m
Eleman rijitlik ve kütle matrisleri:
Elemanların k ve m matrisleri aynıdır. Çünkü tüm elemanların kesitleri ve boyları aynıdır.
Eleman rijitlik matrisi
0.2475 0.2025 − 0.14625 0.585 0.2475 0 . 135 0 .14625 − 0.10125 m= 0.2025 0.14625 0.585 − 0.2475 − 0 . 14625 − 0 . 10125 − 0 . 2475 0.135
ri. co
181790.00 − 121193.33 181790.00 121193.33 181790.00 363580.00 − 181790.00 181790.00 k= − 121193.33 − 181790.00 121193.33 − 181790.00 181790.00 − 181790.00 363580.00 181790.00
Sistem rijitlik matrisi(direkt rijitlik metodu):
tla
Eleman yayılı kütle matrisi
sn o
İşlemleri basitleştirmek için a=121193, b=181790, c=363580 alalım(son iki ondalık hane ihmal edildi) :
em de r
b −a b a b c − b b k= − a − b a − b b −b c b
−a −b 2a
Simetrik
w
w
w .e
a b c K =
0 0 0 −a b 0 0 0 0 2c − b b 0 0 0 0 2a 0 − a b 0 0 2c − b b 0 0 2a 0 − a b 2c − b b a − b c b b
0 0
0 0
0 0
0 0
0 0
Sistem rijitlik matrisi
Sistem kütle matrisi(direkt rijitlik metodu):
Sistem kütle matrisi
0 0 0 0 0 0 0.585 0.2475 0.2025 − 0.14625 0 . 135 0 . 14625 0 . 10125 0 0 0 0 0 0 − 1.170 0 0.2025 − 0.14625 0 0 0 0 0 . 270 0 . 14625 0 . 10125 0 0 0 0 − 1.170 0 0.2025 − 0.14625 0 0 M = 0 . 270 0 . 14625 0 . 10125 0 0 − 1.170 0 0.2025 − 0.14625 Simetrik 0.270 0.14625 − 0.10125 0.585 − 0.2475 0.135
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
216
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
217
( K − λ M )φ = 0 titreşim denklemi:
m )
ri. co
(
b −a b 0 0 0 0 0 0 0 0 0 0 0 0 a 0.585 0.2475 0.2025 − 0.14625 c − b b 0 0 0 0 0 0 0 . 135 0 . 14625 − 0 . 10125 0 0 0 0 0 0 2a 0 − a b 0 0 0 0 1.170 0 0.2025 − 0.14625 0 0 0 0 2 c − b b 0 0 0 0 0 . 270 0 . 14625 − 0 . 10125 0 0 0 0 2a 0 − a b 0 0 1.170 0 0.2025 − 0.14625 0 0 −λ φ 2 c − b b 0 0 0 . 270 0 . 14625 − 0 . 10125 0 0 Simetrik 2a 0 − a b 1.170 0 0.2025 − 0.14625 2c − b b Simetrik 0.270 0.14625 − 0.10125 a −b 0.585 − 0.2475 c 0.135
Sınır şartları:
tla
1 noktasında düşey deplasman ve dönme sıfır, 5 noktasında düşey deplasman sıfırdır. Deplasmanların ve dönmelerin sıfır olduğu yönlerde titreşim olamaz. ( K − λ M )φ = 0
denklemi
sn o
denkleminden bu serbestlik derecelerine ait satır ve kolonların (1., 2., 9. satırlar ve kolonlar) silinmesi gerekir. a, b ve c değerleri yerine konarak ( K − λ M )φ = 0 titreşim
em de r
1.170 0 0.2025 − 0.14625 0 0 0 − 121193 181790 0 0 0 0 242386 0.270 0.14625 − 0.10125 0 0 0 − 727160 181790 181790 0 0 0 1.170 0 0.2025 − 0.14625 0 242386 0 − 121193 181790 0 − λ )φ = 0 0 . 270 0 . 14625 − 0 . 10125 0 ( 727160 − 181790 181790 0 Simetrik Simetrik 1 . 170 0 − 0 . 14625 242386 0 181790 0.270 − 0.10125 727160 181790 0.135 363580
K
M
Görüldüğü gibi, K ve M simetrik ve bant yapıya sahiptir, bant genişliği 4 dür. Sonlu elemanlar teorisine göre her iki matris pozitif tanımlıdır. En küçük 3 özdeğerin ve bunlara ait özvektörlerin hesabı için uygun program DSearch tür (bak: Bölüm 35).
DSearch sonuçları
w
w
w .e
K ve M matrislerine ait bilgiler DSearch adlı bir programa verilerek en küçük ilk 3 özdeğer ve buna karşılık gelen açısal frekans, periyot, frekans ve modlar hesaplanmıştır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
217
=0
26. GENEL ÖZDEĞER PROBLEMİ, PERİYOT VE MOD HESABI
218
Program sonuçları, mod vektörlerine 1 ve 5 noktasının sıfır deplasmanları da eklenerek, aşağıda yorumlanmıştır.
m
1.Mod:
φ 1T = [0 0 0.45 0.23 1 0.09 0.85 − 0.19 0 − 0.33]
tla
2.Mod:
ri. co
λ1 = 5961.88, ω1 = 77.21 rad / s, T1 = 0.08 s, f 1 = 12.29 Hz
λ 2 = 63314.75, ω 2 = 251.62 rad / s, T2 = 0.02 s, f 2 = 40.05 Hz
em de r
sn o
φ T2 = [0 0 − 0.97 − 0.26 − 0.41 0.57 1 0.12 0 − 0.60]
3.Mod:
λ 3 = 284619.81, ω 3 = 533.50 rad / s, T3 = 0.01 s, f 3 = 84.91 Hz
w
w
w .e
φ T3 = [0 0 1 − 0.21 − 0.89 − 0.31 0.54 0.67 0 − 0.80]
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
218
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
w
w
w .e
A x=λx A x=λB x
PROGRAMLAR: • • • • • •
27 Özdeğer ve özvektör hesabı
Standart özdeğer problemi Genel özdeğer problemi En büyük özdeğer ve vektörü En küçük özdeğer ve vektörü Birkaç özdeğer ve özvektörleri Tüm özdeğerler ve özvektörleri
220
27. PROGRAMLAR: Özdeğer ve özvektör hesabı
27. PROGRAMLAR: Özdeğer ve özvektör hesabı Bu bölümde özdeğer ve özvektör hesabı ile ilgili 8 adet test edilmiş program verilmiştir. Programların adları ve işlevleri aşağıda açıklanmıştır. Program kodları 28.-35. bölümlerdedir.
m
1. PowerMises: Ax = λ x standart özdeğer probleminin mutlak değerce en büyük özdeğerini ve buna
ri. co
ait normalleştirilmiş özvektörü Power1 iterasyon yöntemi ile hesaplar. A simetrik olmayabilir.
2. PowerTers: Ax = λ x standart özdeğer probleminin mutlak değerce en küçük özdeğerini ve buna ait normalleştirilmiş özvektörü Power ters iterasyon (diğer adı: Mises invers) yöntemi ile hesaplar. A simetrik olmayabilir. 3. Jacobi:
tla
Ax = λ x standart özdeğer probleminin tüm özdeğerini ve bunlara ait normalleştirilmiş özvektörlerini Jacobi rotasyon yöntemi ile hesaplar. A simetrik olmak zorundadır.
sn o
4. Eigen01: Ax = λ x standart özdeğer probleminin tüm özdeğerlerini ve bunlara ait normalleştirilmiş özvektörlerini hesaplar, A simetrik olmalıdır. Eigen01 EISPACK2 alt programlarını kullanır. 5. Eigen02: Ax = λ x standart özdeğer probleminin bazı özdeğerlerini ve bunlara ait normalleştirilmiş
em de r
özvektörlerini hesaplar. En küçük m tane veya en büyük m tane veya ortadaki m tane veya tüm özdeğerler hesaplanabilir. A simetrik olmalıdır. Eigen02 EISPACK alt programlarını kullanır.
6. Eigen03:
A x = λ B x genel özdeğer probleminin en küçük m tane veya en büyük m tane veya
ortadaki m tane veya tüm özdeğerlerini hesaplar. A simetrik, B simetrik ve pozitif tanımlı olmalıdır. Eigen03 EISPACK alt programlarını kullanır.
7. Eigen04:
A x = λ B x genel özdeğer probleminin en küçük m tane veya en büyük m tane veya
w .e
ortadaki m tane veya tüm özdeğerlerini hesaplar. A simetrik bant, B diyagonal matris, det B≠0 olmalıdır.
8. DSearch: A x = λ B x Genel özdeğer probleminin en küçük m tane veya tüm özdeğerlerini hesaplar.
w
w
A ve B simetrik pozitif tanımlı bant matrislerdir. det A≠0 ve det B≠0 olmalıdır.
1
Mises veya vektör iterasyon yöntemi olarak da adlandırılır. Avusturyalı Richard Edler von Mises tarafından 1929 yılında geliştirilmiştir. Özdeğer ve özvektör hesaplayan ilk algoritmadır, günümüz modern algoritmalarında alt algoritma olarak kullanılmaktadır. Mises, 1933-1939 yılları arasında İstanbul Üniversitesinde çalıştı, matematik kürsüsünü kurdu. 2
EISPACK: Özdeğer problemi ile ilgili onlarca program 1960 lı yıllarda ALGOL programlama dilinde kodlanmış ve “Numerische Mathematik” dergisinde yayınlanmıştı. J. H. Wilkinson ve C. Reinisch bu programları derleyerek 1971 yılında “Handbook series, Springer Verlag” da yayınladılar. Bu programlar 1972-1973 yıllarında J.J. Dongarra ve B. Smith ekibi tarafından FORTRAN diline çevrilerek EISPACK adı verildi, ücretsiz olarak dünya üniversiteleri hesap merkezlerine dağıtıldı, test edildi. Günümüzde yaygın olarak kullanılan MATLAB özdeğer algoritmaları EISPACK algoritmalarının modernize edilmiş şeklidir. Orijinal FORTRAN EISPACK programları http://www.netlib.org/eispack/ adresinden indirilebilir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
220
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
A x=λx
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
28 PROGRAMLAR: •
Standart Özdeğer ve özvektör hesabı
En büyük özdeğer ve vektörü - PowerMises
222
28. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - PowerMises
28. PROGRAMLAR: Standart özdeğer ve özvektör hesabı1 - PowerMises PowerMises alt programı
m
Ax = λ x
ri. co
Standart özdeğer probleminin mutlak değerce en büyük özdeğerini ve buna ait normalleştirilmiş özvektörü Power (diğer adı: Mises2 veya vektör) iterasyon yöntemi ile hesaplar. Anxn simetrik olmayabilir. Mutlak değerce en büyük özdeğere dominant özdeğer de denir. PowerMises alt programı A(n,n) matrisinin çağıran programda depolanmış ve x(n) vektörünün tanımlanmış olduğunu varsayar.
3
, en büyük özdeğer ve buna ait özvektör ? 5 PowerMises alt programının sonucu
0 2 1 3
sn o
1 1 5 5
em de r
2 6 10 2 0 4 A = 7 − 4 10 − 3 1 − 5 4 3 1
tla
Örnek:
Mutlak değerce en büyük özdeğer: λ = 14.623116.
λ
ya ait özvektör:
1 0.3633 x = 0.7357 − 05179 0.4439
w .e
A matrisi tekrarlanan özdeğerlere, ( λi = λ j ) sahipse veya bazı özdeğerler birbirine çok yakın ise ( λ i ≈ λ j ) yakınsamayabilir. Bu gibi durumlarda özdeğer bulunsa bile özvektör hatalı olabilir. Tüm özdeğerlerin sanal olması durumunda ise Power metodu kesin yakınsamaz. Buna karşın, A simetrik ve pozitif tanımlı ise daima yakınsar.
w
Örnek:
w
2 1 A= − 15 10
A Matrisinin her iki özdeğeri de sanaldır:
λ1 = 5.5 + 3.1225i
ve
λ1 = 5.5 − 3.1225i .
PowerMises yakınsamaz.
PowerMises alt programının sonucu
Bazı mühendislik problemlerinde mutlak değerce en büyük özdeğer yerine mutlak değerce en küçük özdeğerin ve buna ait normalleştirilmiş özvektörün hesaplanması gerekir (Örnek: bir yapının birinci periyodunun ve modunun hesabı). Bu durumda PowerMises programı yerine bölüm 29 da verilen PowerTers alt programı kullanılabilir. 1
Teori ve örnekler için bak: bölüm 25 Mises iterasyon yöntemi özdeğer hesaplayan ilk nümerik algoritmadır. 1929 yılında Avusturyalı Richard Edler von Mises tarafından geliştirildi 2
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
222
223
28. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - PowerMises
PowerMises ana programı A nın satırları
ri. co
DATA 5: ' A nın boyutu ' A matrisi: DATA 10, 2, 6, 1, 0 DATA 2, 0, 4, 1, 2 DATA 7, -4, 10, 5, 1 DATA -3, 1, -5, 5, 3 DATA 4, 3, 1, 3, 5
m
' -----------------Ana program PowerMises---------------------' Mutlak değerce en büyük özdeğer ve buna ait özvektörün hesabı ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi, ESKiŞEHiR, 1994 '--------------------------------------------------------------
DATA 2 DATA 2,4 DATA 4,8
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB PowerMises (n, a(), aLamdaMax, x(), iTerate, iHata) CLS
tla
A nın boyutu okunuyor
A matrisi ve x özvektörü için bellekte yer ayır A okunuyor
sn o
READ n DIM a(n, n), x(n) 'A yı oku: FOR i = 1 TO n FOR j = 1 TO n READ a(i, j) NEXT j NEXT i
CALL PowerMises(n, a(), aLamdaMax, x(), iTerate, iHata)
PowerMises alt programı çağrılıyor
PRINT "iterasyon sayısı:"; iTerate IF iHata <> 0 THEN PRINT "Max iterasyon sayısı aşıldı(PowerMises) ": END
em de r
PRINT "Özdeğer ve özvektörü(PowerMises):" PRINT "Mutlak değerce en büyük Özdeğer="; aLamdaMax PRINT "Özvektör:" FOR i = 1 TO n PRINT x(i); NEXT i PRINT
Sonuçlar yazdırılıyor
END ' PowerMises ana
w
w
w .e
SUB PowerMises (n, a(), aLamdaMax, x(), iTerate, iHata) ' Mutlak değerce En büyük özdeğer ve özvektör hesabı (PowerMises) '---------------------------------------------------------------' Dr. ahmet TOPÇU, Osmangazi Üniversitesi, ESKiŞEHiR, 1994 ' A(n,n) matrisinin mutlak değerce en büyük özdeğeri ve bu ' özdeğere ait x(n) normalleştirilmiş özvektörü hesaplanır. ' A simetrik olabilir veya simetrik olmayabilir. ' aLamdaMax : A matrisinin mutlak değerce en büyük özdeğeri ' x(n) : Lamda ya ait normalleştirilmiş özvektör ' A matrisi çağıran programda depolanmış ve x vektörü ' boyutlandırılmış olmalıdır. ' Maxit : maksimum iterasyon sayısı, aşılırsa iHata=1 döner ' Eps : hesap hassasiyeti '---------------------------------------------------------------DIM y(n) Maxit = 200: ' Maximum iterasyon sayısı Eps = 1E-14: ' Hassasiyet iHata = 0
FOR i = 1 TO n x(i) = 1 NEXT i aLamdaMax = 0: iTerate = 0: iState = 1 WHILE iTerate <= Maxit AND iState = 1 AnewLamda = 0 FOR i = 1 TO n y(i) = 0 FOR j = 1 TO n y(i) = y(i) + a(i, j) * x(j) NEXT j IF ABS(y(i)) > ABS(AnewLamda) THEN AnewLamda = y(i) NEXT i Epsreached = ABS(aLamdaMax - AnewLamda) aLamdaMax = AnewLamda
PowerMises alt programı
aNorm = 0 FOR i = 1 TO n T = y(i) / AnewLamda aNorm = aNorm + (x(i) - T) ^ 2 x(i) = T NEXT i ' istenilen hassasiyete ulaşıldı mı? aNorm = SQR(aNorm) IF Epsreached < aNorm THEN Epsreached = aNorm iState = 0 IF Epsreached > Eps THEN iState = 1 iTerate = iTerate + 1 WEND
' Maxit aşıldı mı? IF iTerate > Maxit THEN iHata = 1 END SUB 'PowerMises
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
223
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
A x=λx
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
29 PROGRAMLAR: •
Standart özdeğer ve özvektör hesabı
En küçük özdeğer ve vektörü - PowerTers
225
29. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - PowerTers
29. PROGRAMLAR: Standart özdeğer ve özvektör hesabı1 - PowerTers
m
Bazı mühendislik problemlerinde mutlak değerce en küçük özdeğerin ve buna ait normalleştirilmiş özvektörün hesaplanması gerekir (Örnek: bir yapının birinci periyodunun ve titreşim modunun hesabı). PowerTers alt programı
ri. co
Ax = λ x
standart özdeğer probleminin mutlak değerce en küçük özdeğerini ve buna ait normalleştirilmiş özvektörünü Power ters (diğer adı: Mises invers) iterasyon yöntemi ile hesaplar. Anxn simetrik olmayabilir.
A simetrik değilse Tüm özdeğerler sanal ise Tekrarlanan özdeğerler varsa: λi = λ j
•
Özdeğerler birbirine çok yakın ise: λi ≈ λ j
sn o
• • •
tla
A simetrik ve pozitif tanımlı ise Power ters iterasyon yöntemi daima yakınsar. Ancak, aşağıdaki durumlarda nümerik zorluk yaratabilir ve yakınsamayabilir:
PowerTers alt programı A(n,n) matrisini çağıran programda depolanmış ve x(n) vektörünün tanımlanmış olduğunu varsayar.
em de r
Örnek:
6 10 2 2 0 4 A = 7 − 4 10 − 3 1 − 5 4 3 1
1 0 1 2 5 1 , en küçük özdeğer ve buna ait özvektör ? 5 3 3 5
w
w
w .e
PowerTers alt programının sonucu
− 0.8859 1 Mutlak değerce en küçük özdeğer: λ = 1.169935. λ ya ait özvektör: x = 0.8661 0.6254 − 0.5742
1
Teori ve örnekler için bak: bölüm 25 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
225
226
29. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - PowerTers
' -----------------Ana program PowerTers----------------------' Mutlak değerce en küçük özdeğer ve buna ait özvektörün hesabı ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi Eskişehir, 1997 ' Çağrılan alt programlar: PowerTers '-------------------------------------------------------------DATA 5 A nın boyutu verisi DATA 10, 2, 6, 1, 0 DATA 2, 0, 4, 1, 2 DATA 7, -4, 10, 5, 1 DATA -3, 1, -5, 5, 3 A nın satırları verisi DATA 4, 3, 1, 3, 5
ri. co
m
PowerTers ana programı
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB PowerTers (n, a(), aLamdaMin, x(), iHata) DECLARE SUB GaussLU (n, a(), iSatir(), iHata) DECLARE SUB AsagiYukariHesap (n, a(), iSatir(), x(), y()) CLS
A nın boyutu okunuyor
tla
READ n
A matrisi ve x özvektörü için bellekte yer ayır
FOR i = 1 TO n FOR j = 1 TO n READ a(i, j) NEXT j NEXT i
A okunuyor
sn o
DIM a(n, n), x(n)
CALL PowerTers(n, a(), aLamdaMin, x(), iHata)
PowerTers alt programı çağrılıyor
IF iHata = -1 THEN PRINT "A matrisi tekil!": END IF iHata = -2 THEN PRINT "Maksimum iterasyon sayısı aşıldı, yakınsamadı!"
em de r
PRINT "En küçük özdeğer ve özvektörü(PowerTers):" PRINT "aLamdaMin="; aLamdaMin FOR i = 1 TO n PRINT x(i); NEXT i PRINT PRINT "İterasyon sayısı="; iHata
Sonuçlar yazdırılıyor
w
w
w .e
END 'PowerTers ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
226
227
29. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - PowerTers
Maxit = 200: ' maksimum iterasyon sayısı Eps = 1E-14: ' istenilen hassasiyet iHata = 0
em de r
' LUy=b den y i hesapla CALL AsagiYukariHesap(n, a(), iSatir(), b(), y()) iMax = 1 FOR i = 2 TO n IF ABS(y(i)) > ABS(y(iMax)) THEN iMax = i NEXT i yMax = 1 / y(iMax)
' özvektörü normalleştir, erişilen hassasiyeti belirle EpsHesap = 0 FOR i = 1 TO n y(i) = y(i) * yMax T = x(i) - y(i) IF ABS(T) > EpsHesap THEN EpsHesap = ABS(T) x(i) = y(i) NEXT i ' özdeğer iTerate = iTerate + 1 LOOP UNTIL EpsHesap < Eps OR iTerate > Maxit iHata = iTerate aLamdaMin = yMax IF iTerate > Maxit THEN iHata = -2
w
w
w .e
END SUB ' PowerTers
SUB AsagiYukariHesap (n, a(), iSatir(), b(), y()) '-------------------------------------------------' GaussLU ile A=LU çarpanlarına ayrılmış varsayılır ' LUy=b denlem sistemi çözülür
' Yukarıdan aşağı hesap '-------------------------------------------------FOR i = 1 TO n - 1 isi = iSatir(i) FOR j = i + 1 TO n isj = iSatir(j) b(isj) = b(isj) - a(isj, i) * b(isi) NEXT j NEXT i ' Aşağıdan yukarı hesap isi = iSatir(n) y(n) = b(isi) / a(isi, n) FOR i = 1 TO n - 1 j=n-i isj = iSatir(j) y(j) = b(isj) FOR k = j + 1 TO n y(j) = y(j) - a(isj, k) * y(k) NEXT k y(j) = y(j) / a(isj, j) NEXT i END SUB ' AsagiYukariHesap
m GaussLU alt programı
sn o
iTerate = 1 ' iterasyona başla DO FOR i = 1 TO n b(i) = x(i) NEXT i
tla
' Start vektör FOR i = 1 TO n x(i) = 1 NEXT i ' A=LU çarpanlarına ayır CALL GaussLU(n, a(), iSatir(), iHata) IF iHata = -1 THEN EXIT SUB
PowerTers alt programı
ri. co
SUB PowerTers (n, a(), aLamdaMin, x(), iHata) '-------------------------------------------------------' Mutlak değerce en küçük özdeğer ve özvektörünün hesabı ' Dr. Ahmet TOPÇU, Osmangazi Üniversitesi Eskişehir, 1997 ' n: Matrisin boyutu ' A(n,n): en küçük özdeğeri hesaplanacak matris ' aLamdamin: hesaplanan özdeğer ' x(n): özvektör ' iHata=-2: Yakınsamadı ' iHata=-1: matris tekil ' iHata=0: Yakınsadı ' Çağıran programda A depolanmış ve x boyutlandırılmış olmalıdır ' Çağrılan alt programlar: GaussLU, AsagiYukariHesap '-------------------------------------------------------DIM iSatir(n), b(n), y(n): ' çalışma vektörleri
AsagiYukari alt programı
SUB GaussLU (n, a(), iSatir(), iHata) '------------------------------------' A matrisi üçgen çarpanlarına ayrılır: A=LU ' iSatir: satır değiştirme vektörü ' iHata=-1 ile dönerse A tekildir '------------------------------------' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 2 * Eps zero = Eps
FOR i = 1 TO n iSatir(i) = i NEXT i FOR i = 1 TO n - 1 ' Pivot satırını belirle iV = i FOR j = i + 1 TO n isi = iSatir(iV) isj = iSatir(j) IF (ABS(a(isj, i)) > ABS(a(isi, i))) THEN iV = j NEXT j ' Matris tekil mi? IF (ABS(a(iSatir(iV), i)) <= zero) THEN iHata = -1: ' Matris tekil EXIT SUB END IF ' satır değişimi vektörü IF (iSatir(i) <> iSatir(iV)) THEN isi = iSatir(i) iSatir(i) = iSatir(iV) iSatir(iV) = isi END IF ' indirge isi = iSatir(i) FOR j = i + 1 TO n isj = iSatir(j) a(isj, i) = a(isj, i) / a(isi, i) FOR k = i + 1 TO n a(isj, k) = a(isj, k) - a(isj, i) * a(isi, k) NEXT k NEXT j 4 NEXT i IF ABS(a(iSatir(n), n)) <= zero THEN iHata = -1 END SUB ' GaussLU
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
227
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
w
w
A x=λx
30 PROGRAMLAR: •
Özdeğer ve özvektör hesabı
Tüm özdeğerler ve özvektörler - Jacobi
229
30. PROGRAMLAR: Tüm özdeğer ve özvektörlerin hesabı - Jacobi
30. PROGRAMLAR: Tüm özdeğer ve özvektörlerin hesabı1 - Jacobi Jacobi alt programı
Ax = λ x
m
standart özdeğer probleminin tüm özdeğerini ve bunlara ait normalleştirilmiş özvektörlerini Jacobi rotasyon yöntemi ile hesaplar. Anxn simetrik olmak zorundadır.
a 22
simetrik
a32
a33
a n2
a n3
...
2.satır 3.satır n.satır 1.satır → [a11 a 21 a 22 a 31 a 31 a 33 ... a n1 a n 2 a n3 ... a nn ] a nn
tla
a11 a 21 A = a31 . a n1
ri. co
A nın alt üçgen kısmının satırları tek boyutlu A((n+1).n/2) alanında, çağıran programda aşağıdaki gibi depolanmış olmalıdır:
sn o
Özvektörler için x(n.n) tek boyutlu alanı çağıran programda boyutlandırılmış olmalıdır. Hesap sonrası özdeğerler A alanı, özvektörler x alanında depolanır. A(1) 1.özdeğer, a(n+1).2. özdeğer, a(2n+1).3. özdeğer, … v.s. dir. x alanının ilk n elemanı 1. özvektör, sonraki n elemanı 2. özvektör, … v.s dir. Maxrot izin verilen maksimum rotasyon sayısı, Eps özdeğerler için ulaşılmak istenen hassasiyettir. ivect parametresi=0 verilirse sadece özdeğerler, ivect≠0 verilirse özdeğer ve özvektörler hesaplanır.
em de r
Jacobi her özvektörü uzunluğu 1 olacak şekilde normalleştirir. Özvektörün en büyük elemanı 1 olacak şekilde normalleştirilmesi istenirse JNormalize alt programının Jacobi alt programının hemen arkasından çağrılması gerekir. Örnek:
simetrik
8 3
Bellekte depolanışı → [9 2 10 7 4 7 3 1 5 8 4 2 1 3 6] 6
Jacobi alt programının sonucu
w
w
w .e
9 2 10 A = 7 4 7 3 1 5 4 2 1
Özdeğerler
21.5209 8 . 7049 , Λ= − 1.0020 5 . 4483 5.3278 1
En büyük elemanı 1 olacak şekilde normalleştirilmiş özvektörler
− 0.2641 − 0.7231 − 0.8608 0.4246 1 0.6682 − 0.2903 0.2620 − 0.0276 1 X = 0.9620 − 0.0271 − 0.4752 − 0.5314 1 − − − 0.5947 0 . 7492 04152 0 . 4665 1 1 0.7149 0.5506 − 0.1216 0.5530
Teori ve örnekler için bak: bölüm 25 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
229
230
ri. co
' --------------------Ana program Jacobi--------------------------' Ahmet TOPÇU, Eskişehir Osmangazi Üniversitesi, 1995 Ana program ' A(n,n) simetrik matrisinin tüm özdeğer ve özvektörlerinin hesabı ' A nın alt üçgen kısmı okunur ve tek boyutlu alanda depolanır ' Çağrılan alt program: Jacobi A nın boyutu '-----------------------------------------------------------------DATA 5 ' A matrisi: DATA 9 A nın alt üçgeninin satırları DATA 2, 10 DATA 7, 4, 7 DATA 3, 1, 5, 8 DATA 4, 2, 1, 3, 6 i, j, k, l, m, n ile başlayan değişkenler tam sayı değişkeni olacak (2 byte)
m
30. PROGRAMLAR: Tüm özdeğer ve özvektörlerin hesabı - Jacobi
DEFINT I-N Bu harf aralığındaki harf ile başlayan değişkenler çift hassasiyetli ondalık sayı değişkeni olacak (8 byte) DEFDBL A-H, O-Z DECLARE SUB Jacobi (a(), n, Eps, mAxrot, iVect, x()) Çağrılacak alt programlar ana DECLARE SUB JNormalize (n, x(), normal)
programa tanıtılıyor
DIM a((n + 1) * n \ 2), x(n * n) CLS ' A: yı oku: ii = 0 FOR i = 1 TO n i2 = 0 FOR j = 1 TO i READ a(ii + j): i2 = i2 + 1 NEXT j ii = ii + i2 NEXT i
tla
A nın boyutu okunuyor
A matrisi ve x özvektörleri için bellekte yer ayrılıyor
sn o
READ n
A nın kolonları okunuyor
İzin verilen maksimum rotasyon sayısı
Özdeğerler için istenen hassasiyet
em de r
mAxrot = 200 Eps = 1E-12 Özvektörler de hesaplanacak iVect = 1 CALL Jacobi(a(), n, Eps, mAxrot, iVect, x()) IF iVect <> 0 THEN CALL JNormalize(n, x(), 1)
Normalleştirmek için Jnormalize alt programı çağrılıyor. (Özvektörün en büyük elemanı 1 olacak)
Sonuçlar yazdırılıyor
w .e
PRINT "Özdeğerler ve özvektörler(Jacobi):" FOR i = 1 TO n PRINT "Lamda"; i; "="; a((i + 1) * i \ 2) IF iVect <> 0 THEN ja = (i - 1) * n + 1 je = i * n FOR j = ja TO je PRINT x(j); NEXT j PRINT PRINT END IF NEXT i PRINT PRINT "Rotasyon sayısı"; mAxrot;
Jacobi alt programı çağrılıyor
w
w
END 'Jacobi ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
230
231
30. PROGRAMLAR: Tüm özdeğer ve özvektörlerin hesabı - Jacobi
m
Jacobi alt programı
w
w
w .e
em de r
sn o
tla
ri. co
SUB Jacobi (a(), n, Eps, mAxrot, iVect, x()) '---------------------------------------------------------------------------' Özdeğer ve özvektör hesabı (Jacobi) ' A(n,n) simetrik matrisinin tüm özdeğer ve özvektörleri hesaplanır. ' A nın sadece alt üçgenindeki satırları verilmelidir. ' A alt üçgeni tek boyutlu ve (n+1)*n /2 uzunluğundaki A((n+1)*n /2) ' alanında çağıran program tarafından depolanmış olmalıdır. ' Hesaplanan özdeğerler A alanı üzerinde aşağıdaki şekilde depolanır: ' A(1) 1. özdeğer ' A(n+1) 2. özdeğer ' A(2*n+1) 3. özdeğer ' ... ' iVect<>0 verilirse tüm özvektörler hesaplanır. Özvektörler uzunluğu 1 ' olacak şekilde normalleştirilmiştir. ' Hesaplanan Özvektörler x(n*n) tek boyutlu matrisinde depolanır. ' x in ilk n elemanı 1.özvektör, sonraki n eleman 2.özvektör, v.s. ' iVect=0 verilirse sadece özdeğerler hesaplanır, özvektörler hesaplanmaz. ' Bu durumda x vektörü uyumluluk için tek elemanlı, x(1) olarak tanımlanabilir. ' Maxrot : maksimum rotasyon sayısıdır. ' Eps : öngörülen hassasiyettir. ' Bu programın FORTRAN kodu "DANKERT, J. Numerische Methoden ' der Mechanik, Springer, 1977" den alınmıştır. '---------------------------------------------------------------------------' JACOBI Rotations Nrot = 0 indi = 0 '----------------------------A okunuyor IF iVect <> 0 THEN ja = 1 je = n idia = 1 FOR i = 1 TO n FOR j = ja TO je x(j) = 0 NEXT j ja = ja + n je = je + n x(idia) = 1 idia = ja + i NEXT i END IF '-----------------------71 s = 0 ja = 2 je = 0 FOR i = 2 TO n je = je + i FOR j = ja TO je s = s + a(j) ^ 2 NEXT j ja = ja + i NEXT i s = SQR(2 * s) IF indi = 1 THEN EXIT SUB 80 s = s / n 90 ja = 2 je = 0 ind = 0 FOR i = 2 TO n je = je + i jj = 1 FOR j = ja TO je apq = a(j) IF ABS(apq) < s GOTO 10 Nrot = Nrot + 1 ind = 1 ipp = (jj + 1) * jj / 2 app = a(ipp): aqq = a(je + 1) tht = (aqq - app) * .5 / apq IF tht = 0 THEN T=1 ELSE T = 1 / (SQR(1 + tht * tht) * SGN(tht) + tht): ' Sign END IF co = 1 / SQR(T * T + 1) si = co * T ii = ipp - jj + 1 ke = j - 1 IF ke >= ja THEN FOR k = ja TO ke aip = a(ii) aiq = a(k) a(ii) = aip * co - aiq * si Sonraki sayfada devam a(k) = aip * si + aiq * co ediyor ii = ii + 1 NEXT k END IF
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
231
232
w
w
ri. co tla
w .e
em de r
sn o
ke = j + 1 Jacobi devamı IF je >= ke THEN ii = ipp iErh = jj FOR k = ke TO je ii = ii + iErh aip = a(ii) aiq = a(k) a(ii) = aip * co - aiq * si a(k) = aip * si + aiq * co iErh = iErh + 1 NEXT k END IF IF i <= n THEN kk = je + 1 ii = j iErh = i ke = i + 1 FOR k = ke TO n kk = kk + iErh ii = ii + iErh aip = a(ii) aiq = a(kk) a(ii) = aip * co - aiq * si a(kk) = aip * si + aiq * co iErh = iErh + 1 NEXT k END IF '--------------------------------' Eigenvectors IF iVect <> 0 THEN ii = (i - 1) * n + 1 ka = (jj - 1) * n ke = ka + n ka = ka + 1 FOR k = ka TO ke aip = x(k) aiq = x(ii) x(k) = aip * co - aiq * si x(ii) = aip * si + aiq * co ii = ii + 1 NEXT k END IF '--------------------------------T = a(j) * si * co * 2 co = co * co si = si * si aip = a(ipp) aiq = a(je + 1) a(ipp) = aip * co + aiq * si - T a(je + 1) = aip * si + aiq * co + T a(j) = 0 10 jj = jj + 1 NEXT j ja = ja + i NEXT i IF ind = 1 GOTO 90 IF s * n < Eps THEN mAxrot = Nrot: indi = 1: GOTO 71 IF Nrot < mAxrot GOTO 80 mAxrot = -Nrot indi = 1 GOTO 71
m
30. PROGRAMLAR: Tüm özdeğer ve özvektörlerin hesabı - Jacobi
END SUB ' Jacobi
SUB JNormalize (n, x(), normal) ' X(n*n) alanında depolanmış özvektörler normalleştirilir. ' Normal<>0: özvektürün en büyük eleman 1 olacak şekilde normalleştir. ' Normal=0: hiç bir şey yapma, çık IF normal = 0 THEN EXIT SUB FOR i = 1 TO n ja = (i - 1) * n + 1 je = i * n Dmaxx = 0 FOR j = ja TO je IF ABS(x(j)) > ABS(Dmaxx) THEN Dmaxx = x(j) NEXT j Dmaxx = 1 / Dmaxx FOR j = ja TO je x(j) = x(j) * Dmaxx NEXT j NEXT i
JNormalize Alt programı
END SUB ' jNormalize
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
232
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
tla
Ders notları 2014
w
w .e
em de r
sn o
Ahmet TOPÇU
A x=λx
w
31 PROGRAMLAR: •
Standart özdeğer ve özvektör hesabı
Tüm özdeğerler ve özvektörler - Eigen01
234
31. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - Eigen01
31. PROGRAMLAR: Standart özdeğer ve özvektör hesabı1 - Eigen01 Ax = λ x
m
standart özdeğer probleminin tüm özdeğerlerini ve bunlara ait normalleştirilmiş özvektörlerini hesaplar, Anxn simetrik olmak zorundadır. A nın sadece alt üçgen kısmı programa verilir.
ri. co
Eigen01 in çağırdığı alt programlar(Sign, Normalize hariç) Eispack yazılımından alınmıştır. Çağrılan alt programlar: Tred2, Tql2, Pythag, Sign, Normalize
Örnek:
sn o
tla
700 10 600 sim − 20 20 300 , tüm özdeğer ve özvektörler? − 70 60 80 300 − 40 50 40 − 60 600 − 80 80 50 − 20 20 700 20 − 90 800 − 40 50 − 60 20 Eigen01 programının sonucu
w
w
w .e
em de r
800 30 − 20 40 Ax = λ x → A = − 80 − 50 − 50 30
175.3221 346 . 4545 526.2148 595.8819 Λ= 665.4290 747 . 0953 838.3913 905.2110
1
Özdeğerler
Teori ve örnekler için bak: bölüm 25 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
234
235
31. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - Eigen01
1 − 0.4474 1 − 0.6752 − 0.4827 0.4480 0.2721 0.3001 − 0.2401 0.2363 0.0681 0.0428 0.2039 − 0.0766 − 0.1439 0.5117 − 0.2142 − 0.1151 − 0.0440 0.1608 − 0.1458 − 0.1636 1 0.3557 0.1114 0.2642 − 0.2602 − 0.8693 − 0.3223 0.3978 0.7035 − 0.0489 − 0.8971 − 0.5108 − 0.1890 0.1825 0.0668 1 0.7730 0.0923
0.0742
1 0.9354
En büyük elemanı 1 olacak şekilde normalleştirilmiş özvektörler
m
0.0988
− 0.3967 − 0.0782 1 − 0.1596
ri. co
0.0204 0.2110 0.1290 0.2613 − 0.1447 − 0.3436 − 0.8595 1 X = 1 0.7445 0.1120 0.2732 0.1558 0.0773 − 0.0912 0.1694
sn o
tla
' ----------------------Ana Program Eigen01-----------------' A(n,n) simetrik matrisinin tüm özdeğer ve özvektörlerini hesaplar ' Ahmet TOPÇU, Eskişehir Osmangazi Üniversitesi, 1998 ' A nın sadece alt üçgen kısmı okunur. ' Çağrılan alt programlar: Tred2, Tql2, Sign, Normalize Eigen01 ana programı '-------------------------------------------------------------------' A nın boyutu n A nın boyutu verisi DATA 8 ' A nın alt üçgen kısmı DATA 800 DATA 30,700 A nın alt üçgeninin satırları verisi DATA -20,10,600 DATA 40,-20,20,300 DATA -80,-70,60,80,300 DATA -50,-40,50,40,-60,600 DATA -50,-80,80,50,-20,20,700 i, j, k, l, m, n ile başlayan değişkenler tam sayı değişkeni olacak (2 byte) DATA 30,-40,50,-60,20,20,-90,800
em de r
DEFINT I-N Bu harf aralığındaki harf ile başlayan değişkenler çift hassasiyetli ondalık sayı değişkeni olacak (8 byte) DEFDBL A-H, O-Z ' Bazı sayı veya değişkenler aşağıdaki işaretleri içerebilir, anlamları: ' % integer (2 byte) ' & long integer (4 byte) ' ! single (4 byte) ' # double (8 byte) ' $ string (1-255 byte arasında) DECLARE DECLARE DECLARE DECLARE DECLARE
SUB Tql2 (n, D(), E(), z(), iErr) SUB Tred2 (n, dh(), eh(), z()) FUNCTION Pythag (a, b) FUNCTION Sign (a, b) SUB Normalize (n, m, z(), normal)
READ n
A nın boyutu okunuyor
DIM a(n, n), D(n), E(n)
A ve yardımcı vektörler için bellekte yer ayrılıyor
CLS : ' Ekranı temizle ' A nın alt üçgen kısmını oku, simetriye tamamla FOR i = 1 TO n FOR j = 1 TO i A nın alt üçgeninin satırları okunuyor, simetriye tamamlanıyor READ a(i, j) a(j, i) = a(i, j) NEXT j NEXT i
w .e
w
w
Çağrılacak alt programlar ana programa tanıtılıyor
' A matrisini üçlü diyagonal matrise dönüştür CALL Tred2(n, D(), E(), a())
A üçlü diyagonal matrise dönüştürülüyor
' Özdeğer ve özvektörleri hesapla Özdeğerler ve özvektörler hesaplanıyor CALL Tql2(n, D(), E(), a(), iErr) IF (iErr <> 0) THEN PRINT "HATA(Tql2)="; iErr: END ' Özvektörleri normalleştir CALL Normalize(n, n, a(), 1) PRINT "Özdeğer ve özvektörler(Eigen01-Tql2):" FOR i = 1 TO n PRINT "Lamda"; i; "="; D(i) FOR j = 1 TO n PRINT a(j, i); NEXT j PRINT PRINT NEXT i
Normalleştirmek için Jnormalize alt programı çağrılıyor. Özvektörün en büyük elemanı 1 olacak
Sonuçlar yazdırılıyor
END ' Eigen01 ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
235
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
tla
Ders notları 2014
A x=λx
w
w
w .e
em de r
sn o
Ahmet TOPÇU
32 PROGRAMLAR: •
Standart özdeğer ve özvektör hesabı
Birkaç özdeğer ve özvektör - Eigen02
237
32. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - Eigen02
32. PROGRAMLAR: Standart Özdeğer ve özvektör hesabı1 - Eigen02 Ax = λ x
m
Standart özdeğer probleminin bazı özdeğerlerini ve bunlara ait normalleştirilmiş özvektörlerini hesaplar. En küçük m tane veya en büyük m tane veya ortadaki m tane veya tüm özdeğerler hesaplanabilir. A simetrik olmak zorundadır, sadece alt üçgen kısmı programa verilir.
ri. co
Eigen02 in çağırdığı alt programlar(Sign, Normalize hariç) Eispack yazılımından alınmıştır. Çağrılan alt programlar: Tred1, Tinvit, Tridib, Trbak1, Pytahag, EpsMach, Sign, Normalize. Örnek:
tla
700 sim 10 600 − 20 20 300 , tüm özdeğer ve özvektörler? − 70 60 80 300 − 40 50 40 − 60 600 − 80 80 50 − 20 20 700 − 40 50 − 60 20 20 − 90 800
sn o
800 30 − 20 40 Ax = λ x → A = − 80 − 50 − 50 30
Tüm özdeğer ve özvektörleri hesaplamak için ilk üç DATA satırında: A nın boyutu
Hesaplanması istenen ilk özdeğerin numarası
Hesaplanması istenen özdeğer ve özvektör sayısı
em de r
DATA 8 DATA 1 DATA 8
w
w
w .e
verilir:
Eigen02 programının sonucu: Tüm özdeğerler ve özvektörler
175.3221 346 . 4545 526.2148 595 . 8819 Λ= 665.4290 747.0953 838.3913 905.2110 1
Özdeğerler
Teori ve örnekler için bak: bölüm 25 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
237
238
32. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - Eigen02
1 − 0.4474 1 − 0.6752 − 0.4827 0.4480 0.2721 0.3001 − 0.2401 0.2363 0.0681 0.0428 0.2039 − 0.0766 − 0.1439 0.5117 − 0.2142 − 0.1151 − 0.0440 0.1608 − 0.1458 − 0.1636 1 0.3557 0.1114 0.2642 − 0.2602 − 0.8693 − 0.3223 0.3978 0.7035 − 0.0489 − 0.8971 − 0.5108 − 0.1890 0.1825 0.0668 1 0.7730 0.0923
0.0742
1 0.9354
En büyük elemanı 1 olacak şekilde normalleştirilmiş özvektörler
m
0.0988
− 0.3967 − 0.0782 1 − 0.1596
ri. co
0.0204 0.2110 0.1290 0.2613 − 0.1447 − 0.3436 − 0.8595 1 X = 1 0.7445 0.1120 0.2732 0.1558 0.0773 − 0.0912 0.1694
İlk üç özdeğeri ve vektörünü hesaplamak için ilk üç DATA satırında: DATA 8 DATA 1 DATA 3
A nın boyutu
Hesaplanması istenen ilk özdeğerin numarası Hesaplanması istenen özdeğer ve özvektör sayısı
sn o
tla
verilir:
Eigen02 programının sonucu: ilk üç özdeğer ve özvektör
5. ve 6. özdeğeri ve vektörlerini hesaplamak için ilk üç DATA satırında: A nın boyutu
em de r
DATA 8 DATA 5 DATA 2
Hesaplanması istenen ilk özdeğerin numarası
Hesaplanması istenen özdeğer ve özvektör sayısı
w .e
verilir:
Eigen02 programının sonucu: 5. ve 6. özdeğer ve özvektörler
Son üç özdeğeri ve vektörlerini hesaplamak için ilk üç DATA satırında:
DATA 8 DATA 6 DATA 2
Hesaplanması istenen ilk özdeğerin numarası Hesaplanması istenen özdeğer ve özvektör sayısı
Eigen02 programının sonucu: son üç özdeğer ve özvektör
w
w
verilir:
A nın boyutu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
238
239
32. PROGRAMLAR: Standart özdeğer ve özvektör hesabı - Eigen02
ri. co
m
'----------------Ana program Eigen02-------------------------------------' Ahmet TOPÇU, Eskişehir Osmangazi Üniversitesi, 1998 ' A(n,n) simetrik matrisinin bazı özdeğerlerini ve özvektörlerini hesaplar Eigen02 ana ' En küçük veya en büyük veya ortataki m tane özdeğer ile programı ' bunların özvektörleri hesaplanabilir. A nın sadece alt üçgen kısmı verilmelidir. ' Çağrılan alt programlar: ' Tred1, Tinvit, Tridib, Trbak1, Pythag, EpsMach, Sign, Normalize '------------------------------------------------------------------------A nın boyutu DATA 8: ' A nın boyutu=n Hesaplanması istenen ilk özdeğerin numarası DATA 1: ' hesaplanacak ilk özdeğerin numarası=m1 DATA 8: ' hesaplanması istenen özdeğer sayısı=m Hesaplanması istenen özdeğer ve özvektör sayısı ' A nın alt üçgen kısmı DATA 800 DATA 30,700 DATA -20,10,600 A nın alt üçgeninin satırları DATA 40,-20,20,300 DATA -80,-70,60,80,300 DATA -50,-40,50,40,-60,600 DATA -50,-80,80,50,-20,20,700 i, j, k, l, m, n ile başlayan değişkenler tam sayı değişkeni olacak (2 byte) DATA 30,-40,50,-60,20,20,-90,800
DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE
sn o
tla
DEFINT I-N Bu harf aralığındaki harf ile başlayan değişkenler çift hassasiyetli ondalık sayı değişkeni olacak (8 byte) DEFDBL A-H, O-Z ' Bazı sayı veya değişkenler aşağıdaki işaretleri içerebilir, anlamları: ' % integer (2 byte) ' & long integer (4 byte) ' ! single (4 byte) ' # double (8 byte) ' $ string (1-255 byte arasında) SUB Tred1 (n, a(), d(), e(), e2()) SUB Tinvit (n, d(), e(), e2(), m, W(), iND(), z(), iErr) SUB Tridib (n, EPS1, d(), e(), e2(), BL, BU, m11, m, W(), iND(), iErr) SUB Trbak1 (n, a(), e(), m, z()) FUNCTION Sign (a, b) FUNCTION EpsMach# () FUNCTION Pythag (a, b) SUB Normalize (n, m, z(), normal)
em de r
A nın boyutu okunuyor CLS ' ekranı sil READ n ' Matrisin boyutu READ m1 ' Hesaplanacak ilk özdeğerin numarası READ m ' Hesaplanacak özdeğer sayısı
Çağrılacak alt programlar ana programa tanıtılıyor
Hesaplanması istenen ilk özdeğer no okunuyor Hesaplanması istenen ilk özdeğer sayısı okunuyor
DIM a(n, n), d(n), e(n), e2(n), W(m), iND(m), z(n, m)
Matrisler için yer ayrılıyor
' A nın alt üçgen kısmını oku, simetriye tamamla FOR i = 1 TO n FOR j = 1 TO i A nın alt üçgeninin satırları okunuyor, simetriye tamamlanıyor READ a(i, j) a(j, i) = a(i, j): NEXT j NEXT i
A üçlü diyagonal matrise dönüştürülüyor
w
w
w .e
' A yı üçlü diyagonal matrise dönüştür CALL Tred1(n, a(), d(), e(), e2())
' m1, m1+1,m1+2, .., m1+m-1 özdeğerlerini(m tane) hesapla EPS1 = 1E-14 CALL Tridib(n, EPS1, d(), e(), e2(), BL, BU, m1, m, W(), iND(), iErr) IF iErr <> 0 THEN PRINT "HATA="; iErr: END ' m tane Özvektörü hesapla CALL Tinvit(n, d(), e(), e2(), m, W(), iND(), z(), iErr) IF iErr <> 0 THEN PRINT "HATA="; iErr: END ' Özvektörleri geri dönüştür CALL Trbak1(n, a(), e(), m, z()) ' Özvektörleri normalleştir CALL Normalize(n, m, z(), 1)
m tane özdeğer hesaplanıyor
m tane özvektör hesaplanıyor
Özvektör ler geri dönüştürülüyor Özvektörler normalleştiriliyor
PRINT "Özdeğerler-özvektörler(Tridib-Tinvit):" FOR i = 1 TO m PRINT "Lamda"; i + m1 - 1; "="; W(i) FOR j = 1 TO n PRINT z(j, i); NEXT j PRINT : PRINT NEXT i
Sonuçlar yazdırılıyor
END ' Eigen02 ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
239
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
sn o A x=λB x
w
w
w .e
em de r
Ahmet TOPÇU
tla
Ders notları 2014
33 PROGRAMLAR: •
Genel özdeğer ve özvektör hesabı
Birkaç özdeğer ve özvektör - Eigen03
241
33. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen03
33. PROGRAMLAR: Genel özdeğer ve özvektör hesabı1 - Eigen03 Ax = λ B x
m
genel özdeğer probleminin en küçük m tane veya en büyük m tane veya ortadaki m tane veya tüm özdeğerlerini hesaplar. A simetrik, B simetrik, pozitif tanımlı ve det A≠0, detB≠0 olmalıdır. A ve B nin sadece üst üçgen kısmı programa verilir.
ri. co
Eigen03 ün çağırdığı alt programlar(Sign, Normalize hariç) Eispack yazılımından alınmıştır. Çağrılan alt programlar: Reduc, Tred1, Tridib,Tinvit, Trbak1, Rebak, Pytahag, EpsMach, Sign, Normalize.
Örnek:
sn o
tla
0 0 0 0 0 0 200 25 800 30 − 20 40 − 80 − 50 − 50 30 700 10 − 20 − 70 − 40 − 80 − 40 400 50 0 0 0 0 0 600 20 60 50 80 50 400 50 0 0 0 0 300 80 40 50 − 60 400 50 0 0 0 , B= Ax = λ B x → A = Sim Sim 300 − 60 − 20 20 400 50 0 0 600 20 20 400 50 0 700 − 90 400 25 800 200
em de r
Tüm özdeğerler ve özvektörler?
Tüm özdeğer ve özvektörleri hesaplamak için ilk üç DATA satırında: DATA 8 DATA 1 DATA 8
A nın boyutu
Hesaplanması istenen ilk özdeğerin numarası
Hesaplanması istenen özdeğer ve özvektör sayısı
Eigen03 programının sonucu: Tüm özdeğerler ve özvektörler
w
w
w .e
verilir:
1
Teori ve örnekler için bak: bölüm 26 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
241
242
33. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen03
İlk üç özdeğeri ve vektörünü hesaplamak için ilk üç DATA satırında: DATA 8 DATA 1 DATA 3
A nın boyutu
Eigen03 programının sonucu: ilk üç özdeğer ve özvektör
Hesaplanması istenen ilk özdeğerin numarası Hesaplanması istenen özdeğer ve özvektör sayısı
ri. co
m
verilir:
DATA 8 DATA 5 DATA 2
A nın boyutu
Hesaplanması istenen ilk özdeğerin numarası
sn o
Hesaplanması istenen özdeğer ve özvektör sayısı
tla
5. ve 6. özdeğeri ve vektörlerini hesaplamak için ilk üç DATA satırında:
em de r
verilir:
Eigen03 programının sonucu: 5. ve 6. özdeğer ve özvektörler
Son iki özdeğeri ve vektörlerini hesaplamak için ilk üç DATA satırında: DATA 8 DATA 6 DATA 2
A nın boyutu
Hesaplanması istenen ilk özdeğerin numarası
Hesaplanması istenen özdeğer ve özvektör sayısı
w
w
w .e
verilir:
Eigen03 programının sonucu: son iki özdeğer ve özvektör
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
242
243
33. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen03 ----------------------Ana Program Eigen03-------------------------Ahmet TOPÇU, Eskişehir Osmangazi Üniversitesi, 1998 A*X=(Lamda)*B*X genel özdeğer problemini çözer A(n,n): simetrik B(n,n): simetrik pozifif tanımlı en küçük, en büyük veya orta özdeğerler ve özvektörler hesaplanır n: matrislerin büyüklüğü m1: hesaplanmak istenen ilk özdeğerin numarası m: hesaplanması istenen özdeğer ve özvektör sayısı
Eigen 03 ana programı
m
' ' ' ' ' ' ' ' '
em de r
sn o
tla
ri. co
' Çağrılan programlar: ' Reduc,Tred1,Tridib,Tinvit,Trbak1,Rebak,Epsmach,Pythag,Sign,Normalize A ve B nin boyutu '-------------------------------------------------------------------DATA 8: ' A ve B nin boyutu Hesaplanması istenen ilk özdeğerin numarası DATA 1: ' Hesaplanacak ilk özdeğerin numarası DATA 8: ' Hesaplanacak özdeğer ve özvektör sayısı Hesaplanması istenen özdeğer ve özvektör sayısı ' A nın üst üçgeni DATA 800,30,-20,40,-80,-50,-50,30 DATA 700,10,-20,-70,-40,-80,-40 DATA 600,20,60,50,80,50 A nın üst üçgeninin satırları DATA 300,80,40,50,-60 DATA 300,-60,-20,20 DATA 600,20,20 DATA 700,-90 DATA 800 ' B nin üst üçgen kısmı DATA 200,25,0,0,0,0,0,0 DATA 400,50,0,0,0,0,0 B nin üst üçgeninin satırları DATA 400,50,0,0,0,0 DATA 400,50,0,0,0 DATA 400,50,0,0 i, j, k, l, m, n ile başlayan değişkenler tam sayı değişkeni olacak (2 byte) DATA 400,50,0 DATA 400,25 DATA 200 Bu harf aralığındaki harf ile başlayan değişkenler çift hassasiyetli ondalık sayı değişkeni olacak (8 byte) DEFINT I-N DEFDBL A-H, O-Z ' Bazı sayı veya değişkenler aşağıdaki işaretleri içerebilir, anlamları: ' % integer (2 byte) ' & long integer (4 byte) ' ! single (4 byte) ' # double (8 byte) ' $ string (1-255 byte arası) DECLARE SUB Reduc (n, a(), b(), dL(), iErr) DECLARE SUB Tred1 (n, a(), d(), e(), e2()) DECLARE FUNCTION Sign (a, b) DECLARE SUB Tridib (n, EPS1, d(), e(), e2(), BL, BU, m11, m, W(), iND(), iErr) DECLARE SUB Tinvit (n, d(), e(), e2(), m, W(), iND(), z(), iErr) Çağrılacak alt programlar ana DECLARE SUB Trbak1 (n, a(), e(), m, z()) programa tanıtılıyor DECLARE SUB rebak (n, b(), dL(), m, z()) DECLARE FUNCTION EpsMach# () DECLARE FUNCTION Pythag (a, b) DECLARE SUB normalize (n, m, z(), normal)
w
w
w .e
A ve B nin boyutu okunuyor READ n READ m1 Hesaplanması istenen ilk özdeğer no okunuyor READ m Hesaplanması istenen özdeğer sayısı okunuyor DIM a(n, n), b(n, n), dL(n) DIM d(n), e(n), e2(n), W(n), iND(n), z(n, m)
CLS : ' ekranı temizle ' A(N,N) matrisinin üst üçgen kısmını oku FOR i = 1 TO n FOR j = i TO n A nın üstt üçgeninin satırları okunuyor READ a(i, j) NEXT j NEXT i ' B(n,n) nin üst üçgen kısmını oku FOR i = 1 TO n FOR j = i TO n B nin üst üçgeninin satırları okunuyor READ b(i, j) NEXT j NEXT i
Matrisler için yer ayrılıyor
Özvektörler geri dönüştürülüyor
CALL Trbak1(n, a(), e(), m, z()) CALL rebak(n, b(), dL(), m, z()) ' Özvektörleri normalleştir CALL normalize(n, m, z(), 1)
' A*x=Lamda*B*x genel özdeğer problemini A*x=Lamda*X standart ' problemine dönüştür Standart özdeğer problemine dönüştürülüyor CALL Reduc(n, a(), b(), dL(), iErr) IF iErr <> 0 THEN PRINT "HATA(Eigen03-Reduce)="; iErr: END ' Dönüştürülmüş A matrisini üçlü diyagonal matrisine dönüştür CALL Tred1(n, a(), d(), e(), e2()) Üçlü diyagonal matrise dönüştürülüyor ' m1., m2+1., m2+2, ..., m1+m-1. özdeğeri(m tane) hesapla EPS1 = 1E-14 'Hassasiyet CALL Tridib(n, EPS1, d(), e(), e2(), BL, BU, m1, m, W(), iND(), iErr) IF iErr <> 0 THEN PRINT "HATA(Eigen03-Tridib)="; iErr: END ' m tane özvektörü hesapla CALL Tinvit(n, d(), e(), e2(), m, W(), iND(), z(), iErr) IF iErr <> 0 THEN PRINT "HATA(Eigen03-Tinvit)="; iErr: END
PRINT "Özdeğer ve özvektörler(Eigen03)": PRINT FOR i = 1 TO m PRINT "Lamda"; i + m1 - 1; "="; W(i) FOR j = 1 TO n PRINT z(j, i); Sonuçlar yazdırılıyor NEXT j PRINT PRINT NEXT i END ' Eigen03 ana sonu
m tane özdeğer hesaplanıyor
m tane özvektör hesaplanıyor
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
243
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
sn o A x=λB x
w
w
w .e
em de r
Ahmet TOPÇU
tla
Ders notları 2014
34 PROGRAMLAR: •
Genel özdeğer ve özvektör hesabı
Birkaç özdeğer ve özvektör - Eigen04
245
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı1 - Eigen04 Ax = λ B x
m
Genel özdeğer probleminin en küçük m tane veya en büyük m tane veya ortadaki m tane veya tüm özdeğerlerini hesaplar. A simetrik bant matris, B diyagonal matris, det B≠0 olmalıdır. A nın alt yarı bantı ve B nin sadece diyagonalı programa verilir.
ri. co
Eigen04 ün çağırdığı alt programlar(Sign, Min, Normalize hariç) Eispack yazılımından alınmıştır.
Çağrılan alt programlar: Reduce, Bandr, Tridib, Bandv, EpsMach, Pytahag, Sign, Min, Normalize. Örnek:
sn o
tla
800 20 30 700 40 − 20 10 600 sim 40 40 − 20 20 300 40 , B= Ax = λ B x → A = − 70 60 80 300 40 50 40 − 60 600 40 50 − 20 − 20 700 40 20 20 − 90 800 20 Yarı bant=4
em de r
Tüm özdeğerler ve özvektörler?
A ve B nin depolanma şekli:
0 0 800 0 0 0 30 700 0 − 20 10 600 40 − 20 20 300 A→ , − 70 60 80 300 40 − 60 600 50 50 − 20 − 20 700 20 − 90 800 20
B → [20 40 40 40 40 40 40 20]
Yarı bant=4
w
w
w .e
bant genişliğininin aynı olması için eklenen sıfırlar
1
Teori ve örnekler için bak: bölüm 26 Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
245
246
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
Tüm özdeğer ve özvektörleri hesaplamak için ilk dört DATA satırında: 8 4 1 8
A nın boyutu A nın yarı bant genişliği Hesaplanması istenen ilk özdeğerin numarası
Eigen04 programının sonucu: Tüm özdeğerler ve özvektörler
m
DATA DATA DATA DATA
Hesaplanması istenen özdeğer ve özvektör sayısı
em de r
sn o
tla
ri. co
verilir:
İlk üç özdeğeri ve vektörünü hesaplamak için ilk dört DATA satırında: DATA DATA DATA DATA
8 4 1 3
A nın boyutu
A nın yarı bant genişliği
Hesaplanması istenen ilk özdeğerin numarası
Hesaplanması istenen özdeğer ve özvektör sayısı
Eigen04 programının sonucu: ilk üç özdeğer ve özvektör
w
w
w .e
verilir:
5. ve 6. özdeğeri ve vektörlerini hesaplamak için ilk dört DATA satırında: DATA DATA DATA DATA
8 4 5 2
A nın boyutu A nın yarı bant genişliği Hesaplanması istenen ilk özdeğerin numarası Hesaplanması istenen özdeğer ve özvektör sayısı
Eigen04 programının sonucu: 5. ve 6. özdeğer ve özvektörler
verilir:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
246
247
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
Son iki özdeğeri ve vektörlerini hesaplamak için ilk dört DATA satırında: 8 4 6 2
A nın boyutu A nın yarı bant genişliği
Eigen04 programının sonucu: son iki özdeğer ve özvektör
Hesaplanması istenen ilk özdeğerin numarası Hesaplanması istenen özdeğer ve özvektör sayısı
m
DATA DATA DATA DATA
tla
----------------------Ana Program Eigen04-----------------------Ahmet TOPÇU, Eskişehir Osmangazi Üniversitesi, 1998 (A-Lamda*B)x=0 genel özdeğer problemi çözülür En küçük veya en büyük veya tüm özdeğerler ve bunlara ait özvektörler hesaplanır A(n,n): simetrik bant matris. Sadece alt bant kısmı verilir B(n): Tekil olmayan diyagonal matrisin diyagonali n: A ve B nin boyutu mb: A nın yarı bant genişliği m1: Hesaplanaması istenen ilk özdeğerin numarası m: Hesaplanması istenen özdeğer sayısı
Eigen 04 ana programı
sn o
' ' ' ' ' ' ' ' ' ' '
ri. co
verilir:
' Çağrılan alt programlar: ' Reduce,Bandr,Tridib,Bandv,EpsMach,Pythag,Sign,Min,Normalize '------------------------------------------------------------------
em de r
A ve B nin boyutu DATA 8: ' A nın boyutu DATA 4: ' yarı bant genişliği DATA 1: ' hesaplanaması istenen ilk özdeğerin numarası DATA 8: ' hesaplanması istenen özdeğer ve özvektör sayısı ' A nın alt bant kısmı DATA 0, 0, 0, 800 DATA 0, 0, 30, 700 A nın alt bandı içindeki elemanları DATA 0, -20, 10, 600 DATA 40, -20, 20, 300 DATA -70, 60, 80, 300 DATA 50, 40, -60, 600 DATA 50, -20, 20, 700 DATA 20, 20, -90, 800 ' B nin diyagonal elemanları B nin diyagonal elemanları DATA 20,40,40,40,40,40,40,20
Hesaplanması istenen ilk özdeğerin numarası Hesaplanması istenen özdeğer ve özvektör sayısı
i, j, k, l, m, n ile başlayan değişkenler tam sayı değişkeni olacak (2 byte)
w
w
w .e
DEFINT I-N Bu harf aralığındaki harf ile başlayan değişkenler çift hassasiyetli ondalık sayı değişkeni olacak (8 byte) DEFDBL A-H, O-Z ' Bazı sayı veya değişkenler aşağıdaki işaretleri içerebilir, anlamları: ' % integer (2 byte) ' & long integer (4 byte) ' ! single (4 byte) ' # double (8 byte) ' $ string (1-255 bytes arasında) DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE
SUB reduce (n, mb, a(), b(), iErr) SUB Bandr (n, mb, a(), d(), e(), e2()) SUB Tridib (n, EPS1, d(), e(), e2(), BL, BU, m11, m, W(), iND(), iErr) SUB bandv (n, mb, a(), m, W(), z(), iErr) FUNCTION EpsMach# () FUNCTION Pythag (a, b) FUNCTION Sign (a, b) FUNCTION Min (ia, ib) SUB normalize (n, m, z(), normal)
READ n READ mb READ m1 READ m
Çağrılacak alt programlar ana programa tanıtılıyor
A ve B nin boyutu okunuyor
A nın yarı bant genişlşiği okunuyor Hesaplanması istenen ilk özdeğer no okunuyor Hesaplanması istenen özdeğer sayısı okunuyor
DIM a(n, mb), b(n) DIM d(n), e(n), e2(n), iND(n) DIM W(n), z(n, m)
Matrisler için yer ayrılıyor
Devamı sonraki sayfada
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
247
248
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
CLS : ' Ekrası sil ' A nın alt bant kısmını oku FOR i = 1 TO n FOR j = 1 TO mb A nın alt bant satırları okunuyor READ a(i, j) NEXT j NEXT i ' B nin diyagonal elemanlarını oku FOR i = 1 TO n B nin diyagonal elemanları okunuyor READ b(i) NEXT i
ri. co
m
Eigen 04 ana programı (devam)
' Standart özdeğer problemine dönüştür Standart özdeğer problemine dönüştürülüyor CALL reduce(n, mb, a(), b(), iErr) IF iErr <> 0 THEN PRINT "HATA(Eigen04-Reduce)="; iErr: END ' A matrisini üçlü bant matrise dönüştür CALL Bandr(n, mb, a(), d(), e(), e2())
Üçlü diyagonal matrise dönüştürülüyor
sn o Tüm veriler tekrar okunuyor
em de r
' Verileri tekrar oku Veriler tekrar okunacak RESTORE READ n READ mb READ m1 READ m ' A nın alt bant kısmını tekrar oku FOR i = 1 TO n FOR j = 1 TO mb READ a(i, j) NEXT j NEXT i ' B nin diyagonal elemanlarını tekrar oku FOR i = 1 TO n READ b(i) NEXT i
m tane özdeğer hesaplanıyor
tla
' m1., m1+1., m1+2., ..., m1+m-1. özdeğeri(m tane) hesapla EPS1 = 1E-14: 'Hesap hassasiyeti CALL Tridib(n, EPS1, d(), e(), e2(), BL, BU, m1, m, W(), iND(), iErr) IF iErr <> 0 THEN PRINT "HATA(Eigen04-Tridib)="; iErr: END
' A yı dönüştür CALL reduce(n, mb, a(), b(), iErr)
Tekrar standart özdeğer problemine dönüştürülüyor
' Özvektörleri hesapla m tane özvektör hesaplanıyor CALL bandv(n, mb, a(), m, W(), z(), iErr) IF iErr <> 0 THEN PRINT "HATA(Eigen04-Bandv)="; iErr: ' END
w
w
w .e
' Özvektörleri geri dönüştür ' Hesapla: B*z FOR i = 1 TO n FOR j = 1 TO m z(i, j) = b(i) * z(i, j) NEXT j NEXT i
' Özvektörleri normalleştir CALL normalize(n, m, z(), 1)
Özvektörler dönüştürülüyor
Özvektörler normalleştiriliyor
PRINT "Özdeğer ve Özvektörler(Eigen04-Tridib-Bandv):" FOR i = 1 TO m PRINT "Lamda"; i + m1 - 1; "="; W(i) FOR j = 1 TO n Sonuçlar yazdırılıyor PRINT z(j, i); NEXT j PRINT PRINT NEXT i
END ' Eigen04 ana
Eispack alt programları: Eigen01, Eigen02, Eigen03 ve Eigen04 ana programlarının çağırdığı alt programların QBASIC kodları aşağıda verilmiştir. Bu alt programların çoğunluğu EISPACK profesyonel yazılımının parçasıdır ve FORTRAN kodları aşağıdaki adresten alınmıştır: http://www.netlib.org/eispack Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
248
249
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
SUB Tred2 (n, D(), E(), z()) '---------------------------------------------------------------------' Real symmetric matrix Z(n,n) will be tridiagonalized using Housholder ' ortogonal similarity transformations
Output: D(n): Output matrix. Contains diagonal elements of tridiaginal matrix E(n): Output matrix. Contains sub diagonal elements of tridiaginal matrix Z(n,n): Output matrix. Contains transformation matrix.
w
w
w .e
em de r
sn o
tla
' This Subroutine is translated from ALGOL 60 in: Martin, Reinsch and ' Wilkinson. Handbook for auto. comp., Vol. II, 1971 ' FORTRAN code: www.netlib.org/eispack '---------------------------------------------------------------------' Copy diagonals to d FOR i = 1 TO n D(i) = z(n, i) NEXT i IF n = 1 THEN GOTO 510 FOR i = n TO 2 STEP -1 L=i-1 h=0 scale = 0 IF L >= 2 THEN FOR k = 1 TO L scale = scale + ABS(D(k)) NEXT k END IF IF scale = 0 THEN E(i) = D(L) FOR j = 1 TO L D(j) = z(L, j) z(i, j) = 0 z(j, i) = 0 NEXT j GOTO 290 END IF FOR k = 1 TO L D(k) = D(k) / scale h = h + D(k) * D(k) NEXT k f = D(L) g = -Sign(SQR(h), f): ' function Call E(i) = scale * g h=h-f*g D(L) = f - g 'Form A*U FOR j = 1 TO L E(j) = 0 NEXT j FOR j = 1 TO L f = D(j) z(j, i) = f g = E(j) + z(j, j) * f jp1 = j + 1 IF L >= jp1 THEN FOR k = jp1 TO L g = g + z(k, j) * D(k) E(k) = E(k) + z(k, j) * f NEXT k END IF E(j) = g NEXT j ' Form P f=0 FOR j = 1 TO L E(j) = E(j) / h f = f + E(j) * D(j) NEXT j hh = f / (h + h) ' Form Q FOR j = 1 TO L E(j) = E(j) - hh * D(j) NEXT j
' Form reduced A FOR j = 1 TO L f = D(j) g = E(j) FOR k = j TO L z(k, j) = z(k, j) - f * E(k) - g * D(k) NEXT k D(j) = z(L, j) z(i, j) = 0 NEXT j 290 D(i) = h NEXT i ' Accumulation of transformation matrices FOR i = 2 TO n L=i-1 z(n, L) = z(L, L) z(L, L) = 1 h = D(i) IF h <> 0 THEN FOR k = 1 TO L D(k) = z(k, i) / h NEXT k FOR j = 1 TO L g=0 FOR k = 1 TO L g = g + z(k, i) * z(k, j) NEXT k FOR k = 1 TO L z(k, j) = z(k, j) - g * D(k) NEXT k NEXT j END IF FOR k = 1 TO L z(k, i) = 0 NEXT k NEXT i
ri. co
' ' ' ' '
m
' Input: ' N: Dimension of Z ' Z(n,n): input matrix. Must be real symmetric
FUNCTION Sign (a, b) IF b >= 0 THEN Sign = ABS(a) ELSE Sign = -ABS(a) END FUNCTION ' End of Sign
510 FOR i = 1 TO n D(i) = z(n, i) z(n, i) = 0 NEXT i z(n, n) = 1 E(1) = 0 END SUB ' end of Tred2
FUNCTION Pythag (a, b) ' Finds sqr(a*a+b*b) without overflow or ' destructive underflow ABSa = ABS(a) ABSb = ABS(b) p = ABSa: IF ABSb > p THEN p = ABSb IF p = 0 THEN Pythag = p EXIT FUNCTION END IF r = ABSa: IF ABSb < r THEN r = ABSb r = (r / p) ^ 2 t=4+r WHILE t <> 4 s=r/t u=1+2*s p=u*p r = (s / u) ^ 2 * r t=4+r WEND Pythag = p END FUNCTION ' End of Pythag
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
249
250
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
Input: N: Dimension of the matrix D(n): is input matrix. Contains diagonal elements calulated by Tred2 E(n): is input matrix. Contains sub diagonal elements calculated by Tred2
' ' ' ' '
Output: D(n): is output matrix. Contains eigenvalues after run Tql2 Z(n,n): is output matrix. Contains normalized eigenvectors after run Tql2 iErr: Error flag, ierr=0 no error, iErr<>0 error. Used method is QL transformation.
' Form vector FOR k = 1 TO n h = z(k, i + 1) z(k, i + 1) = s * z(k, i) + c * h z(k, i) = c * z(k, i) - s * h NEXT k NEXT i p = -s * s2 * c3 * eL1 * E(L) / dL1 E(L) = s * p D(L) = c * p tst2 = tst1 + ABS(E(L)) IF tst2 > tst1 THEN GOTO 130 220 D(L) = D(L) + f NEXT L ' Order eigenvalues FOR L = 2 TO n i=L-1 k=i p = D(i) FOR j = L TO n IF D(j) < p THEN k=j p = D(j) END IF NEXT j ' Order iegenvectors IF k <> i THEN D(k) = D(i) D(i) = p FOR j = 1 TO n p = z(j, i) z(j, i) = z(j, k) z(j, k) = p NEXT j END IF NEXT L
w
w
w .e
em de r
sn o
tla
' This Subroutine is translated from ALGOL 60 in: Bowdler, Martin, ' Reinsch and Wilkinson. Handbook for auto. comp., Vol. II, 1971 ' FORTRAN code: www.netlib.org/eispack '-----------------------------------------------------------------------iErr = 0 IF n = 1 THEN EXIT SUB FOR i = 2 TO n E(i - 1) = E(i) NEXT i f=0 tst1 = 0 E(n) = 0 FOR L = 1 TO n j=0 h = ABS(D(L)) + ABS(E(L)) IF tst1 < h THEN tst1 = h ' Look for small sub-diogonal element FOR m = L TO n tst2 = tst1 + ABS(E(m)) IF tst2 = tst1 THEN EXIT FOR NEXT m IF m = L THEN GOTO 220 130 IF j = 30 THEN ' Set error-no convergence to an eigenvalue after 30 iteration iErr = L EXIT SUB END IF j=j+1 ' Form shift L1 = L + 1 L2 = L1 + 1 g = D(L) p = (D(L1) - g) / (2 * E(L)) r = Pythag(p, 1): ' Function call D(L) = E(L) / (p + Sign(r, p)): ' Function Call D(L1) = E(L) * (p + Sign(r, p)): 'Function Call dL1 = D(L1) h = g - D(L) IF L2 <= n THEN FOR i = L2 TO n D(i) = D(i) - h NEXT i END IF f=f+h
m
' ' ' '
' QL Transformation p = D(m) c=1 c2 = c eL1 = E(L1) s=0 mmL = m - L FOR i = m - 1 TO L STEP -1 c3 = c2 c2 = c s2 = s g = c * E(i) h=c*p r = Pythag(p, E(i)) E(i + 1) = s * r s = E(i) / r c=p/r p = c * D(i) - s * g D(i + 1) = h + s * (c * g + s * D(i))
ri. co
SUB Tql2 (n, D(), E(), z(), iErr) '-----------------------------------------------------------------------' Finds all Eigenvalues and eigenvectors of an nxn tridiagonal symmetric ' matrix which is produced by the program Tred2.
SUB Normalize (n, m, z(), normal) ' Vekctors of z(n,m) will be normalized ' Normal<>0: normalize so that max element of vector is 1. ' Normal=0: do nothing IF normal = 0 THEN EXIT SUB FOR i = 1 TO m p=0 FOR j = 1 TO n IF ABS(z(j, i)) > ABS(p) THEN p = z(j, i) NEXT j IF p = 0 THEN EXIT SUB p=1/p FOR j = 1 TO n z(j, i) = z(j, i) * p NEXT j NEXT i END SUB ' End of Normalize
END SUB ' End of Tql2
FUNCTION EpsMach# ' determines Machine epsilon ' IMPORTANT: ALL CONSTANTS AND VARIALES ' MUST BE IN DOUBLE a = 4# / 3# 110 b = a - 1# c = b + b + b ' DO NOT CHANGE INTO 3*B Eps = ABS(c - 1#) IF Eps = 0# GOTO 110 EpsMach = Eps
END FUNCTION ' end of EpsMach
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
250
251
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
FOR j = 1 TO L f = d(j) d(j) = a(L, j) a(L, j) = a(i, j) a(i, j) = f * scale NEXT j 300 NEXT i
END SUB ' end of Tred1
tla
' on output: ' a contains information about the orthogonal trans' formations used in the reduction in its strict lower ' triangle. The full upper triangle of a is unaltered. ' d contains the diagonal elements of the tridiagonal matrix. ' e contains the subdiagonal elements of the tridiagonal ' matrix in its last n-1 positions. e(1) is set to zero. ' e2 contains the squares of the corresponding elements of e. ' e2 may coincide with e if the squares are not needed. ' This subroutine is a translation of the algol procedure tred1, ' num. math. 11, 181-195(1968) by Martin, Reinsch, and Wilkinson. ' handbook for auto. comp., vol.ii-linear algebra, 212-226(1971). ' This version dated August 1983. ' FORTRAN code: www.netlib.org/eispack '-----------------------------------------------------------------FOR i = 1 TO n d(i) = a(n, i) a(n, i) = a(i, i) NEXT i ' FOR i = n TO 1 STEP -1 L=i-1 h=0 scale = 0 ' scale row FOR k = 1 TO L scale = scale + ABS(d(k)) NEXT k IF scale = 0 THEN FOR j = 1 TO L d(j) = a(L, j) a(L, j) = a(i, j) a(i, j) = 0 NEXT j e(i) = 0 e2(i) = 0 GOTO 300 END IF
m
' on input: ' n is the order of the matrix. ' a contains the real symmetric input matrix. only the ' lower triangle of the matrix need be supplied.
' form Q FOR j = 1 TO L e(j) = e(j) - h * d(j) NEXT j ' form reduced a FOR j = 1 TO L f = d(j) g = e(j) FOR k = j TO L a(k, j) = a(k, j) - f * e(k) - g * d(k) NEXT k NEXT j END IF
ri. co
SUB Tred1 (n, a(), d(), e(), e2()) ' This subroutine reduces a real symmetric matrix to a symmetric ' tridiagonal matrix using orthogonal similarity transformations.
em de r
sn o
SUB Trbak1 (n, a(), e(), m, z()) ' Trbak1-Eispack IF n = 1 THEN EXIT SUB FOR i = 2 TO n L=i-1 IF e(i) <> 0 THEN FOR j = 1 TO m s=0 FOR k = 1 TO L s = s + a(i, k) * z(k, j) NEXT k s = (s / a(i, L)) / e(i) FOR k = 1 TO L z(k, j) = z(k, j) + s * a(i, k) NEXT k NEXT j END IF NEXT i
END SUB ' end of Trbak1
w
w
w .e
FOR k = 1 TO L d(k) = d(k) / scale h = h + d(k) * d(k) NEXT k e2(i) = scale * scale * h f = d(L) g = -Sign(SQR(h), f) e(i) = scale * g h=h-f*g d(L) = f - g
IF L <> 1 THEN ' form a*u FOR j = 1 TO L e(j) = 0 NEXT j FOR j = 1 TO L f = d(j) g = e(j) + a(j, j) * f jp1 = j + 1 IF L >= jp1 THEN FOR k = jp1 TO L g = g + a(k, j) * d(k) e(k) = e(k) + a(k, j) * f NEXT k END IF e(j) = g NEXT j ' form P f=0 FOR j = 1 TO L e(j) = e(j) / h f = f + e(j) * d(j) NEXT j h = f / (h + h)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
251
252
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
m
SUB Tinvit (n, d(), e(), e2(), m, W(), iND(), z(), iErr) '-------------------------------------------------------------------' This subroutine finds those eigenvectors of a TRIDIAGONAL ' SYMMETRIC matrix corresponding to specified eigenvalues, ' using inverse iteration. ' This subroutine is a translation of the inverse iteration technique ' in the ALGOL procedure TRISTURM by Peters and Wilkinson. ' HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 418-439(1971).
On Input N is the order of the matrix. D contains the diagonal elements of the input matrix. E contains the subdiagonal elements of the input matrix in its last N-1 positions. E(1) is arbitrary. E2 contains the squares of the corresponding elements of E, with zeros corresponding to negligible elements of E. E(I) is considered negligible if it is not larger than the product of the relative machine precision and the sum of the magnitudes of D(I) and D(I-1). E2(1) must contain 0.0e0 if the eigenvalues are in ascending order, or 2.0e0 if the eigenvalues are in descending order. If BISECT, TRIDIB, or IMTQLV has been used to find the eigenvalues, their output E2 array is exactly what is expected here. M is the number of specified eigenvalues. W CONTAINS the M eigenvalues in ascending or descending order. iND contains in its first M positions the submatrix indices associated with the corresponding eigenvalues in W 1 for eigenvalues belonging to the first submatrix from the top, 2 for those belonging to the second submatrix, etc.
' ' ' ' ' ' ' '
On Output All input arrays are unaltered. Z contains the associated set of orthonormal eigenvectors. any vector which fails to converge is set to zero. IERR is set to Zero for normal return, -iR if the eigenvector corresponding to the iR-th eigenvalue fails to converge in 5 iterations.
' ' ' ' ' ' '
RV1, RV2, RV3, RV4, and RV6 are temporary storage arrays. REFERENCES B. T. SMITH, J. M. BOYLE, J. J. DONGARRA, B. S. GARBOW, Y. IKEBE, V. KLEMA, B. MOLER, MATRIX EIGEN SYSTEM ROUTINES - EISPACK GUIDE, SPRINGER-VERLAG, 1976. ROUTINES CALLED (NONE) FORTRAN code: www.netlib.org/eispack -----------------------------------------------------------------DIM RV1(n), RV2(n), RV3(n), RV4(n), RV6(n)
em de r
sn o
tla
ri. co
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
w
w
w .e
iErr = 0 IF m <= 0 THEN EXIT SUB u=0 x0 = 0 iTag = 0 Order = 1 - e2(1) iQ = 0 ' ESTABLISH AND PROCESS NEXT SUBMATRIX 100 iPi = iQ + 1 FOR iQ = iPi TO n IF iQ = n THEN EXIT FOR IF e2(iQ + 1) = 0 THEN EXIT FOR NEXT iQ ' FIND VECTORS BY INVERSE ITERATION iTag = iTag + 1 iSi = 0 FOR iR = 1 TO m IF iND(iR) <> iTag THEN GOTO 920 iTS = 1 x1 = W(iR) IF iSi <> 0 THEN GOTO 510 ' CHECK FOR ISOLATED ROOT xu = 1 IF iPi = iQ THEN RV6(iPi) = 1: GOTO 870 aNorm = ABS(d(iPi)) iP = iPi + 1 FOR i = iP TO iQ t = ABS(d(i)) + ABS(e(i)) IF t > aNorm THEN aNorm = t NEXT i ' EPS2 is THE CRITERION FOR GROUPING, ' EPS3 REPLACES ZERO PIVOTS AND EQUAL ROOTS ARE MODIFIED BY EPS3, ' EPS4 is TAKEN VERY SMALL TO AVOID OVERFLOW ' EpsMach is hardware dependent parameter specifying the relativ ' Precision of floating point arithmetic. Eps2 = .001 * aNorm eps3 = EpsMach * aNorm Tinvit sonraki sayfada devam ediyor Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
252
253
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
ri. co
m
RV6(i - 1) = RV6(i) END IF RV6(i) = u - RV4(i) * RV6(i - 1) NEXT i iTS = iTS + 1 GOTO 600 ' SET ERROR if NON-CONVERGED EIGENVECTOR 830 iErr = -iR xu = 0 GOTO 870 END IF ' NORMALIZE SO THAT SUM OF SQUARES is 1 u=0 FOR i = iPi TO iQ u = Pythag(u, RV6(i)) NEXT i xu = 1 / u 870 FOR i = 1 TO n z(i, iR) = 0 NEXT i FOR i = iPi TO iQ z(i, iR) = RV6(i) * xu NEXT i x0 = x1 920 NEXT iR IF iQ < n THEN GOTO 100
tla
Uk = iQ - iPi + 1 Tinvit devamı Eps4 = Uk * eps3 Uk = Eps4 / SQR(Uk) iSi = iPi 505 iGroup = 0 GOTO 520 ' LOOK FOR CLOSE OR COINCIDENT ROOTS 510 IF ABS(x1 - x0) >= Eps2 THEN GOTO 505 iGroup = iGroup + 1 IF Order * (x1 - x0) <= 0 THEN x1 = x0 + Order * eps3 ' ELIMINATION WITH INTERCHANGES AND INITIALIZATION OF VECTOR 520 V = 0 FOR i = iPi TO iQ RV6(i) = Uk IF i <> iPi THEN IF ABS(e(i)) >= ABS(u) THEN ' WARNING: A DIVIDE CHECK MAY OCCUR HERE IF E2 ARRAY HAS ' NOT BEEN SPECIFIED CORRECTLY xu = u / e(i) RV4(i) = xu RV1(i - 1) = e(i) RV2(i - 1) = d(i) - x1 RV3(i - 1) = 0 IF i <> iQ THEN RV3(i - 1) = e(i + 1) u = V - xu * RV2(i - 1) V = -xu * RV3(i - 1) GOTO 580 END IF xu = e(i) / u RV4(i) = xu RV1(i - 1) = u RV2(i - 1) = V RV3(i - 1) = 0 END IF u = d(i) - x1 - xu * V IF i <> iQ THEN V = e(i + 1) 580 NEXT i
sn o
END SUB ' End of Tinvit
w
w
w .e
em de r
IF u = 0 THEN u = eps3 RV1(iQ) = u RV2(iQ) = 0 RV3(iQ) = 0 ' BACK SUBSTITUTION 600 FOR i = iQ TO iPi STEP -1 RV6(i) = (RV6(i) - u * RV2(i) - V * RV3(i)) / RV1(i) V=u u = RV6(i) NEXT i ' ORTHOGONALIZE WITH RESPECT TO PREVIOUS MEMBERS OF iGroup j = iR FOR jj = 1 TO iGroup DO j=j-1 LOOP WHILE iND(j) <> iTag xu = 0 FOR i = iPi TO iQ xu = xu + RV6(i) * z(i, j) NEXT i FOR i = iPi TO iQ RV6(i) = RV6(i) - xu * z(i, j) NEXT i NEXT jj aNorm = 0 FOR i = iPi TO iQ aNorm = aNorm + ABS(RV6(i)) NEXT i IF aNorm < 1 THEN ' FORWARD SUBSTITUTION IF iTS = 5 THEN GOTO 830 IF aNorm = 0 THEN RV6(iSi) = Eps4 iSi = iSi + 1 IF iSi > iQ THEN iSi = iPi GOTO 780 END IF xu = Eps4 / aNorm FOR i = iPi TO iQ RV6(i) = RV6(i) * xu NEXT i ' ELIMINATION OPERATIONS ON NEXT VECTOR ITERATE 780 FOR i = iP TO iQ u = RV6(i) IF RV1(i - 1) = e(i) THEN u = RV6(i - 1)
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
253
254
On Output EPS1 is unaltered unless it has been reset to its (last) default value. D and E are unaltered. ELEMENTS of E2, corresponding to elements of E regarded as negligible, have been replaced by zero causing the matrix to split into a direct sum of submatrices. E2(1) is also set to zero.
tla
' ' ' ' ' '
ri. co
SUB Tridib (n, EPS1, d(), e(), e2(), BL, BU, m11, m, W(), iND(), iErr) '---------------------------------------------------------------------' This subroutine finds those eigenvalues of a TRIDIAGONAL ' SYMMETRIC matrix between specified boundary indices, using bisection. ' ' On Input: ' N is the order of the matrix. ' EPS1 is an absolute error tolerance for the computed eigenvalues. ' If the input EPS1 is non-positive, it is reset for each submatrix ' to a default value, namely, minus the product of the relative machine ' precision and the 1-aNorm of the submatrix. ' D contains the diagonal elements of the input matrix. ' E contains the subdiagonal elements of the input matrix ' in its last N-1 positions. E(1) is arbitrary. ' E2 contains the squares of the corresponding elements of E. E2(1) is arbitrary. ' M11 specifies the lower boundary index for the desired eigenvalues. ' M specifies the number of eigenvalues desired. The upper ' boundary index M22 is then obtained as M22=M11+M-1.
m
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
em de r
sn o
' BL and BU DEFINE an interval containing exactly the desired eigenvalues. ' W contains, in its first M positions, the eigenvalues ' between indices M11 and M22 in ascending order. ' IND contains in its first M positions the submatrix indices ' associated with the corresponding eigenvalues in W. ' 1 for eigenvalues belonging to the first submatrix from ' the top, 2 for those belonging to the second submatrix, etc. ' IERR is set to ' Zero for normal return, ' 3*N+1 if multiple eigenvalues at index M11 make ' unique selection impossible, ' 3*N+2 if multiple eigenvalues at index M22 make ' unique selection impossible. ' ' RV4 and RV5 are temporary storage arrays. ' REFERENCES B. T. SMITH, J. M. BOYLE, J. J. DONGARRA, B. S. GARBOW, ' Y. IKEBE, V. C. KLEMA, C. B. MOLER, *MATRIX EIGEN' SYSTEM ROUTINES - EISPACK GUIDE*, SPRINGER-VERLAG, 1976. ' ROUTINES CALLED (NONE) ' This subroutine is a translation of the ALGOL procedure BISECT, ' NUM. MATH. 9, 386-393(1967) by Barth, Martin, and Wilkinson. ' HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 249-256(1971). ' FORTRAN code : www.netlib.org/eispack/tridib.f '---------------------------------------------------------------------DIM RV4(n), RV5(n)
w
w
w .e
iErr = 0 iTag = 0 xu = d(1) x0 = d(1) u=0 ' LOOK FOR SMALL SUB-DIAGONAL ENTRIES AND DETERMINE AN ' INTERVAL CONTAINING ALL THE EIGENVALUES FOR i = 1 TO n x1 = u u=0 IF i <> n THEN u = ABS(e(i + 1)) dMin1 = d(i) - (x1 + u): IF dMin1 < xu THEN xu = dMin1 dMax1 = d(i) + (x1 + u): IF dMax1 > x0 THEN x0 = dMax1 IF i <> 1 THEN Tst1 = ABS(d(i)) + ABS(d(i - 1)) Tst2 = Tst1 + ABS(e(i)) IF Tst2 <= Tst1 THEN e2(i) = 0 END IF NEXT i dMax1 = ABS(xu): IF ABS(x0) > dMax1 THEN dMax1 = ABS(x0) x1 = dMax1 * EpsMach * n xu = xu - x1 t1 = xu x0 = x0 + x1 t2 = x0 ' DETERMINE AN INTERVAL CONTAINING EXACTLY THE DESIRED EIGENVALUES iPi = 1 iQ = n m1 = m11 - 1 IF m1 <> 0 THEN iSTURM = 1 3050 V = x1 Tridib sonraki sayfada devam ediyor x1 = xu + (x0 - xu) * .5
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
254
255
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
tla
ri. co
m
EXIT FOR 3260 NEXT i IF x0 > RV5(k) THEN x0 = RV5(k) ' NEXT BISECTION STEP 3300 x1 = (xu + x0) * .5 Tst1 = ABS(xu) + ABS(x0) + ABS(EPS1) Tst2 = Tst1 + ABS(x0 - xu) / 2! IF Tst2 = Tst1 GOTO 3420 'IN-LINE PROCEDURE FOR STURM SEQUENCE 3320 iSi = iPi - 1 u=1 FOR i = iPi TO iQ IF u = 0 THEN V = ABS(e(i)) / EpsMach IF e2(i) = 0 THEN V = 0 GOTO 3330 END IF V = e2(i) / u 3330 u = d(i) - x1 - V IF u < 0 THEN iSi = iSi + 1 NEXT i ON iSTURM GOTO 3060, 3080, 3200, 3220, 3360 ' REFINE INTERVALS 3360 IF iSi >= k THEN GOTO 3400 xu = x1 IF iSi >= m1 THEN GOTO 3380 RV4(m1) = x1 GOTO 3300 3380 RV4(iSi + 1) = x1 IF RV5(iSi) > x1 THEN RV5(iSi) = x1 GOTO 3300 3400 x0 = x1 GOTO 3300 'K-TH EIGENVALUE FOUND 3420 RV5(k) = x1 k=k-1 IF k >= m1 THEN GOTO 3250 ' ORDER EIGENVALUES TAGGED WITH THEIR ' SUBMATRIX ASSOCIATIONS 3900 iSi = iR iR = iR + m2 - m1 + 1 j=1 k = m1 FOR L = 1 TO iR IF j <= iSi THEN IF k > m2 THEN EXIT FOR IF RV5(k) >= W(L) THEN GOTO 3915 FOR iI = j TO iSi i = L + iSi - iI W(i + 1) = W(i) iND(i + 1) = iND(i) NEXT iI END IF W(L) = RV5(k) iND(L) = iTag k=k+1 GOTO 3920 3915 j = j + 1 3920 NEXT L
w
w
w .e
em de r
sn o
IF x1 = V GOTO 3980 Tridib devamı GOTO 3320 3060 IF iSi - m1 < 0 THEN 3065 xu = x1: GOTO 3050 END IF IF iSi - m1 > 0 THEN 3070 x0 = x1: GOTO 3050 END IF xu = x1 t1 = x1 END IF m22 = m1 + m IF m22 <> n THEN x0 = t2 iSTURM = 2 GOTO 3050 3080 IF (iSi - m22) < 0 THEN GOTO 3065 IF (iSi - m22) > 0 THEN GOTO 3070 3085 t2 = x1 END IF iQ = 0 iR = 0 ' ESTABLISH AND PROCESS NEXT SUBMATRIX, REFINING ' INTERVAL BY THE GERSCHGORIN BOUNDS 3100 IF iR = m GOTO 3001 iTag = iTag + 1 iPi = iQ + 1 xu = d(iPi) x0 = d(iPi) u=0 FOR iQ = iPi TO n x1 = u u=0 V=0 IF iQ <> n THEN u = ABS(e(iQ + 1)) V = e2(iQ + 1) END IF dMin1 = d(iQ) - (x1 + u) IF dMin1 < xu THEN xu = dMin1 dMax1 = d(iQ) + (x1 + u) IF dMax1 > x0 THEN x0 = dMax1 IF V = 0 THEN EXIT FOR NEXT iQ x1 = ABS(xu) dMax1 = ABS(x0) IF dMax1 > x1 THEN x1 = dMax1 IF EPS1 <= 0 THEN EPS1 = -x1 IF iPi = iQ THEN ' CHECK FOR ISOLATED ROOT WITHIN INTERVAL IF (t1 > d(iPi)) OR (d(iPi) >= t2) THEN GOTO 3940 m1 = iPi m2 = iPi RV5(iPi) = d(iPi) GOTO 3900 END IF x1 = x1 * (iQ - iPi + 1) BL = t1: dMax1 = xu - x1 IF dMax1 > BL THEN BL = dMax1 BU = t2: dMin1 = x0 + x1 IF dMin1 < BU THEN BU = dMin1 x1 = BL iSTURM = 3 GOTO 3320 3200 m1 = iSi + 1 x1 = BU iSTURM = 4 GOTO 3320 3220 m2 = iSi IF m1 > m2 GOTO 3940 ' FIND ROOTS BY BISECTION x0 = BU iSTURM = 5 FOR i = m1 TO m2 RV5(i) = BU RV4(i) = BL NEXT i ' LOOP FOR K-TH EIGENVALUE ' FOR K=M2 STEP -1 UNTIL M1 DO -' (-DO- NOT USED TO LEGALIZE -COMPUTED GO TO-) k = m2 3250 xu = BL FOR i = k TO m1 STEP -1 IF xu >= RV4(i) THEN GOTO 3260 xu = RV4(i)
3940 IF iQ < n THEN GOTO 3100 GOTO 3001 ' SET ERROR - INTERVAL CANNOT BE FOUND ' CONTAINING EXACTLY THE DESIRED EIGENVALUES 3980 iErr = 3 * n + iSTURM 3001 BL = t1 BU = t2 END SUB ' End of Tridib
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
255
256
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
SUB Reduc (n, a(), b(), dL(), iErr) '---------------------------------------------------------------' This subroutine reduces the generalized symmetric eigenproblem ' A*x=(lambda)*b*x, where b is positive definite, to the standard ' symmetric eigenproblem using the cholesky factorization of b.
' ' ' ' ' ' '
on output a contains in its full lower triangle the full lower triangle of the symmetric matrix derived from the reduction to the standard form. the strict upper triangle of a is unaltered. b contains in its strict lower triangle the strict lower triangle of its cholesky factor L. the full upper triangle of b is unaltered. dL contains the diagonal elements of L.
' ierr is set to for normal return, ' zero ' 7*n+1 if b is not positive definite.
em de r
sn o
' This version dated august 1983. ' FORTRAN code: www.netlib.org/eispack ' -----------------------------------------------------------------iErr = 0 nn = ABS(n) IF n > 0 THEN ' form L in the arrays b and dL FOR i = 1 TO n FOR j = i TO n x = b(i, j) FOR k = 1 TO i - 1 x = x - b(i, k) * b(j, k) NEXT k IF j = i THEN IF x <= 0 THEN ' set error - b is not positive definite iErr = 7 * n + 1 EXIT SUB END IF y = SQR(x) dL(i) = y ELSE b(j, i) = x / y END IF NEXT j NEXT i END IF
ri. co
on input n is the order of the matrices a and b. if the cholesky factor L of b is already available, n should be prefixed with a minus sign. a and b contain the real symmetric input matrices. only the full upper triangles of the matrices need be supplied. if n is negative, the strict lower triangle of b contains, instead, the strict lower triangle of its cholesky factor L. dL contains, if n is negative, the diagonal elements of L.
tla
' ' ' ' ' ' ' '
m
' This subroutine is a translation of the algol procedure reduc1, ' num. math. 11, 99-110(1968) by martin and wilkinson. ' handbook for auto. comp., vol.ii-linear algebra, 303-314(1971).
w
w
w .e
' form the transpose of the upper triangle of inv(L)*a ' in the lower triangle of the array a FOR i = 1 TO nn y = dL(i) FOR j = i TO nn x = a(i, j) FOR k = 1 TO i - 1 x = x - b(i, k) * a(j, k) NEXT k a(j, i) = x / y NEXT j NEXT i ' pre-multiply by inv(L) and overwrite FOR j = 1 TO nn FOR i = j TO nn x = a(i, j) FOR k = j TO i - 1 x = x - a(k, j) * b(i, k) NEXT k FOR k = 1 TO j - 1 x = x - a(j, k) * b(i, k) NEXT k a(i, j) = x / dL(i) NEXT i NEXT j END SUB ' end of Reduc
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
256
257
sn o
END SUB ' End of rebak
tla
' on output ' z contains the transformed eigenvectors in its first m columns. '-----------------------------------------------------------------FOR j = 1 TO m FOR i = n TO 1 STEP -1 x = z(i, j) IF i <> n THEN i1 = i + 1 FOR k = i1 TO n x = x - b(k, i) * z(k, j) NEXT k END IF z(i, j) = x / dL(i) NEXT i NEXT j
ri. co
SUB rebak (n, b(), dL(), m, z()) '---------------------------------------------------------------------' This subroutine forms the eigenvectors of a generalized symmetric ' eigensystem by back transforming those of the derived symmetric ' matrix determined by REDUC. ' ' on input ' n is the order of the matrix system. ' b contains information about the similarity transformation (cholesky ' decomposition) used in the reduction by REDUC in its strict ' lower triangle. ' dL contains further information about the transformation. ' m is the number of eigenvectors to be back transformed. ' z contains the eigenvectors to be back transformed in its first m columns.
m
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
END SUB ' end of reduce
w
w
w .e
em de r
SUB reduce (n, mb, a(), b(), iErr) ' calulates invers and of Squre root of B ' Reduces general eigenproblem (A-Lamda*B)*x=0 in standard problem (A-Lamda*I)x=0 ' invers and Square root of B iErr = 0 FOR i = 1 TO n IF b(i) <= 0 THEN iErr = i EXIT SUB END IF b(i) = 1 / SQR(b(i)) NEXT i ' Reducing ' Calculate B*A FOR i = 1 TO n FOR j = 1 TO mb a(i, j) = b(i) * a(i, j) NEXT j NEXT i ' Calculate B*A*B FOR k = 1 TO n FOR j = 1 TO mb i=k+j-1 IF i > n THEN EXIT FOR k1 = k - i + mb a(i, k1) = a(i, k1) * b(k) NEXT j NEXT k
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
257
258
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
SUB Bandr (n, mb, a(), d(), e(), e2()) ' This subroutine reduces a real symmetric band matrix ' to a symmetric tridiagonal matrix using and optionally ' accumulating orthogonal similarity transformations.
on input n is the order of the matrix. mb is the half band width of the matrix, defined as the number of adjacent diagonals, including the principal diagonal, required to specify the non-zero portion of the lower triangle of the matrix. a contains the lower triangle of the symmetric band input matrix stored as an n by mb array. its lowest subdiagonal is stored in the last n+1-mb positions of the first column, its next subdiagonal in the last n+2-mb positions of the second column, further subdiagonals similarly, and finally its principal diagonal in the n positions of the last column. contents of storages not part of the matrix are arbitrary.
em de r
dmin = EpsMach dminrt = SQR(dmin) ' initialize diagonal scaling matrix FOR j = 1 TO n d(j) = 1 NEXT j m1 = mb - 1 IF m1 < 1 THEN FOR j = 1 TO n d(j) = a(j, mb) e(j) = 0 e2(j) = 0 NEXT j EXIT SUB END IF IF m1 = 1 THEN GOTO BR800
sn o
tla
' on output ' a has been destroyed, except for its last two columns which ' contain a copy of the tridiagonal matrix. ' d contains the diagonal elements of the tridiagonal matrix. ' e contains the subdiagonal elements of the tridiagonal ' matrix in its last n-1 positions. e(1) is set to zero. ' e2 contains the squares of the corresponding elements of e. ' e2 may coincide with e if the squares are not needed. ' this version dated september 1989. ' FORTRAN code: http://www.netlib.org/eispack '---------------------------------------------------------------------------
ri. co
' ' ' ' ' ' ' ' ' ' '
m
' This subroutine is a translation of the algol procedure bandrd, ' num. math. 12, 231-241(1968) by schwarz. ' handbook for auto. comp., vol.ii-linear algebra, 273-283(1971).
n2 = n - 2 FOR k = 1 TO n2 Maxr = Min(n - k, m1)
w
w
w .e
FOR iR = Maxr TO 2 STEP -1 kr = k + iR mr = mb - iR g = a(kr, mr) a(kr - 1, 1) = a(kr - 1, mr + 1) iUgl = k FOR j = kr TO n STEP m1 j1 = j - 1 j2 = j1 - 1 IF g = 0 THEN GOTO BR600 b1 = a(j1, 1) / g b2 = b1 * d(j1) / d(j) IF ABS(b1) > 1 THEN u = 1 / b1 s2 = u / (u + b2) ELSE s2 = 1 / (1 + b1 * b2) END IF
IF s2 >= .5 THEN GOTO BR450 b1 = g / a(j1, 1) b2 = b1 * d(j) / d(j1) c2 = 1 - s2 d(j1) = c2 * d(j1) d(j) = c2 * d(j) f1 = 2 * a(j, m1) f2 = b1 * a(j1, mb) a(j, m1) = -b2 * (b1 * a(j, m1) - a(j, mb)) - f2 + a(j, m1) a(j1, mb) = b2 * (b2 * a(j, mb) + f1) + a(j1, mb) a(j, mb) = b1 * (f2 - f1) + a(j, mb) Bandr
sonraki sayfada devam ediyor
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
258
259
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
FOR L = iUgl TO j2 i2 = mb - j + L u = a(j1, i2 + 1) + b2 * a(j, i2) a(j, i2) = -b1 * a(j1, i2 + 1) + a(j, i2) a(j1, i2 + 1) = u NEXT L
Bandr devamı
m
iUgl = j a(j1, 1) = a(j1, 1) + b2 * g IF j = n THEN GOTO BR500 MaxL = Min(n - j1, m1)
ri. co
FOR L = 2 TO MaxL i1 = j1 + L i2 = mb - L u = a(i1, i2) + b2 * a(i1, i2 + 1) a(i1, i2 + 1) = -b1 * a(i1, i2) + a(i1, i2 + 1) a(i1, i2) = u NEXT L
u = d(j1) d(j1) = s2 * d(j) d(j) = s2 * u f1 = 2 * a(j, m1) f2 = b1 * a(j, mb) u = b1 * (f2 - f1) + a(j1, mb) a(j, m1) = b2 * (b1 * a(j, m1) - a(j1, mb)) + f2 - a(j, m1) a(j1, mb) = b2 * (b2 * a(j1, mb) + f1) + a(j, mb) a(j, mb) = u FOR L = iUgl TO j2 i2 = mb - j + L u = b2 * a(j1, i2 + 1) + a(j, i2) a(j, i2) = -a(j1, i2 + 1) + b1 * a(j, i2) a(j1, i2 + 1) = u NEXT L iUgl = j a(j1, 1) = b2 * a(j1, 1) + g
em de r
sn o
BR450:
tla
i1 = j + m1 IF i1 <= n THEN g = b2 * a(i1, 1) GOTO BR500
w
w
w .e
IF j = n THEN GOTO BR500 MaxL = Min(n - j1, m1) FOR L = 2 TO MaxL i1 = j1 + L i2 = mb - L u = b2 * a(i1, i2) + a(i1, i2 + 1) a(i1, i2 + 1) = -a(i1, i2) + b1 * a(i1, i2 + 1) a(i1, i2) = u NEXT L i1 = j + m1 IF i1 <= n THEN g = a(i1, 1) a(i1, 1) = b1 * a(i1, 1) END IF BR500: NEXT j BR600:
NEXT iR
'Rescale to avoid underflow or overflow IF (k MOD 64) = 0 THEN FOR j = k TO n IF d(j) >= dmin THEN GOTO BR650 MaxL = Min(mb + 1 - j, 1) FOR L = MaxL TO m1 a(j, L) = dminrt * a(j, L) NEXT L IF j <> n THEN MaxL = Min(n - j, m1) FOR L = 1 TO MaxL i1 = j + L i2 = mb - L a(i1, i2) = dminrt * a(i1, i2) NEXT L END IF a(j, mb) = dmin * a(j, mb) d(j) = d(j) / dmin BR650: NEXT j END IF NEXT k
' Form square root of scaling matrix BR800: FOR j = 2 TO n e(j) = SQR(d(j)) NEXT j u=1 FOR j = 2 TO n a(j, m1) = u * e(j) * a(j, m1) u = e(j) e2(j) = a(j, m1) ^ 2 a(j, mb) = d(j) * a(j, mb) d(j) = a(j, mb) e(j) = a(j, m1) NEXT j d(1) = a(1, mb) e(1) = 0 e2(1) = 0
END SUB ' end of Bandr
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
259
260
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
' ' ' ' ' ' ' '
on output a and w are unaltered. z contains the associated set of orthogonal eigenvectors. any vector which fails to converge is set to zero iErr is set to zero for normal return, -iR if the eigenvector corresponding to the iR-th eigenvalue fails to converge.
' rv and rv6 are temporary storage arrays. note that rv is ' of dimension at least n*(2*mb-1).
RV(ij) = a(i, mb) - x1 RV6(i) = eps4 NEXT i
sn o
' Subprograms called: Pythag, Sign, EpsMach
ri. co
on input n is the Order of the matrix. nb is the half band width of the matrix a. a contains the lower triangle of the symmetric band input matrix stored as an n by mb array. its lowest subdiagonal is stored in the last n+1-mb positions of the first column, its next subdiagonal in the last n+2-mb positions of the second column, further subdiagonals similarly, and finally its principal diagonal in the n positions of column mb. m is the number of specified eigenvalues. w contains the m known eigenvalues in ascending order.
' this version dated august 1983. ' FORTRAN code: http://www.netlib.org/eispack '---------------------------------------------------------------------DIM RV(n * (2 * mb - 1)), RV6(n)
em de r
iErr = -1 IF m <= 0 THEN EXIT SUB iErr = 0 x0 = 0 m1 = mb - 1 m21 = m1 + mb
' compute aNorm of matrix aNorm = 0 FOR j = 1 TO mb V=0 FOR i = mb + 1 - j TO n V = V + ABS(a(i, j)) NEXT i IF V > aNorm THEN aNorm = V NEXT j
w
w
w .e
' eps2 is the criterion for grouping, ' eps3 replaces zero pivots and equal roots are modified by eps3, ' eps4 is taken very small to avoid overflow IF aNorm = 0 THEN aNorm = 1 Eps2 = .001 * aNorm eps3 = ABS(aNorm) * (EpsMach# * aNorm) uk = SQR(n) eps4 = uk * eps3 iGroup = 0 ' find vectors by inverse iteration FOR iR = 1 TO m its = 1 x1 = W(iR) ' look for close or coincident roots IF ABS(x1 - x0) >= Eps2 THEN iGoup = 0 ELSE iGroup = iGroup + 1 IF x1 - x0 <= 0 THEN x1 = x0 + eps3 END IF ' expand matrix, subtract eigenvalue, and initialize vector FOR i = 1 TO n ij = i + Min(0, i - m1) * n kj = ij + mb * n ij1 = kj + m1 * n
' elimination with interchanges IF m1 <> 0 THEN FOR i = 1 TO n iI = i + 1 Maxk = Min(i + m1 - 1, n) Maxj = Min(n - i, m21 - 2) * n FOR k = i TO Maxk kj1 = k j = kj1 + n jj = j + Maxj FOR kj = j TO jj STEP n RV(kj1) = RV(kj) kj1 = kj NEXT kj RV(kj1) = 0 NEXT k
tla
' ' ' ' ' ' ' ' ' ' '
RV(ij1) = 0 ij1 = ij1 + n END IF ELSE RV(ij) = a(i, j) END IF ij = ij + n iI = i + j IF iI <= n THEN RV(kj) = a(iI, mb - j) kj = kj + n END IF NEXT j
m
SUB bandv (n, mb, a(), m, W(), z(), iErr) '-------------------------------------------------------------------' this subroutine finds those eigenvectors of a real symmetric ' band matrix corresponding to specified eigenvalues, using inverse iteration
IF i <> n THEN u=0 Maxk = Min(i + m1, n) Maxj = Min(n - iI, m21 - 2) * n FOR j = i TO Maxk IF ABS(RV(j)) >= ABS(u) THEN u = RV(j) k=j END IF NEXT j j=i+n jj = j + Maxj IF k <> i THEN kj = k FOR ij = i TO jj STEP n V = RV(ij) RV(ij) = RV(kj) RV(kj) = V kj = kj + n NEXT ij END IF IF u <> 0 THEN FOR k = iI TO Maxk V = RV(k) / u kj = k FOR ij = j TO jj STEP n kj = kj + n RV(kj) = RV(kj) - V * RV(ij) NEXT ij NEXT k END IF END IF NEXT i END IF
Bandv sonraki sayfada devam ediyor
FOR j = 1 TO m1 IF ij <= m1 THEN IF ij <= 0 THEN Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
260
261
34. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - Eigen04
V = RV(i) IF ABS(V) < eps3 THEN V = Sign(eps3, V) RV6(i) = RV6(i) / V NEXT i
FOR i = 1 TO n RV6(i) = RV6(i) - xu * z(i, j) NEXT i NEXT jj aNorm = 0 FOR i = 1 TO n aNorm = aNorm + ABS(RV6(i)) NEXT i
m
em de r
' choose a new starting vector IF aNorm < .1 THEN IF its < n THEN its = its + 1 xu = eps4 / (uk + 1) RV6(1) = eps4
sn o
' orthogonalize with respect to previous members of iGroup xu = 1 FOR jj = 1 TO iGroup j = iR - iGroup - 1 + jj xu = 0 FOR i = 1 TO n xu = xu + RV6(i) * z(i, j) NEXT i
FUNCTION Min (ia, ib) ' Returns minimum of two integers IF ia < ib THEN Min = ia ELSE Min = ib END FUNCTION ' end of Min
ri. co
devamı
tla
' back substitution Bandv 600 FOR i = n TO 1 STEP -1 Maxj = Min(n - i + 1, m21) IF Maxj <> 1 THEN ij1 = i j = ij1 + n jj = j + (Maxj - 2) * n FOR ij = j TO jj STEP n ij1 = ij1 + 1 RV6(i) = RV6(i) - RV(ij) * RV6(ij1) NEXT ij END IF
FOR i = 2 TO n RV6(i) = xu NEXT i
RV6(its) = RV6(its) - eps4 * uk GOTO 600 ELSE
w
w
w .e
' set error - non-converged eigenvector iErr = -iR xu = 0 GOTO 870 END IF END IF ' normalize so that sum of squares is 1 u=0 FOR i = 1 TO n u = Pythag(u, RV6(i)) NEXT i xu = 1 / u 870 FOR i = 1 TO n z(i, iR) = RV6(i) * xu NEXT i x0 = x1 NEXT iR END SUB ' end of Bandv
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
261
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
sn o A x=λB x
w
w
w .e
em de r
Ahmet TOPÇU
tla
Ders notları 2014
35 PROGRAMLAR: •
Genel özdeğer ve özvektör hesabı
En küçük birkaç özdeğerin hesabı - Dsearch
263
35. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - DSearch
35. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - DSearch Ax = λ B x
Çağrılan alt programlar: DSearch, Determinant, Factor, Powerinvers
ri. co
Örnek: Bir kirişin serbest titreşim problemi1 Yarı bant=4
Kirişin rijitlik matrisi
tla
0 − 121193 181790 242386 727160 − 181790 181790 0 242386 0 − 121193 181790 A = 727160 − 181790 181790 0 Simetrik 242386 0 181790 727160 181790 363580
m
Genel özdeğer probleminin en küçük m tane veya tüm özdeğerlerini ve bunlara ait özvektörlerini hesaplar. A simetrik bant matris, B simetrik bant matris, det A ≠0 ve det B≠0 olmalıdır. A nın ve B nin sadece üst yarı bantı programa verilir.
Yarı bant=4
em de r
sn o
0 − 121193 181790 242386 727160 − 181790 181790 0 242386 0 − 121193 181790 B = 727160 − 181790 181790 0 Simetrik 242386 0 181790 727160 181790 363580
İlk üç özdeğer ve bunlara karşılık gelen açısal frekans, periyot, frakans ve özvektörlerin (modların) hesabı?
Kirişin kütle matrisi
A ve B nin depolanma şekli: Yarı bant=4
Yarı bant=4
Sabit bant genişliği için eklenen sıfırlar
w
w
w .e
− 121193 181790 0 0 0.2025 − 0.14625 242386 1.170 727160 − 181790 181790 0 0 0.270 0.14625 - 0.10125 242386 1.170 − 121193 181790 − 0.14625 0 0 0.2025 A → 727160 − 181790 181790 0 , B → 0.270 0.14625 − 0.10125 0 242386 1.170 0 811790 0 0 − 0.14625 0 0 0 0 0 727160 181790 0.270 − 0.10125 363580 0.135 0 0 0 0 0 0
DSearch sonuçları
1
Teori ve sayısal el hesabı için bak: bölüm 26. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
263
264
35. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - DSearch '-----------------Ana program DSearch--------------------------------------' Ahmet TOPÇU, Eskişehir Osmangazi Üniversitesi, 1998 ' (A-Lamda*B)x=0 genel özdeğer problemi çözülür ' En küçük m özdeğer ve bunlara ait özvektörler hesaplanır
' Çıktı: ' ALamda(n,2): özdeğerler ' X(n,m): Özvektörler
' Örnek: Betonarme kirişin ilk üç modunun hesabı DATA 7: ' A=Rijitlik matrisinin denklem sayısı DATA 4: ' Rijitlik matrisinin yarı bant genişliği DATA 4: ' B= M Kütle matrisinin bant genişliği DATA 3: ' hesaplanması istenen mod sayısı
rijitlik matrisinin üst yarı bantındaki sayılar 242386,0,-121193,181790 A nın üstt bantı içindeki elemanları 727160,-181790,181790,0 242386,0,-121193,181790 727160,-181790,181790,0 242386,0,181790,0 727160,181790,0,0 363580,0,0,0
sn o
' A=K DATA DATA DATA DATA DATA DATA DATA
tla
' Çağrılan alt programlar: Dsearch, Determinant, Factor, Powerinvers '---------------------------------------------------------------------------------
m
Veri: A(n,n): Tekil olmayan simetrik bant matris, sadece üst bant kısmı verilir B(n,n): Tekil olmayan simetrik bant matris, sadece üst bant kısmı verilir n: A ve B nin boyutu iBantA: A nın yarı bant genişliği iBantB: B nin yarı bant genişliği m: Hesaplanması istenen özdeğer sayısı
ri. co
' ' ' ' ' ' '
DSearch ana programı
em de r
' B=M kütle matrisinin üst yarı bantındaki sayılar DATA 1.170,0,0.2025,-0.14625 DATA 0.270,0.14625,-0.10125,0 DATA 1.170,0,0.2025,-0.14625 B nin üst bantı içindeki elemanları DATA 0.270,0.14625,-0.10125,0 DATA 1.170,0,-0.14625,0 DATA 0.270,-0.10125,0,0 DATA 0.135,0,0,0
DEFINT I-N DEFDBL A-H, O-Z
DECLARE DECLARE DECLARE DECLARE
SUB SUB SUB SUB
DSearch (n, MaxBant, A(), iBantB, B(), m, aLamda(), X(), nFound) Determinant (n, Z(), aLamda(), u2, nLess, nFound, det, Power) Factor (n, MaxBant, Z(), iTekil, Eps, nFact) Powerinvers (n, Z(), x1(), y(), y1(), y2(), w(), B(), MaxBant, iBantB, u1, u2, u3, iter)
CLS : ' Ekranı temizle
w
w
w .e
READ n: ' denklem sayısını oku READ iBantA: ' K nın yarı bant genişliğini oku READ iBantB: ' b nin yarı bant genişliğini oku READ m: ' hesaplanması istenen özdeğer sayısını oku IF m < 1 THEN m = 1 IF m > n THEN m = n
' Max bant genişliği MaxBant = iBantA IF iBantB > MaxBant THEN MaxBant = iBantB ' Setup dimentions of arrays DIM A(n, MaxBant) AS DOUBLE DIM B(n, MaxBant) DIM aLamda(m, 2): ' Özdeğerler DIM X(n, m): ' Özvektörler ' A=K nın üst yarı bantındaki sayıları oku: FOR i = 1 TO n FOR j = 1 TO MaxBant A(i, j) = 0 NEXT j FOR j = 1 TO iBantA READ A(i, j) NEXT j NEXT i
Devamı sonraki sayfada
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
264
265
35. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - DSearch
' B=M nın üst yarı bantındaki sayıları oku: FOR i = 1 TO n FOR j = 1 TO MaxBant B(i, j) = 0 NEXT j FOR j = 1 TO iBantB READ B(i, j) NEXT j NEXT i
m
DSearch ana devamı
tla
sn o
' Çıktılar PRINT "DSearch Sonuçları:" IF nFound = 0 THEN PRINT "Hiçbir özdeğer bulunamadı!" ELSE FOR i = 1 TO nFound aLamda = aLamda(i, 1) Omega = SQR(ABS(aLamda)) T = 2 * (4 * ATN(1)) / Omega F=1/T PRINT "Özdeğer Lamda"; i; "="; aLamda PRINT "Açısal frekans Omega"; i; "="; Omega; "rad/s" PRINT "Periyot T"; i; "="; T; "s" PRINT "Frekans f"; i; "="; F; "Hz" PRINT "Mod"; i; ":" FOR j = 1 TO n PRINT USING " ##.####"; X(j, aLamda(i, 2)); NEXT j PRINT : PRINT NEXT i PRINT END IF END ' DSearch sonu
ri. co
CALL DSearch(n, MaxBant, A(), iBantB, B(), m, aLamda(), X(), nFound)
em de r
SUB Determinant (n, Z(), aLamda(), u2, nLess, nFound, det, Power) '----------Determinant of the matrix Z--------------------------nLess = 0 det = 1 Power = 0 FOR i = 1 TO n IF Z(i, 1) < 0 THEN nLess = nLess + 1 det = det * Z(i, 1) IF i <= nFound THEN det = det / (u2 - aLamda(i, 1)) WHILE ABS(det) > 1 det = det * .0625 Power = Power + 4 WEND WHILE (ABS(det) < .0625) det = det * 16 Power = Power - 4 WEND NEXT i
w
w
w .e
END SUB ' Determinant sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
265
266
35. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - DSearch
SUB DSearch (n, MaxBant, A(), iBantB, B(), m, aLamda(), X(), nFound) '-----------------------------------------------------------------------------------' (A-Lamda*B)*X=0 genel özdeğer denkleminden tüm veya en küçük birkaç ' özdeğerini ve bunlara ait özvektörlerini hesaplar.
' Çıktılar: ' ALamda(n,2): ' X(i,1), i=1,2,..,m nolu Özdeğerler ' X(i,2): i. özdeğerin X(n,m) vektöründeki özvektörünün kolon numarası ' X(n,m): Özvektörler ' Metod: Search and power invers vector iteration
sn o
tla
' Kaynak: "BALFOUR, J., Computer Analysis of Structural Framework ' Oxfort University Press, New York, 1992, 421-429" den alınmış ' iyileştirilmiş ve basitleştirilmiştir. '-----------------------------------------------------------------------------------DIM Z(n, MaxBant), x1(n), y(n), y1(n), y2(n), w(n, 6): ' Work arrays Eps = .000001: 'öngörülen hassasiyet iTrue = -1: iFalse = 0 nFound = 0 nCalc = 0 u1 = 0 u2 = 0 nFact = 0 iter = 0 WHILE nFound < m
m
Veriler: A(n,n): Tekil olmayan simetrik bant matris. Sadece üst bant kısmı verilir B(n,n): Tekil olmayan simetrik bant matris. Sadece üst bant kısmı verilir n: A ve B nin boyutu iBantA: A nın yarı bant genişliği iBantB: B nin yarı bant genişliği m: Hesaplanması istenen özdeğer sayısı
ri. co
' ' ' ' ' ' '
em de r
' Get Start values for accelerated secant method u1 = 0 u2 = 0 FOR i = 1 TO n FOR j = 1 TO MaxBant Z(i, j) = A(i, j) NEXT j NEXT i
CALL Factor(n, MaxBant, Z(), iTekil, Eps, nFact): ' Factor CALL Determinant(n, Z(), aLamda(), u2, nLess, nFound, det1, Power1): ' Determinant FOR i = 1 TO n y1(i) = RND ' Generate random numbers WHILE y1(i) = 0 y1(i) = RND WEND NEXT i
w
w
w .e
' Use power invers iteration to calculate u2 WHILE iter < 5 CALL Powerinvers(n, Z(), x1(), y(), y1(), y2(), w(), B(), MaxBant, iBantB, u1, u2, u3, iter) u2 = u3 WEND ' Check that u2 has not jumped any eigenvaues. If so then divide ' u2 by no. nLess+1 and redo until u2 is to left of next eigenvalue iDone = iFalse WHILE iDone = iFalse FOR i = 1 TO n FOR j = 1 TO MaxBant Z(i, j) = A(i, j) - u2 * B(i, j) NEXT j NEXT i CALL Factor(n, MaxBant, Z(), iTekil, Eps, nFact): ' Factorise IF iTekil = iTrue THEN u2 = .9999 * u2 ELSE CALL Determinant(n, Z(), aLamda(), u2, nLess, nFound, det, Power): ' Calc determinant and cont values
IF nLess = 0 THEN iDone = iTrue ELSE u2 = u2 / (nLess + 1) END IF WEND det2 = det Power2 = Power ' This part uses the accelerated secant method
Dsearch devam ediyor
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
266
267
35. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - DSearch
' to jump over one or more eigenvalues acc = 2: ' acceleration number WHILE (nLess <= nFound) 4690 FOR i = 1 TO n: ' Calculate the coefficient matrix FOR j = 1 TO MaxBant Z(i, j) = A(i, j) - u2 * B(i, j) NEXT j NEXT i
m
Dsearch devamı
CALL Factor(n, MaxBant, Z(), iTekil, Eps, nFact): ' Factor IF iTekil = iTrue THEN u2 = .9999 * u2: GOTO 4690
sn o
' if change less then %1 then accelerate the method IF ABS((u3 - u2) / u2) < .01 THEN acc = 2 * acc 4900 u1 = u2 det1 = det2 Power1 = Power2 u2 = u3 WEND ' end of Secant method
tla
' if method has coverged then avoid the risk of division by use ' simple scaling IF (ABS((u2 - u1) / u2) > Eps) OR (nLess > nFound) GOTO 4850 u3 = 1.0001 * u2 GOTO 4900 4850 T = det2 - det1 * 2 ^ (Power1 - Power2) IF T = 0 THEN PRINT "Zero division occured, possibly A or B singular!" END END IF u3 = u2 - acc * det2 * (u2 - u1) / T
ri. co
CALL Determinant(n, Z(), aLamda(), u2, nLess, nFound, det2, Power2): ' Calc determinant count eigenvalues
em de r
nCalc = nFound WHILE (nCalc < nLess) FOR i = 1 TO n y1(i) = RND WHILE y1(i) = 0 y1(i) = RND: ' generate random numbers WEND NEXT i iDone = iFalse WHILE iDone = iFalse
' invers iteration CALL Powerinvers(n, Z(), x1(), y(), y1(), y2(), w(), B(), MaxBant, iBantB, u1, u2, u3, iter) IF (ABS((u3 - u2) / u2)) < Eps THEN iDone = iTrue u2 = u3 WEND
w
w
w .e
' This part calculates the eigenvector once eigenvalue ' has been found by inverse iteration nFound = nFound + 1 aLamda(nFound, 1) = u2 aLamda(nFound, 2) = nFound ' Calculate denominator Den = 0 FOR i = 1 TO n Den = Den + x1(i) * y(i) NEXT i Den = SQR(ABS(Den)) aMax = 0
' Calc the vector and aMax element FOR i = 1 TO n X(i, nFound) = x1(i) / Den IF ABS(X(i, nFound)) > ABS(aMax) THEN aMax = X(i, nFound) NEXT i
' Schmidt orthogonalisation K = nFound - 6 * ((nFound - 1) \ 6) FOR i = 1 TO n w(i, K) = B(i, 1) * X(i, nFound) FOR j = 1 TO iBantB - 1 IF i - j > 0 THEN w(i, K) = w(i, K) + B(i - j, j + 1) * X(i - j, nFound) IF i + j <= n THEN w(i, K) = w(i, K) + B(i, j + 1) * X(i + j, nFound) NEXT j NEXT i
Dsearch devam ediyor
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
267
268
35. PROGRAMLAR: Genel özdeğer ve özvektör hesabı - DSearch
Dsearch devamı
END SUB ' Dsearch sonu
m
FOR j = 2 TO MaxBant IF i < MaxBant THEN iFin = i - 1 ELSE iFin = MaxBant - j FOR K = 1 TO iFin IF j + K > MaxBant THEN EXIT FOR Z(i, j) = Z(i, j) - Z(i - K, K + 1) * Z(i - K, j + K) * Z(i - K, 1) NEXT K Z(i, j) = Z(i, j) / Z(i, 1) NEXT j NEXT i nFact = nFact + 1 END SUB ' Factor sonu
sn o
' Sorting eigenvalues iDone = iFalse WHILE iDone = iFalse iDone = iTrue FOR K = 1 TO nFound - 1 IF aLamda(K, 1) > aLamda(K + 1, 1) THEN iDone = iFalse T = aLamda(K, 1) aLamda(K, 1) = aLamda(K + 1, 1) aLamda(K + 1, 1) = T T = aLamda(K, 2) aLamda(K, 2) = aLamda(K + 1, 2) aLamda(K + 1, 2) = T END IF NEXT K WEND
ri. co
' end of find eigenwector IF u2 <= u1 THEN nCalc = nCalc + 1 nFact = 0 iter = 0 WEND WEND
SUB Factor (n, MaxBant, Z(), iTekil, Eps, nFact) 'This subroutine decomposes symmetrik, positive definit, banded 'matrix Z in the form U(Transpoz) D U '----------------------------------------------------------------------iTekil = 0: ' Nonsingular FOR i = 1 TO n IF i < MaxBant THEN iFin = i - 1 ELSE iFin = MaxBant - 1 FOR K = 1 TO iFin Z(i, 1) = Z(i, 1) - Z(i - K, K + 1) * Z(i - K, K + 1) * Z(i - K, 1) IF ABS(Z(i, 1)) < Eps THEN iTekil = 1: ' Matrix Singular EXIT SUB END IF NEXT K
tla
' Normalise FOR i = 1 TO n X(i, nFound) = X(i, nFound) / aMax NEXT i
em de r
SUB Powerinvers (n, Z(), x1(), y(), y1(), y2(), w(), B(), MaxBant, iBantB, u1, u2, u3, iter) ' This subroutine performs one cycle of vector inverse iteration and vector orthogonalises ' the trial vector to the last six eigenvalues to allow for multiple roots '-------------------------------------------------------------------------------------------------FOR i = 1 TO n y(i) = y1(i) NEXT i
w
w
w .e
' This part solves a system of linear equation where ' Coefficient matrix has been decomposed using subrotine Factor ' Forward subtitution FOR i = 1 TO n IF i > MaxBant - 1 THEN iFin = MaxBant - 1 ELSE iFin = i - 1 S=0 IF i <> 1 THEN FOR j = 1 TO iFin S = S + Z(i - j, j + 1) * Z(i - j, 1) * x1(i - j) NEXT j END IF x1(i) = (y(i) - S) / Z(i, 1) NEXT i ' Backward subtitution FOR i = 1 TO n - 1 IF i > MaxBant - 1 THEN iFin = MaxBant - 1 ELSE iFin = i FOR j = 1 TO iFin x1(n - i) = x1(n - i) - Z(n - i, j + 1) * x1(n - i + j) NEXT j NEXT i ' Calculate the weighted vector FOR i = 1 TO n y(i) = B(i, 1) * x1(i) FOR j = 1 TO iBantB - 1 IF i - j > 0 THEN y(i) = y(i) + B(i - j, j + 1) * x1(i - j) IF i + j <= n THEN y(i) = y(i) + B(i, j + 1) * x1(i + j) NEXT j NEXT i ' Calculate new trial vector based upon the weighted vector FOR i = 1 TO n y2(i) = y(i) NEXT i IF (nFound < 6) THEN iFin = nFound ELSE iFin = 6
' Orthogonalise for last six vector, '-------------------------------------
FOR j = 1 TO iFin Alfa = 0 FOR i = 1 TO n Alfa = Alfa + x1(i) * w(i, j) NEXT i FOR i = 1 TO n y2(i) = y2(i) - Alfa * w(i, j) NEXT i NEXT j ' Denominater Den = 0 FOR i = 1 TO n Den = Den + x1(i) * y(i) NEXT i ' New trial vector Den = SQR(ABS(Den)) FOR i = 1 TO n y2(i) = y2(i) / Den NEXT i Anum = 0 ' New estimated aLamda (u3) Den = Den * Den FOR i = 1 TO n Anum = Anum + x1(i) * y1(i) y1(i) = y2(i) NEXT i u3 = u1 + Anum / Den iter = iter + 1 END SUB ' Powerinvers sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
268
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz
sn o
Ahmet TOPÇU
tla
Ders notları 2014
f(x)=0
em de r
y
w
w
w .e
x1
x3
x x2
f(x)
36
DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI) • • • • • • •
Bolzano Modified Regula Falsi Dekker-Brent Newton-Raphson Bairstow Müller Jenkins-Traub
Metodları
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
270
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI) Bir fonksiyonun köklerini bulma problemi matematikçilerden çok uygulamalı bilim dalı çalışanlarının; özellikle mekanik, elektrik ve elektronik mühendislerinin ilgi alanına girer.
ri. co
m
Bir değişkenin, diyelim x, yüksek dereceden kuvvetlerini, tersini, logaritmik veya trigonometrik terimlerini içeren f(x) fonksiyonuna doğrusal olmayan fonksiyon denir. f(x) sadece x in pozitif kuvvetlerini içeriyorsa “polinom”, aksi halde “taransandant” fonksiyon adı verilir. Örnekler: f(x)=3x-5 doğrusal bir fonksiyon, f(x)=5x4-3x3+x2+8x-12 doğrusal 2 olmayan bir fonksiyon(polinom), f ( x) = 2 x + Sin( x) 2 − e x doğrusal olmayan bir (taransandant) x 3−1 fonksiyondur.
tla
f(x)=0 fonksiyonun kökü; fonksiyonda yerine konulduğunda fonksiyonu sıfır yapan bir değerdir. Bir a sayısı ile f(a)=0 oluyorsa a sayısı f(x) fonksiyonun köküdür denir. Bu şu anlama gelmektedir: Grafiği çizildiğinde fonksiyonun x eksenini kestiği noktadaki x değeri fonksiyonun köküdür, çünkü f(x) bu x noktasında sıfır olmuştur. Bu nedenle fonksiyonun köküne fonksiyonun sıfır noktası(fonksiyonu sıfır yapan değer anlamında) da denir. Bir veya çok sayıda kök olabilir, kökler gerçek veya sanal olabilir.
em de r
sn o
Aşağıdaki grafikte y = f (x ) fonksiyonunun x eksenini x1, x2 ve x3 noktalarında kestiği, bu noktalarda f(x1)=0, f(x2)=0 ve f(x3)=0 olduğu görülmektedir. x1, x2 ve x3 değerleri bu fonksiyonun kökleri(sıfır noktaları) dır.
w
w
w .e
Basit örnekler:
1. f(x) = x+4=0 ın sadece bir kökü vardır: x=-4. 2. f(x) = x2-4=0 ın iki gerçek kökü vardır: x1=2, x2=-2. 3. f(x) = x2+4=0 ın iki sanal kökü vardır: x1 ,2 = m − 4 = m2 − 1 = m2i .
2 4. f(x) =ax2+bx+c=0 ın iki kökü vardır: x1, 2 = − b m b − 4 ac . Kökler gerçek veya sanal 2a olabilir. Kök içindeki b 2 − 4ac değerine diskriminant(ayıran, belirten, fark yaratan) denir. Diskriminant b 2 − 4ac > 0 ise her iki kök de gerçektir. b 2 − 4ac = 0 durumunda her iki kök de gerçek fakat birbirine eşittir. b 2 − 4ac < 0 durumunda ise her iki kök sanaldır.
5. f(x)=Sin(x)=0 fonksiyonu periyodiktir, sonsuz kökü vardır: k=0, 1, 2, … olmak üzere xk=±k π.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
270
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
271
m
Yukarıdaki basit çözümler klasik matematikten bilinen formüller ile yapılmıştır ve “analitik” veya “kapalı çözüm” adı verilir. Çoğu kez kapalı çözüm yoktur veya kullanılamayacak kadar karmaşıktır. Örnek: Üçüncü ve dördüncü derece polinomların çözümü için de formüller vardır, fakat kullanışsızdır. a0+a1 x+a2x2+…+ an xn = 0 denkleminin n tane kökü vardır. Fakat n≥5 durumunda x1, x2, …, xn kökleri için formül verilemeyeceği Abel1 tarafından ispatlanmıştır. Çözüm sadece nümerik yöntemlerle bulunabilir.
ri. co
Teknik problemlerde kullanılabilecek çok sayıda nümerik metot vardır. Hepsi de iterasyon(tekrarlama) temellidir. Her hangi bir fonksiyon için biri iyi sonuç verirken bir diğeri çözüm vermeyebilir. Çözüm bulunsa bile çoğu kez yaklaşıktır.
Bu bölümde, herhangi bir fonksiyonun [a,b] aralığındaki bir gerçek kökünün iterasyon ile belirlenmesinin temel ilkeleri örnekler ile açıklanacaktır. Ayrıca, teorisine girilmeksizin, sıkça kullanılan metotların QBASIC programları ve çözüm örnekleri verilecektir. Basit iterasyon metodu(Picard2 metodu, sabit nokta iterasyonu, doğrusal iterasyon):
em de r
sn o
tla
f(x)=0 denklemininin [a,b] aralığında bir gerçek kökü olduğu biliniyorsa, bu kökün belirlenmesi için: 1) f(x) fonksiyonunun terimlerinin birinden bir x çekilir, sol tarafa yazılır. Örnek: f(x)=x32x+1=0 fonksiyonu yerine, aynı anlama gelen x= (x3+1)/2 yazılır. 2) Kökün sayısal değeri için x0 ile göstereceğimiz bir tahmin yapılır x=x0. Tahmin edilen bu x0 değerine başlangıç değeri denir. Başlangıç değeri elden geldiğince aranan köke yakın olmalıdır. 3) Başlangıç değeri x=(x3+1)/2 ifadesinin sağ tarafında yerine konarak sol taraftaki x yeni değeri hesaplanır. Bu yeni değere x1 diyelim: x1=(x03+1)/2. x1 sayısı kökü aranan f(x)=x32x+1 fonksiyonunda yerine konur. Eğer x1 aranan kök ise f(x1)=x13-2x1+1≈0 olur, iterasyon durdurulur, aksi durumda sonraki adım ile devam edilir. 4) x1 değeri x=(x3+1)/2 ifadesinin sağ tarafında yerine konarak sol taraftaki x yeni değeri hesaplanır. Bu yeni değere x2 diyelim: x2=(x13+1)/2. x2 sayısı kokü aranan f(x)=x3-2x+1 fonksiyonunda yerine konur. Eğer x2 aranan kök ise f(x2)=x23-2x2+1≈0 olur, iterasyon durdurulur, aksi durumda sonraki adım ile devam edilir. 5) ....
Yukarıda adımları verilen iterasyon yöntemi, sayısal örneklerden de anlaşılacağı gibi, çok basittir. Ancak, örneklere geçmeden önce, açıklanması gereken sorular vardır.
w
w
w .e
Sorular: 1) Hangi [a,b] aralığında kök arayacağımı nereden bileyim? 2) [a,b] aralığında kök olup olmadığını nasıl anlarım 3) x0 başlangıç değerini nasıl tahmin edeyim? 4) İterasyonu ne zaman durdurayım 5) İterasyon her zaman çözüm verir mi(yakınsar mı)? 6) Yakınsamazsa ne yapayım? Cevaplar: 1) Fonsiyonu başka biri vermişse a ve b sınırlarını, yani [a,b] aralığını da verir. Veya fonksiyonu bir fiziksel problemin çözümü için biz oluşturmuşsak hangi aralıkta çözüm aradığımızı da biliriz. Çünkü çözüm salt matematikten öte fiziksel bir anlam da taşımaktadır. 2) [a,b] aralığında kök olup olmadığını ya biri bize söylemiştir veya fonksiyonun fiziksel anlamından biliriz ya da şöyle anlayabiliriz: a ve b değerleri f(x) fonksiyonunda yerine konur, f(a) ve f(b) değerleri hesaplanır. Eğer •
f(a) ve f(b) ters işaretli ise [a,b] aralığında kök vardır. Çünkü fonksiyon artıdan eksiye veya eksiden artıya geçmektedir, dolayısıyla x eksenini kesmek zorundadır.
•
f(a) ve f(b) aynı işaretli ise [a,b] aralığında kök yoktur, yani fonksiyon x eksenini kesmiyor demektir.
•
f(a)=0 ve/veya f(b)=0 oluyorsa a ve/veya b köktür.
KÖK
1
Niels Henrik Abel, 1802-1829, Norveçli matematikçi. n≥5 olması halinde a0+a1x+a2x2+....+anxn = 0 ifdesinin kapalı çözümünün olmadığını 1824 yılında ispatldı. Abel'den önceki matematikçiler 300 yıl boyunca çözümün varlığını aramışlardır. 2
Charles Émile Picard, 1856–1941, Fransız matematikçi. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
271
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
272
3) x0 başlangıç değerini ya biri bize söylemiştir veya fonksiyonun fiziksel anlamından biliriz ya da şöyle seçebilirz: x0=a, veya x0=b veya x0=(a+b)/2.
m
4) İterasyonu durdurmak için şu koşullar kullanılabilir: i adımda |f(xi)|<ε veya |xi- xi-1|<ε olunca iterasyon durdurulur. Burada ε yeterince küçük pozitif bir sayıdır, sonucun hassasiyetini ve iterasyon sayısını etkiler. Mesala ε=0.0001 seçilebilir. |f(xi)|<0.0001 olduğunda, f(xi) ≈0 dır ve son hesaplanan xi köktür anlamındadır. ε ne denli küçük seçilirse sonuç o denli gerçeğe yakın olur, fakat iterasyon sayısı artar.
ri. co
5) İterasyonun yakınsaması fonksiyonun ne denli karmaşık olduğuna ve x0 başlangıç değerinin aranan köke ne denli yakın olduğuna bağlıdır, yakınsamayabilir. 6) İterasyon yakınsamazsa başka bir x0 başlangıç değeri seçilir. Gene yakınsamazsa başka bir iterasyon metodu ile çözüm bulunmaya çalışılır.
Sayısal örnek 1: f(x)=x3-2x+1=0 fonksiyonunun [a,b]=[0,0.9] aralığında kökü var mıdır? Varsa kökü belirleyiniz.
tla
[0, 0.9] aralığında kök var mı? f(0)=1>0 ve f(0.9)=-0.07<0 olduğunda bu aralıkta kök vardır. Fonksiyonun -2x terimindeki x i çekerek sol tarafa geçirelim:
sn o
x3-2x+1=0 → x=(x3+1)/2. x0=0, ε=0.001 seçelim. İterasyon adımları aşağıda verilmiştir: Sağ taraftan hesplanan yeni x
Önceki x
Yeni x için fonksiyonun aldığı değer
Adım x x=(x3+1)/2 f(x)=x3-2x+1 ------------------------------------------------------x x 0 0 0.5 0.1250 1 0.5 0.5625 x 0.0530 2 0.5625 0.5890 x 0.0263 3 0.5890 0.6022 0.0140 4 0.6022 0.6092 0.0077 5 0.6092 0.6130 0.0043 6 0.6130 0.6152 0.0024 7 0.6152 0.6164 0.0014 0.6171 değeri için |f(0.6171)|=0.0007< ε=0.001 olduğundan iterasyon durduruldu 8 0.6164 0.6171 x9 0.0007 0
1
em de r
2 3
Kök
w
w
w .e
Sayısal örnek 2: = − √ + 6 = 0 fonksiyonunun [a,b]=[0, 5] aralığında kökü var mıdır? Varsa kökü belirleyiniz. [0, 5] aralığında kök var mı? f(0)=-2.4<0 ve f(5)=1.7>0 olduğunda bu aralıkta kök vardır. Fonksiyonun x terimini çekerek sol tarafa geçirelim:
= −√ +6=0 → =√ +6 x0=0, ε=0.0001 seçelim. İterasyon adımları aşağıda verilmiştir: Sağ taraftan hesplanan yeni x
Önceki x
Yeni x için fonksiyonun aldığı değer
Adım x =√ +6 = −√ +6=0 -------------------------------------------------------------x 0 0 2.4495 x -0.4573 1 2.4495 2.9068 x -0.0776 2 2.9068 2.9844 x -0.0130 3 2.9844 2.9973 -0.0022 4 2.9973 2.9995 -0.0004 2.9999 değeri için |f(2.9999)|=0.0000<ε=0.0001 olduğundan iterasyon durduruldu 5 2.9995 2.9999 x6 0.0000 0
1 2 3
Kök Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
272
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
273
Bu örnek için hesap makinenizin açı
birimini radyan olarak ayarlamalısınız! Sayısal örnek 3: 1 f x = x - Sin x =0 fonksiyonunun [a,b]=[0,1] aralığında kökü var mıdır? Varsa kökü belirleyiniz.
e
[0, 1] aralığında kök var mı? f(0)=1>0 ve f(1)=-0.47<0 olduğunda bu aralıkta kök vardır. Fonksiyonun bir x terimini çekerek sol tarafa geçirelim. Ancak bu fonksiyondaki hiç bir terimi 1 çekilemez. Bu nedenle x - Sin x =0 eşitliği bozulmayacak şekilde her iki tarafa x ekleyelim: 1
e
e
ex
- Sin x
x0=0, ε=0.001 seçelim. İterasyon adımları aşağıda verilmiştir:
Yeni x için fonksiyonun aldığı değer
Sağ taraftan hesplanan yeni x
Önceki x
=x+
Adım x
ri. co
1
x - Sin x =0 → x+ x - Sin x =x → x=x+
m
e
1
− Sin x
=
1 ex
- Sin x
-------------------------------------------------------------x x 0 0 1 -0.4736 1 1 0.5264 x 0.0883 2 0.5264 0.6147 x -0.0359 3 0.6147 0.5788 0.0136 4 0.5788 0.5924 -0.0054 5 0.5924 0.5870 0.0021 6 0.5870 0.5891 -0.0008 0.5883 değeri için |f(0.5883)|=0.0003< ε=0.001 x olduğundan iterasyon durduruldu 7 0.5891 0.5883 0.0003 0
1 2
sn o
tla
3
8
Kök
em de r
Sayısal örnek 4: f(x)=x3-3=0 fonksiyonunun [a,b]=[1, 5] aralığında kökü var mıdır? Varsa kökü belirleyiniz. [1, 5] aralığında kök var mı? f(1)=-2<0 ve f(5)=122>0 olduğunda bu aralıkta kök vardır. Fonksiyonu xx2-3=0 şeklinde yazalım ve x i çekerek sol tarafa geçirelim: xx2-3=0 -> x=3/x2. x0=1, ε=0.001 seçelim. İterasyon adımları aşağıda verilmiştir: Önceki x
Yeni x için fonksiyonun aldığı değer
Sağ taraftan hesplanan yeni x
x=3/x2 f(x)=x3-3 Adım x ------------------------------------------------------x x 0 1 3.0 24.0 1 3.0 0.3333 x -2.9630 2 0.3333 27.0054 x 19691.8122 3 27.0054 0.0041 x -3.0 0
1 2
YAKINSAMIYOR: f(x) fonksiyonunun aldığı değer bir adımda büyüyor diğer adımda
küçülüyor. İterasyona sonsuz kez devam edilse dahi |f(x)|<ε olamayacağı anlaşılıyor.
w .e
3
Newton-raphson(Newton) metodu:
f(x) fonksiyonun türevi olan f'(x) fonksiyonu da biliniyorsa kullanılabilir. Basit iterasyon metoduna nazaran daha hızlı yakınsar.
w
w
4
Soldaki çizimde görülen f(x) fonksiyonun verilmiş x0 başlangıç değerini(bilinen değer) kullanarak köke daha yakın olan x1 değerini bulabilir miyiz? Evet: Teğet
x0 bilinen değerini fonksiyonda yerine koyarak f(x0) ordinatını hesaplayabiliriz. Bu ordinatın f(x) eğrisini kestiği T noktasında eğrinin teğetini çizdiğimizi düşünelim. Teğetin x eksenini kestiği noktaya x1 diyelim. Teğetin eğim açısı α olsun. x1Tx0 alanı dik üçgendir. Bu bilgileri kullanak x1 değerini hesaplamaya çalışalım. Teğetin eğimi
KÖK
= dır. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
273
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
274
Diğer taraftan, bir fonksiyonun bir noktadaki teğetinin eğimininin fonksiyonun o noktadaki türevine eşit olduğunu biliyoruz: = ′ " . f(x) verilmiş fonksiyon olduğundan türevi alınarak f'(x0) hesaplanabilir. Yukarıdaki ifadede yerine yazarsak ′ " = olur. Bu
=
"
−
m
ifadede sadece x1 bilinmemektedir, çekerek: #
#
#
x1=x0-∆
ri. co
bulunur. Şekilden de görüldüğü gibi, bu değere karşılık gelen f(x1)
olur. Eğer |∆| yeterince küçük ise x1 aranan köktür. Aksi halde x0=x1 alınarak yeni bir yaklaşım, x2 hesaplanır.
tla
Yukarıdaki son formül tekrar-tekrar kullanılarak(iterasyon) kök bulunabilir. f(x) ve [a,b] aralığı verilmiştir. [a,b] aralığında kök olup olmadığı kontrol edilir. Kök varsa f'(x) türev fonksiyonu hesaplanır, x0 başlangıç değeri ve ε hassasiyeti seçilir, sonra iterasyona başlanır.
0. adım: f(x0), f'(x0), ∆=
sn o
İterasyon adımları:
ve
#
=
"
− ∆ değerlerini hesapla |∆|<ε ise x1 aranan köktür,
iterasyonu durdur. Aksi halde bir sonraki adım ile devam et. 1. adım: f(x1), f'(x1), ∆= ve % = − ∆ değerlerini hesapla |∆|<ε ise x2 aranan köktür, #
iterasyonu durdur. Aksi halde bir sonraki adım ile devam et. 2. adım: f(x2), f'(x2), ∆= & ve ' = % − ∆ değerlerini hesapla |∆|<ε ise x3 aranan köktür, &
em de r
#
iterasyonu durdur. Aksi halde bir sonraki adım ile devam et. 3. adım: .... Sayısal örnek 5: f(x)=x3-2x+1=0 fonksiyonunun [a,b]=[0,0.9] aralığında kökü var mıdır? Varsa kökü belirleyiniz. [0, 0.9] aralığında kök var mı? f(0)=1>0 ve f(0.9)=-0.07<0 olduğunda bu aralıkta kök vardır. Fonksiyonun türevi f'(x)=3x2-2 dir. x0=0, ε=0.001 seçelim.
Fonksiyonun x için aldığı değer
Önceki x
Fonksiyonun türevinin x için aldığı değer
x deki değişim miktarı
Yeni x
Adım x f(x)=x3-2x+1 f'(x)=3x2-2 ∆=f(x)/f'(x) x-∆ ----------------------------------------------------------------------------------------------------x x 0 0 1 -2 -0.5 0.5 x 1 0.5 0.125 -1.25 -0.1 0.6 x 2 0.6 0.016 -0.92 -0.0174 0.6174 x 3 0.6174 0.0005 -0.8565 -0.0006 0.6180 0
1
2 3 4
Değişim miktarı |-0.0006|<ε=0.001 olduğundan iterasyon durduruldu
w
w
w .e
İterasyon adımları aşağıda verilmiştir:
Kök
Basit iterasyon ile aynı fonksiyon örnek 1 de 9. adımda yakınsamamıştı, bulunan kök 0.6171 idi. Newton-Raphson ise 4 iterasyon sonucunda kökü 0.6180 olarak vermiştir. 6 hane hassasiyetli kök 0.618034 dir. Buna göre Newton-Raphson metodu daha hızlıdır ve daha doğru sonuç vermiştir.
Sayısal örnek 6:
Bu örnek için hesap makinenizin açı birimini radyan olarak ayarlamalısınız!
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
274
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
f x =
1 ex
275
- Sin x =0 fonksiyonunun [a,b]=[0,1] aralığında kökü var mıdır? Varsa kökü belirleyiniz.
[0,1] aralığında kök var mı? f(0)=1>0 ve f(1)=-0.047<0 olduğunda bu aralıkta kök vardır. 1 Fonksiyonun türevi f ' x =- x - Cos x =0 dir. x0=0, ε=0.001 seçelim. e
f x =
Adım x
1 ex
- Sin x =0
f ' x =-
1 ex
- Cos x =0
x deki değişim miktarı
Yeni x
ri. co
Fonksiyonun türevinin x için aldığı değer
Fonksiyonun x için aldığı değer
Önceki x
m
İterasyon adımları aşağıda verilmiştir:
∆=f(x)/f'(x)
x-∆
----------------------------------------------------------------------------------------------------x x 0 0 1 -2 -0.5 0.5 x 1 0.5 0.1271 -1.4841 -0.0856 0.5856 x 2 0.5856 0.0041 -1.3902 -0.0029 0.5885 x 3 0.5885 0.0000 -1.3869 0.0000 0.5885 0
tla
1
Değişim miktarı |0.0000|<ε=0.001 olduğundan iterasyon durduruldu
2 3 4
Kök
sn o
Basit iterasyon ile aynı fonksiyonun örnek 3 de 8 iterasyon sonucunda bulunan kökü 0.5883 idi. Newton-Raphson ise 4 iterasyon sonucunda kökü 0.5885 olarak vermiştir. 6 hane hassasiyetli kök 0.588533 tür. Newton-Raphson metodu daha hızlıdır ve daha doğru sonuç vermiştir. Sayısal örnek 7: f(x)=x3-3=0 fonksiyonunun [a,b]=[1, 5] aralığında kökü var mıdır? Varsa kökü belirleyiniz. [1, 5] aralığında kök var mı? f(1)=-2<0 ve f(5)=122>0 olduğunda bu aralıkta kök vardır.
em de r
Fonksiyonun türevi f(x)=3x2 dir. x0=1, ε=0.001 seçelim. İterasyon adımları aşağıda verilmiştir: Fonksiyonun Fonksiyonun x için aldığı değer
Önceki x
türevinin x için aldığı değer
x deki değişim miktarı
Yeni x
x-∆ Adım x f(x)=x3-3 f'(x)=3x2 ∆=f(x)/f'(x) ----------------------------------------------------------------------------------------x 0 1 -2 3 -0.6667 1.6667 1 1.6667 1.6299 8.3337 0.1956 1.4711 2 1.4711 0.1837 6.4924 0.0283 1.4428 3 1.4428 0.0034 6.2450 0.0005 1.4423
w .e
0
Değişim miktarı |0.0005|<ε=0.001 olduğundan iterasyon durduruldu
x1 x2 x3 x4
Kök
w
w
Basit iterasyon ile aynı fonksiyon örnek 4 de yakınsamamıştı. Newton-Raphson ise 4 iterasyon sonucunda kökü 1.4423 olarak vermiştir. Kökün gerçek değeri √3 = 1.44224957 dir. Newton-Raphson metodu yakınsamıştır.
Her iterasyon yönteminin kendine özgü iyi-kötü tarafları vardır. Hangisinin "en iyi" olduğunu söylemek zordur. Mesala, yukarıdaki örneklerden anlaşıldığı gibi, Newton-Rahson daha hızlı yakınsar, fakat fonksiyonun analitik türevi her zaman hesaplanamaz veya türev sıfır olabilir. Diğer taraftan aynı fonksiyon için biri yakınsarken diğeri yakınsamayabilir. Önemli olan, fonksiyona uygun bir metodun seçilmesi ve x0 başlangıç değerinin aranan köke mümkün olduğunca yakın tahmin edilmesidir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
275
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
276
Aitken iterasyon hızlandırıcısı İterasyon metotlarında AITKEN hızlandırıcısı kullanılarak iterasyon hızlandırılabilir. k. adımda hesaplanan x değerini xk, k-1. adımdakini xk-1, k-2. adımdakini xk-2 ile gösterelim. AITKEN’e göre xk nın iyileştirilmiş değeri
←x − k
( x k − x k −1 ) 2 x k − 2x k −1 + x k −2
dir. Bu formülde birbini izleyen üç değer olduğundan üçüncü ve sonraki
m
x
k iyileştirilmiş
adımlarda uygulanabilir. Örnek olması açısından, Örnek 1 in ilk üç adımı sonunda bulunan x1=0.5, x2=0.5625, x3=0.5890 değerlerini kullanarak x3 ün iyileştirilmiş değerini bulalım:
(0.5890 − 0.5625)2 = 0.6085 0.5890 − 2 ⋅ 0.5625 + 0.5
ri. co
x 3 ← 0.5890 −
Örnek 1 de 5. adımda bu değere yaklaşılmıştır.
Simgesel program kodları: Bildiğiniz bir programlama dili ile kodlayarak test ediniz. Maxit değişkeni neden kullanılmıştır? Örnek 1 için basit iterasyon(Picard iterasyunu)
tla
sn o
Maxit=100 x0=0, Eps=0.000001 Adım=0 Repeat x=x0 Fx=x*x*x-2*x+1 Fxtürev=3*x*x-2 if |Fxtürev| =1.0E-8 then Print Türev sıfır oldu, dur. Delta=Fx/Fxtürev x0=x-Delta Print Adım, x, Fx, Fxtürev, Delta, x0 Adım=Adım+1 until |Delta|Maxit
em de r
Maxit=100 x0=0, Eps=0.000001 Adım=0 Repeat x=x0 x1=(x*x*x+1)/2 Fx=x1*x1*x1-2*x1+1 Print Adım, xo, x1, Fx Adım=Adım+1 x0=x1 Until |Fx|Maxit
Örnek 1 için Newton-Raphson iterayonu
PROGRAMLAR:
w
w
w .e
1. Bolzano: f(x) transandant fonksiyonunun [a, b] aralığındaki gerçek köklerini Bolzano metoduna3 göre bulur. 2. RegulaFalsi: f(x) transandant fonksiyonunun [a, b] aralığındaki gerçek köklerini Regula-Falsi4 metoduna göre bulur. 3. DekkerBrent: f(x) transandant fonksiyonunun [a, b] aralığındaki gerçek köklerini Dekker-Brent5 metoduna göre bulur. 4. NewtonRaphson: Gerçek katsayılı f(x)=a0+a1x+a2x2+…+anxn polinomunun gerçek ve sanal köklerini Newton-Raphson6 metoduna göre bulur. 5. Bairstow: Gerçek katsayılı f(x)=a0+a1x+a2x2+…+anxn polinomunun gerçek ve sanal köklerini Bairstow7 metoduna göre bulur. 6. Muller: Gerçek katsayılı f(x)=a0+a1x+a2x2+…+anxn polinomunun gerçek köklerini Müller8 metoduna göre bulur.
7. JenkinsTraub: Gerçek katsayılı f(x)=a0+a1x+a2x2+…+anxn polinomunun gerçek ve sanal köklerini Jenkins-Traub9 metoduna göre bulur. 3
Bernard Bolzano tarafından 1817 de ortaya kondu.
4
MÖ 3. yüzyıla ait bir Hindistan matematik kitabında izine rastlanmaktadır. Hint-Çin- Arap matematik dünyasından İtalyan matematikçi Leonardo Fibonacci(yaklaşık 1170-1250) tarafından 1202 yılında Avrupa’ya tanıtılmıştır. 5 1969 yılında Hollandalı Theodorus Dekker geliştirdi, Avustralyalı Richard Brent tarafından 1973 yılında iyileştirildi. Genelde Brent metodu olarak anılır. 6
İngiliz Isaac Newton 1669 da geliştirdi, 1690 yılında İngiliz Joseph Raphson(1648-1715) tarafından iyileştirildi.
7
İngiliz Leonard Bairstow tarafından 1920 yılında geliştirildi.
8
Amerikalı David E. Müler tarafından 1956 yılında yayınlandı. Michael A. G. Jenkins ve Joseph Frederick Traub tarafından 1966 yılında geliştirildi.
9
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
276
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
277
Bolzano metodu (Bisection, interval halfing, binary search)
m
Bolzano programı f(x) transandant fonksiyonunun [a, b] aralığındaki gerçek köklerini bulur. Aşağıdaki örnekler için test edilmiştir. Örnekler:
1. f(x) = 1.5 x − Tan(x) − 0.1 , aralık [- 5, 5]
ri. co
2. f(x) = 3 x + Sin(x)-e -x , aralık [- 1, 1]
3. f(x) = x 2 − Ln(x) − 2 , aralık [0.1, 3] 4. f(x) = x 8 − 1 , aralık [- 3, 3] 5x
1 + x 3 e Tan(x) − e − x , aralık [0.1, 1] Cos(x)
6. f(x) = x 3 − 21x − 20 , aralık [- 5, 8]
tla
5. f(x) = Sin
7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 , aralık [- 12, 12]
Bolzano sonuçları:
+ 1 , aralık [π , 3π ]
Bernard Bolzano 1781-1848, İtalyan asıllı Avusturyalı
sn o
8. f ( x ) = Sin (8 x ) − e
Cos ( x )
1. f(x) = 1.5 x − Tan(x) − 0.1 = 0 ın [-5,5] aralığında
em de r
bulunabilen kökleri:
2. f(x) = 3x + Sin(x)-e-x = 0 ın [-1,1] aralığında
w .e
bulunabilen kökleri:
3. f(x) = x 2 − Ln(x) − 2 = 0 ın [0.1,3] aralığında
w
w
bulunabilen kökleri:
4. f(x) = x 8 − 1 = 0 ın [-3,3] aralığında bulunabilen kökleri:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
277
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
278
5x
5. f(x) = Sin
1 + x 3 e Tan(x) − e − x = 0 ın [0.1,1] aralığında Cos(x)
ri. co
m
bulunabilen kökleri:
6. f(x) = x 3 − 21x − 20 = 0 ın [-5,8] aralığında bulunabilen
sn o
tla
kökleri:
7 . f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 = 0 ın
em de r
[-12,12] aralığında bulunabilen kökleri:
w
w
w .e
8. f ( x ) = Sin (8 x ) − e Cos ( x ) + 1 = 0 ın [π,3π] aralığında
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
278
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
MaxBul = 10: ' [a,b] aralığında en fazla 10 kök bul DIM x(MaxBul)
END 'Bolzano ana
sn o
PRINT a; "-"; b; "aralığında bulunabilen kökler(Bolzano):" PRINT FOR i = 1 TO iBulundu PRINT "x"; i; "="; x(i), "f(x"; i; ")="; fnf(x(i)) NEXT i
tla
CLS CALL Bolzano(a, b, x(), MaxBul, iBulundu) IF iBulundu = 0 THEN PRINT "Kök bulunamadı(Bolzano)": END
m
ri. co
'---------------------Ana Program Bolzano------------------------------Bolzano ' Doğrusal olmayan f(x) fonksiyonun [a,b] aralığındaki köklerini bulur ' Sadece gerçek kökler bulunur, sanal kök bulunmaz. ' Çağrılan alt programlar: Bolzano '--------------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB Bolzano (a, b, x(), MaxBul, iBulundu) ' aralığın ve fonksiyonun tanımlanması a = -5: b = 5: DEF fnf (x) = 1.5 * x - TAN(x) - .1 'a = -1: b = 1: DEF fnf (x) = 3 * x + SIN(x) - EXP(-x) 'a = .1: b = 3: DEF fnf (x) = x ^ 2 - LOG(x) - 2 'a = -3: b = 3: DEF fnf (x) = x ^ 8 - 1 'a = .1: b = 1: DEF fnf (x) = SIN(SQR(1 / COS(x) + x ^ 3 * EXP(5 * x / TAN(x)))) - EXP(-x) 'a = -5: b = 8: DEF fnf (x) = x ^ 3 - 21 * x - 20 'a = -12: b = 12: DEF fnf (x) = x ^ 8 - 170 * x ^ 6 + 7392 * x ^ 4 - 39712 * x ^ 2 + 51200 'a = 4 * ATN(1): b = 3 * a: DEF fnf (x) = SIN(8 * x) - EXP(COS(x)) + 1
279
em de r
SUB Bolzano (a, b, x(), MaxBul, iBulundu) '-----------------------------------------------------------------------' f(x) fonksiyonunun [a,b] aralığındaki gerçek köklerini bulur ' Metot: Bolzano ' Diğer adları: Bisection metodu, aralığı ikiye bölme, binary search ' f(x) fonksiyonu ana programda DEF FNF(X)=... ile tanımlanmış olmalı ' aralığın alt sınırı a ve üst sınırı b ana programda tanımlı olmalı ' MaxAaltAralik: [a, b] aralığında alınacak alt aralık sayısı ' MaxBol: alt aralığın ikiye bölme sayısı ' Hassasiyet: Hassasiyet ' MaxBul: aranacak maksimum kök sayısı ' iBulundu: bulunabilen kök sayısı ' x(MaxBul): Köklerin depolandığı vektör, ana programda boyutlandırılmış olmalı
w
w
w .e
' Çağrılan program: Yok '-----------------------------------------------------------------------MaxAaltAralik = 100 MaxBol = 50 Hassasiyet = 1E-08 iBulundu = 0 IF a = b THEN MaxAaltAralik = 1 D = (b - a) / MaxAaltAralik x2 = a WHILE x2 < b IF iBulundu >= MaxBul THEN EXIT SUB x1 = x2 x2 = x1 + D IF x2 > b THEN x2 = b
' [x1,x2] aralığında kök var mı? f1 = fnf(x1) IF ABS(f1) < Hassasiyet THEN xYeni = x1 iBulundu = iBulundu + 1 x(iBulundu) = xYeni GOTO 6 END IF f2 = fnf(x2) IF ABS(f2) < Hassasiyet THEN xYeni = x2 iBulundu = iBulundu + 1 x(iBulundu) = xYeni GOTO 6 END IF
iF1 = SGN(f1) iF2 = SGN(f2)
' [x11,x22] aralığını ikiye böl IF iF1 * iF2 <> 1 THEN x11 = x1 x22 = x2 xk = x1 FOR j = 1 TO MaxBol xYeni = .5 * (x11 + x22) f3 = fnf(xYeni) IF ABS(f3) < Hassasiyet THEN iBulundu = iBulundu + 1 x(iBulundu) = xYeni GOTO 6 END IF iF3 = SGN(f3) IF iF3 * iF1 = -1 THEN x22 = xYeni ELSE x11 = xYeni iF1 = iF3 END IF xk = xYeni NEXT j END IF 6 WEND END SUB ' Bolzano sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
279
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
280
Regula-Falsi Metodu (Method of false position, (Linear interpolation method)
m
RegulaFalsi programı f(x) transandant fonksiyonunun [a, b] aralığındaki gerçek köklerini bulur. Aşağıdaki örnekler için test edilmiştir.
Örnekler:
ri. co
1. f(x) = 1.5 x − Tan(x) − 0.1 , aralık [- 5, 5] 2. f(x) = 3 x + Sin(x)-e -x , aralık [- 1, 1]
3. f(x) = x 2 − Ln(x) − 2 , aralık [0.1, 3] 4. f(x) = x 8 − 1 , aralık [- 3, 3] 5x
1 + x 3 e Tan(x) − e − x , aralık [0.1, 1] Cos(x)
6. f(x) = x 3 − 21x − 20 , aralık [- 5, 8]
tla
5. f(x) = Sin
7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 , aralık [- 12, 12]
RegulaFalsi sonuçları:
sn o
8. f ( x ) = Sin (8 x ) − e Cos ( x ) + 1 , aralık [π , 3π ]
1. f(x) = 1.5 x − Tan(x) − 0.1 = 0 ın [-5,5] aralığında
em de r
bulunabilen kökleri:
2. f(x) = 3x + Sin(x)-e-x = 0 ın [-1,1] aralığında
3. f(x) = x 2 − Ln(x) − 2 = 0 ın [0.1,3] aralığında bulunabilen kökleri:
w
w
w .e
bulunabilen kökleri:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
280
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
281
ri. co
m
4. f(x) = x 8 − 1 = 0 ın [-3,3] aralığında bulunabilen kökleri:
5x
5. f(x) = Sin
1 + x 3 e Tan(x) − e − x = 0 ın [0.1,1] aralığında Cos(x)
em de r
bulunabilen kökleri:
sn o
6. f(x) = x 3 − 21x − 20 = 0 ın [-5,8] aralığında
tla
bulunabilen kökleri:
7 . f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 = 0 ın
8. f ( x ) = Sin (8 x ) − e Cos ( x ) + 1 = 0 ın [π,3π] aralığında
bulunabilen kökleri:
w
w
w .e
[-12,12] aralığında bulunabilen kökleri:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
281
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
iFind = 10: ' [a,b] aralığında en fazla 10 kök bul DIM x(iFind)
tla
CLS CALL RegulaFalsi(a, b, x(), iFind, iFound)
m
ri. co
'---------------------------Ana Program RegulaFalsi-------------------------RegulaFalsi ' Doğrusal olmayan bir fonksiyonun [a,b] aralığındaki köklerinin hesabı ' sanal kök bulunmaz, sadece gerçek kökler bulunur ' Çağrılan alt programlar: RegulaFalsi '---------------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB RegulaFalsi (a, b, x(), iFind, iFound) ' aralığın ve fonsiyonun tanımlanması 'a = -5: b = 5: DEF fnf (x) = 1.5 * x - TAN(x) - .1 'a = -1: b = 1: DEF fnf (x) = 3 * x + SIN(x) - EXP(-x) 'a = .1: b = 3: DEF fnf (x) = x ^ 2 - LOG(x) - 2 'a = -3: b = 3: DEF fnf (x) = x ^ 8 - 1 'a = .1: b = 1: DEF fnf (x) = SIN(SQR(1 / COS(x) + x ^ 3 * EXP(5 * x / TAN(x)))) - EXP(-x) 'a = -5: b = 8: DEF fnf (x) = x ^ 3 - 21 * x - 20 'a = -12: b = 12: DEF fnf (x) = x ^ 8 - 170 * x ^ 6 + 7392 * x ^ 4 - 39712 * x ^ 2 + 51200 a = 4 * ATN(1): b = 3 * a: DEF fnf (x) = SIN(8 * x) - EXP(COS(x)) + 1
282
IF iFound = 0 THEN PRINT "Kök bulunamadı (RegulaFalsi)!": END
END ' RegulaFalsi Ana
sn o
PRINT "["; a; ","; b; "] aralığında bulunabilen kökler(RegulaFalsi):" PRINT FOR i = 1 TO iFound PRINT "x"; i; "="; x(i), "f(x"; i; ")="; fnf(x(i)) NEXT i
em de r
SUB RegulaFalsi (a, b, x(), iFind, iFound) '-----------------------------------------------------------------------' f(x) fonksiyonunun [a,b] aralığındaki gerçek köklerini bulur ' Metot: Regula falsi ' Diğer adları: Method of false position, linear interpolation method ' f(x) fonksiyonu ana programda DEF FNF(X)=... ile tanımlanmış olmalı ' aralığın alt sınırı a ve üst sınırı b ana programda tanımlı olmalı ' iSubint :[a, b] aralığında alınacak alt aralık sayısı ' maxalve: alt aralığın ikiye bölme sayısı ' epsf :Hassasiyet ' iFind :aranacak maksimum kök sayısı ' iFound :bulunabilen kök sayısı ' x(iFind) :Köklerin depolandığı vektör, ana programda boyutlandırılmış olmalı
w
w
w .e
' Çağrılan program: Yok '-----------------------------------------------------------------------iSubint = 100 Maxhalve = 50 epsf = 1E-08 iFound = 0 iHata = 0 IF a > b THEN EXIT SUB IF a = b THEN iSubint = 1 D = (b - a) / iSubint x2 = a WHILE x2 < b IF iFound >= iFind THEN EXIT SUB x1 = x2 x2 = x1 + D IF x2 > b THEN x2 = b
' [x1,x2] aralığında kök var mı? f1 = fnf(x1) IF ABS(f1) < epsf THEN xNew = x1 iFound = iFound + 1 x(iFound) = xNew GOTO 6 END IF f2 = fnf(x2) IF ABS(f2) < epsf THEN xNew = x2 iFound = iFound + 1 x(iFound) = xNew GOTO 6 END IF
iF1 = SGN(f1) iF2 = SGN(f2) IF iF1 * iF2 = 1 GOTO 6 ' [ak,bk] aralığında Regula Falsi iterasyonu ak = x1 bk = x2 aL = f1 r = f2 xk = x1 fxk = aL FOR k = 1 TO Maxhalve IF ABS(r - aL) < epsf THEN xNew = ak ELSE xNew = (ak * r - bk * aL) / (r - aL) END IF fk1 = fnf(xNew) IF ABS(fk1) < epsf THEN iFound = iFound + 1 x(iFound) = xNew GOTO 6 END IF IF fnf(ak) * fk1 < 0 THEN bk = xNew r = fk1 IF fxk * r > 0 THEN aL = .5 * aL ELSE ak = xNew: aL = fk1 IF fxk * aL > 0 THEN r = .5 * r END IF xk = xNew fxk = fk1 NEXT k
6 WEND END SUB ' RegulaFalsi sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
282
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
283
Dekker-Brent metodu DekkerBrent programı f(x) transandant fonksiyonunun [a, b] aralığındaki gerçek köklerini bulur. Aşağıdaki örnekler için test edilmiştir. Örnekler:
m
1. f(x) = 1.5 x − Tan(x) − 0.1 , aralık [- 5, 5] 2. f(x) = 3 x + Sin(x)-e -x , aralık [- 1, 1]
ri. co
3. f(x) = x 2 − Ln(x) − 2 , aralık [0.1, 3] 4. f(x) = x 8 − 1 , aralık [- 3, 3] 5x
1 5. f(x) = Sin + x 3 e Tan(x) − e − x , aralık [0.1, 1] Cos(x)
Theodorus Dekker, 1927- , Hollandalı
6. f(x) = x 3 − 21x − 20 , aralık [- 5, 8]
Richard Brent, 1946- , Avustralyalı
Bolzano sonuçları:
sn o
8. f ( x ) = Sin (8 x ) − e Cos ( x ) + 1 , aralık [π , 3π ]
tla
7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 , aralık [- 12, 12]
1. f(x) = 1.5 x − Tan(x) − 0.1 = 0 ın [-5,5] aralığında
em de r
bulunabilen kökleri:
2. f(x) = 3x + Sin(x)-e-x = 0 ın [-1,1] aralığında
w .e
bulunabilen kökleri:
3. f(x) = x 2 − Ln(x) − 2 = 0 ın [0.1,3] aralığında
w
w
bulunabilen kökleri:
4. f(x) = x 8 − 1 = 0 ın [-3,3] aralığında bulunabilen kökleri:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
283
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
284
5x
5. f(x) = Sin
1 + x 3 e Tan(x) − e − x = 0 ın [0.1,1] aralığında Cos(x)
ri. co
m
bulunabilen kökleri:
6. f(x) = x 3 − 21x − 20 = 0 ın [-5,8] aralığında bulunabilen
sn o
tla
kökleri:
7 . f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 = 0 ın
em de r
[-12,12] aralığında bulunabilen kökleri:
w
w
w .e
8. f ( x ) = Sin (8 x ) − e Cos ( x ) + 1 = 0 ın [π,3π] aralığında bulunabilen kökleri:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
284
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
DekkerBrent
m
'------------------Ana program DekkerBrent-----------------------' Ahmet Topçu, Eskişehir Osmangazi Üniversitesi, 2010 ' f(x) fonksiyonunun [a,b] aralığındaki köklerini bulur ' Metot: Dekker Brent ' f(x) fonksiyonnu DEF Fnf(x)=... deyimi ile tanımlanmış olmalıdır ' Veri: ' x1,x2 : kök aranacak aralığın alt ve üst sınırı ' MaxBul : [a,b] aralığında bulunacak max kök sayısı
285
ri. co
' Çıktı: ' iBulundu: bulunabilen kök sayısı ' x : bulunan köklerin depolandığı vektör ' iErr =0 hatasız sonuçlandı ' =1 [x1,x2] aralığında kök yok ' =2 Max iterasyon sayısı aşıldı ' Çağrılan alt programlar: DekkerBrentCall, DekkerBrent '----------------------------------------------------------------
sn o
tla
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB DekkerBrentCall (a, b, x(), MaxBul, iBulundu) DECLARE FUNCTION DekkerBrent (x1, x2, iErr) ' aralığın ve fonksiyonun tanımlanması Pi = 4 * ATN(1): ' Pi sayısı 'a = -5: b = 5: DEF fnf (x) = 1.5 * x - TAN(x) - .1 'a = -1: b = 1: DEF fnf (x) = 3 * x + SIN(x) - EXP(-x) 'a = .1: b = 3: DEF fnf (x) = x ^ 2 - LOG(x) - 2 'a = -3: b = 3: DEF fnf (x) = x ^ 8 - 1 'a = .1: b = 1: DEF fnf (x) = SIN(SQR(1 / COS(x) + x ^ 3 * EXP(5 * x / TAN(x)))) - EXP(-x) 'a = -5: b = 8: DEF fnf (x) = x ^ 3 - 21 * x - 20 'a = -12: b = 12: DEF fnf (x) = x ^ 8 - 170 * x ^ 6 + 7392 * x ^ 4 - 39712 * x ^ 2 + 51200 a = Pi: b = 3 * Pi: DEF fnf (x) = SIN(8 * x) - EXP(COS(x)) + 1 MaxBul = 10: ' [a,b] aralığında bulunması istenen max kök sayısı DIM x(MaxBul) CLS CALL DekkerBrentCall(a, b, x(), MaxBul, iBulundu)
em de r
IF iBulundu = 0 THEN PRINT "["; a; ","; b; "] aralığında kök bulunamadı(DekkerBrent)" ELSE PRINT "["; a; ","; b; "] aralığında"; iBulundu; " kök bulundu(DekkerBrent)" FOR i = 1 TO iBulundu PRINT "x"; i; "="; x(i), "f(x"; i; ")="; fnf(x(i)) NEXT i END IF
END ' DekkerBrent ana sonu
w
w
w .e
SUB DekkerBrentCall (a, b, x(), MaxBul, iBulundu) '-----------------------------------------------' DekkerBrent alt programını çağırır, bulunan kökü ' x vektöründe depolar ' iAltaralik: a-b aralığının bölüneceği ' alt aralık sayısıdır, değiştirilebilir ' Maxbul: aranacak max kök sayısı ' iBulundu: bulunanbilen kök sayısı ' Çağrılan alt program: DekkerBrent '-----------------------------------------------iAltaralik = 100 iBulundu = 0 d = (b - a) / iAltaralik x2 = a WHILE (x2 < b) AND (iBulundu < MaxBul) x1 = x2: x2 = x1 + d IF x2 > b THEN x2 = b
x = DekkerBrent(x1, x2, iErr) IF iErr = 0 THEN iBulundu = iBulundu + 1 x(iBulundu) = x END IF WEND END SUB ' DekkerBrentCall sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
285
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
286
FUNCTION DekkerBrent (x1, x2, iErr) '-----------------------------------------------------------------------' This program finds a real root of a real function f(x) ' using Dekker-Brent method ' function f(x) must be declared in main program as def Fnf(x)=...
' OUTPUTS ' DekkerBrent : root of function f(x), if found ' iErr =0 all OK ' =1 no root found in interval [x1,x2] ' =2 no more iterations(Maxit exeded) ' Fortran kodu 'Numerical Recipes in fORTRAN 77, Chapter 9.3' den alınmış, ' biraz değiştirilmiştir. Programın orijinal adı: zbrent ' http://www.haoli.org/nr/bookf.html
Zero = 1E-08: ' değiştirmeyiniz iErr = 0
em de r
a = x1 b = x2 Fa = fnf(a) Fb = fnf(b) IF (Fa > 0 AND Fb > 0) OR (Fa < 0 AND Fb < 0) THEN iErr = 1 EXIT FUNCTION END IF
c=b Fc = Fb FOR iTer = 1 TO Maxit IF (Fb > 0 AND Fc > 0) OR (Fb < 0 AND Fc < 0) THEN c=a Fc = Fa d=b-a e=d END IF IF ABS(Fc) < ABS(Fb) THEN a=b b=c c=a Fa = Fb Fb = Fc Fc = Fa END IF
w .e
w
w
IF (ABS(e) >= Tol1) AND (ABS(Fa) > ABS(Fb)) THEN s = Fb / Fa IF ABS(a - c) < Zero THEN p = 2 * xm * s q=1-s ELSE q = Fa / Fc r = Fb / Fc p = s * (2 * xm * q * (q - r) - (b - a) * (r - 1)) q = (q - 1) * (r - 1) * (s - 1) END IF
sn o
' Machep Eps = 1 DO Eps = Eps / 2 s = 1 + Eps LOOP UNTIL s <= 1 Eps = 3 * Eps
tla
' Çağrılan alt program: yok '-----------------------------------------------------------------------Tol = 1E-14: ' Hassasiyet, 1E-8 - 1E-14 arası normal Maxit = 100: ' Aralık yarılama sayısı, 10-200 arası normal
ri. co
m
' INPUTS ' x1,x2 : interval to be search for a root of f(x) ' Maxit : maximum number of iterations
Tol1 = 2 * Eps * ABS(b) + .5 * Tol xm = .5 * (c - b) IF (ABS(xm) <= Tol1) AND (ABS(Fb) <= Zero) THEN ' A root has been found DekkerBrent = b EXIT FUNCTION END IF
IF p > Zero THEN q = -q p = ABS(p) aMin = 3 * xm * q - ABS(Tol1 * q) amin1 = ABS(e * q) IF amin1 < aMin THEN aMin = amin1 IF 2 * p < aMin THEN e=d d=p/q ELSE d = xm e=d END IF ELSE d = xm e=d END IF a=b Fa = Fb IF ABS(d) > Tol1 THEN b=b+d ELSE IF xm >= 0 THEN b = b + ABS(Tol1) ELSE b = b - ABS(Tol1) END IF END IF Fb = fnf(b) NEXT iTer iErr = 2 DekkerBrent = 0 END FUNCTION ' End of DekkerBrent
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
286
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
287
Newton-Raphson(Newton) metodu
m
NewtonRaphson programı f(x)=a0+a1x+a2x2+…+anxn polinomunun n tane olan tüm sanal ve/veya gerçek köklerini bulur. Aşağıdaki örnekler için test edilmiştir.
Örnekler:
2. f(x) = x 5 − 3 x 4 + 4 x 3 + 2 x 2 − 10 x − 4
ri. co
1. f(x) = 128 x 4 − 256 x 3 + 160 x 2 − 32 x + 1 3. f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040 4. f(x) = x 8 − 1 5. f(x) = x 5 − 3.7 x 4 + 7.4 x 3 − 10.8 x 2 + 10.8 x − 6.8 6. f(x) = x 3 − 21x − 20 6
4
2
NewtonRaphson sonuçları:
sn o
8. f ( x ) = x 4 − 10 x 3 + 35 x 2 − 50 x + 24
tla
Isaac Newton, 1643-1727, İngiliz
7. f(x) = x − 170 x + 7392 x − 39712 x + 51200 8
em de r
1. f(x) = 128 x 4 − 256 x 3 + 160 x 2 − 32 x + 1 = 0
3 . f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040 = 0
w
w
w .e
2. f(x) = x 5 − 3 x 4 + 4 x 3 + 2 x 2 − 10 x − 4 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
287
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
288
em de r
6. f(x) = x 3 − 21x − 20 = 0
sn o
tla
5. f(x) = x 5 − 3.7 x 4 + 7.4 x 3 − 10 .8 x 2 + 10.8 x − 6.8 = 0
ri. co
m
4. f(x) = x 8 − 1 = 0
w
w
w .e
7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 = 0
8. f ( x) = x 4 − 10 x 3 + 35 x 2 − 50 x + 24 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
288
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
ri. co
' Fonksiyonun derecesi n ve a0, a1,a2,..,an katsayıları n = 4: DATA 1,-32,160,-256,128 'n = 5: DATA -4,-10,2,4,-3,1 'n = 7: DATA -5040,13068,-13132,6769,-1960,322,-28,1 'n = 8: DATA -1,0,0,0,0,0,0,0,1 'n = 5: DATA -6.8,10.8,-10.8,7.4,-3.7,1 'n = 3: DATA -20,-21,0,1 'n = 8: DATA 51200,0,-39712,0,7392,0,-170,0,1 'n = 4: DATA 24,-50,35,-10,1 DIM Coeff(n + 1): ' Katsayılar DIM rPart(n) 'gerçek kökler DIM sPart(n): ' sanal kökler
CALL NewtonRaphson(n, Coeff(), rPart(), sPart(), ihata)
sn o
IF ihata <> 0 THEN PRINT "Kökler bulunamadı(NewtonRaphson)" END END IF
tla
FOR i = 1 TO n + 1 READ Coeff(i) NEXT i CLS
NewtonRaphson
m
'-----------------Ana Program NewtonRaphson---------------------' n. dereceden f(x) polinomunun sanal ve/veya gerçek köklerini bulur 'Çağrılan program: NewtonRaphson '---------------------------------------------------------------DEFINT M-N DEFDBL A-H, O-Z DECLARE SUB NewtonRaphson (n, Coeff(), rPart(), sPart(), ihata)
289
PRINT "Polinomun kökleri(NewtonRapson):" PRINT PRINT "Kök No"; TAB(10); "Gerçek kısım"; TAB(35); "Sanal kısım" FOR i = 1 TO n PRINT TAB(5); i; TAB(10); rPart(i); TAB(35); sPart(i) NEXT i
em de r
END ' NewtonRaphson ana
w
w
w .e
SUB NewtonRaphson (n, Coeff(), rPart(), sPart(), iHata) '------------------------------------------------------------------------' f(x)=a0+a1*x+a2*x^2+...+an*x^n polinomunun gerçek ve/veya sanal köklerinin esabı ' Metot: Newton-Raphson ' n+1 katsayı Coeff(n+1) vektöründe aşağıdaki gibi depolanmış olmalıdır: ' coeff(1)=a0, coeff(2)=a2,...,coeff(n+1)=an. ' n: polinomun derecesi ' eps : hassasiyet ' Maxit :maximum iterasyon sayısı ' rpart(n): köklerin gerçek kısmı ' sPart: köklerin sanal kısmı ' çağrılan alt program: yok '------------------------------------------------------------------------DIM b(n + 1) 'ara işlem vektörü Maxit = 200 eps = 1E-08 iFit = 0 n9 = n nx = n9 nxx = n9 + 1 n2 = 1 k = n9 + 1 FOR L = 1 TO k b(k - L + 1) = Coeff(L) NEXT L
3 x0 = .00500101# ' # işareti DOUBLE anlamındadır y0 = .01000101# in = 0 4 x = x0 x0 = -10 * y0 y0 = -10 * x x = x0 y = y0 in = in + 1 GOTO 6 5 iFit = 1 xpr = x ypr = y
NewtonRaphson sonraki sayfada devam ediyor
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
289
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
FOR i = 1 TO n9 L = n9 - i + 1 temp = b(L) xt2 = x * xt - y * yt yt2 = x * yt + y * xt u = u + temp * xt2 v = v + temp * yt2 ux = ux + i * xt * temp uy = uy - i * yt * temp xt = xt2 yt = yt2 NEXT I
sn o
sumsq = ux * ux + uy * uy IF sumsq = 0 GOTO 9 dx = (v * uy - u * ux) / sumsq x = x + dx dy = -(u * uy + v * ux) / sumsq y = y + dy IF ABS(dy) + ABS(dx) < eps GOTO 8 iCt = iCt + 1 IF iCt <= Maxit GOTO 7 IF iFit <> 0 GOTO 8 IF in < 5 GOTO 4 iHata = 2 ' maksimum iterasyon sayısı aşıldı EXIT SUB
ri. co
m
NewtonRaphson devamı
tla
6 iCt = 0 7 ux = 0 uy = 0 v=0 xt = 1 yt = 0 u = b(n9 + 1) IF u = 0 GOTO 11
290
em de r
8 FOR L = 1 TO nxx mt = k - L + 1 temp = Coeff(mt) Coeff(mt) = b(L) b(L) = temp NEXT L iTemp = n9 n9 = nx nx = iTemp IF iFit = 0 THEN GOTO 5 ELSE GOTO 10 9 IF iFit = 0 GOTO 4 x = xpr y = ypr
w
w
w .e
10 iFit = 0 IF ABS(x) >= 1E-20 THEN IF ABS(y / x) < 1E-10 GOTO 12 IF ABS(x) < 1E-20 THEN x = 0 alpha = x + x sumsq = x * x + y * y n9 = n9 - 2 GOTO 13 11 x = 0 nx = nx - 1 nxx = nxx - 1 12 y = 0 sumsq = 0 alpha = x n9 = n9 - 1
13 b(2) = b(2) + alpha * b(1) FOR L = 2 TO n9 b(L + 1) = b(L + 1) + alpha * b(L) - sumsq * b(L - 1) NEXT L 14 sPart(n2) = y rPart(n2) = x n2 = n2 + 1 IF sumsq = 0 GOTO 15 y = -y sumsq = 0 GOTO 14 15 IF n9 > 0 THEN GOTO 3 END SUB ' NewtonRaphson Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
290
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
291
Bairstow metodu
m
Bairstow programı f(x)=a0+a1x+a2x2+…+anxn polinomunun n tane olan tüm sanal ve/veya gerçek köklerini bulur. Aşağıdaki örnekler için test edilmiştir.
1. f(x) = 128 x 4 − 256 x 3 + 160 x 2 − 32 x + 1 2. f(x) = x 5 − 3 x 4 + 4 x 3 + 2 x 2 − 10 x − 4
ri. co
Örnekler:
4. f(x) = x 8 − 1 5. f(x) = x 5 − 3.7 x 4 + 7.4 x 3 − 10.8 x 2 + 10.8 x − 6.8 6. f(x) = x 3 − 21x − 20 7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200
Bairstow sonuçları:
Leonard Bairstow 1880-1963, İngiliz
sn o
8. f ( x ) = x 4 − 10 x 3 + 35 x 2 − 50 x + 24
tla
3. f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040
em de r
1. f(x) = 128x 4 − 256 x 3 + 160 x 2 − 32 x + 1 = 0
3. f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040 = 0
w
w
w .e
2. f(x) = x 5 − 3x 4 + 4 x 3 + 2 x 2 − 10 x − 4 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
291
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
292
em de r
6. f(x) = x 3 − 21x − 20 = 0
sn o
tla
5 . f(x) = x 5 − 3 .7 x 4 + 7 .4 x 3 − 10 .8 x 2 + 10 .8 x − 6 .8 = 0
ri. co
m
4. f(x) = x 8 − 1 = 0
w
w
w .e
7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 = 0
8. f ( x) = x 4 − 10 x 3 + 35 x 2 − 50 x + 24 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
292
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
ri. co
' f(x) polinomunu derecesi n ve katsayıları an,..., a2,a1 n = 4: DATA 128,-256,160,-32,1 'n = 5: DATA 1,-3,4,2,-10,-4 'n = 7: DATA 1,-28,322,-1960,6769,-13132,13068,-5040 'n = 8: DATA 1,0,0,0,0,0,0,0,-1 'n = 5: DATA 1,-3.7,7.4,-10.8,10.8,-6.8 'n = 3: DATA 1,0,-21,-20 'n = 8: DATA 1,0,-170,0,7392,0,-39712,0,51200 'n = 4: DATA 1,-10,35,-50,24 DIM a(n + 3) ' katsayılar vektörü DIM rPart(n) ' kökün gerçek kısmı DIM sPart(n) ' kökün sanal kısmı
tla
FOR i = 3 TO n + 3 READ a(i) NEXT i
Bairstow
m
'--------------------------Ana Program Bairstow---------------------' n. dereceden f(x) polinomunun sanal ve/veya gerçek köklerini bulur ' Çağrılan alt program: Bairstow '-------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB Bairstow (n, a(), rPart(), sPart(), iHata)
293
CLS
sn o
CALL Bairstow(n, a(), rPart(), sPart(), iHata) IF iHata <> 0 THEN PRINT "Hata:"; iHata; ", Kök bulunamadı (Bairstow)" END END IF
em de r
PRINT "Polinomun kökleri(Bairstow):" PRINT "Kok no"; TAB(10); "Gerçek kısım"; TAB(35); "Sanal kısım" FOR i = 1 TO n PRINT TAB(5); i; TAB(10); rPart(i); TAB(35); sPart(i) NEXT i
END ' Baistow ana sonu
w
w
w .e
SUB Bairstow (n, a(), rPart(), sPart(), iHata) '------------------------------------------------------------------------' f(x)=an*x^n+...+a3*x^3+a2*x^2+a1*x+a0 polinomunun sanal ve gerçek köklerin bulur. 'Metod: Bairstow 'veri: ' a(n+3): katsayıların depolandığı n+3 boyutlu vektör. n+1 katsayı aşağıdaki gibi ' depolanmış olmalıdır: a(3)=an,..., a(n+1)=a2,a(n+2)=a1,a(n+3)=a0 ' n: polinomun derecesi 'çıktı: ' rpart(n): köklerin gerçek kısmı ' sPart(n): köklerin sanal kısmı ' iHata =0 : kökler bulundu ' <>0 : kökler bulunamadı
' çağrılan alt program: yok '------------------------------------------------------------------------iHata = 0 ' hata bayrağı eps = 1E-08 ' Hata yüzdesi maxit = 500 ' maksimum iterasyon r1 = 0 ' başlangıç değeri s1 = 0 ' başlangıç değeri FOR i = 1 TO n rPart(i) = 0 sPart(i) = 0 NEXT i n3 = n + 3 DIM b(n3), c(n3) ' Ara işlem vektörleri n1 = n IF n1 > 0 AND a(3) = 0 THEN iHata = 1 ' Polinomun tanımı hatalı EXIT SUB END IF IF n1 = 1 THEN b(3) = a(3) b(4) = a(4) GOTO 11 END IF
Bairstow sonraki sayfada devam ediyor
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
293
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
ri. co
m
Bairstow devamı
4 r = r1 s = s1 5 FOR i = 3 TO n3 b(i) = a(i) + r * b(i - 1) + s * b(i - 2) c(i) = b(i) + r * c(i - 1) + s * c(i - 2) NEXT i f = c(n1 + 1) ^ 2 - c(n1 + 2) * c(n1) IF f = 0 THEN r1 = r1 + 1 s1 = s1 + 1 GOTO 4 END IF
em de r
' maks iterasyon aşıldı mı? IF iSay >= maxit THEN iHata = 2 ' Maks iterasyon aşıldı EXIT SUB END IF
sn o
deLr = (-b(n1 + 2) * c(n1 + 1) + c(n1) * b(n3)) / f deLi = (-c(n1 + 1) * b(n3) + b(n1 + 2) * c(n1 + 2)) / f r = r + deLr s = s + deLi IF ABS(deLr) + ABS(deLi) <= eps GOTO 7
tla
3 n3 = n1 + 3 IF n1 = 2 THEN r = -a(4) / a(3) s = -a(5) / a(3) GOTO 7 END IF iSay = 1 b(1) = 0 b(2) = 0 c(1) = 0 c(2) = 0
294
6 iSay = iSay + 1 GOTO 5
7 diskr = s + .25 * r * r IF diskr < 0 GOTO 8 IF diskr > 0 GOTO 9 x1 = .5 * r x2 = x1 y1 = 0: y2 = 0 GOTO 10
w
w
w .e
8 x1 = .5 * r x2 = x1 y1 = SQR(-diskr) y2 = -y1 GOTO 10
9 x1 = .5 * r + SQR(diskr) x2 = -s / x1 y1 = 0 y2 = 0 10 rPart(n1) = x1 sPart(n1) = y1 rPart(n1 - 1) = x2 sPart(n1 - 1) = y2 n1 = n1 - 2 IF n1 < 1 THEN EXIT SUB IF n1 = 1 GOTO 11 n3 = n1 + 3 FOR i = 3 TO n3 a(i) = b(i) NEXT i GOTO 3 11 x1 = -b(4) / b(3) rPart(n1) = x1 sPart(n1) = 0 END SUB ' Bairstow
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
294
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
295
Müller metodu
m
Muller programı f(x)=a0+a1x+a2x2+…+anxn polinomunun gerçek köklerini bulur, sanal kök bulmaz. Aşağıdaki örnekler için test edilmiştir. Örnekler:
2. f(x) = x 5 − 3 x 4 + 4 x 3 + 2 x 2 − 10 x − 4
ri. co
1. f(x) = 128 x 4 − 256 x 3 + 160 x 2 − 32 x + 1
4. f(x) = x 8 − 1 5. f(x) = x 5 − 3.7 x 4 + 7.4 x 3 − 10.8 x 2 + 10.8 x − 6.8 6. f(x) = x 3 − 21x − 20 7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 8. f ( x ) = x − 10 x + 35 x − 50 x + 24 3
Muller sonuçları:
2
David E. Müller, 1924-2008 Amerikalı
sn o
4
tla
3. f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040
em de r
1. f(x) = 128x 4 − 256 x 3 + 160 x 2 − 32 x + 1 = 0
w
w
w .e
2. f(x) = x 5 − 3x 4 + 4 x 3 + 2 x 2 − 10 x − 4 = 0
3 . f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
295
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
296
em de r
6. f(x) = x 3 − 21x − 20 = 0
sn o
tla
5 . f(x) = x 5 − 3 .7 x 4 + 7 .4 x 3 − 10 .8 x 2 + 10 .8 x − 6 .8 = 0
ri. co
m
4. f(x) = x 8 − 1 = 0
w
w
w .e
7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 = 0
8. f ( x) = x 4 − 10 x 3 + 35 x 2 − 50 x + 24 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
296
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
297
ri. co
m
'----------------------------Ana Program Muller----------------------------------------Muller ' n. dereceden f(x) polinomunun sadece gerçek köklerini bulur, sanal kök bulmaz. ' Çağrılan alat program: Muller ‘------------------------------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB Muller (n, zeros(), iFound) ' polinomun ve derecesinin tanımı n = 4: DEF fnf (x) = 128 * x ^ 4 - 256 * x ^ 3 + 160 * x ^ 2 - 32 * x + 1 'n = 5: DEF fnf (x) = x ^ 5 - 3 * x ^ 4 + 4 * x ^ 3 + 2 * x ^ 2 - 10 * x - 4 'n = 7: DEF fnf (x) = x ^ 7 - 28 * x ^ 6 + 322 * x ^ 5 - 1960 * x ^ 4 + 6769 * x ^ 3 - 13132 * x ^ 2 + 13068 * x - 5040 'n = 8: DEF fnf (x) = x ^ 8 - 1 'n = 5: DEF fnf (x) = x ^ 5 - 3.7 * x ^ 4 + 7.4 * x ^ 3 - 10.8 * x ^ 2 + 10.8 * x - 6.8 'n = 3: DEF fnf (x) = x ^ 3 - 21 * x - 20 'n = 8: DEF fnf (x) = x ^ 8 - 170 * x ^ 6 + 7392 * x ^ 4 - 39712 * x * x + 51200 'n = 4: DEF fnf (x) = x ^ 4 - 10 * x ^ 3 + 35 * x ^ 2 - 50 * x + 24
DIM zeros(n): ' vector of zeros found CLS
IF iFound = 0 THEN PRINT "Kök bulunamadı(Muller)": END
END ' Muller ana
sn o
PRINT "Polinomun bulunabilen kökleri(Muller):" PRINT "Kök no"; TAB(10); "x"; TAB(35); "f(x)" FOR i = 1 TO iFound PRINT i; TAB(10); zeros(i); TAB(35); fnf(zeros(i)) NEXT i
tla
CALL Muller(n, zeros(), iFound)
em de r
SUB Muller (n, zeros(), iFound) '------------------------------------------------------------------------' f(x)=an*x^n+...+a3*x^3+a2*x^2+a1*x+a0 polinomunun gerçek ve/veya sanal köklerinin hesabı ' Metod: Müller ' f(x) fonksiyonu ana programda tanımlanmış olmalıdır ' n boyutlu Zeros(n) vektörü ana programda boyutlandırılmış olmalıdır ' n: polinomun derecesi ' iFound: bulunabilen kök sayısı ' zeros(n): köklerin depolandığı vektör ' maxit: herbir kök için maksimum iterasyon sayısı ' epsf: hassasiyet
' çağrılan alt program: deflate '------------------------------------------------------------------------DIM x(n) epsf = 1E-08 maxit = 50
w
w
w .e
FOR i = 1 TO n x(i) = 0 NEXT i
iFound = 0 FOR i = 1 TO n iCount = 0 2 x2 = x(i) x0 = x2 - .5 x1 = x2 + .5 z = x0 GOSUB 4 f0 = fzrdfL z = x1 GOSUB 4 f1 = fzrdfL z = x2 GOSUB 4 f2 = fzrdfL
h1 = x1 - x0 h2 = x2 - x1 f21 = (f2 - f1) / h2 f10 = (f1 - f0) / h1
Muller sonraki sayfada devam ediyor Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
297
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
3
f210 = (f21 - f10) / (h2 + h1) c = f21 + h2 * f210 sq = c * c - 4 * f2 * f210
298
Muller devamı
IF sq < 0 THEN sq = 0 ' sanal kökü atla
x3 = x2 + h3 z = x3 GOSUB 4 f3 = fzrdfL
ri. co
5
' Yakınsama var mı? IF ABS(f2) < epsf THEN iFound = iFound + 1 zeros(iFound) = x3 GOTO 6 END IF
tla
' maksimum iterasyon sayısı aşıldı mı? IF iCount > maxit GOTO 6
em de r
sn o
' ıraksama var mı? IF ABS(f3) >= 5 * ABS(f2) THEN h3 = .5 * h3 GOTO 5 END IF ' değerleri aktar f32 = (f3 - f2) / h3 f10 = f21 f21 = f32 h1 = h2 h2 = h3 f2 = f3 x2 = x3 GOTO 3 6 x(i) = x3 NEXT i
m
IF c < 0 THEN sq = c - SQR(sq) ELSE sq = c + SQR(sq) IF ABS(sq) = 0 THEN h3 = -2 * f2 ELSE h3 = -2 * f2 / sq
EXIT SUB
' Alt program deflate 4 iCount = iCount + 1 fzr = fnf(z): fzrdfL = fzr IF i < 2 THEN RETURN FOR j = 2 TO i sq = z - x(j - 1) IF ABS(sq) = 0 THEN x(i) = z * 1.001 RETURN END IF
w .e
fzrdfL = fzrdfL / sq NEXT j RETURN
w
w
END SUB ' Muller sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
298
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
299
Jenkins-Traub metodu
m
JenkinsTraub programı f(x)=a0+a1x+a2x2+…+anxn polinomunun n tane olan tüm sanal ve/veya gerçek köklerini bulur. Aşağıdaki örnekler için test edilmiştir. Örnekler:
2. f(x) = x 5 − 3 x 4 + 4 x 3 + 2 x 2 − 10 x − 4
ri. co
1. f(x) = 128 x 4 − 256 x 3 + 160 x 2 − 32 x + 1
4. f(x) = x 8 − 1 5. f(x) = x 5 − 3.7 x 4 + 7.4 x 3 − 10.8 x 2 + 10.8 x − 6.8 6. f(x) = x 3 − 21x − 20 7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200
JenkinsTraub sonuçları:
Joseph Frederick Traub, 1932Amerikalı
sn o
8. f ( x ) = x 4 − 10 x 3 + 35 x 2 − 50 x + 24
tla
3. f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040
em de r
1. f(x) = 128x 4 − 256 x 3 + 160 x 2 − 32 x + 1 = 0
3 . f(x) = x 7 − 28 x 6 + 322 x 5 − 1960 x 4 + 6769 x 3 − 13132 x 2 + 13068 x − 5040 = 0
w
w
w .e
2. f(x) = x 5 − 3x 4 + 4 x 3 + 2 x 2 − 10 x − 4 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
299
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
300
em de r
6. f(x) = x 3 − 21x − 20 = 0
sn o
tla
5 . f(x) = x 5 − 3 .7 x 4 + 7 .4 x 3 − 10 .8 x 2 + 10 .8 x − 6 .8 = 0
ri. co
m
4. f(x) = x 8 − 1 = 0
w
w
w .e
7. f(x) = x 8 − 170 x 6 + 7392 x 4 − 39712 x 2 + 51200 = 0
8. f ( x) = x 4 − 10 x 3 + 35 x 2 − 50 x + 24 = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
300
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
JenkinsTraub
m
'------------------Ana program JenkinsTraub---------------------------' Ahmet Topçu, Eskişehir Osmangazi Üniversitesi, 2010 ' Gerçek katsayılı n. derece f(x)=an x^n+...+a2x^2+a1x+a0 ' polinomunun gerçek ve sanal köklerini bulur
' i,j,k,L,m,n harfleri ile başlayan değişkenler tam sayı(INTEGER), ' tüm diğerleri çift hassasitli(DOUBLE) değişkendir.
' Çıktı: ' iDegree=0 kök bulunamadı ' <>0 iDegree adet kök bulundu ' ZeroR : bulunan köklerin gerçek kısmının depolandığı vektör ' Zeroi : bulunan köklerin sanal kısmının depolandığı vektör
tla
' Çağrılan alt program: Rpoly
ri. co
' Metot: Jenkins-Traub ' Veri: ' Op(n+1) : polinomun katsayılarının depolandığı n+1 boyutlu vektör ' n : polinomun derecesi
301
' Alt programların alındığı yer: http://www.netlib.org/toms/493 '------------------------------------------------------------------------------
SUB SUB SUB SUB SUB SUB SUB SUB SUB
Rpoly (op(), iDegree, Zeror(), Zeroi()) Quadsd (nn, u, v, p(), q(), a, b) Fxshfr (L2, nz) Quadit (uu, vv, nz) Realit (sss, nz, iflag) Calcsc (itype) Nextk (itype) Newest (itype, uu, vv) Quad (a, b1, c, sr, si, dLr, dLi)
em de r
DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE
sn o
DEFINT I-N DEFDBL A-H, O-Z
' f(x) polinomunun derecesi n1 ve katsayıları an,..., a2,a1 'n = 4: DATA 128,-256,160,-32,1 'n = 5: DATA 1,-3,4,2,-10,-4 'n = 7: DATA 1,-28,322,-1960,6769,-13132,13068,-5040 'n = 8: DATA 1,0,0,0,0,0,0,0,-1 'n = 5: DATA 1,-3.7,7.4,-10.8,10.8,-6.8 'n = 3: DATA 1,0,-21,-20 'n = 8: DATA 1,0,-170,0,7392,0,-39712,0,51200 'n = 4: DATA 1,-10,35,-50,24
' Global değişkenler DIM SHARED p(n + 1), qp(n + 1), dk(n + 1), qk(n + 1), svk(n + 1) DIM SHARED sr, si, u, v, a, b, c, d, a1, a2, a3, a6, a7, e, f, g DIM SHARED h, szr, szi, dLzr, dLzi, Eta, are, dmre, n1, nn
w
w
w .e
CLS
DIM op(n + 1), Zeror(n), Zeroi(n) FOR i = 1 TO n + 1 READ op(i): ' Polinomun katsayıları NEXT i iDegree = n CALL Rpoly(op(), iDegree, Zeror(), Zeroi()) IF iDegree = 0 THEN PRINT "Kökler bulunamadı(JenkinsTraub)" END END IF PRINT "Polinomun bulunabilen kökleri(JenkinsTraub):" PRINT "Kök No:"; TAB(10); "Gerçek kısım:"; TAB(35); "Sanal kısım:" FOR i = 1 TO iDegree PRINT TAB(5); i; TAB(10); Zeror(i); TAB(35); Zeroi(i) NEXT i
END ' Ana program JenkinsTraub sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
301
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
m
SUB Rpoly (op(), iDegree, Zeror(), Zeroi()) '--------------------------------------------------------' Fınds The Zeros Of A Real Polynomıal ' Op : Double Precısıon Vector Of Coeffıcıents In ' order of decreasıng powers. ' iDegree: Degree of polynomıal. ' ZeroR : Output vector of real parts of the zeros.
ri. co
' Zeroi : Output vector of ımagınary parts of the zeros. ' All calculatıons for the ıteratıons are done ın double ' precısıon. ' Subroutines called: Quad, FXSHFR
sn o
the followıng statements set machıne constants used ın varıous parts of the program. the meanıng of the four constants are… eta The maxımum relatıve representatıon error whıch can be descrıbed as the smallest posıtıve floatıng poınt number such that 1.d0+eta ıs greater than 1. dinFin The largest floatıng-poınt number. smaLno The smallest posıtıve floatıng-poınt number ıf the exponent range dıffers ın sıngle and double precısıon then smalno and dinfin should ındıcate the smaller range. dbase the base of the floatıng-poınt number system used.
em de r
' ' ' ' ' ' ' ' ' ' ' ' '
tla
' Fortran code:http://www.netlib.org/toms/493 '-------------------------------------------------------Ndim = iDegree + 1 DIM temp(Ndim), pt(Ndim) ' Variable BASE is renamed to dBase ' LZerok is used as boolean variable
302
' The values below set machine constants r4 = 1 r4t = 1 + (r4 / 2) 1 IF 1 < r4t THEN r4 = r4 / 2 r4t = 1 + (r4 / 2) GOTO 1 END IF Epsilon = .5 * r4: 'machine Epsilon
w
w
w .e
dBase = 2: ' Binary taban Eta = Epsilon: 'Hassasiyet dinFin = 1E+30: ' en büyük sayı smaLno = 1E-37: ' en küçük sayı ' are and dmre refer to the unıt error ın + and * ' respectıvely. they are assumed to be the same as eta. are = Eta dmre = Eta dLo = smaLno / Eta ' ınıtıalızatıon of constants for shıft rotatıon xx = SQR(.5) yy = -xx Rot = 94: ' Rotation 94 degree Rot = Rot * 4 * ATN(1) / 180': Convert degree to radian cosr = COS(Rot) sinr = SIN(Rot) n1 = iDegree nn = n1 + 1 ' algorıthm faıls ıf the leadıng coeffıcıent ıs zero. IF op(1) = 0 THEN iDegree = 0 EXIT SUB END IF ' remove the zeros at the orıgın ıf any 103 IF op(nn) = 0 THEN j = iDegree - n1 + 1 Zeror(j) = 0 Zeroi(j) = 0 nn = nn - 1 n1 = n1 - 1 GOTO 103 END IF ' make a copy of the coeffıcıents FOR i = 1 TO nn Rpoly devam ediyor p(i) = op(i) NEXT i
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
302
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
w
w
m
w .e
em de r
sn o
tla
ri. co
' start the algorıthm for one zero 41 IF n1 <= 2 THEN IF n1 < 1 THEN EXIT SUB ' calculate the fınal zero or paır of zeros IF n1 <> 2 THEN Zeror(iDegree) = -p(2) / p(1) Zeroi(iDegree) = 0 EXIT SUB END IF CALL Quad(p(1), p(2), p(3), Zeror(iDegree - 1), Zeroi(iDegree - 1), Zeror(iDegree), Zeroi(iDegree)) EXIT SUB END IF ' fınd largest and smallest modulı of coeffıcıents. dMax = 0 dMin = dinFin FOR i = 1 TO nn x = ABS(p(i)) IF x > dMax THEN dMax = x IF x <> 0 AND x < dMin THEN dMin = x NEXT i ' scale ıf there are large or very small coeffıcıents ' computes a scale factor to multıply the ' coeffıcıents of the polynomıal. the scalıng ıs done ' to avoıd overflow and to avoıd undetected underflow ' ınterferıng wıth the convergence crıterıon. ' the factor ıs a power of the dbase sc = dLo / dMin IF sc <= 1 THEN IF dMax < 10 THEN GOTO 110 IF sc = 0 THEN sc = smaLno ELSE IF (dinFin / sc) < dMax THEN GOTO 110 END IF L = LOG(sc) / LOG(dBase) + .5 factor = dBase ^ L IF factor <> 1 THEN FOR i = 1 TO nn p(i) = factor * p(i) NEXT i END IF ' compute lower bound on modulı of zeros. 110 FOR i = 1 TO nn pt(i) = ABS(p(i)) NEXT i pt(nn) = -pt(nn) ' compute upper estımate of bound x = EXP((LOG(-pt(nn)) - LOG(pt(1))) / n1) IF pt(n1) <> 0 THEN ' ıf newton step at the orıgın ıs better, use ıt. xm = -pt(nn) / pt(n1) IF xm < x THEN x = xm END IF ' chop the ınterval (0,x) untıl ff .le. 0 130 xm = x * .1 ff = pt(1) FOR i = 2 TO nn ff = ff * xm + pt(i) NEXT i IF ff > 0 THEN x = xm GOTO 130 END IF dx = x ' do newton ıteratıon untıl x converges to two ' decımal places 160 IF ABS(dx / x) > .005 THEN ff = pt(1) df = ff FOR i = 2 TO n1 ff = ff * x + pt(i) df = df * x + ff NEXT i ff = ff * x + pt(nn) dx = ff / df x = x - dx GOTO 160 END IF bnd = x Rpoly devam ediyor
303
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
303
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
w
w
m ri. co tla
w .e
em de r
sn o
' compute the derıvatıve as the ıntıal dk polynomıal ' and do 5 steps wıth no shıft nm1 = n1 - 1 FOR i = 2 TO n1 dk(i) = (nn - i) * p(i) / n1 NEXT i dk(1) = p(1) aa = p(nn) bb = p(n1) Lzerok = (dk(n1) = 0) FOR jj = 1 TO 5 cc = dk(n1) IF Lzerok = 0 THEN ' use scaled form of recurrence ıf value of dk at 0 ıs nonzero t = -aa / cc FOR i = 1 TO nm1 j = nn - i dk(j) = t * dk(j - 1) + p(j) NEXT i dk(1) = p(1) Lzerok = (ABS(dk(n1)) <= ABS(bb) * Eta * 10) ELSE ' use unscaled form of recurrence FOR i = 1 TO nm1 j = nn - i dk(j) = dk(j - 1) NEXT i dk(1) = 0 Lzerok = (dk(n1) = 0) END IF NEXT jj ' save dk for restarts wıth new shıfts FOR i = 1 TO n1 temp(i) = dk(i) NEXT i ' loop to select the quadratıc correspondıng to each ' new shıft FOR icnt = 1 TO 20 ' quadratıc corresponds to a double shıft to a ' non-real poınt and ıts complex conjugate. the poınt ' has modulus bnd and amplıtude rotated by 94 degrees ' from the prevıous shıft xxx = cosr * xx - sinr * yy yy = sinr * xx + cosr * yy xx = xxx sr = bnd * xx si = bnd * yy u = -2 * sr v = bnd ' second stage calculatıon, fıxed quadratıc CALL Fxshfr(20 * icnt, nz) IF nz <> 0 THEN ' the second stage jumps dırectly to one of the thırd ' stage ıteratıons and returns here ıf successful. ' deflate the polynomıal, store the zero or zeros and ' return to the maın algorıthm. j = iDegree - n1 + 1 Zeror(j) = szr Zeroi(j) = szi nn = nn - nz n1 = nn - 1 FOR i = 1 TO nn p(i) = qp(i) NEXT i IF nz = 1 THEN GOTO 41 Zeror(j + 1) = dLzr Zeroi(j + 1) = dLzi GOTO 41 END IF ' ıf the ıteratıon ıs unsuccessful another quadratıc ' ıs chosen after restorıng dk FOR i = 1 TO n1 dk(i) = temp(i) NEXT i NEXT icnt ' return wıth faılure ıf no convergence wıth 202 shıfts iDegree = iDegree - n1
304
END SUB ' Rpoly
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
304
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
305
w
w
w .e
em de r
sn o
tla
ri. co
m
SUB Fxshfr (L2, nz) GOTO 21 '----------------------------------------------------------END IF ' computes up to l2 fıxed shıft dk-polynomıals, ' restore varıables ' testıng for convergence ın the lınear or quadratıc 50 u = svu ' case. ınıtıates one of the varıable shıft v = svv ' ıteratıons and returns wıth the number of zeros found. FOR i = 1 TO n1 ' l2 - lımıt of fıxed shıft steps dk(i) = svk(i) ' nz - number of zeros found NEXT i ' Subroutines called: Quadsd,Calcsc,Nextk,Newest, Quadit ' try quadratıc ıteratıon ıf ıt has not been trıed ' Realit ' and the v sequence ıs convergıng '----------------------------------------------------------IF Lvpass AND Lvtry = 0 THEN GOTO 21 ' Varible TYPE is renamed to iType ' recompute qp and scalar values to contınue the ' Lvpass, Lspass, Lvtry, Lstry are used as Boolean variables: ' second stage ' 1=TRUE, 0=FALSE CALL Quadsd(nn, u, v, p(), qp(), a, b) nz = 0 CALL Calcsc(itype) betav = .25 END IF betas = .25 END IF oss = sr ovv = vv ovv = v oss = ss ' evaluate polynomıal by synthetıc dıvısıon otv = tv CALL Quadsd(nn, u, v, p(), qp(), a, b) ots = ts CALL Calcsc(itype) NEXT j FOR j = 1 TO L2 ' calculate next dk polynomıal and estımate v END SUB 'Fxshfr CALL Nextk(itype) CALL Calcsc(itype) CALL Newest(itype, ui, vi) vv = vi ' estımate s ss = 0 IF dk(n1) <> 0 THEN ss = -p(nn) / dk(n1) tv = 1 ts = 1 IF j <> 1 AND itype <> 3 THEN ' compute relatıve measures of convergence of s and v ' sequences IF vv <> 0 THEN tv = ABS((vv - ovv) / vv) IF ss <> 0 THEN ts = ABS((ss - oss) / ss) ' ıf decreasıng, multıply two most recent ' convergence measures tvv = 1 IF tv < otv THEN tvv = tv * otv tss = 1 IF ts < ots THEN tss = ts * ots ' compare wıth convergence crıterıa Lvpass = tvv < betav Lspass = tss < betas IF Lspass OR Lvpass THEN ' at least one sequence has passed the convergence ' test. store varıables before ıteratıng svu = u svv = v FOR i = 1 TO n1 svk(i) = dk(i) NEXT i s = ss ' choose ıteratıon accordıng to the fastest ' convergıng sequence Lvtry = 0: ' set to FALSE Lstry = 0: ' set to FALSE IF Lspass AND (Lvpass = 0 OR tss < tvv) THEN GOTO 40 21 CALL Quadit(ui, vi, nz) IF nz > 0 THEN EXIT SUB ' quadratıc ıteratıon has faıled. flag that ıt has ' been trıed and decrease the convergence crıterıon. Lvtry = 1: 'Set to TRUE betav = betav * .25 ' try lınear ıteratıon ıf ıt has not been trıed and ' the s sequence ıs convergıng IF Lstry OR Lspass = 0 THEN GOTO 50 FOR i = 1 TO n1 dk(i) = svk(i) NEXT i 40 CALL Realit(s, nz, iflag) IF nz > 0 THEN EXIT SUB ' lınear ıteratıon has faıled. flag that ıt has been ' trıed and decrease the convergence crıterıon Lstry = 1: ' set to TRUE betas = betas * .25 IF iflag <> 0 THEN ' ıf lınear ıteratıon sıgnals an almost double real ' zero attempt quadratıc ınteratıon ui = -(s + s) vi = s *Bilgisayar s Ahmet TOPÇU, Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
305
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
306
w
w
w .e
em de r
sn o
tla
ri. co
m
SUB Quadit (uu, vv, nz) '-----------------------------------------------------------------' varıable-shıft dk-polynomıal ıteratıon for a ' quadratıc factor converges only ıf the zeros are ' equımodular or nearly so. ' uu,vv - coeffıcıents of startıng quadratıc ' nz - number of zero found ' Subroutines called: Quad,Quadsd,Calcsc,Newest, Nextk,Quadit '-----------------------------------------------------------------' Ltried is used as boolean variable nz = 0 Ltried = 0: 'set to FALSE u = uu v = vv j=0 ' maın loop 101 CALL Quad(1, u, v, szr, szi, dLzr, dLzi) ' return ıf roots of the quadratıc are real and not ' close to multıple or nearly equal and of opposıte sıgn IF ABS(ABS(szr) - ABS(dLzr)) > .01 * ABS(dLzr) THEN EXIT SUB ' evaluate polynomıal by quadratıc synthetıc dıvısıon CALL Quadsd(nn, u, v, p(), qp(), a, b) dmp = ABS(a - szr * b) + ABS(szi * b) ' compute a rıgorous bound on the roundıng error ın evalutıng p zm = SQR(ABS(v)) ee = 2 * ABS(qp(1)) t = -szr * b FOR i = 2 TO n1 ee = ee * zm + ABS(qp(i)) NEXT i ee = ee * zm + ABS(a + t) ee = (5 * dmre + 4 * are) * ee - (5 * dmre + 2 * are) * (ABS(a + t) + ABS(b) * zm) + 2 * are * ABS(t) ' ıteratıon has converged suffıcıently ıf the ' polynomıal value ıs less than 20 tımes thıs bound IF dmp <= 20 * ee THEN nz = 2 EXIT SUB END IF j=j+1 ' stop ıteratıon after 20 steps IF j > 20 THEN EXIT SUB IF j >= 2 THEN IF (relstp > .01 OR dmp < omp OR Ltried) = 0 THEN ' a cluster appears to be stallıng the convergence. ' fıve fıxed shıft steps are taken wıth a u,v close ' to the cluster IF relstp < Eta THEN relstp = Eta relstp = SQR(relstp) u = u - u * relstp v = v + v * relstp CALL Quadsd(nn, u, v, p(), qp(), a, b) FOR i = 1 TO 5 CALL Calcsc(itype) CALL Nextk(itype) NEXT i Ltried = 1: ' set to TRUE j=0 END IF END IF omp = dmp ' calculate next dk polynomıal and new u and v CALL Calcsc(itype) CALL Nextk(itype) CALL Calcsc(itype) CALL Newest(itype, ui, vi) ' ıf vı ıs zero the ıteratıon ıs not convergıng IF vi = 0 THEN EXIT SUB relstp = ABS((vi - v) / vi) u = ui v = vi GOTO 101
END SUB ' Quadit
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
306
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
w
w
m ri. co tla
w .e
em de r
sn o
SUB Realit (sss, nz, iflag) '-------------------------------------------------------' varıable-shıft h polynomıal ıteratıon for a real zero. ' sss - startıng ıterate ' nz - number of zero found ' ıflag - flag to ındıcate a paır of zeros near real axıs. '-------------------------------------------------------nz = 0 s = sss iflag = 0 j=0 ' MAIN LOOP 106 pv = p(1) ' evaluate p at s qp(1) = pv FOR i = 2 TO nn pv = pv * s + p(i) qp(i) = pv NEXT i dmp = ABS(pv) ' compute a rıgorous bound on the error ın evaluatıng p dms = ABS(s) ee = (dmre / (are + dmre)) * ABS(qp(1)) FOR i = 2 TO nn ee = ee * dms + ABS(qp(i)) NEXT i ' ıteratıon has converged suffıcıently ıf the ' polynomıal value ıs less than 20 tımes thıs bound IF dmp <= 20 * ((are + dmre) * ee - dmre * dmp) THEN nz = 1 szr = s szi = 0 EXIT SUB END IF j=j+1 ' stop ıteratıon after 10 steps IF j > 10 THEN EXIT SUB IF j >= 2 THEN IF ABS(t) <= .001 * ABS(s - t) AND dmp > omp THEN ' a cluster of zeros near the real axıs has been encountered ' return wıth ıflag set to ınıtıate a quadratıc ıteratıon iflag = 1 sss = s EXIT SUB END IF END IF ' return ıf the polynomıal value has ıncreased sıgnıfıcantly omp = dmp ' compute t, the next polynomıal, and the new ıterate dkv = dk(1) qk(1) = dkv FOR i = 2 TO n1 dkv = dkv * s + dk(i) qk(i) = dkv NEXT i IF ABS(dkv) > ABS(dk(n1)) * 10 * Eta THEN ' use the scaled form of the recurrence ıf the value ' of dk at s ıs nonzero t = -pv / dkv dk(1) = qp(1) FOR i = 2 TO n1 dk(i) = t * qk(i - 1) + qp(i) NEXT i ELSE ' USE UNSCALED FORM dk(1) = 0 FOR i = 2 TO n1 dk(i) = qk(i - 1) NEXT i END IF dkv = dk(1) FOR i = 2 TO n1 dkv = dkv * s + dk(i) NEXT i t=0 IF ABS(dkv) > ABS(dk(n1)) * 10 * Eta THEN t = -pv / dkv s=s+t GOTO 106
307
END SUB ' Realit
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
307
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
m ri. co tla
em de r
sn o
SUB Calcsc (itype) '--------------------------------------------------------' thıs routıne calculates scalar quantıtıes used to ' compute the next dk polynomıal and new estımates of ' the quadratıc coeffıcıents. ' itype - ınteger varıable set here ındıcatıng how the ' calculatıons are normalızed to avoıd overflow '--------------------------------------------------------' synthetic divisin of dk by the quadratıc 1,u,v CALL Quadsd(n1, u, v, dk(), qk(), c, d) IF ABS(c) <= ABS(dk(n1)) * 100 * Eta THEN IF ABS(d) <= ABS(dk(n1 - 1)) * 100 * Eta THEN itype = 3 ' itype=3 indicates the quadratıc is almost a factor of dk EXIT SUB END IF END IF IF ABS(d) >= ABS(c) THEN itype = 2 ' itype=2 ındıcates that all formulas are dıvıded by d e=a/d f=c/d g=u*b h=v*b a3 = (a + g) * e + h * (b / d) a1 = b * f - a a7 = (f + u) * a + h EXIT SUB END IF itype = 1 ' itype=1 ındıcates that all formulas are dıvıded by c e=a/c f=d/c g=u*e h=v*b a3 = a * e + (h / c + g) * b a1 = b - a * (d / c) a7 = a + g * d + h * f
308
END SUB ' Calcsc
w
w
w .e
SUB Nextk (itype) '-------------------------------------------------------------' computes the next dk polynomıals usıng scalars ' computed ın calcsc '-------------------------------------------------------------IF itype <> 3 THEN temp = a IF itype = 1 THEN temp = b IF ABS(a1) <= ABS(temp) * Eta * 10 THEN ' ıf a1 ıs nearly zero then use a specıal form of the recurrence dk(1) = 0 dk(2) = -a7 * qp(1) FOR i = 3 TO n1 dk(i) = a3 * qk(i - 2) - a7 * qp(i - 1) NEXT i EXIT SUB END IF ' use scaled form of the recurrence a7 = a7 / a1 a3 = a3 / a1 dk(1) = qp(1) dk(2) = qp(2) - a7 * qp(1) FOR i = 3 TO n1 dk(i) = a3 * qk(i - 2) - a7 * qp(i - 1) + qp(i) NEXT i EXIT SUB END IF ' use unscaled form of the recurrence ıf itype ıs 3 dk(1) = 0 dk(2) = 0 FOR i = 3 TO n1 dk(i) = qk(i - 2) NEXT i
END SUB ' Nextk
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
308
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
END SUB ' Newest
m ri. co
tla
SUB Quadsd (nn, u, v, p(), q(), a, b) '----------------------------------------------' dıvıdes p by the quadratıc 1,u,v placıng the ' quotıent ın q and the remaınder ın a,b '----------------------------------------------b = p(1) q(1) = b a = p(2) - u * b q(2) = a FOR i = 3 TO nn cc = p(i) - u * a - v * b q(i) = cc b=a a = cc NEXT i
sn o
SUB Newest (itype, uu, vv) '----------------------------------------------------------' compute new estımates of the quadratıc coeffıcıents ' usıng the scalars computed ın calcsc. '----------------------------------------------------------' USE FORMULAS APPROPRIATE TO SETTING OF iType. IF itype <> 3 THEN IF itype <> 2 THEN a4 = a + u * b + h * f a5 = c + (u + v * f) * d ELSE a4 = (a + g) * f + h a5 = (f + u) * c + v * d END IF ' evaluate new quadratıc coeffıcıents. b1 = -dk(n1) / p(nn) b2 = -(dk(n1 - 1) + b1 * p(n1)) / p(nn) c1 = v * b2 * a1 c2 = b1 * a7 c3 = b1 * b1 * a3 c4 = c1 - c2 - c3 temp = a5 + b1 * a4 - c4 IF temp <> 0 THEN uu = u - (u * (c3 + c2) + v * (b1 * a1 + b2 * a7)) / temp vv = v * (1 + c4 / temp) EXIT SUB END IF END IF ' ıf itype=3 the quadratıc ıs zeroed uu = 0 vv = 0
309
END SUB 'Quadsd
em de r
SUB Quad (a, b1, c, sr, si, dLr, dLi) '-----------------------------------------------------' calculate the zeros of the quadratıc a*z**2+b1*z+c=0. ' the quadratıc formula, modıfıed to avoıd ' overflow, ıs used to fınd the larger zero ıf the ' zeros are real and both zeros are complex. ' the smaller real zero ıs found dırectly from the ' product of the zeros c/a. '-----------------------------------------------------IF a <> 0 THEN GOTO 200 sr = 0 IF b1 <> 0 THEN sr = -c / b1 dLr = 0 100 si = 0 dLi = 0 EXIT SUB
IF c = 0 THEN sr = 0 dLr = -b1 / a GOTO 100 END IF ' compute dıscrımınant avoıdıng overflow bb = b1 / 2 IF ABS(bb) >= ABS(c) THEN ee = 1 - (a / bb) * (c / bb) dd = SQR(ABS(ee)) * ABS(bb) ELSE ee = a IF c < 0 THEN ee = -a ee = bb * (bb / ABS(c)) - ee dd = SQR(ABS(ee)) * SQR(ABS(c)) END IF IF ee >= 0 THEN ' REAL ZEROS IF bb >= 0 THEN dd = -dd dLr = (-bb + dd) / a sr = 0 IF dLr <> 0 THEN sr = (c / dLr) / a GOTO 100 END IF ' complex conjugate zeros sr = -bb / a dLr = sr si = ABS(dd / a) dLi = -si
w
w
w .e
200
END SUB 'Quad Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
309
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
310
Karşılaştırma
m
Polinom köklerini bulan JenkinsTraub, Bairstow, NewtonRaphson ve Muller programları aşağıda verilen özel polinomlar için karşılaştırılacaktır:
1. f ( x) = ( x − 1) 7 = x 7 − 7 x 6 + 21x 5 − 35 x 4 + 35 x 3 − 21x 2 + 7 x − 1
ri. co
2. f ( x ) = ( x − 10) 4 ( x − 9.999) = x 5 − 49.99899999999999 x 4 + 999.96 x 3 − 9999.399999999999 x 2 + 49996 x − 99990 3. f ( x ) = ( x + 0.001)( x − 0.001)( x + 1)( x − 1)( x + 1000)( x − 1000) = x 6 − 1000001.000001x 4 + 1000001.000001x 2 − 1 4. f ( x) = ( x − 1 + 2i ) 2 ( x − 1 − 2i ) 2 = x 4 − 4 x 3 + 14 x 2 − 20 x + 25 5. f ( x) = x 20 − 1 Bu polinomların her birinin farklı özellikleri vardır:
1.polinomun tüm kökleri çakışmaktadır: x1, 2,3, 4,5, 6 ,7 = 1
tla
2.polinomun çakışan ve birbirine çok yakın kökleri vardır: x1, 2 ,3, 4 = 10, x 5 = 9.999
3.polinomun kökleri mutlak değerce çakışmakta, çok küçük ve çok büyük kökler içermektedir: x1, 2 = m0.001, x 3, 4 = m1, x 5 , 6 = m1000
sn o
4.polinomun tüm kökleri sanaldır ve çakışmaktadır: x1, 2 ,3, 4 = 1 m 2i
5.polinomun derecesi çok yüksektir, sadece iki gerçek kökü vardır: x1, 2 = 1 , diğerleri sanaldır. Karşılaştırmanın amacı, bu çok özel durumlarda programların başarılı olup olmadığını ortaya koymaktır.
Yorum: En başarılı: JenkinsTraub, en başarısız: Bairstow
2. f ( x) = ( x − 10) 4 ( x − 9.999) = x 5 − 49.99899999999999 x 4 + 999.96 x 3 − 9999.399999999999 x 2 + 49996 x − 99990 için programların sonuçları:
w
w
w .e
em de r
1. f ( x) = ( x − 1)7 = x 7 − 7 x 6 + 21x5 − 35x 4 + 35x3 − 21x 2 + 7 x −1 için programların sonuçları:
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
310
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
311
Yorum: En başarılı: JenkinsTraub, en başarısız: Bairstow ve NewtonRaphson
ri. co
m
3. f ( x) = ( x + 0.001)( x − 0.001)( x + 1)( x − 1)( x + 1000)( x − 1000) = x 6 − 1000001.000001x 4 + 1000001.000001x 2 − 1 için programların sonuçları:
tla
Yorum: En başarılı: hepsi de başarılı, NewtonRaphson ve JenkinsTraub daha doğru.
em de r
sn o
4. f ( x) = ( x − 1 + 2i) 2 ( x − 1 − 2i) 2 = x 4 − 4 x3 + 14x 2 − 20x + 25 için programların sonuçları:
Yorum: En başarılı: JenkinsTraub ve Bairstow, en başarısız: NewtonRaphson. Muller zaten sanal kök bulmaz.
w
w
w .e
5. f ( x) = x 20 − 1 için programların sonuçları:
Yorum: En başarılı: JenkinsTraub. Bairstow ve NewtonRaphson başarısız(sayı taşması sonucu program kırılıyor). Sadece gerçek kök bulan Muller de başarılı fakat polinomun sadece iki gerçek kökü varken, üç kök buluyor. Sonuç olarak, JenkinsTraub en başarılı programdır. Konuya yönelik kaynaklarda da bu görüş hakimdir, en hassas ve en hızlı metod olarak değerlendirmektedir. Ancak, program çok fazla ve karmaşık kod içermektedir. Program kaynaklarda RPOLY olarak anılmaktadır. Jenkins-Traub metodunun ayrıca sanal katsayılı polinomlar için CPOLY adlı bir başka bir programı daha vardır. Her iki programın FORTRAN ve C kodları internette bulunabilir. RPOLY FORTRAN kodu: http://www.netlib.org/toms/493 http://people.sc.fsu.edu/~jburkardt/f77_src/toms493/toms493.f CPOLY FORTRAN kodu: http://www.netlib.org/toms/419 http://people.sc.fsu.edu/~jburkardt/f77_src/toms419/toms419.f RPOLY C++ kodu: http://www.akiti.ca/rpoly_ak1_cpp.html CPOLY C kodu: http://svn.r-project.org/R/trunk/src/appl/cpoly.c Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
311
36. DOĞRUSAL OLMAYAN FONKSİYONLARIN KÖKLERİ(SIFIR NOKTALARI)
w
w
w .e
em de r
sn o
tla
ri. co
m
312
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
312
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
tla
Ders notları 2014
sn o
Ahmet TOPÇU
w
w
w .e
em de r
Min f(x)=?
37
Min-Max Bir fonksiyonun minimummaksimum değerlerinin belirlenmesi
John Ashworth NELDER, (1924-2010), İngiliz
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
313
ri. co
Tek veya çok değişkenli bir fonksiyonun, çoğu kez bazı ek koşulları da sağlayan, minimum veya maksimum değerinin aranması problemine optimizasyon(en iyileme) adı verilmektedir. Örneklersek: Min z=f(x,y)=x2+y problemi ek koşulsuz; x>0 olmak kaydıyla Min z=f(x,y)=x2+y problemi ise ek koşullu minimazasyon problemidir.
m
37. BİR FONKSİYONUN MİNUMUM-MAKSİMUM DEĞERLERİNİN BELİRLENMESİ
Bu bölümde minimizasyon teknikleri hakkında özet bilgiler verilecektir.
sn o
tla
Sağda tek değişkenli bir y=f(x) fonksiyonun grafiği [a,b] aralığında verilmiştir. Görüldüğü gibi, fonksiyon [a,b] aralığının bazı noktalarında büyük, bazılarında küçük değerler almaktadır; tepe(maksimum) ve vadi(minimum) noktaları vardır. x1, x2, xn noktalarında ordinatlar y1, y2, …, yn değerlerini almıştır, yani y1=f(x1), y2=f(x2), … , yn=f(xn) dir. y1, y2, …, yn değerleri hemen solundaki ve hemen sağındaki ordinatlardan daha küçüktür. Bu nedenle y1, y2, …, yn ordinatları fonksiyonun [a,b] aralığındaki minimumlarıdır. Minimumlardan en küçüğüne global minimum, diğerlerine lokal minimum denir. Şekildeki fonksiyonun x2 noktasındaki y2 değeri global minimum, diğerleri lokal minimumdur.
em de r
Sağdaki iki değişkenli z=f(x,y) yüzeyinin grafiğine bakıldığında f(x,y) yüzeyinin çok sayıda minimum ve maksimum noktası olduğu görülür. Bir değişkenli f(x), iki değişkenli f(x,y), ya da daha genel olarak, çok değişkenli f(x, y, z, v, …) fonksiyonunun belli bir bölgesinde minimum değerinin hesaplanması teknik ve endüstriyel problemlerde gerekli olur. Klasik matematikte verilen yöntemler çok değişkenli genel fonksiyonların minimum değerinin belirlenmesinde çoğu kez yetersiz kalır, nümerik metotlar çözüm için kullanılır. Min-Max ve optimizasyon konusundaki yöntem ve programlar hakkında geniş bilgi için http://www.fing.edu.uy/if/cursos/fiscomp/extras/numrec/book/f10.pdf adresine bakılabilir. İzleyen sayfalarda minimum-maksimum bulma problemlerine yönelik bazı programlara ve örnek çözümlere yer verilmiştir. Bu programlar fonksiyonun analitik türevine gerek duymazlar.
w
w
w .e
1. GoldenRatioSearch1: tek değişkenli f(x) fonksiyonunun [a,b] aralığındaki minimum noktalarını ve minimum değerlerini Fibonacci golden ratio search metodu ile hesaplar. 2. Brent2: tek değişkenli f(x) fonksiyonunun [a,b] aralığındaki minimum noktalarını ve minimum değerlerini Brent metodu ile hesaplar.
3.NelderMead3: n değişkenli f(x,y,z,v, …) fonksiyonunun minimum olduğu noktanın koordinatlarını ve minimum değerini Nelder-Mead simplex(doğrusal programlama) adı verilen metod ile hesaplar. Minimum değerin arandığı bölgeyi tanımlayan n+1 noktanın başlangıç koordinatlarının verilmesi gerekir. Başlangıç koordinatlarına bağlı olarak hesaplanan değer lokal veya global minimum olabilir, global minimum olacağı garantisi yoktur. NelderMead, doğal olarak, tek değişkenli f(x) fonksiyonu için de kullanılabilir. 4.SteepestDescent: f(x,y,z) fonksiyonunun maksimum olduğu noktanın koordinatlarını ve maksimum değerini Steepest Descent metodu ile hesaplar. Maksimum değerin arandığı civarda x, y, z değişkenleri için başlangıç değerlerinin verilmesi gerekir. Başlangıç değerlerine bağlı olarak hesaplanan değer lokal veya global maksimum olabilir, global 1
Teorik bilgi için bak: http://math.fullerton.edu/mathews/n2003/GoldenRatioSearchMod.html Richard Brent, Avusturalyalı, (1946- ), tarafından 1973 yılında yayınlandı. 3 Teorik bilgi için bak: http://math.fullerton.edu/mathews/n2003/NelderMeadMod.html. Nelder-Mead optimizasyon metodu John Ashworth NELDER, İngiliz(1924-2010) ve Roger MEAD tarafından 1965 yılında geliştirildi. 2
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
313
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
314
maksimum olacağı garantisi yoktur. SteepestDescent tek değişkenli f(x) veya iki değişkenli f(x,y) fonksiyonu için de kullanılabilir. GoldenRatioSearch programı ve örnekleri: tek
değişkenli fonksiyonunun [-3,3] aralığında bir minimum değeri olduğu görülmektedir. Bu aralıkta başka minimum olmadığından global minimumdur. Program x=1 noktasında f(1)=-2 global minimum değer olarak hesaplamıştır.
Min
sn o
tla
GoldenRatioSearch sonucu
m
− 4 x( x − 2) ( x 2 + 1)( x − 2)
ri. co
1. Sağda grafiği verilen y = f ( x) =
2. Sağda grafiği verilen y = f ( x) = − x 2 + 4 x − 1 + 3 tek
Min
em de r
değişkenli fonksiyonunun [-6,6] aralığında bir minimum değeri olduğu görülmektedir. Bu aralıkta başka minimum olmadığından global minimumdur. Program x=1 noktasında f(1)=2 global minimum değer olarak hesaplamıştır. GoldenRatioSearch sonucu
w
w
w .e
3. y = f ( x) = 2 Sin( x) + Sin( x 3 ) + e x − 2 tek değişkenli fonksiyonunun [-3,3] aralığında çok sayıda minimum değeri olduğu sağdaki grafikten görülmektedir. Bunlardan biri global, diğerleri lokal minimumdur. Program x=-1.98 noktasında f(-1.98)=-4.46 global minimum değer olarak hesaplamıştır.
global Min
GoldenRatioSearch sonucu
Global Min
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
314
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
silindir bir kutu imal yüzeyinin en küçük az 8 cm den büyük r ve h var mıdır?
m
Toplam yüzey: S = 2π1000 r 2 + 2πrh 2 2 1000 V = πr hV= = Hacim: 2 πr → h h=
S = 2πr + 2πrh = 2π r + 2π r S = 2πr 2 +
2
1000 2000 = 2πr 2 + 2 r πr
2000 sadece r nin fonksiyonudur. Bu durumda r
S = f ( x) = 2πx 2 +
2000 x
Min
tla
soru şuna dönüşmüştür: Bu fonksiyonun 4≤r≤8 aralığında global minimumu var mıdır? Fonksiyonun sağdaki grafiği incelendiğinde [5,6] aralığında minimum olduğu görülür. Aralık için a=5, b=6 ve r için x alınarak
ri. co
πr
2
h
4. En az malzeme ile altı ve üstü kapalı edilecektir. Hacminin 1000 cm3, toplam (minimum) olması ve yarıçapın 4 cm den olmaması istenmektedir. Bu koşulları sağlayan
315
fonksiyonunun minimum olduğu
sn o
yer ve minimum değer program ile hesaplanabilir:
GoldenRatioSearch sonucu
x=r=5.42 cm de S=f(x)=553.58 cm2 global minimum değerini almıştır. h yüksekliği:
1000 = 10.84 cm bulunur. π ⋅ 5.42 2
em de r
V = πr 2 h = 1000 → h =
GoldenRatioSearch ana programı
'--------------------Ana program GoldenRatioSearch ----------------' f(x) fonksiyonunun [a,b] aralığındaki minimum değerlerini bulur ' Ahmet TOPÇU, Eskişehir, 2010 ' Çağrılan alt program: GoldenRatioSearch '--------------------------------------------------------------------------
w
w
w .e
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB GoldenRatioSearch (ai, bi, xMin, yMin, iHata) Pi = 4 * ATN(1) ' a = -3: b = 3: DEF fnf (x) = -4 * x * (x - 2) / (x ^ 2 + 1) / (x - 2) ' a = -6: b = 6: DEF fnf (x) = -x ^ 2 + 4 * ABS(x - 1) + 3 ' a = -3: b = 3: DEF fnf (x) = 2 * SIN(x) + SIN(x ^ 3) + SQR(EXP(x)) - 2 a = 5: b = 6: DEF fnf (x) = 2 * Pi * x * x + 2000 / x CLS MaxAltAralik = 100 DIM xi(MaxAltAralik, 2) iBulundu = 0 Delta = (b - a) / MaxAltAralik bi = a FOR iAralik = 1 TO MaxAltAralik ai = bi bi = ai + Delta IF iAralik = MaxAltAralik THEN bi = b CALL GoldenRatioSearch(ai, bi, xMin, yMin, iHata) IF iHata = 0 THEN iBulundu = iBulundu + 1 xi(iBulundu, 1) = xMin xi(iBulundu, 2) = yMin END IF NEXT iAralik
Devamı var
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
315
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
316
IF iBulundu = 0 THEN PRINT "["; a; ","; b; "] aralığında minimum bulunamadı(GoldenRatioSearch)!": END END IF
m
' Global minimumu belirle j = 1: GlobalMin = xi(1, 2) FOR i = 1 TO iBulundu IF xi(i, 2) < GlobalMin THEN j=i GlobalMin = xi(i, 2) END IF NEXT i
ri. co
PRINT "["; a; ","; b; "] aralığında minimum değerler(GoldenRatioSearch):" FOR i = 1 TO iBulundu PRINT "x="; xi(i, 1), "f(x)="; xi(i, 2), IF i = j THEN PRINT " Global Minimum" ELSE PRINT " Lokal Minimum" NEXT i END ' Ana program GoldenRatioSearch sonu
GoldenRatioSearch alt programı
em de r
Epsilon = 1E-08 Maxit = 100 iHata = 0 Rone = (SQR(5) - 1) / 2 Rtwo = Rone * Rone
sn o
tla
SUB GoldenRatioSearch (ai, bi, xMin, yMin, iHata) '-----------------------------------------------------------------------------------' f(x) fonksiyonunun minimum değerlerini bulur ' Veri: ' f(x) : çağıran programda DEF FNf(x)=... ile tanımlanmış olmalıdır ' ai ve bi: minimum değer aranacak aralığın alt ve üst sınırı ' Çıktı: ' xMin : Minimum değerin bulunduğu absis ' yMin : xMin noktasında fonksiyonun değeri ' iHata =0 ise Minimum değer bulundu ' iHata<>0 ise Minimum bulunamadı ' Metot: Fibonacci altın oran arama(Fibonacci golden ratio search) ' Fortran kodu: http://netlib.sandia.gov/textbook/mathews/index.html ' Kaynak: ' NUMERICAL METHODS for Mathematics, Science and Engineering, 2nd Ed, ' Prentice Hall, 1992. Section 8.1, Minimization of a Function, Page 413 '------------------------------------------------------------------------------------
w
w
w .e
a = ai b = bi h=b-a Ya = fnf(a) Yb = fnf(b) c = a + Rtwo * h d = a + Rone * h Yc = fnf(c) Yd = fnf(d) k=1 WHILE (ABS(Yb - Ya) > Epsilon OR h > Epsilon) AND k <= Maxit IF (Yc < Yd) THEN b=d Yb = Yd d=c Yd = Yc h=b-a c = a + Rtwo * h Yc = fnf(c) ELSE a=c Ya = Yc c=d Yc = Yd h=b-a d = a + Rone * h Yd = fnf(d) END IF k=k+1 WEND xMin = a yMin = Ya IF Yb < Ya THEN xMin = b yMin = Yb END IF ySol = fnf(xMin - Epsilon) ySag = fnf(xMin + Epsilon) IF k > Maxit OR ySol < yMin OR ySag < yMin THEN iHata = k
END SUB ' GoldenRatioSearch
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
316
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
317
Brent programı ve örnekleri: 1. Sağda grafiği verilen y = f ( x) =
− 4 x( x − 2) ( x 2 + 1)( x − 2)
tek
ri. co
Brent sonucu
m
değişkenli fonksiyonunun [-2,2] aralığında minimumu Brent programı ile hesaplanmıştır.
tla
Min
2. Sağda grafiği verilen y = f ( x) = − x 2 + 4 x − 1 + 3 tek
Min
sn o
değişkenli fonksiyonunun [-6,6] aralığında minimumu Brent programı ile hesaplanmıştır.
em de r
Brent sonucu
Brent sonucu
global Min
Global Min
w
w
w .e
3. y = f ( x) = 2 Sin( x) + Sin( x 3 ) + e x − 2 tek değişkenli fonksiyonunun [-3,3] aralığındaki minimumları Brent programı ile hesaplanmıştır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
317
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
'--------------------Ana program Brent------------------------------' f(x) fonksiyonunun [a,b] aralığındaki minimum değerlerini bulur ' Ahmet TOPÇU, Eskişehir, 2010 ' Çağrılan alt program: Brent '--------------------------------------------------------------------
m
Brent ana programı
sn o
em de r
CLS MaxAltAralik = 100 DIM xi(MaxAltAralik, 2) iBulundu = 0 Delta = (b - a) / MaxAltAralik Cx = a FOR iAralik = 1 TO MaxAltAralik Ax = Cx Cx = Ax + Delta IF iAralik = MaxAltAralik THEN Cx = b Bx = Ax + Delta / 10 yMin = Brent(Ax, Bx, Cx, xMin, iErr) IF iErr = 0 THEN iBulundu = iBulundu + 1 xi(iBulundu, 1) = xMin xi(iBulundu, 2) = yMin END IF NEXT iAralik
tla
' [a,b] aralığı ve f(x) fonksiyonunun tanımlanması ' a = 0: b = 1.5: DEF fnF (x) = -4 * x * (x - 2) / (x * x + 1) / (x - 2) ' a = -6: b = 6: DEF fnF (x) = -x * x + 4 * ABS(x - 1) + 3 a = -3: b = 3: DEF fnF (x) = 2 * SIN(x) + SIN(x ^ 3) + SQR(EXP(x)) - 2
ri. co
DEFINT I-N DEFDBL A-H, O-Z DECLARE FUNCTION Brent (Ax, Bx, Cx, xMin, iErr) DECLARE FUNCTION Sign (a, b)
318
IF iBulundu = 0 THEN PRINT "["; a; ","; b; "] aralığında minimum bulunamadı(Brent)!": END END IF
' Global minimumu belirle j = 1: GlobalMin = xi(1, 2) FOR i = 1 TO iBulundu IF xi(i, 2) < GlobalMin THEN j=i GlobalMin = xi(i, 2) END IF NEXT i
END 'Brent ana sonu
FUNCTION Sign (a, b) IF b >= 0 THEN Sign = ABS(a) ELSE Sign = -ABS(a)
END FUNCTION 'Sign
w
w
w .e
PRINT "["; a; ","; b; "] aralığında minimum değerler(Brent):" FOR i = 1 TO iBulundu PRINT "x="; xi(i, 1), "f(x)="; xi(i, 2), IF i = j THEN PRINT " GLOBAL MİNİMUM" ELSE PRINT " Lokal Minimum" NEXT i
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
318
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
m
sn o
tla
IF Ax < Cx THEN a = Ax ELSE a = Cx IF Ax > Cx THEN b = Ax ELSE b = Cx V = Bx W=V x=V E=0 Fx = fnF(x) Fv = Fx Fw = Fx FOR iTer = 1 TO iTmax: 'main loop Xm = .5 * (a + b) Tol1 = Tol * ABS(x) + Zeps Tol2 = 2 * Tol1 ' Test for done here, if satisfiyed then exit section IF ABS(x - Xm) <= (Tol2 - .5 * (b - a)) THEN xMin = x Brent = Fx IF fnF(x - 1E-12) < Fx OR fnF(x + 1E-12) < Fx THEN iErr = 1 EXIT FUNCTION END IF
Brent alt programı
ri. co
FUNCTION Brent (Ax, Bx, Cx, xMin, iErr) '----------------------------------------------------------------------' Findes minimum of a function f(x) ' Given a function f(x), and a bracketing triplet of abscissas ' Ax,Bx,Cx (such that Bx is between AX and CX, and f(Bx) is less ' than both f(Ax) and f(Cx)), this routine isolates the minimum ' to a fractional precision of about TOL using Brent's method. ' The abscissa of the minimum is returned in Xmin, and the minimum ' function value is returned as Brent, the returned function value. ' Fortran code: ' http://jean-pierre.moreau.pagesperso-orange.fr/Fortran/brent_f90.txt '-----------------------------------------------------------------------EpsMach = 1E-15: ' machine epsilon Tol = SQR(EpsMach): ' Tolerance iTmax = 500: 'Maximum number of iteration Cgold = .381966: 'Golden Ratio Zeps = 1E-10: ' instead of zero iErr = 0: ' error flag
319
w
w
w .e
em de r
IF ABS(E) > Tol1 THEN 'Construct a trial parabolic fit R = (x - W) * (Fx - Fv) Q = (x - V) * (Fx - Fw) P = (x - V) * Q - (x - W) * R Q = 2 * (Q - R) 'bug corrected 07/24/2006 (0.2 instead of 2) IF Q > 0 THEN P = -P Q = ABS(Q) Etemp = E E=D IF ABS(P) > ABS(.5 * Q * Etemp) OR (P <= Q * (a - x)) OR (P >= Q * (b - x)) THEN GOTO 1 ' The above conditions determine the acceptability of the ' parabolic fit. Here it is o.k.: D=P/Q U=x+D IF (U - a < Tol2) OR (b - U < Tol2) THEN D = Sign(Tol1, Xm - x) GOTO 2 END IF 1 IF x >= Xm THEN E=a-x ELSE E=b-x END IF D = Cgold * E ELSE 2 IF ABS(D) >= Tol1 THEN b=U U=x+D END IF ELSE IF Fu <= Fw OR W = x THEN U = x + Sign(Tol1, D) V=W END IF Fv = Fw W=U Fu = fnF(U) 'This the one function evaluation per iteration Fw = Fu IF Fu <= Fx THEN ELSE IF U >= x THEN IF (Fu <= Fv) OR (V = x) OR (V = W) THEN a=x V=U ELSE Fv = Fu b=x END IF END IF END IF V=W END IF Fv = Fw NEXT iTer W=x iErr = 1: ' Brent exceed maximum iterations.' Fw = Fx x=U Fx = Fu ELSE IF U < x THEN a=U
END FUNCTION ' end of Brent
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
319
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
320
NelderMead programı ve örnekleri: 1. Sağda grafiği verilen z = f ( x, y) = x 2 + y 2 − 4 x − y − xy çift değişkenli fonksiyonunun bir minimum değeri olduğu görülmektedir. Fonksiyonu minimum yapan x,y koordinatları ve Min Z aranmaktadır.
A B
m
C
tla
ri. co
Nelder-Mead simplex metodu, iterasyona başlayabilmesi için, değişken sayısının bir fazlası kadar noktada değişkenlerin başlangıç değerinin verilmesini gerektirir. Bu örnekte değişkenler x ve y olduğundan değişken sayısı 2 dir. O halde 3 noktadaki x ve y başlangıç değeri verilmelidir. Bu noktalar 1.nokta x=2, y=1 2.nokta x=2, y=3 3.nokta x=4, y=3
olarak seçilmiştir (şekilde A(2,1), B(2,3) ve C(4,3) noktaları). Değişken sayısı ve başlangıç değerleri
sn o
DATA 2: 'n 'Başlangıç noktalarının koordinatları DATA 2,1 DATA 2,3 DATA 4,3 satırlarında programa verilmiş, z = f ( x, y) = x 2 + y 2 − 4 x − y − xy fonksiyonu Func(P()) adı ile
em de r
FUNCTION Func (P()) ' minimumu aranan fonksiyonun tanımı X = P(1): Y = P(2) Func = X * X + Y * Y - 4 * X - Y - X * Y END FUNCTION
tanımlanmıştır. P() vektörü (n+1)xn boyutludur, bu örnekte P(3,2). Fonksiyonun başlangıç değerleri için aldığı z=f(x,y) ordinatları
w
w
w .e
' Başlangıç noktalarında fonksiyonun aldığı değerleri hesapla FOR i = 1 TO n + 1 PT(1) = P(i, 1) PT(2) = P(i, 2) Y(i) = Func(PT()) NEXT i satırlarında hesaplanıp Y() vektöründe depolanmakta, aktarılarak minimum noktası ve değerinin aranması
NelderMead
alt
programına
' NelderMead alt programını çağır, Min değeri ara CALL NelderMead(P(), Y(), n, iErr) ile başlatılmaktadır. Programdan alınan sonuç:
NelderMead sonucu
Buna göre x=3, y=2 noktasında Min z=f(2,3)=-7 minimum değerini almıştır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
320
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
321
2. Kenarları a, b, c, ön tarafı açık olan 1000 cm3 hacimli bir kutu imal edilecektir. Toplam yüzeyinin minimum olması için a, b ve c ne olmalıdır.
Hacim: V = abc = 1000 → c =
m
Toplam yüzey: S = 2ab + 2bc + ac
1000 ab
1000 1000 +a ab ab 2000 1000 S = 2ab + + a b
ri. co
S = 2ab + 2b
A
S sadece a ve b nin fonksiyonudur. Sağda verilen grafiği incelendiğinde bir minimumu olduğu görülür. Değişken sayısı 2 dir (a ve b), o halde 3 noktada a ve b için başlangıç değeri verilmelidir. Bu noktalar 1.nokta a=11, b=5 (A noktası) 2.nokta a=11, b=8 (B noktası) 3.nokta a=15, b=8 (C noktası)
B
seçilebilir. Programa
sn o
tla
C
em de r
DATA 2: 'n 'Başlangıç noktalarının koordinatları DATA 11,5 DATA 11,8 DATA 15,8 satırları ile verilir. S fonksiyonu
FUNCTION Func (P()) ' minimumu aranan fonksiyonun tanımı x = P(1): y = P(2) Func = 2 * x * y + 2000 / x + 1000 / y END FUNCTION
w
w
w .e
şeklinde yazılır( programın yapısı gereği, S yerine Func, a yerine x, b yerine y yazıldığına dikkat ediniz). Program sonucu: NelderMead sonucu
olur. a=x=12.60 cm, b=y=6.30 cm, Min S=f(x,y)=476.22 cm2 olmuştur. c kenarı
V = abc = 1000 → c =
c=
1000 bağıntısında a ve b yerine yazılarak bulunur: ab
1000 12.60 ⋅ 6.30
c = 12.60 cm.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
321
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
Fonksiyonun değişken sayısı n=2 DATA 2: 'n 'Başlangıç noktalarının koordinatları DATA 2,1 x, ve y değişkenlerinin 3 noktadaki başlangıç değerleri DATA 2,3 DATA 4,3
m
Bu ana program iki değişkenli f(x,y)= x2 + y2 - 4 x - y - xy fonksiyonu için yazılmıştır.
tla
CLS Değişken sayısı okunuyor READ n DIM P(n + 1, n), Y(n + 1), PT(n + 1)
NelderMead ana programı.
ri. co
'--------------------Ana program NelderMead-------------------------' f(x,y,z,v, ...) gibi çok değişkenli fonksiyonunun minimum olduğu ' noktanın koordinatlarını, yani x, y, z,v, ... değerlerini ve ' f(x,y,z,v, ...) minimum değerini Nelder-Mead motodu ile hesaplar. ' Nelder-Mead metodunun yaygın kullanılan diğer adı amoeba dır. ' Hesaplanan minimum lokal veya global olabilir. Glabal minimum ' olacağı garantisi yoktur. ' Ahmet Topçu, Eskişehir, 2010 '-------------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB NelderMead (P(), Y(), n, iErr) DECLARE FUNCTION Func (P())
322
sn o
' Başlangıç koordinatlarını oku FOR i = 1 TO n + 1 FOR j = 1 TO n READ P(i, j) x, ve y değişkenlerinin başlangıç değerleri okunuyor NEXT j NEXT i
' Başlangıç noktalarında fonksiyonun aldığı değerleri hesapla FOR i = 1 TO n + 1 PT(1) = P(i, 1) PT(2) = P(i, 2) Y(i) = Func(PT()) Başlangıç değerleri için f(x,y) ordinatları hesaplanıyor NEXT i
em de r
' NelderMead alt programını çağır, Min değeri ara CALL NelderMead(P(), Y(), n, iErr)
Fonksiyonun minimum noktasını ve değerini hesaplamak için NelderMead alt programı çağrılıyor
IF iErr <> 0 THEN PRINT iErr; " İterasyon sonunda minimum bulunamadı(NelderMead)!" END ELSE
' n+1 değerden minimum değeri belirle i = 1: yMin = Y(1) FOR j = 1 TO n + 1 IF Y(j) < yMin THEN i = j: yMin = Y(j) NEXT j
Sonuçlar yazdırılıyor
END ' Ana program NelderMead sonu
FUNCTION Func (P()) ' minimumu aranan fonksiyonun tanımı X = P(1): Y = P(2) Func = X * X + Y * Y - 4 * X - Y - X * Y END FUNCTION
f(x,y)= x2 + y2 - 4 x - y - xy fonksiyonunun programda tanımlanması
w
w
w .e
PRINT "Minimum değer(NelderMead):" PRINT "x="; P(i, 1); "y="; P(i, 2); " noktasında "; "f(x,y)="; Y(i) END IF
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
322
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
323
tla sn o
DIM Pr(n), Prr(n), Pbar(n) Mpts = n + 1 iTer = 0 1 iLo = 1 IF Y(1) > Y(2) THEN iHi = 1 iNHi = 2 ELSE iHi = 2 iNHi = 1 END IF
ri. co
m
NelderMead alt programı. SUB NelderMead (P(), Y(), n, iErr) '----------------------------------------------------------------------------------Bu alt program geneldir. Herhangi bir n ' Multidimensional minimization of the function FUNC(X) where X is değişkenli f(x,y,z,v,….) fonksiyonu için ' an n dimensional vector, by the downhill simplex method of Nelder-Mead. Usially yazılmıştır ' used other name: amoeba ' Input: ' matrix P(n+1,n) which rows are the starting coordinates ' vector Y(n+1) whose components must be preinitialized ' to the values of FUNC evaluated at the n+1 vertices of P. ' n is number of varibels of the function FUNC. ' output: ' P and Y will have been reset to n+1 new points all within ' Ftol of a minimum function value ' iErr=0 a minimum found, otherwise not. ' Fortran kodu: http://jean-pierre.moreau.pagesperso-orange.fr/Fortran/tamoeba_f90.txt '---------------------------------------------------------------------------------Ftol = 1E-12: ' Required tolerance iErr = 0: ' error flag Alpha = 1: Beta = .5: Gamma = 2: itMax = 1000 ' Expected maximum number of dimensions, three parameters which define ' the expansions and contractions, and maximum allowed number of iterations.
em de r
FOR i = 1 TO Mpts IF Y(i) < Y(iLo) THEN iLo = i IF Y(i) > Y(iHi) THEN iNHi = iHi iHi = i ELSE IF Y(i) > Y(iNHi) THEN IF i <> iHi THEN iNHi = i END IF NEXT i
' Compute the fractional range from highest to lowest and return if ' satisfactory. Rtol = 2 * ABS(Y(iHi) - Y(iLo)) / (ABS(Y(iHi)) + ABS(Y(iLo))) IF Rtol < Ftol THEN EXIT SUB IF iTer = itMax THEN iErr = iTer: ' maximum iterations exceeded EXIT SUB END IF
w
w
w .e
iTer = iTer + 1 FOR j = 1 TO n Pbar(j) = 0 NEXT j FOR i = 1 TO Mpts IF i <> iHi THEN FOR j = 1 TO n Pbar(j) = Pbar(j) + P(i, j) NEXT j END IF NEXT i
FOR j = 1 TO n Pbar(j) = Pbar(j) / n Pr(j) = (1 + Alpha) * Pbar(j) - Alpha * P(iHi, j) NEXT j Ypr = Func(Pr()) IF Ypr <= Y(iLo) THEN FOR j = 1 TO n Prr(j) = Gamma * Pr(j) + (1 - Gamma) * Pbar(j) NEXT j Yprr = Func(Prr()) IF Yprr < Y(iLo) THEN FOR j = 1 TO n P(iHi, j) = Prr(j) NEXT j Y(iHi) = Yprr ELSE FOR j = 1 TO n P(iHi, j) = Pr(j) NEXT j Y(iHi) = Ypr END IF
ELSE IF Ypr > Y(iNHi) THEN IF Ypr < Y(iHi) THEN FOR j = 1 TO n P(iHi, j) = Pr(j) NEXT j Y(iHi) = Ypr END IF
FOR j = 1 TO n Prr(j) = Beta * P(iHi, j) + (1 - Beta) * Pbar(j) NEXT j Yprr = Func(Prr()) IF Yprr < Y(iHi) THEN FOR j = 1 TO n P(iHi, j) = Prr(j) NEXT j Y(iHi) = Yprr ELSE FOR i = 1 TO Mpts IF i <> iLo THEN FOR j = 1 TO n Pr(j) = .5# * (P(i, j) + P(iLo, j)) P(i, j) = Pr(j) NEXT j Y(i) = Func(Pr()) END IF NEXT i END IF ELSE FOR j = 1 TO n P(iHi, j) = Pr(j) NEXT j Y(iHi) = Ypr END IF END IF GOTO 1 END SUB ' NelderMead
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
323
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
324
3. Üç değişkenli u = f ( x, y, z ) = x 4 + y 3 + z 4 − 8 xyz fonksiyonun minimum olduğu x, y, z değerleri ve Min u aranmaktadır. Fonksiyon 3 değişkenli olduğundan 4 noktada başlangıç değeri verilmek zorundadır. Minimumun aranacağı başlangıç değerleri: nokta: nokta: nokta: nokta:
x=1, x=0, x=0, x=1,
y=0, y=1, y=0, y=1,
z=0 z=0 z=1 z=1
m
1. 2. 3. 4.
NelderMead ana programı. Bu ana program üç değişkenli u=f(x,y,z)= x4 + y2 +z4 - 8 xyz fonksiyonu için yazılmıştır.
tla
'--------------------Ana program NelderMead-----------------------' f(x,y,z,v, ...) gibi çok değişkenli fonksiyonunun minimum olduğu ' noktanın koordinatlarını, yani x, y, z,v, ... değerlerini ve ' f(x,y,z,v, ...) minimum değerini Nelder-Mead motodu ile hesaplar. ' Hesaplanan minimum lokal veya global olabilir. Glabal minimum ' olacağı garantisi yoktur. ' Ahmet Topçu, Eskişehir, 2010 '-----------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB NelderMead (p(), y(), n, iErr) DECLARE FUNCTION Func (p())
ri. co
olsun. NelderMead alt programı fonksiyon bağımlı değildir, değişmez, fakat ana program ve fonksiyonun tanımlanması aşağıdaki gibi değiştirilmelidir:
Fonksiyonun değişken sayısı n=3
sn o
DATA 3: 'n 'Başlangıç noktalarının koordinatları DATA 1,0,0 DATA 0,1,0 x, y ve z değişkenlerinin 4 noktadaki başlangıç değerleri DATA 0,0,1 DATA 1,1,1
Değişken sayısı okunuyor CLS READ n DIM p(n + 1, n), y(n + 1), Pt(n + 1)
em de r
' Başlangıç koordinatlarını oku FOR i = 1 TO n + 1 FOR j = 1 TO n READ p(i, j) x, y ve z değişkenlerinin başlangıç değerleri okunuyor NEXT j NEXT i
' Başlangıç noktalarında fonksiyonun aldığı değerleri hesapla FOR i = 1 TO n + 1 Pt(1) = p(i, 1) Pt(2) = p(i, 2) Başlangıç değerleri için u= f(x,y,z) ordinatları hesaplanıyor Pt(3) = p(i, 3) y(i) = Func(Pt()) NEXT i ' NelderMead alt programını çağır, Min değeri ara CALL NelderMead(p(), y(), n, iErr)
Fonksiyonun minimum noktasını ve değerini hesaplamak için NelderMead alt programı çağrılıyor
w
w
w .e
IF iErr <> 0 THEN PRINT iErr; " İterasyon sonunda minimum bulunamadı(NelderMead)!" END ELSE
' n+1 değerden minimum değeri belirle i = 1: yMin = y(1) FOR j = 1 TO n + 1 IF y(j) < yMin THEN i = j: yMin = y(j) NEXT j
Sonuçlar yazdırılıyor
PRINT "Minimum değer(NelderMead):" PRINT "x="; p(i, 1); "y="; p(i, 2); "z="; p(i, 3); " noktasında "; "f(x,y,z)="; y(i) END IF
END ' Ana program NelderMead sonu FUNCTION Func (p()) ' minimumu aranan fonksiyonun tanımı x = p(1): y = p(2): z = p(3) Func = x ^ 4 + y ^ 3 + z ^ 4 - 8 * x * y * z END FUNCTION
u=f(x,y,z)= x4 + y2 +z4 - 8 xyz fonksiyonunun programda tanımlanması
NelderMead sonucu
x=3.27, y=5.33, z=3.26 noktasında min u=f(x,y,z)=-75.85 bulunmuştur. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
324
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
325
SteepestDescent programı ve örnekleri: 1. f ( x, y, z ) = Sin( x) + 2Cos ( y ) − Sin( z ) fonksiyonunun x=1, y=1 ve z=1 civarında maksimumu var mıdır? Fonksiyonun değişken sayısı n=3 tür DATA satırları
m
DATA 3: ' n değişken sayısı DATA 1,1,1: ' değişkenlerin başlangıç değerleri
tla
FUNCTION eval (x()) ' Definition of Function f(x,y,z) to maximize. ' x(1), x(2),x(3) correspondes variables x,y,z ' Eval is the value of function f(x,y,z) x = x(1) y = x(2) z = x(3) eval = SIN(x) + 2 * COS(y) - SIN(z)
ri. co
olarak verilir ve fonksiyonun tanımı
END FUNCTION ' eval
SteepestDescent sonucu
sn o
şeklinde yapılırsa program aşağıdaki sonucu verir:
em de r
x=1.57, y=0, z=-1.57 noktasında Max f(x,y,z)=4.0 bulunmuştur. '--------------------Ana program SteepestDescent -----------------' f(x) veya f(x,y) veya f(x,y,z) fonksiyonunun lokal maksimum ' olduğu noktanın koordinatlarını ve lokal maksimum değerini bulur. ' değişkenler için başlangıç değerleri verilmelidir. Başlangıç ' değerlerinin tanımladığı noktaya en yakın lokal maksimum bulunur. ' Metot: Steepest Descent ' Ahmet TOPÇU, Eskişehir, 2010 '------------------------------------------------------------------
Bu ana program üç değişkenli f(x,y,z)= Sin(x)+2Cos(y)-Sin(z) fonksiyonu için yazılmıştır.
DEFINT I DEFDBL A-H, O-Z DECLARE SUB SteepestDescent (n, x(), iErr) DECLARE SUB Utilit1 (n, dd, d()) DECLARE SUB Utilit2 (n, xk, dd, d(), y(), x(), x1()) DECLARE SUB Derivatives (n, dd, xk, d(), x(), y()) DECLARE FUNCTION eval (x())
w .e
w
w
SteepestDescent ana programı.
CLS
DATA 3: ' n değişken sayısı DATA 1,1,1: ' değişkenlerin başlangıç değerleri
Değişken sayısı: fonksiyonda x,y,z değişkenleri var anlamında.
READ n: ' değişken sayısını oku
Değişkenlerin başlangıç değerleri: x=1, y=1, z=1 anlamındadır
DIM x(n): ' değişkenlerin değerlerini içeren vektör FOR i = 1 TO n READ x(i): ' değişkenlerin başlangıç değerini oku NEXT i CALL SteepestDescent(n, x(), iErr)
Değişkenlerin başlangıç değerleri x vektöründe depolanıyor: x(1)=x, x(2)=y, x(3)=z anlamında
Lokal maksimumu ara
IF iErr <> 0 THEN PRINT "Lokal maksimum bulunamadı(SteepestDescent)" END END IF PRINT "Lokal maksimum noktası(SteepestDescent):" FOR i = 1 TO n PRINT "x("; i; ")="; x(i) NEXT i PRINT "noktasında lokal maksimum değer="; eval(x())
Eval alt programı. f(x,y,z)= Sin(x)+2Cos(y)-Sin(z) fonksiyonu tanımlanması
FUNCTION eval (x()) ' Definition of Function f(x,y,z) to maximize. ' x(1), x(2),x(3) correspondes variables x,y,z. ' Eval is the value of function f(x,y,z) x = x(1) y = x(2) z = x(3) eval = SIN(x) + 2 * COS(y) - SIN(z)
END FUNCTION ' eval END ' ana program SteepestDescent sonu Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
325
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
SUB SteepestDescent (n, x(), iErr) '-----------------------------------------------------------------------' Steepest descent optimization subroutine ' This routine finds the local maximum of function f(x,y,z) using ' the method of steepest descent, or the gradient. ' The function must be defined in the function Eval(X). ' In this version, finite differences are used to calculate the ' partial derivatives.
tla
' Subprograns called: Eval, Derivatives, Utilit1, Utilit2 ' Fortran kodu: ' http://jean-pierre.moreau.pagesperso-orange.fr/Fortran/steepda_f90.txt '-----------------------------------------------------------------------DIM x1(n), d(3), y(3): 'working vectors
ri. co
m
SteepestDescent alt programı.
' INPUTS: ' n :number of variables of function ' Eps : The convergence criteria ' Maxit: The maximum number of iterations ' xk : A starting constant ' X(i): starting values of variables ' OUTPUTS: ' X(i) : The locally optimum set: x=x(1),y=x(2),z=x(3) ' iErr=0 : local maximum found found at the point x,y,z ' iErr<>0: local maximum not found
DİKKAT: xk nın değeri sonucu çok etkiler. Değiştirilirse başka maximum bulunmasına veya bulunamamasına, neden olabilir! Değiştirerek, örneğin, xk=1 alarak, deneyiniz.
sn o
Eps = 1E-08: ' Tolerance Maxit = 500: ' max number of iteration xk = .1: ' starting constant EpsMach = 1E-15: ' Machine epsilon it = 0: ' number of itaration iErr = 0: ' error flag
326
em de r
' The routine needs three values of Y to get started ' Generate starting D(i) values ' These are not even good guesses and slow the program a little dd = 1 d(1) = 1 / SQR(n) FOR i = 2 TO n d(i) = d(i - 1) NEXT i ' Start initial probe FOR i = 1 TO n ' Obtain yy and D[i] y(i) = eval(x()) ' Update X[i] CALL Utilit1(n, dd, d()) CALL Utilit2(n, xk, dd, d(), y(), x(), x1()) NEXT i
w
w
w .e
' We now have a history to base the subsequent search on ' Accelerate search if approach is monotonic ' start iteration WHILE it < Maxit IF ABS(y(2) - y(1)) >= EpsMach THEN IF (y(3) - y(2)) / (y(2) - y(1)) > 0 THEN xk = xk * 1.2 END IF ' Decelerate if heading the wrong way IF y(3) < y(2) THEN xk = xk / 2 ' Update the Y[i] if value has decreased IF y(3) > y(2) THEN y(1) = y(2) y(2) = y(3) ELSE ' Restore the X(i) FOR i = 1 TO n x(i) = x1(i) NEXT i END IF ' Obtain new values y(3) = eval(x()) CALL Derivatives(n, dd, xk, d(), x(), y()): ' Get D(i) ' if dd=0 then the precision limit of the computer has been reached IF dd < EpsMach THEN EXIT SUB ' Update X[i] CALL Utilit2(n, xk, dd, d(), y(), x(), x1()) ' Check for convergence IF ABS(y(3) - y(2)) < Eps THEN EXIT SUB ' Try another iteration it = it + 1 WEND iErr = 1: ' not converged END SUB ' SteepestDescent
SUB Utilit1 (n, dd, d()) ' Find the magnitude of the gradient ' Functions called by SteepestDescent and Derivatives dd = 0 FOR i = 1 TO n dd = dd + d(i) * d(i) NEXT i dd = SQR(dd) END SUB ' Utilit1
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
326
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
327
ri. co
m
SUB Derivatives (n, dd, xk, d(), x(), y()) ' Find approximations of partial derivatives D(i) by finite differences ' Called by SteepestDescent FOR i = 1 TO n a = x(i): ' Save X(i) b = d(i) * xk / (2 * dd): ' Find increment x(i) = x(i) + b: ' Move increment in X(i) yy = eval(x()): ' Obtain yy IF ABS(b) < 1E-12 THEN b = 1E-12: ' Guard against divide by zero near maximum d(i) = (yy - y(3)) / b: ' Update D(i) IF ABS(d(i)) < .00001 THEN d(i) = .00001: ' Guard against locked up derivative ' Restore X(i) and yy x(i) = a SUB Utilit2 (n, xk, dd, d(), y(), x(), x1()) yy = y(3) ' Updates the X(i) NEXT i ' called by SteepestDescent ' Obtain dd FOR i = 1 TO n CALL Utilit1(n, dd, d()) x1(i) = x(i)
x(i) = x(i) + xk * d(i) / dd NEXT i y(3) = eval(x())
tla
END SUB' Derivatives
END SUB ' Utilit2
sn o
2. Sağda grafiği verilen y = f ( x) = − x 2 + 4 x − 1 + 3 tek
Max
değişkenli fonksiyonunun [-6,6] aralığındaki maksimumu SteepestDescent ile aranacaktır.
a)Fonksiyonun tanımlanması için eval alt programı değiştirilir:
em de r
FUNCTION eval (x()) ' Definition of Function f(x,y,z) to maximize. ' x(1), x(2),x(3) correspondes variables x,y,z. ' Eval is the value of function f(x,y,z) x = x(1) f(x)= -x2+4|x–1|+3 fonksiyonu eval = -x * x + 4 * ABS(x - 1) + 3 END FUNCTION ' eval
b) Soldaki tepe noktasını bulmak için ana programın DATA satırları aşağıdaki gibi değiştirilir:
w
w
w .e
DATA 1: ' n değişken sayısı DATA -3: ' değişkenlerin başlangıç değerleri
c) Program çalıştırılarak sonuç alınır:
SteepestDescent sonucu: x= -2.0 de Max f(x)=11.0 anlamında
d) Sağdaki tepe noktasını bulmak için DATA satırları aşağıdaki gibi değiştirilir DATA 1: ' n değişken sayısı DATA 3: ' değişkenlerin başlangıç değerleri ve program çalıştırılırsa: SteepestDescent sonucu: x= 2.0 de Max f(x)=3.0 anlamında
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
327
37. Min-Max: Bir fonksiyonun minimum-maksimum değerlerinin belirlenmesi
328
3m
Hacim: V=x(3-2x)2 El çözümü:
3-2x
V’=3(4x2 - 8x+3)=0
3-2x
3-2x
Max
V=x(3-2x)2
sn o
tla
Denkleminin kökleri x1=0.5 ve x2=1.5 dir. İkinci türev kullanılarak bu köklerin V yi minimum mu yoksa maksimum mu yaptığı belirlenebilir. Sağdaki grafikten görüldüğü gibi x=x1=0.5 için V(0.5) maksimum olmaktadır. Hacim: V=0.5(3-2.0.5)=2 m3 olur.
x
ri. co
V nin fonksiyonu çok basit olduğundan el çözümü yapılabilir. V nin x e göre türevinin sıfır olduğu noktalarda V maksimum veya minimum olur:
x
m
3. 3x3 metre boyutlu sac levhanın kenarları kıvrılarak yüksekliği x olan sıvı tankı yapılacaktır. Tankın hacminin maksimum olması için x ne olmalıdır.
SteepestDescent Programı ile çözüm:
em de r
a)Fonksiyonun tanımlamak için eval alt programı değiştirilir: FUNCTION eval (x()) ' Definition of Function f(x,y,z) to maximize. ' x(1), x(2),x(3) correspondes variables x,y,z. ' Eval is the value of function f(x,y,z) x = x(1) V= x(3-2x)2 fonksiyonu eval = x * (3-2*x)^2 END FUNCTION ' eval
b) Ana programın DATA satırları aşağıdaki gibi değiştirilir:
w .e
DATA 1: ' n değişken sayısı DATA 1: ' değişkenlerin başlangıç değerleri
c) SteepestDescent programı çalıştırılarak sonuç alınır:
w
w
SteepestDescent sonucu: x= 0.5 m de Max V=2 m3 anlamında
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
328
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
tla
Ders notları 2014
sn o
Ahmet TOPÇU
b
I = ∫ f ( x)dx
em de r
a
xb
I=
yb ( x )
∫ [ ∫ f ( x, y) dy] dx
xa
ya ( x )
xb yb ( x ) zb ( x , y )
I = ∫{
∫
[
∫ f ( x, y , z )
dz ] dy}dx
w
w
w .e
xa ya ( x ) za ( x , y )
• • • • • • • •
38
BELİRLİ İNTEGRAL HESABI
Dikdörtgen kuralı Dikdörtgen orta nokta kuralı Simpson kuralı Romberg metodu Gauss-Legendre metodu Adapte Simpson metodu Recursive Simpson metodu Tanh kuralı
330
38. BELİRLİ İNTEGRAL HESABI
38. BELİRLİ İNTEGRAL HESABI
m
Eğrisel uzunluk, alan, hacim, ağırlık merkezi, atalet momenti, rijitlik gibi problemlerde tek ya da çok katlı integral hesabı ile karşılaşırız. En basit tanımıyla, bir f(x) fonksiyonunun [a,b] aralığındaki integrali f(x) fonksiyonu ile x ekseni arasında kalan, a ve b ile sınırlanan alandır:
Alan = I = ∫ f ( x )dx a
a
ri. co
b
b
Alan = I = ∫ f ( x)dx
İntegralin (alanın) analitik hesabı her zaman mümkün olmaz. Aşağıdaki durumlarda nümerik integral hesabı kaçınılmaz olur: •
b
Analitik çözüm yoktur. Örnek
∫e
−
x2 2
dx
• •
tla
a
Kapalı çözüm vardır fakat kullanılamayacak kadar karmaşıktır Fonksiyon tanımlı değildir, sadece bazı noktalardaki değerleri bilinmektedir
sn o
Teknik problemlerde kullanılabilecek çok sayıda nümerik integrasyon yöntemi vardır: Dikdörtgen kuralı, trapez kuralı; Simpson kuralı, Romberg, Gauss-Legendre, Tanh metotları ve bunların biraz değişik şekilleri.
em de r
Nümerik integrasyonda temel fikir, alanı küçük alt alanlara bölmek, alt alanların her birini yaklaşık olarak hesaplamak ve bu alanları toplamaktan ibarettir. Dikdörtgen kuralı:
Alan dikdörtgenler ile modellenir. a-b aralığı n eşit aralığa bölünür, h=(b-a)/n. f(x) in x1, x2, … , xn noktalarındaki y1=f(x1), y2=f(y2), … ,yn=f(xn) ordinatları hesaplanır. Ai=hyi olur. b
Alan = I = ∫ f ( x ) dx ≈ A1 + A2 + ... + An
a
b h
h
x0
x1 A1
h x2
A2
h
h
h
x3
xn
A3
An
a
b
w
w
w .e
Alan = I = ∫ f ( x ) dx ≈ hy1 + hy 2 + ... + hy n a
b
n
a
i =1
Alan = I = ∫ f ( x) dx ≈ h∑ y i
Dikdörtgen orta nokta kuralı: Alan dikdörtgenler ile modellenir. a-b aralığı n eşit aralığa bölünür, h=(b-a)/n. i. aralığın orta noktasındaki xi ye karşılık gelen yi = f(xi) ordinatı hesaplanır, Ai=hyi olur. Toplam alan: b
n
Alan = I = ∫ f ( x)dx ≈ hy1 + hy 2 + ... + hy n = h∑ y i a
i =1
a
b h
h
h
x1
x2
x3 A3
A2 A1 y1 y2
h
h
h xn An yn
y3
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
330
331
38. BELİRLİ İNTEGRAL HESABI
Yamuk(trapez) kuralı: Alan yamuklar ile modellenir. a-b aralığı n eşit aralığa bölünür, h=(b-a)/n.
Toplam alan: b
Alan = I = ∫ f ( x )dx ≈ h a
y0 + y1 y +y y +y + h 1 2 + ... + h n−1 n 2 2 2
tla
n−1 1 1 1 1 Alan = I ≈ h( y0 + y1 + y2 + y3 + ... + yn = h( y0 + ∑ yi + yn ) 2 2 2 2 i=2
ri. co
m
xi ye karşılık gelen yi = f(xi) ordinatları hesaplanır, Ai = h y i + y i +1 olur. 2
Simpson kuralı:
sn o
n çift tam sayı olmak üzere, a-b aralığı n eşit aralığa bölünür, h=(b-a)/n. xi+2 - xi=2h aralığında f(x) in ikince derece bir polinom olduğu varsayılır.
em de r
yi, yi+1, yi+2 ordinatlarının A, B ve C tepe noktalarından geçen y=ax2+bx+c parabolünün a, b ve c sabitleri xi ye karşılık gelen yi = f(xi) ordinatları yardımıyla bulunabilir. a, b, c nin hesabını basitleştirmek için, y ekseni B noktasına kaydırılırsa Formülü ile hesaplanır. Toplam alan A, B, C noktalarının koordinatları A(-h,yi), B(0,yi+1), C(h,yi+2) olur. Bu noktalar parabolün denklemini sağlamak zorundadır:
A( −h, y i ) → y i = ah 2 − bh + c B(0, y i +1 ) → y i +1 = c
w
w
w .e
C (h, y i + 2 ) → y i + 2 = ah 2 + bh + c
Ai alanı:
Ai =
xi + 2
∫
b
h
h
h xi
h xi+1
h
h
xi+2
Ai yi
yi+1
yi+2 C(h,yi+2)
A(-h,yi)
B(0,yi+1)
20 parabol
1 ( y i − 2 y i +1 + y i + 2 ) 2h 2 1 b= ( yi+2 − yi ) 2h c = y i +1 a=
h
f ( x)dx ≈ ∫ (ax 2 + bx + c)dx =
xi
a
−h
2ah 3 + 2ch 3
a, b ve c değerleri yerine konarak:
Ai ≈
h ( yi + 4 yi +1 + yi+ 2 ) 3
Bulunur. Bu formüle Simpson1 kuralı denir. Toplam alan b
n
a
i =1
Alan = I = ∫ f ( x) dx ≈ A1 + A2 + .... + Ai + ... + An = ∑ Ai olur.
1
Thomas Simpson , 1710-1761, İngiliz. Bazı kaynaklarda bu formülün Simpson’dan 200 yıl önce Kepler (1571-1630, Alman) tarafından kullanıldığı, belirtilmektedir. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
331
332
38. BELİRLİ İNTEGRAL HESABI
Örnek:
f(x) =
13(x − x 2 )
, I = ∫ f(x) dx = ?
13 ( x − x 2 ) e3x
1
m
e
3x
f (x) =
4
b
ri. co
I = ∫ f(x) dx = ? a
n=6 seçelim. [1,4] aralığını eşit genişlikli alt aralıklara bölelim: h=(4-1)/6=0.5. kuralı: x = 1.5, 2, 2.5, 3, 3.5, 4 Simpson h=0.5 aralıklarla i noktalarındaki yi=f(xi) ordinatları:
b=4
a=1
0.5
sn o
yi=f(xi) -1.0276 -1.2945 -1.1465 -0.8665 -0.5969 -0.3867
e3x
1
0.5
1.5
A1
0.5
2
A2
0.5
2.5
A3
0.5
3
A4
0.5
3.5
A5
4
A6
em de r
xi 1.5 2.0 2.5 3.0 3.5 4.0
13 ( x − x 2 )
f (x) =
tla
Dikdörtgen kuralı:
İntegral: 4
I=
∫ f ( x)dx =≈ 0.5(−1.0276 − 1.2945 − 1.1465 − 0.8665 − 0.5969 − 0.3867) = −2.6594 1
Dikdörtgen orta nokta kuralı:
n=6 seçelim. [1,4] aralığını eşit genişlikli alt aralıklara bölelim, h=(4-1)/6=0.5.
w
w
w .e
h=0.5 aralıklarının orta noktalarındaki xi= 1.25, 1.75, 2.25, 2.75, 3.25, 3.75 noktalarındaki yi=f(xi) ordinatları:
xi 1.25 1.75 2.25 2.75 3.25 3.75
yi=f(xi) -1.6230 -1.2360 -1.2511 -0.0112 -0.7258 -0.4835
f (x) =
13 ( x − x 2 ) e3x
İntegral: 4
I=
∫ f ( x)dx =≈ 0.5(−1.6230 − 1.2360 − 1.2511 − 0.0112 − 0.7258 − 0.4835) = −2.6653 1
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
332
333
38. BELİRLİ İNTEGRAL HESABI
Yamuk(trapez) kuralı: f (x) = 4
I=
13 ( x − x 2 ) e3x
1
∫ f ( x)dx =≈ 0.5( 2 0 − 1.0276 − 1.2945 − 1.1465 − 0.8666 1 0.3867) = −2.5627 2
ri. co
− 0.5969 −
m
1
Ai ≈
h ( yi + 4 yi +1 + yi + 2 ) bağıntısından: 3
0.5 (0 − 4 ⋅ 1.0276 − 1.2945) = −0.9008 3 0.5 (−1.2945 − 4 ⋅ 1.1465 − 0.8665) = −1.1245 A2 = 3 0.5 A3 = (−0.8665 − 4 ⋅ 0.5969 − 0.3867) = −0.6068 3
f (x) =
13 ( x − x 2 ) e3x
em de r
sn o
A1 =
tla
Simpson kuralı:
İntegral: 4
I=
∫ f ( x)dx =≈ A + A 1
2
+ A3 = −0.9008 − 1.1245 − 0.6068 = −2.6321
1
Yorum:
İntegralin gerçek değeri 4
dx = −2.6310
w
w
w .e
∫
13( x − x 2 )
1
e3x
ve yukarıda hesaplanan yaklaşık değerlerin hata miktarları Dikdörtgen kuralı: |-2.6310-(-2.6594)|=0.02840 Dikdörtgen orta nokta kuralı: |-2.6310-(-2.6653)|=0.0343 Yamuk kuralı: |-2.6310-(-2.5627)|=0.0683 Simpson kuralı: |-2.6310-(-2.6321)|=0.0011 incelendiğinde, beklendiği gibi, Simpson kuralının en doğru sonucu verdiği görülür. En büyük hata yamuk kuralındadır. Dikdörtgen kuralı yamuk kuralına nazaran daha doğru gibi görülmekle birlikte yamuk kuralı genelde dikdörtgen kuralından daha doğru sonuç verir. Dikdörtgen kuralının nümerik integrasyonu anlamak açısından teorik değeri vardır. Uygulamada Simpson veya yamuk kuralı kullanılır. Örneklerde sadece 6 aralık ve alt aralık genişliği h=0.5 alınmıştır. Bu değerler uygulama açısından oldukça yetersizdir. Aralık sayısı 20-50, h=0.05-0.1 civarı genelde uygun olmaktadır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
333
334
38. BELİRLİ İNTEGRAL HESABI
Romberg1, Gauss-Legendre2, Adapte simpson, Recursive Simpson ve Tanh3 metotlarının teorik detayına girilmeyecek, ancak bunlara ait program ve çözüm örnekleri sonraki bölümde verilecektir.
13 ( x − x 2 )
13 ( x − x 2 )
ri. co
f (x) =
e3x
e3x
sn o
tla
f (x) =
m
Simpson kuralında [a,b] aralığı çift sayıda eşit genişlikli alt aralığa bölünür. Adapte Simpson metodunda ise f(x) fonksiyonunun eğiminin hızla değiştiği bölgelerde küçük, eğimin yavaş değiştiği bölgelerde büyük aralıklar seçilir:
w
w
w .e
em de r
Recursive Adapte Simpson metodu Adapte Simpson metodu ile aynıdır. Tek fark programının “recursive(kendi kendini çağıran alt program) tekniği ile yazılmasıdır. Recursive programlama tekniği çok az kod, fakat çok fazla yığın(register), daha çok bellek gerektirir. Hata oluşması durumunda programı durdurmak mümkün değildir, bilgisayarın kilitlenme riski vardır.
1 2 3
Werner Romberg, 1909-2003, Alman. Adı ile anılan integrasyon metodunu 1955 yılında yayınladı, 1960 yılına kadar ilgi görmedi. Johann Carl Friedrich Gauss tarafından 1814-1816 yılında geliştirildi. Charles Schwartz, Numerical Integration of Analytic Functions, Journal of Comp. Physics, Vol. 4, Number 1, June 1969, pages 19-29. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
334
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz Ahmet TOPÇU
sn o
tla
Ders notları 2014
b
I = ∫ f ( x)dx a
yb ( x )
em de r
xb
I=
∫ [ ∫ f ( x, y) dy] dx
xa
ya ( x )
xb yb ( x ) zb ( x , y )
I = ∫{
∫
[
∫ f ( x, y, z ) dz ] dy}dx
w
w
w .e
xa ya ( x ) za ( x , y )
PROGRAMLAR:
• • • • • • • • • • •
Simpson Romberg GaussLegendre AdapteSimpson RecursiveAdapteSimpson TanhKurali Yamuk2 Simpson2 Romberg2 GaussLegendre2 GaussLegendre3
39
Belirli integral hesabı
336
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı Bu bölümde uygulamada kullanılan integrasyon metotlarının QBASIC programları ve çözüm örnekleri verilecektir. Her hangi bir fonksiyon için biri iyi sonuç verirken bir diğeri çözüm vermeyebilir.
∫ f ( x) dx
m
b
1. Simpson : I =
integralini Simpson kuralı ile hesaplar.
a b
∫ f ( x) dx
integralini Romberg metodu ile hesaplar.
ri. co
2. Romberg: I =
a b
3. GaussLegendre: I =
∫ f ( x) dx
integralini Gauss-Legendre metodu ile hesaplar.
a b
4.
AdabteSimpson: I =
∫ f ( x) dx
integralini adabte(adabtive) Simpson metodu ile hesaplar.
tla
a b
5.
RecursiveAdapteSimpson: I =
∫ f ( x) dx integralini Recursive adabte Simpson metodu ile hesaplar. a
b
∫ f ( x) dx a
b yb ( x )
7. Yamuk2: I = [
integralini Tanh kuralı ile hesaplar.
sn o
6. TanhKurali: I =
∫ ∫ f ( x, y) dy] dx a ya ( x ) b yb ( x )
8. Simpson2: I = [
integralini yamuk kuralı ile hesaplar.
∫ ∫ f ( x, y) dy] dx
integralini Simpson metodu ile hesaplar.
em de r
a ya ( x )
b yb ( x )
9. Romberg2: I = [
∫ ∫ f ( x, y) dy] dx
integralini Romberg metodu ile hesaplar.
a ya ( x )
xb yb ( x )
10.GaussLegendre2: I = [
∫ ∫ f ( x, y) dy] dx
integralini Gauss-Legendre metodu ile hesaplar.
xa ya ( x )
xb yb( x ) zb ( x , y )
11.
GaussLegendre3: I = {
∫ ∫
[
∫ f ( x, y, z) dz] dy} dx
integralini Gauss-Legendre metodu ile hesaplar.
xa ya ( x ) za ( x , y )
w
w
w .e
Tek katlı integral örnekleri:
Yukarıda adı verilen programlar ile birçok fonksiyonun tek katlı integralleri hesaplanarak sonuçlar karşılaştırılmıştır. Karşılaştırmayı kolaylaştırabilmek için integrali hesaplanan fonksiyonun ayrıca grafiği de çizilmiştir. Tüm metotlarda [a,b] aralığı 20 ye bölünmüş, hassasiyet=0.000001 alınmıştır(virgülden sonraki 6. hane yuvarlanmış). Aynı integraller Mathematica1 ile de hesaplanmış, Mathematica sonuçları doğru varsayılarak, her metodun hatalı haneleri koyu kırmızı olarak işaretlenmiştir.
4
I1 = ∫ 1
13( x − x 2 ) e3x
dx
Metot
I1
Simpson Romberg GaussLegendre AdapteSimpson RecursiveAdapteSimpson
-2.630988 -2.630988 -2.630988 -2.630988 -2.630988
TanhKurali
-2.630987 -2.630988
Mathematica 4
1
Mathematica 4: Wolfram Reserch tarafından geliştirilmiş, analitik ve nümerik hesap yapabilen profesyonel yazılım Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
336
337
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
I2 =
π /2
x
∫
3
1 + Cos 2 ( x)
dx
I2 1.437642 1.437642 1.437642 1.437642 1.437642 1.437642 1.437642
Metot
2π
∫ Ln(1 + x)Sin(10 x)dx 0
-0.197627 -0.197627 -0.197627
AdapteSimpson
-0.197628 -0.197627 -0.197627 -0.197627
em de r
sn o
RecursiveAdapteSimpson TanhKurali Mathematica 4
5
I4 = ∫
e +1 x
dx
w .e
0
x
3
2
I5 =
∫
3
2
Sin(8 x ) ex
w
−2
+ 1dx
Metot
I4
Simpson Romberg GaussLegendre AdapteSimpson RecursiveAdapteSimpson
4.095902 4.095902 4.095902 4.095902 4.095902
TanhKurali
4.095901 4.095902
Mathematica 4
Metot
I5
Simpson
3.388868
Romberg GaussLegendre
3.388868 3.388869
AdapteSimpson
3.388868
RecursiveAdapteSimpson
3.388868
TanhKurali
3.388868 3.388869
w
Mathematica 4
Metot 1
I 6 = ∫ x dx 0
I3
Simpson Romberg GaussLegendre
tla
I3 =
ri. co
m
0
Metot Simpson Romberg GaussLegendre AdapteSimpson RecursiveAdapteSimpson TanhKurali Mathematica 4
I6
Simpson
0.666666
Romberg
0.666666 0.666667 0.666667 0.666667 0.666667 0.666667
GaussLegendre AdapteSimpson RecursiveAdapteSimpson TanhKurali Mathematica 4
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
337
338
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Metot
I 7 = ∫ x x dx 0
1241.816715 1241.816715 1241.816715
AdapteSimpson
1241.816719
m
5
I7
Simpson Romberg GaussLegendre
RecursiveAdapteSimpson
1241.816719
TanhKurali
1241.816714 1241.816715
ri. co
Mathematica 4
Metot
π /2
∫ Tan( x)dx
1.5
em de r 1
2
x2 2
≈1013 Yığın taşması (Stack overflow) Yakınsamadı Yakınsamadı
Metot
I9
Simpson Romberg GaussLegendre AdapteSimpson RecursiveAdapteSimpson TanhKurali Mathematica 4
-0.166312 -0.166312 -0.166312 -0.166312 -0.166312 -0.166312 -0.166312
dx
w .e
I 10 = ∫ e
−
AdapteSimpson
RecursiveAdapteSimpson TanhKurali Mathematica 4
sn o
0
I 9 = ∫ Cos(Tan( x))dx
Yakınsamadı Yakınsamadı Yakınsamadı
tla
I8 =
I8
Simpson Romberg GaussLegendre
I10 2.392576 2.392576 2.392576 2.392576 2.392576 2.392575 2.392576
w
w
−2
Metot Simpson Romberg GaussLegendre AdapteSimpson RecursiveAdapteSimpson TanhKurali Mathematica 4
Metot 200
I 11 =
∫ 0
Sin( x) dx x
I11
TanhKurali
Sayı taşması Sayı taşması 1.568382 Sayı taşması Sayı taşması 1.568380
Mathematica 4
1.568320
Simpson Romberg GaussLegendre AdapteSimpson RecursiveAdapteSimpson
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
338
339
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Metot
−4
1.494268 1.494268 1.494268
AdapteSimpson
1.494267
RecursiveAdapteSimpson
1.494267
TanhKurali
1.494267 1.494268
m
4
I 12 = ∫ Sin( x 2 )dx
I12
Simpson Romberg GaussLegendre
ri. co
Mathematica 4
Metot
π
I13
2.587109
Simpson
tla
I 13 = ∫ 3 Sin( x) dx
2.587109 2.587110
Romberg
0
GaussLegendre
TanhKurali
2.586384 Yığın taşması (Stack overflow) 2.587109
Mathematica 4
2.587110
AdapteSimpson
sn o
RecursiveAdapteSimpson
50
em de r
1 I 14 = ∫ dx Ln( x) 2
w .e
40
I 15 =
∫
x 4 + 1dx
3
w
w
− 40
Metot
I14
Simpson Romberg GaussLegendre AdapteSimpson
17.423533 17.423533 17.423533 17.423533
RecursiveAdapteSimpson
17.423534
TanhKurali
17.423524 17.423533
Mathematica 4
Metot
I15
Romberg GaussLegendre
4691.846448 4691.846447 4691.846447
AdapteSimpson
4691.846451
RecursiveAdapteSimpson
4691.846450
TanhKurali
4691.846435 4691.846447
Simpson
Mathematica 4
Metot
40
I 16 =
∫
− 40
1 3
x4 +1
dx
I16
Simpson
6.027112
Romberg
6.027112
GaussLegendre
6.027112
AdapteSimpson
6.027113
RecursiveAdapteSimpson
6.027114 6.027099 6.027099
TanhKurali Mathematica 4
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
339
340
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Karşılaştırma
I1
Simpson
Romberg
-2.630988
-2.630988
GaussLegendre AdapteSimpson RecursiveAdapteSimpson TanhKuralı Mathematica -2.630988
-2.630988
-2.630988
-2.630987
-2.630988
I2
1.437642
1.437642
1.437642
1.437642
1.437642
1.437642
I3
-0.197627
-0.197627
-0.197627
-0.197628
-0.197627
-0.197627
-0.197627
I4
4.095902
4.095902
4.095902
4.095902
4.095902
4.095901
4.095902
I5
3.388868
3.388868
3.388869
3.388638
3.388868
3.388868
3.388869
I6
0.666666
0.666666
0.666667
0.666667
I7
1241.816715
1241.816715
1241.816715
1241.816719
I8
Yakınsamadı
Yakınsamadı
Yakınsamadı
I9
-0166312
-0166312
-0166312
I10
2.392576
2.392576
2.392576
2.392576
I11
Sayı Taşması
Sayı Taşması
1.568382
Sayı Taşması
I12
1.494268
1.494268
1.494268
1.494267
ri. co
m
1.437642
0.666667
0.666667
0.666667
1241.816719
1241.816714
1241.816715
≈1013
Yığın taşması (Stack overflow)
Yakınsamadı
Yakınsamadı
-0166312
-0166312
-0166312
-0166312
2.392576
2.392575
2.392576
Sayı Taşması
1.568380
1.568320
tla
Analitik çözümü olmayan integraller:
1.494266
1.494267
1.494268
2.587109
2.587110
2.586384
17.423533
17.423533
17.423533
17.423534
17.423524
17.423533
4691.846448
4691.846447
4691.846447
4691.846451
4691.846450
4691.846435
4691.846447
6.027112
6.027112
6.027112
6.027113
6.027114
6.027099
6.027112
2.587109
I14
17.423533
I15 I16
2.587109
em de r
I13
sn o
2.587110
Yığın taşması (Stack overflow)
YORUM: Yukarıdaki tablo incelendiğinde, tüm metotların, uygulama açısından, tatminkâr sonuç verdiği söylenebilir. Her integrali hesaplayabilen ideal bir metot yoktur. Bir sıralama yapmak gerekirse; GaussLegendre, Simpson, Romberg en iyi integrasyon metodudur denilebilir. Özellikle
I8 =
π /2
π /2
0
0
∫ Tan( x)dx integraline dikkat çekmek gerekir. Bu integralin teorik sonucu I8 =
∫ Tan( x)dx = +∞
dur, bilgisayarda hesaplamak mümkün değildir. Çünkü bilgisayarda ∞ büyük yoktur. AdapteSimpson ≈1013 gibi, uygulama açısından oldukça büyük bir sayı vermiş, diğerleri yakınsamamıştır. Bu sonuç, teorik olarak yanlış olmakla birlikte, AdapteSimpson metodunun [a,b] aralığında sürekli olan, fakat eğimi ani ve hızla değişen fonksiyonlarda daha iyi sonuç vereceği anlamına gelir. 200
∫
Sin( x) dx integralinde bazı metotların Sayı Taşması vermesi beklenen bir sonuçtur. Çünkü integralin x
w .e
I 11 =
0
w
w
alt sınırı için sıfır bölüm oluşmaktadır. Aynı integral için GaussLegendre ve Tanh metotlarının sonuç vermesi de doğaldır, çünkü bu metotlar integral aralığını değiştirerek hesaplarlar.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
340
341
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
İki katlı integral örnekleri:
m
Aşağıdaki iki katlı integraller adı verilen programlar ile hesaplanmış, sonuçlar karşılaştırılmıştır. Hassasiyet=0.01 alınmıştır. Aynı integraller Mathematica ile de hesaplanmış, Mathematica sonuçları doğru varsayılarak, her metodun hatalı hane sayısı koyu kırmızı olarak işaretlenmiştir.
2
I1 =
1
∫ ∫e
x2 y2
dydx
5.94
5.94
5.94
0.52
0.52
0.52
4.44
4.44
4.44
4.44
4.44
1.00
1.00
1.00
1.00
1.00
− 2 −1
π /2 1
∫ ∫ (1 − y 0
2
)Cos ( x) 2 dydx
0
I3 = ∫
∫ (4 − x
0
2
− 2 y 2 )dydx
0
2 e
I4 = ∫
−x
x + y dydx
∫
0 1− x
I5 =
π /2
Sin ( x )
∫ ( x + y )dydx
∫ 0
2
xx
∫ (x
2
+ y 2 )dydx
0 −x
0.52
0.52
0.43
0.43
0.43
0.43
20.80
20.80
20.80
20.80
20.80
134.03
134.03
134.04
134.04
134.04
1.02
1.01
1.01
1.02
1.00
x
16 − x 2 )
4
I7 =
5.94
0.43
em de r
I6 = ∫
Tan ( x / 2 )
5.94
tla
( 4− x 2 ) / 2
2
sn o
I2 =
ri. co
Yamuk2 Simpson2 Romberg2 GaussLegendre2 Mathematica 4
∫
−4 −
2
I8 = ∫
16 − x 8x
∫e
16 − x 2 − y 2 dydx
2
−x
y
dydx
x2
YORUM: Yukarıdaki tablo incelendiğinde, tüm metotların, uygulama açısından, iyi sonuç verdiği söylenebilir. GaussLegendre2 ve Simpson2 hızlı yakınsama sergilerken Yamuk2 ve özellikle Romberg2 programlarının yavaş kaldığı gözlenmiştir. İki katlı integral örneklerinin tümünde hassasiyet=0.01 alınmıştır. Hassasiyetin daha küçük seçilmesi, örneğin: hassasiyet=0.00001, doğru hane sayısını hemen hiç değiştirmemektedir. Sonuç olarak, iki katlı integrallerde, hassasiyetin küçük seçilmesi hiçbir kazanç sağlamazken hesap süresinin aşırı uzamasına neden olmaktadır.
w
w
w .e
0
∫
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
341
342
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Üç katlı integral örnekleri:
GaussLegendre3 Gerçek değer 1 2 3
I1 = ∫ ∫
∫x
2
y 2 z 2 dz dy dx
8.00
8.00
9− y 2
2 3
I2 = ∫ ∫
∫ z dz dy dx 2
0 0
0 2 4 x− x2 2 x y
∫
∫
0
0
0
2
4− x 2
I4 = ∫
dz dy dx
4− x 2 − y 2
∫
-2 − 4− x 2 6 (12− 2 x ) / 3
∫z
dz dy dx
I5 = ∫
∫
∫
0
0
0
π
∫
Sin ( x ) 2
∫
dz dy dx
∫ Sin( x) + Cos( x) + Sin( z)dz dy dx
− x− y
51.20
12.57
8.00
8.0
17.30
17.30
em de r
−π/2 − Sin ( x ) 2
x+ y
51.20
12.57
0 (12− 2 x −3 y ) / 6
31.81
tla
I3 = ∫
31.81
sn o
4
I6 =
ri. co
0 0 0
m
Aşağıdaki üç katlı integraller Hassasiyet=0.01 alınarak GaussLegendre3 programı ile hesaplanmış, sonuçlar gerçek değerler ile karşılaştırılmıştır.
YORUM:
w
w
w .e
Üç katlı integral örneklerinin tümünde hassasiyet=0.01 alınmıştır. Hassasiyetin daha küçük seçilmesi, örneğin: hassasiyet=0.00001, doğru hane sayısını hemen hiç değiştirmemektedir. Sonuç olarak, çok katlı integrallerde, hassasiyetin küçük seçilmesi hiçbir kazanç sağlamazken hesap süresinin aşırı uzamasına neden olmaktadır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
342
343
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
'-----------------------Ana program Simpson----------------------' f(x) fonksiyonun [a,b] aralığında tek katlı entegralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' Metot: Simpson
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
m
' ' ' ' '
Tek katlı integral: Simpson integrasyon metodu (ana program)
' ' ' '
ri. co
' f(x) fonksiyonu ana programda DEF fnF(x)=... ile tanımlanmalıdır. çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
DEFINT A-I DEFDBL A-H, O-Z DECLARE SUB Simpson (ai, bi, Hassasiyet, Altintegral, iHata) “
' Aralığın ve f(x) fonksiyonunun tanımlanması Pi = 4 * ATN(1) ' Pi=3.14... sayısı
tla
' çağrılan alt program: Simpson '----------------------------------------------------------------
sn o
a = 1: b = 4: DEF fnF (x) = 13 * (x - x * x) * EXP(-3 * x / 2) 'a = 0: b = Pi / 2: DEF fnF (x) = x ^ 3 / SQR(1 + COS(x) ^ 2) 'a = 0: b = 2 * pi: DEF fnF (x) = LOG(1 + x) * SIN(10 * x) 'a = 0: b = 5: DEF fnF (x) = x ^ 3 / (EXP(x) + 1) 'a = -2: b = 2: DEF fnF (x) = EXP(-.5 * x) * SIN(8 * x ^ 2 ^ (1 / 3)) + 1 'a = 0: b = 1: DEF fnF (x) = SQR(x) 'a = 0: b = 5: DEF fnF (x) = x ^ x 'a = 0: b = Pi / 2: DEF fnF (x) = TAN(x) 'a = 1: b = 1.5: DEF fnF (x) = COS(TAN(x))
İntegrali hesaplanacak fonksiyonlar ' işareti olmayan fonksiyon hesaplanır. Bu işareti içeren fonksiyon devre dışıdır.
em de r
' analitik çözümü olmayan integraller: 'a = -2: b = 2: DEF fnF (x) = EXP(-x ^ 2 / 2) 'a = 0: b = 1: DEF fnF (x) = SIN(x) / x 'a = -4: b = 4: DEF fnF (x) = SIN(x ^ 2) 'a = 0: b = Pi: DEF fnF (x) = SIN(x) ^ (1 / 3) 'a = 2: b = 50: DEF fnF (x) = 1 / LOG(x) 'a = -40: b = 40: DEF fnF (x) = (1 + x ^ 4) ^ (1 / 3) 'a = -40: b = 40: DEF fnF (x) = 1 / (1 + x ^ 4) ^ (1 / 3) CLS
Hassasiyet = .000001' değiştirilebilir,(1E-4 - 1E-12 arası normal) MaxAralik = 20 ' değiştirilebilir,(2-100 arası normal) Delta = (b - a) / MaxAralik bi = a
w
w
w .e
Toplamintegral = 0 FOR iAralik = 1 TO MaxAralik ai = bi bi = ai + Delta IF iAralik = MaxAralik THEN bi = b
CALL Simpson(ai, bi, Hassasiyet, Altintegral, iHata) Toplamintegral = Toplamintegral + Altintegral IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(Simpson)" PRINT "Hesaplanan yaklaşık değer="; Toplamintegral END END IF
NEXT iAralik PRINT "İntegral(Simpson)="; Toplamintegral END ' Simpson ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
343
344
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
' ' ' '
çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
h = .5 * (bi - ai) s = 2 * fnF(ai + h) r = fnF(ai) + fnF(bi) c=h/3 EskiAltintegral = c * (r + 2 * s) FOR i = 2 TO m h = .5 * h r=r+s
sn o
' çağrılan program: yok '--------------------------------------------------------------------iHata = 0 m = 14 ' m>14 tam sayı taşmasına neden olabilir
tla
' f(x) fonksiyonu çağıran programda DEF fnF(x)=... ile tanımlanmalıdır.
ri. co
' ' ' ' '
Tek katlı integral: Simpson integrasyon metodu (alt program)
m
SUB Simpson (ai, bi, Hassasiyet, Altintegral, iHata) '--------------------------------------------------------------------' f(x) fonksiyonunun [ai,bi] aralığında tek katlı integralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' kullanılan metod: Simpson
em de r
s=0 iAltaralikSayisi = 2 ^ i FOR iAltAralikNo = 1 TO iAltaralikSayisi STEP 2 x = ai + h * iAltAralikNo IF iAltAralikNo = iAltaralikSayisi THEN x = bi s = s + fnF(x) NEXT iAltAralikNo s=2*s c = .5 * c Altintegral = c * (r + 2 * s)
Hata = ABS(Altintegral - EskiAltintegral) IF i > 2 AND Hata <= Hassasiyet THEN EXIT SUB EskiAltintegral = Altintegral
NEXT i
w .e
iHata = 1
w
w
END SUB ' Simpson sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
344
345
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Tek katlı integral: Romberg integrasyon metodu (ana program)
'----------------------Ana Program Romberg-------------------------' f(x) fonksiyonunun [a,b] aralığında tek katlı integralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' kullanılan metod: Romberg
' f(x) fonksiyonu ana programda DEF fnF(x)=... ile tanımlanmalıdır. çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
' Çağrılan alt program: Romberg '------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB Romberg (ai, bi, Hassasiyet, Altintegral, iHata) ' Aralığın ve f(x) fonksiyonunun tanımlanması Pi = 4 * ATN(1) ' Pi=3.14... sayısı
tla
' ' ' '
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
ri. co
' ' ' ' '
sn o
a = 1: b = 4: DEF fnF (x) = 13 * (x - x * x) * EXP(-3 * x / 2) 'a = 0: b = Pi / 2: DEF fnF (x) = x ^ 3 / SQR(1 + COS(x) ^ 2) 'a = 0: b = 2 * pi: DEF fnF (x) = LOG(1 + x) * SIN(10 * x) 'a = 0: b = 5: DEF fnF (x) = x ^ 3 / (EXP(x) + 1) 'a = -2: b = 2: DEF fnF (x) = EXP(-.5 * x) * SIN(8 * x ^ 2 ^ (1 / 3)) + 1 'a = 0: b = 1: DEF fnF (x) = SQR(x) 'a = 0: b = 5: DEF fnF (x) = x ^ x a = 0: b = Pi / 2: DEF fnF (x) = TAN(x) a = 1: b = 1.5: DEF fnF (x) = COS(TAN(x))
em de r
' analitik çözümü olmayan integraller: 'a = -2: b = 2: DEF fnF (x) = EXP(-x ^ 2 / 2) 'a = 0: b = 1: DEF fnF (x) = SIN(x) / x 'a = -4: b = 4: DEF fnF (x) = SIN(x ^ 2) 'a = 0: b = Pi: DEF fnF (x) = SIN(x) ^ (1 / 3) 'a = 2: b = 50: DEF fnF (x) = 1 / LOG(x) 'a = -40: b = 40: DEF fnF (x) = (1 + x ^ 4) ^ (1 / 3) 'a = -40: b = 40: DEF fnF (x) = 1 / (1 + x ^ 4) ^ (1 / 3) CLS
Hassasiyet = .000001' değiştirilebilir, (1E-4 - 1E-12 arası normal) MaxAralik = 20 ' değiştirilebilir, (2-100 arası normal) Delta = (b - a) / MaxAralik bi = a
w
w
w .e
Toplamintegral = 0 FOR iAralikNo = 1 TO MaxAralik ai = bi: bi = ai + Delta IF iAralikNo = MaxAralik THEN bi = b
CALL Romberg(ai, bi, Hassasiyet, Altintegral, iHata) Toplamintegral = Toplamintegral + Altintegral IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(Romberg)" PRINT "hesaplananyaklaşık değer="; Toplamintegral END END IF
NEXT iAralikNo PRINT "İntegral(Romberg)="; Toplamintegral END ' Romberg ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
345
346
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
SUB Romberg (ai, bi, Hassasiyet, Altintegral, iHata) '--------------------------------------------------------------------' f(x) fonksiyonunun [ai,bi] aralığında tek katlı integralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' kullanılan metod: Romberg
' f(x) fonksiyonu çağıran programda DEF fnF(x)=... ile tanımlanmalıdır. çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
' çağrılan program: yok '--------------------------------------------------------------------DIM Sayici1 AS LONG ' 4 Byte(32 bit) integer DIM Sayici2 AS LONG DIM i AS LONG, m AS LONG
tla
' ' ' '
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
ri. co
' ' ' ' '
Tek katlı integral: Romberg integrasyon metodu (alt program)
Maxiterasyon = 10 ' Romberg iterasyon sayısı(4-12 arası normal)
sn o
IF Maxiterasyon < 4 THEN Maxiterasyon = 4 n = Maxiterasyon + 1 n = (n * n - n) / 2 + n DIM Tablo(n) ' Romberg tablosu m = 2 ^ 12' Maksimum alt aralık sayısı
em de r
Delta = bi - ai Deltax = Delta Sayici1 = 1 Sayici2 = 2 EskiAltintegral = 0 Tablo(1) = .5 * (fnF(ai) + fnF(bi))
' Yamuk kuralı FOR iterasyonNo = 1 TO Maxiterasyon x = ai + .5 * Deltax fx = 0 FOR i = 1 TO Sayici1 fx = fx + fnF(x) x = x + Deltax NEXT i t1 = .5 * Tablo(1) + fx / Sayici2
w
w
w .e
' Romberg tablosu FOR i = 1 TO iterasyonNo t2 = t1 + (t1 - Tablo(i)) / (4 ^ i - 1) Tablo(i) = t1 t1 = t2 NEXT i
Altintegral = Delta * t1 Hata = ABS(Altintegral - EskiAltintegral) IF iterasyonNo > 2 AND Hata <= Hassasiyet GOTO 1 EskiAltintegral = Altintegral Tablo(iterasyonNo + 1) = t1 Sayici1 = 2 * Sayici1 Sayici2 = 2 * Sayici2 Deltax = .5 * Deltax
IF Sayici1 > m OR Sayici2 > m THEN EXIT FOR NEXT iterasyonNo iHata = 1 EXIT SUB 1 iHata = 0 END SUB ' Romberg sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
346
347
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
'-----------------------Ana program GaussLegendre---------------------' f(x) fonksiyonun [a,b] aralığında tek katlı integralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' Kullanılan metot: Gauss-Legendre
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
m
' ' ' ' '
Tek katlı integral: GaussLegendre integrasyon metodu (ana program)
' ' ' '
çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
' çağrılan alt program: GaussLegendre '------------------------------------------------------------------------
' Aralığın ve f(x) fonksiyonunun tanımlanması Pi = 4 * ATN(1) ' Pi=3.14... sayısı
tla
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB GaussLegendre (a, b, Hassasiyet, Toplamintegral, iHata) DECLARE SUB GauLeg (Ai, Bi, x(), w(), n)
ri. co
' f(x) fonksiyonu ana programda DEF fnF(x)=... ile tanımlanmalıdır.
sn o
a = 1: b = 4: DEF fnf (x) = 13 * (x - x * x) * EXP(-3 * x / 2) 'a = 0: b = Pi / 2: DEF fnf (x) = x ^ 3 / SQR(1 + COS(x) ^ 2) 'a = 0: b = 2 * pi: DEF fnf (x) = LOG(1 + x) * SIN(10 * x) 'a = 0: b = 5: DEF fnf (x) = x ^ 3 / (EXP(x) + 1) 'a = -2: b = 2: DEF fnf (x) = EXP(-.5 * x) * SIN(8 * x ^ 2 ^ (1 / 3)) + 1 'a = 0: b = 1: DEF fnf (x) = SQR(x) 'a = 0: b = 5: DEF fnf (x) = x ^ x 'a = 0: b = Pi / 2: DEF fnf (x) = TAN(x) 'a = 1: b = 1.5: DEF fnf (x) = COS(TAN(x))
em de r
' analitik çözümü olmayan integraller: 'a = -2: b = 2: DEF fnf (x) = EXP(-x ^ 2 / 2) 'a = 0: b = 200: DEF fnf (x) = SIN(x) / x 'a = -4: b = 4: DEF fnf (x) = SIN(x ^ 2) 'a = 0: b = Pi: DEF fnf (x) = SIN(x) ^ (1 / 3) 'a = 2: b = 50: DEF fnf (x) = 1 / LOG(x) 'a = -40: b = 40: DEF fnf (x) = (1 + x ^ 4) ^ (1 / 3) 'a = -40: b = 40: DEF fnf (x) = 1 / (1 + x ^ 4) ^ (1 / 3) CLS
Hassasiyet = .000001' değiştirilebilir(1E-4 -1E-12 arası normal) CALL GaussLegendre(a, b, Hassasiyet, Toplamintegral, iHata)
w .e
IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(GaussLegendre)" PRINT "Hesaplanan yaklaşık değer="; Toplamintegral ELSE PRINT "İntegral(GaussLegendre)="; Toplamintegral END IF
w
w
END ' GaussLegendre ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
347
348
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Tek katlı integral: Gauss-Legendre integrasyon metodu (alt program)
SUB GaussLegendre (a, b, Hassasiyet, Toplamintegral, iHata) '------------------------------------------------------------------------------' f(x) fonksiyonun [a,b] aralığında tek katlı integralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' Kullanılan metot: Gauss-Legendre
' f(x) fonksiyonu çağıran programda DEF fnF(x)=... ile tanımlanmalıdır. ' ' ' '
çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
Toplamintegral = 0 FOR iAralik = 1 TO MaxAralik Ai = Bi: Bi = Ai + Delta IF iAralik = MaxAralik THEN Bi = b
em de r
Eskiintegral = 0 FOR i = 1 TO m n=2^i
sn o
Delta = (b - a) / MaxAralik Bi = a
tla
' çağrılan alt program: GauLeg '------------------------------------------------------------------------------MaxAralik = 20 ' değiştirilebilir(2-100 arası normal) MaxNokta = 1024 ' değiştirilebilir(300-3000 arası normal) ' MaxNokta alt üst sınırını kontrol et IF MaxNokta < 2 THEN MaxNokta = 8 IF MaxNokta > 2 ^ 13 THEN MaxNokta = 2 ^ 13 m = LOG(MaxNokta) / LOG(2) MaxNokta = 2 ^ m DIM x(MaxNokta), w(MaxNokta)
CALL GauLeg(Ai, Bi, x(), w(), n)
Altintegral = 0 FOR j = 1 TO n Altintegral = Altintegral + w(j) * fnf(x(j)) NEXT j
IF ABS(Altintegral - Eskiintegral) <= Hassasiyet GOTO 1 Eskiintegral = Altintegral NEXT i
iHata = 1 EXIT SUB
Toplamintegral = Toplamintegral + Altintegral NEXT iAralik
w
w
w .e
1
END SUB ' GaussLegendre sonu
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
ri. co
' ' ' ' '
GauLeg alt programı GaussLegendre programı tarafından çağrılır
SUB GauLeg (Ai, Bi, x(), w(), n) '------------------------------------------------------------------' Gauss-Legendre integrasyon ordinatları ve ağırlıkları hesaplanır ' ai: integralin alt sınırı ' bi: integralin üst sınırı ' x(n): Gauss-Legendre ordinatlarının depolandığı vektör ' w(n): Gauss-Legendere ağırlıklarının depolandığı vektör ' n: Gaus-Legendre integral nokta sayısı
' çağrılan alt program: yok ' Fortran kodu http://www.haoli.org/nr/bookf/f4-5.ps den alınmıştır '------------------------------------------------------------------x1 = Ai x2 = Bi Pi = 4 * ATN(1)' Pi=3.14... sayısı Hassasiyet = 3E-14: ' Gauleg için hassasiyet(değiştirmeyiniz!) m = (n + 1) / 2 xm = .5 * (x2 + x1) x1 = .5 * (x2 - x1) FOR i = 1 TO m z = COS(Pi * (i - .25) / (n + .5)) ' # işareti DOUBLE anlamındadır z1 = 0 WHILE ABS(z - z1) > Hassasiyet p1 = 1 p2 = 0 FOR j = 1 TO n p3 = p2 p2 = p1 p1 = ((2 * j - 1) * z * p2 - (j - 1) * p3) / j NEXT j pp = n * (z * p1 - p2) / (z * z - 1) z1 = z z = z1 - p1 / pp WEND x(i) = xm - x1 * z x(n + 1 - i) = xm + x1 * z w(i) = 2 * x1 / ((1 - z * z) * pp * pp) w(n + 1 - i) = w(i) NEXT i END SUB ' Gauleg sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
348
349
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Tek katlı integral: Adapte Simpson integrasyon metodu (ana program)
'----------------------Ana program Adapte Simpson-------------------' Ahmet Topçu, Eskişehir Osmangazi Üniversitesi, 2010 ' f(x) fonksiyonunun [a,b] aralığıdaki tek katlı inegralini hesaplar
' Kullanılan metot: Adapte(adaptive) Simpson kuralı
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
' f(x) fonksiyonu ana programda DEF fnF(x)=... ile tanımlanmalıdır. ' ' ' '
çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
' çağrılan alt program: AdapteSimpson '--------------------------------------------------------------------
sn o
TYPE AraBilgiler a AS DOUBLE c AS DOUBLE b AS DOUBLE s AS DOUBLE Hassasiyet AS DOUBLE Kontrol AS INTEGER END TYPE
tla
DEFINT I-N DEFDBL A-H, O-Z
ri. co
' ' ' ' '
DECLARE SUB AdapteSimpson (a, b, Hassasiyet, Toplamintegral, iHata) DECLARE SUB SimpsonKurali (a, b, YariHassasiyet, AraBilgiVektoru AS AraBilgiler) DECLARE SUB AralikYarila (iAralikNo, AraBilgiMatrisi() AS AraBilgiler, iAltAralikSayaci, itrasyonDevamEdiyor)
em de r
' aralığın ve f(x) fonksiyonunun tanımlanması Pi = 4 * ATN(1) ' Pi=3.14... sayısı
a = 1: b = 4: DEF fnF (x) = 13 * (x - x * x) * EXP(-3 * x / 2) 'a = 0: b = Pi / 2: DEF fnF (x) = x ^ 3 / SQR(1 + COS(x) ^ 2) 'a = 0: b = 2 * pi: DEF fnF (x) = LOG(1 + x) * SIN(10 * x) 'a = 0: b = 5: DEF fnF (x) = x ^ 3 / (EXP(x) + 1) 'a = -2: b = 2: DEF fnF (x) = EXP(-.5 * x) * SIN(8 * x ^ 2 ^ (1 / 3)) + 1 'a = 0: b = 1: DEF fnF (x) = SQR(x) 'a = 0: b = 5: DEF fnF (x) = x ^ x 'a = 0: b = Pi / 2: DEF fnF (x) = TAN(x) 'a = 1: b = 1.5: DEF fnF (x) = COS(TAN(x))
w
w
w .e
' analitik çözümü olmayan integraller: 'a = -2: b = 2: DEF fnF (x) = EXP(-x ^ 2 / 2) 'a = 0: b = 1: DEF fnF (x) = SIN(x) / x 'a = -4: b = 4: DEF fnF (x) = SIN(x ^ 2) 'a = 0: b = Pi: DEF fnF (x) = SIN(x) ^ (1 / 3) 'a = 2: b = 50: DEF fnF (x) = 1 / LOG(x) 'a = -40: b = 40: DEF fnF (x) = (1 + x ^ 4) ^ (1 / 3) 'a = -40: b = 40: DEF fnF (x) = 1 / (1 + x ^ 4) ^ (1 / 3) CLS
Hassasiyet = .000001 ' değiştirilebilir(1E-04 - 1E-12 arası normal) CALL AdapteSimpson(a, b, Hassasiyet, Toplamintegral, iHata) IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(AdapteSimpson)" PRINT "Hesaplanan yaklaşık değer="; Toplamintegral ELSE PRINT "İntegral(AdapteSimpron)="; Toplamintegral END IF
END ' Adapte Simpson ana
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
349
350
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
SUB AdapteSimpson (a, b, Hassasiyet, Toplamintegral, iHata) '--------------------------------------------------------------------------' f(x) fonksiyonunun [a,b] aralığıdaki inegralini hesaplar ' Ahmet Topçu, EskiŞehir Osmangazi Üniversitesi, 2010
Tek katlı integral: Adapte Simpson integrasyon metodu (alt program)
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
' f(x) fonksiyonu çağıran programda DEF fnF(x)=... ile tanımlanmalıdır. çıktı: Toplamintegral: integralin hesaplanan değeri iHata=0 : integral yakınsadı iHata<>0 : integral yakınsamadı
tla
' ' ' '
ri. co
' ' ' ' '
m
' Kullanılan metot: Adaptive Simpson kuralı ' 1.Mathews, H. J., Numerical Methods for Mathematics, Science & ' Engineering, Prentice Hall, 1992 ' 2.Conte, S., D., Boor, C., Elementary Numerical Analysis, McGraw-Hill, 1980
iHata = 0 Toplamintegral = 0
em de r
Delta = (b - a) / MaxAralik bi = a FOR iAralik = 1 TO MaxAralik ai = bi bi = ai + Delta IF iAralik = MaxAralik THEN bi = b
sn o
' Programın yalancı kodu yukarıda verilen birinci kaynaktan alınmıştır ' Çağrılan alt programlar: AralikYarila, SimpsonKurali '--------------------------------------------------------------------------MaxAralik = 20 ' değiştirilebilir(2-100 arası normal) MaxAltAralik = 500 ' programda öngörülen maksimum alt aralık sayısı DIM AraBilgiMatrisi(MaxAltAralik + 1) AS AraBilgiler DIM AraBilgiVektoru AS AraBilgiler
CALL SimpsonKurali(ai, bi, Hassasiyet, AraBilgiVektoru) AraBilgiMatrisi(1) = AraBilgiVektoru
iAltAralikSayaci = 1 itrasyonDevamEdiyor = 1 '( =1 TRUE =0 FALSE anlamında ) WHILE itrasyonDevamEdiyor = 1 n = iAltAralikSayaci FOR iAralikNo = n TO 1 STEP -1 CALL AralikYarila(iAralikNo, AraBilgiMatrisi(), iAltAralikSayaci, itrasyonDevamEdiyor)
Altintegral = 0 FOR j = 1 TO iAltAralikSayaci Altintegral = Altintegral + AraBilgiMatrisi(j).s NEXT j Toplamintegral = Toplamintegral + Altintegral
NEXT iAralik END SUB ' AdapteSimpson sonu
w
w
w .e
' İzin verilen maksimum aralık sayısına ulaşıldı mı? IF iAltAralikSayaci = MaxAltAralik THEN iHata = 1 EXIT SUB END IF NEXT iAralikNo WEND
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
350
351
SUB AralikYarila (iAralikNo, AraBilgiMatrisi() AS AraBilgiler, iAltAralikSayaci, itrasyonDevamEdiyor) '---------------------------------------------------------------------------------------------------' f(x) fonsiyonunun eğiminin büyük olduğu bölgelerde küçük aralıklar, eğimin küçük olduğu bölgelerde ' büyük aralıklar otomatik olarak seçilir '---------------------------------------------------------------------------------------------------DIM AraBilgiVektoru0 AS AraBilgiler DIM AraBilgiVektoru1 AS AraBilgiler, AraBilgiVektoru2 AS AraBilgiler
Bu alt program AdapteSimpson alt pogramı tarafından çağrılır
a = AraBilgiVektoru0.a c = AraBilgiVektoru0.c b = AraBilgiVektoru0.b Hassasiyet = AraBilgiVektoru0.Hassasiyet Kontrol = AraBilgiVektoru0.Kontrol
tla
IF Kontrol = 1 THEN EXIT SUB CALL SimpsonKurali(a, c, .5 * Hassasiyet, AraBilgiVektoru1) CALL SimpsonKurali(c, b, .5 * Hassasiyet, AraBilgiVektoru2) Hata = ABS(AraBilgiVektoru0.s - AraBilgiVektoru1.s - AraBilgiVektoru2.s)
ri. co
itrasyonDevamEdiyor = 0 AraBilgiVektoru0 = AraBilgiMatrisi(iAralikNo)
IF iAltAralikSayaci > 1 AND Hata < 10 * Hassasiyet THEN AraBilgiVektoru0.Kontrol = 1 ' kriter sağlandı anlamında
m
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
AraBilgiMatrisi(iAralikNo).s = AraBilgiVektoru1.s + AraBilgiVektoru2.s
sn o
ELSE iAltAralikSayaci = iAltAralikSayaci + 1 FOR j = iAltAralikSayaci TO iAralikNo STEP -1 AraBilgiMatrisi(j) = AraBilgiMatrisi(j - 1) NEXT j
AraBilgiMatrisi(iAralikNo) = AraBilgiVektoru1 AraBilgiMatrisi(iAralikNo + 1) = AraBilgiVektoru2
em de r
itrasyonDevamEdiyor = 1 END IF
END SUB ' AralikYarila sonu
Bu alt program AdapteSimpson alt pogramı tarafından çağrılır
END SUB ' SimpsonKurali sonu
w
w
w .e
SUB SimpsonKurali (a, b, YariHassasiyet, AraBilgiVektoru AS AraBilgiler) '----------------------------------------------------------------------' f(x) fonsiyonunun [a,b] alt aralığındaki integralini hesaplar ' Kullanılan metot: adapte Simpson kuralı '----------------------------------------------------------------------c = (a + b) / 2 s = (b - a) * (fnF(a) + 4 * fnF(c) + fnF(b)) / 6 AraBilgiVektoru.a = a AraBilgiVektoru.c = c AraBilgiVektoru.b = b AraBilgiVektoru.s = s AraBilgiVektoru.Hassasiyet = YariHassasiyet AraBilgiVektoru.Kontrol = 0
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
351
352
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
'-----------------Ana program Recursive Adapte Simpson---------------' Ahmet Topçu, Eskişehir Osmangazi Üniversitesi, 2010 ' f(x) fonksiyonunun [a,b] aralığındaki tek katlı inegralini hesaplar
Tek katlı integral: Recursive adapte simpson integrasyon metodu (ana program)
' Kullanılan metot: Recursive Adapte(adaptive) Simpson
' f(x) fonksiyonu ana programda DEF fnF(x)=... ile tanımlanmalıdır. ' ' ' '
çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : integral yakınsamadı
DEFINT I-N DEFDBL A-H, O-Z
tla
' çağrılan alt program: RecursiveAdapteSimpson '--------------------------------------------------------------------
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
ri. co
' ' ' ' '
DECLARE SUB RecursiveAdapteSimpson (ai, bi, Hassasiyet, iAltaralikSayisi, Simpsonintegrali, iHata) ' Aralığın ve f(x) fonksiyonunun tanımlanması Pi = 4 * ATN(1) ' Pi=3.14... sayısı
em de r
sn o
a = 1: b = 4: DEF fnf (x) = 13 * (x - x * x) * EXP(-3 * x / 2) 'a = 0: b = Pi / 2: DEF fnf (x) = x ^ 3 / SQR(1 + COS(x) ^ 2) 'a = 0: b = 2 * pi: DEF fnf (x) = LOG(1 + x) * SIN(10 * x) 'a = 0: b = 5: DEF fnf (x) = x ^ 3 / (EXP(x) + 1) 'a = -2: b = 2: DEF fnf (x) = EXP(-.5 * x) * SIN(8 * x ^ 2 ^ (1 / 3)) + 1 'a = 0: b = 1: DEF fnf (x) = SQR(x) 'a = 0: b = 5: DEF fnf (x) = x ^ x 'a = 0: b = Pi / 2: DEF fnf (x) = TAN(x) 'a = 1: b = 1.5: DEF fnf (x) = COS(TAN(x)) ' analitik çözümü olmayan integraller: 'a = -2: b = 2: DEF fnf (x) = EXP(-x ^ 2 / 2) 'a = 0: b = 1: DEF fnf (x) = SIN(x) / x 'a = -4: b = 4: DEF fnf (x) = SIN(x ^ 2) 'a = 0: b = Pi: DEF fnf (x) = SIN(x) ^ (1 / 3) 'a = 2: b = 50: DEF fnf (x) = 1 / LOG(x) 'a = -40: b = 40: DEF fnf (x) = (1 + x ^ 4) ^ (1 / 3) 'a = -40: b = 40: DEF fnf (x) = 1 / (1 + x ^ 4) ^ (1 / 3) CLS
Hassasiyet = .000001 ' değiştirilebilir(1E-04 - 1E-12 arası normal) MaxAralik = 20 ' değiştirilebilir(2-100 arası normal)
w
w
w .e
iHata = 0 Toplamintegral = 0
Delta = (b - a) / MaxAralik bi = a FOR iAralik = 1 TO MaxAralik ai = bi bi = ai + Delta IF iAralik = MaxAralik THEN bi = b iAltaralikSayisi = 0 CALL RecursiveAdapteSimpson(ai, bi, Hassasiyet, iAltaralikSayisi, Simpsonintegrali, iHata) Toplamintegral = Toplamintegral + Simpsonintegrali IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(RecursiveAdapteSimpson)" PRINT "Hesaplanan yaklaşık değer="; Toplamintegral END END IF NEXT iAralik PRINT "İntegral(RecursiveAdapteSimpson)="; Toplamintegral
END ' Recursive adapte Simpson ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
352
353
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı SUB RecursiveAdapteSimpson (ai, bi, Hassasiyet, iAltaralikSayisi, Simpsonintegrali, iHata) '--------------------------------------------------------------------------' f(x) fonksiyonunun [ai,bi] aralığıdaki inegralini hesaplar
Tek katlı integral: Recursive adapte simpson integrasyon metodu (alt program)
' Kullanılan metot: Recursive Adaptive Simpson kuralı ' Cheney, W., Kincaid D., Numerical Mathematics and Computing, ' Books/Cole Publishing Co., California, 1994
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
' f(x) fonksiyonu çağıran programda DEF fnF(x)=... ile tanımlanmalıdır. ' ' ' '
çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
' Yalancı program kodu yukarıda verilen kaynaktan alınmıştır
tla
' çağrılan alt programlar: yok '--------------------------------------------------------------------------MaxAltaralik = 500 ' programda öngörülen maksimum alt aralık sayısı
ri. co
' ' ' ' '
em de r
sn o
iAltaralikSayisi = iAltaralikSayisi + 1 h = bi - ai c = .5 * (ai + bi) Fai = fnf(ai) Fbi = fnf(bi) Fc = fnf(c) d = .5 * (ai + c) e = .5 * (c + bi) Fd = fnf(d) Fe = fnf(e) OneSimpson = h / 6 * (Fai + 4 * Fc + Fbi) TwoSimpson = h / 12 * (Fai + 4 * Fd + 2 * Fc + 4 * Fe + Fbi) IF iAltaralikSayisi > MaxAltaralik THEN iHata = 1 EXIT SUB ELSE IF ABS(TwoSimpson - OneSimpson) < 10 * Hassasiyet THEN Simpsonintegrali = TwoSimpson ELSE CALL RecursiveAdapteSimpson(ai, c, .5 * Hassasiyet, iAltaralikSayisi, ALeftSimpson, iHata) CALL RecursiveAdapteSimpson(c, bi, .5 * Hassasiyet, iAltaralikSayisi, RightSimpson, iHata) Simpsonintegrali = ALeftSimpson + RightSimpson END IF END IF
w
w
w .e
END SUB ' RecursiveAdapteSimpson sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
353
354
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Tek katlı integral: Tanh integrasyon kuralı (ana program)
'----------------------Ana Program Tanh Kuralı----------------------' f(x) fonksiyonunun [a,b] aralığında tek katlı integralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' kullanılan metod: Tanh kuralı
' f(x) fonksiyonu ana programda DEF fnF(x)=... ile tanımlanmalıdır. çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
' Çağrılan alt program: TanhKurali '------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB TanhKurali (ai, bi, hassasiyet, Altintegral, iHata) ' Aralığın ve f(x) fonksiyonunun tanımlanması Pi = 4 * ATN(1) ' Pi=3.14... sayısı
tla
' ' ' '
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
ri. co
' ' ' ' '
sn o
a = 1: b = 4: DEF fnf (x) = 13 * (x - x * x) * EXP(-3 * x / 2) 'a = 0: b = Pi / 2: DEF fnf (x) = x ^ 3 / SQR(1 + COS(x) ^ 2) 'a = 0: b = 2 * pi: DEF fnf (x) = LOG(1 + x) * SIN(10 * x) 'a = 0: b = 5: DEF fnf (x) = x ^ 3 / (EXP(x) + 1) 'a = -2: b = 2: DEF fnf (x) = EXP(-.5 * x) * SIN(8 * x ^ 2 ^ (1 / 3)) + 1 'a = 0: b = 1: DEF fnf (x) = SQR(x) 'a = 0: b = 5: DEF fnf (x) = x ^ x 'a = 0: b = Pi / 2: DEF fnf (x) = TAN(x) 'a = 1: b = 1.5: DEF fnf (x) = COS(TAN(x))
em de r
' analitik çözümü olmayan integraller: 'a = -2: b = 2: DEF fnf (x) = EXP(-x ^ 2 / 2) 'a = 0: b = 200: DEF fnf (x) = SIN(x) / x 'a = -4: b = 4: DEF fnf (x) = SIN(x ^ 2) 'a = 0: b = Pi: DEF fnf (x) = SIN(x) ^ (1 / 3) 'a = 2: b = 50: DEF fnf (x) = 1 / LOG(x) 'a = -40: b = 40: DEF fnf (x) = (1 + x ^ 4) ^ (1 / 3) 'a = -40: b = 40: DEF fnf (x) = 1 / (1 + x ^ 4) ^ (1 / 3) CLS
hassasiyet = .000001' değiştirilebilir, (1E-4 - 1E-12 arası normal) MaxAralik = 20 ' değiştirilebilir, (2-100 arası normal) Delta = (b - a) / MaxAralik bi = a
w
w
w .e
Toplamintegral = 0 FOR iAralikNo = 1 TO MaxAralik
ai = bi: bi = ai + Delta IF iAralikNo = MaxAralik THEN bi = b CALL TanhKurali(ai, bi, hassasiyet, Altintegral, iHata) Toplamintegral = Toplamintegral + Altintegral
NEXT iAralikNo
IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(TanhKurali)" PRINT "Hesaplanan yaklaşık değer="; Toplamintegral ELSE PRINT "İntegral(TanhKurali)="; Toplamintegral END IF
END ' Tanh ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
354
355
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
SUB TanhKurali (ai, bi, hassasiyet, Altintegral, iHata) '------------------------------------------------------------------' f(x) fonksiyonunun [a,b] aralığında tek katlı integralini hesaplar ' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1994 ' kullanılan metod: Tanh kuralı
' f(x) fonksiyonu çağıran programda DEF fnF(x)=... ile tanımlanmalıdır. ' ' ' '
çıktı: Toplamintegral: Hesaplanan integral değeri iHata=0 : integral yakınsadı iHata<>0 : İntegral yakınsamadı
Sabit = .5 / NoktaSayisi h = Pi * SQR(Sabit) - Sabit Delta = .5 * (bi - ai) x = .5 * (ai + bi) Altintegral = fnf(x) Eskiintegral = Altintegral
em de r
FOR i = 1 TO NoktaSayisi hi = h * i Sinh = .5 * (EXP(hi) - EXP(-hi)) Cosh = .5 * (EXP(hi) + EXP(-hi)) Tanh = Sinh / Cosh y = Delta * Tanh
sn o
iHata = 0 Pi = 4 * ATN(1) ' Pi=3.14... sayısı NoktaSayisi = 100 'değiştirilebilir(20-1000 arası normal)
tla
' Çağrılan alt program: yok '-------------------------------------------------------------------
m
Veri: a: integralın alt sınırı b: integralın üst sınırı f(x) : integrali hesaplanacak fonksiyon Hassasiyet: hassasiyet
ri. co
' ' ' ' '
Tek katlı integral: Tanh integrasyon kuralı (alt program)
Altintegral = Altintegral + (fnf(x + y) + fnf(x - y)) / Cosh ^ 2
IF ABS(Eskiintegral - Altintegral) < hassasiyet THEN Altintegral = Delta * h * Altintegral EXIT SUB END IF Eskiintegral = Altintegral NEXT i iHata = 1 ' yakınsamadı
w
w
w .e
END SUB ' TanhKurali sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
355
356
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
'----------------------Ana program Yamuk2----------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1998 ' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı yamuk kuralı ile hesaplanır.
İki katlı integral: Yamuk kuralı ile integrasyon (ana program)
Aralıklar ve f(x,y,z) ana programda aşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
'Çağrılan alt program: Yamuk2 '----------------------------------------------------------------------
sn o
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB Yamuk2 (Xa, Xb, Hassasiyet, Dintegral, iHata) DECLARE SUB YamukKurali (Xa, Xb, iAralikSayisi, Dintegral) DECLARE SUB Yintegral (x, iAralikSayisi, Yint)
tla
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
ri. co
' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
' aralıkların ve F(x,y) fonksiyonunun tanmlanması Pi = 4 * ATN(1)
' Pi=3.14... sayısı
em de r
Xa = -2: Xb = 2 DEF FnYa (x) = -1: DEF FnYb (x) = 1 DEF FnF (x, y) = EXP(-x * x * y * y)
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = 0: DEF FnYb (x) = 1 'DEF FnF (x, y) = (1 - y * y) * COS(x) ^ 2 'Xa = 0: Xb = 2 'DEF FnYa (x) = 0 'DEF FnYb (x) = SQR((4 - x * x) / 2) 'DEF FnF (x, y) = 4 - x * x - 2 * y * y 'Xa = 0: Xb = 2 'DEF FnYa (x) = 1 - x 'DEF FnYb (x) = EXP(-x) 'DEF FnF (x, y) = SQR(x + y)
w
w
w .e
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = TAN(x / 2) 'DEF FnYb (x) = SIN(x) 'DEF FnF (x, y) = x + y
'Xa = 0: Xb = 2 'DEF FnYa (x) = -x ^ x: DEF FnYb (x) = x ^ x 'DEF FnF (x, y) = x * x + y * y 'Xa = -4: Xb = 4 'DEF FnYa (x) = -SQR(ABS(16 - x * x)) 'DEF FnYb (x) = SQR(ABS(16 - x * x)) 'DEF FnF (x, y) = SQR(ABS(16 - x * x - y * y)) 'Xa = 0: Xb = 2 'DEF FnYa (x) = x * x: DEF FnYb (x) = SQR(8 * x) 'DEF FnF (x, y) = EXP(-x * SQR(y)) CLS Hassasiyet = .01' Değiştirilebilir, 1E-02 -1E-4 arası normal değer CALL Yamuk2(Xa, Xb, Hassasiyet, Dintegral, iHata) IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(Yamuk2)" PRINT "Hesaplanan yaklaşık değer="; Dintegral ELSE PRINT "İntegral="; Dintegral END IF
END ' Yamuk2 ana sonu Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
356
357
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
SUB Yamuk2 (Xa, Xb, Hassasiyet, Dintegral, iHata) '---------------------------------------------------------------------' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı yamuk kuralı ile hesaplanır.
İki katlı integral: Yamuk kuralı ile integrasyon (alt program)
Aralıklar ve f(x,y,z) çağıran programda aşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
x = Xa CALL Yintegral(x, iAralikSayisi, Yint) Dintegral = Yint
em de r
x = Xb CALL Yintegral(x, iAralikSayisi, Yint) Dintegral = .5 * (Dintegral + Yint)
sn o
FOR iAralikSayisi = 100 TO MaxAralikSayisi STEP 100 Dintegral = 0 ' yamuk kurali ile integral hesabi DeltaX = (Xb - Xa) / iAralikSayisi
tla
'Çağrılan alt program: Yintegral '---------------------------------------------------------------------iHata = 0 MaxAralikSayisi = 2000 ' değiştirilebilir(100-3000 arası normal) Eskiintegral = 0
ri. co
' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
x = Xa FOR k = 1 TO iAralikSayisi - 1 x = x + DeltaX CALL Yintegral(x, iAralikSayisi, Yint) Dintegral = Dintegral + Yint NEXT k
Dintegral = DeltaX * Dintegral
hata = ABS(Dintegral - Eskiintegral) IF hata <= Hassasiyet THEN EXIT SUB Eskiintegral = Dintegral NEXT iAralikSayisi
w
w
w .e
iHata = 1 ' Yakınsamadı
END SUB ' Yamuk2 sonu SUB Yintegral (x, iAralikSayisi, Yint) '------------------------------------' X=sabit icin y boyunca integral Ya = FnYa(x) Yb = FnYb(x) deltay = (Yb - Ya) / iAralikSayisi Yint = .5 * (FnF(x, Ya) + FnF(x, Yb)) y = Ya FOR j = 1 TO iAralikSayisi - 1 y = y + deltay Yint = Yint + FnF(x, y) NEXT j Yint = deltay * Yint END SUB 'Yintegral sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
357
358
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
'--------------------Ana program Simpson2-----------------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1998 ' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı Simpson metodu ile hesaplanır.
İki katlı integral: Simpson metodu ile integrasyon (ana program)
Aralıklar ve f(x,y,z) ana programda aşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
'Çağrılan alt program: Simpson2 '---------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB Simpson2 (Xa, Xb, Hassasiyet, Dintegral, iHata)
Pi = 4 * ATN(1)
' Pi=3.14... sayısı
Xa = -2: Xb = 2 DEF FnYa (x) = -1: DEF FnYb (x) = 1 DEF FnF (x, y) = EXP(-x * x * y * y)
sn o
' aralıkların ve F(x,y) fonksiyonunun tanmlanması
tla
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
ri. co
' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
em de r
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = 0: DEF FnYb (x) = 1 'DEF FnF (x, y) = (1 - y * y) * COS(x) ^ 2 'Xa = 0: Xb = 2 'DEF FnYa (x) = 0 'DEF FnYb (x) = SQR((4 - x * x) / 2) 'DEF FnF (x, y) = 4 - x * x - 2 * y * y 'Xa = 0: Xb = 2 'DEF FnYa (x) = 1 - x 'DEF FnYb (x) = EXP(-x) 'DEF FnF (x, y) = SQR(x + y)
w
w
w .e
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = TAN(x / 2) 'DEF FnYb (x) = SIN(x) 'DEF FnF (x, y) = x + y
'Xa = 0: Xb = 2 'DEF FnYa (x) = -x ^ x: DEF FnYb (x) = x ^ x 'DEF FnF (x, y) = x * x + y * y 'Xa = -4: Xb = 4 'DEF FnYa (x) = -SQR(ABS(16 - x * x)) 'DEF FnYb (x) = SQR(ABS(16 - x * x)) 'DEF FnF (x, y) = SQR(ABS(16 - x * x - y * y)) 'Xa = 0: Xb = 2 'DEF FnYa (x) = x * x: DEF FnYb (x) = SQR(8 * x) 'DEF FnF (x, y) = EXP(-x * SQR(y)) CLS Hassasiyet = .01 'değiştirilebilir, 1E-2 - 1E-4 arası normal değer CALL Simpson2(Xa, Xb, Hassasiyet, Dintegral, iHata) IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(Simpson2)" PRINT "Hesaplanan yaklaşık değer:"; Dintegral ELSE PRINT "İntegral(Simpson2)="; Dintegral END IF
END ' Simpson2 ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
358
359
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
' ' ' ' ' '
Aralıklar ve f(x,y,z) çağıran programda aşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
'Çağrılan alt program: Yok '---------------------------------------------------------------------Maxiterasyon = 20 'değiştirilebilir (10-100 arası normal) iHata = 0 Dintegral = 0 Eskiintegral = 0
tla
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
İki katlı integral: Simpson metodu ile integrasyon (alt program)
ri. co
SUB Simpson2 (Xa, Xb, Hassasiyet, Dintegral, iHata) '----------------------------------------------------------------------' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı Simpson metodu ile hesaplanır.
w
w
w .e
em de r
sn o
FOR iterasyonNo = 1 TO Maxiterasyon iAralikSayisiX = 10 * iterasyonNo iAralikSayisiY = 10 * iterasyonNo iTamSayi = iAralikSayisiX / 2 iAralikSayisiX = 2 * iTamSayi iTamSayi = iAralikSayisiY / 2 iAralikSayisiY = 2 * iTamSayi IF Xb < Xa THEN iHata = 1 EXIT SUB END IF Hx = (Xb - Xa) / iAralikSayisiX Toplam1 = 0 Toplam2 = 0 Toplam4 = 0 NoktaSayisiX = iAralikSayisiX + 1 NoktaSayisiY = iAralikSayisiY - 1 ' y boyunca integral FOR iNoktaX = 1 TO NoktaSayisiX x = Xa + (iNoktaX - 1) * Hx IF iNoktaX = NoktaSayisiX THEN x = Xb Ya = FnYa(x) Yb = FnYb(x) Hy = (Yb - Ya) / iAralikSayisiY F1 = FnF(x, Ya) F1 = F1 + FnF(x, Yb) F2 = 0 F4 = 0 FOR iNoktaY = 1 TO NoktaSayisiY y = Ya + iNoktaY * Hy Fxy = FnF(x, y) iTamSayi = iNoktaY / 2 IF iNoktaY = 2 * iTamSayi THEN F2 = F2 + Fxy ELSE F4 = F4 + Fxy END IF NEXT iNoktaY ' x boyunca integral ToplamY = Hy / 3 * (F1 + 2 * F2 + 4 * F4) IF iNoktaX = 1 OR iNoktaX = NoktaSayisiX THEN Toplam1 = Toplam1 + ToplamY ELSE iTamSayi = iNoktaX / 2 IF 2 * iTamSayi = iNoktaX THEN Toplam4 = Toplam4 + ToplamY ELSE Toplam2 = Toplam2 + ToplamY END IF END IF NEXT iNoktaX Dintegral = Hx / 3 * (Toplam1 + 2 * Toplam2 + 4 * Toplam4) Hata = ABS(Dintegral - Eskiintegral) IF Hata <= Hassasiyet THEN EXIT SUB Eskiintegral = Dintegral NEXT iterasyonNo iHata = 2 'yakınsamıyor END SUB
' Simpson2 sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
359
360
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Aralıklar ve f(x,y,z) ana programda aşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı 'Çağrılan alt program: Romberg2 '----------------------------------------------------------------------
sn o
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB Romberg2 (Xa, Xb, Hassasiyet, Dintegral, iHata) DECLARE SUB YamukKurali (Xa, Xb, iAralikSayisi, Dintegral) DECLARE SUB Yintegral (x, iAralikSayisi, Yint)
tla
' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
İki katlı integral: Romberg metodu ile integrasyon (ana program)
ri. co
'----------------------Ana program Romberg2----------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1998 ' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı Romberg metodu ile hesaplanır.
' aralıkların ve F(x,y) fonksiyonunun tanmlanması Pi = 4 * ATN(1)
' Pi=3.14... sayısı
'Xa = -2: Xb = 2 'DEF FnYa (x) = -1: DEF FnYb (x) = 1 'DEF FnF (x, y) = EXP(-x * x * y * y)
em de r
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = 0: DEF FnYb (x) = 1 'DEF FnF (x, y) = (1 - y * y) * COS(x) ^ 2 'Xa = 0: Xb = 2 'DEF FnYa (x) = 0 'DEF FnYb (x) = SQR((4 - x * x) / 2) 'DEF FnF (x, y) = 4 - x * x - 2 * y * y 'Xa = 0: Xb = 2 'DEF FnYa (x) = 1 - x 'DEF FnYb (x) = EXP(-x) 'DEF FnF (x, y) = SQR(x + y)
w
w
w .e
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = TAN(x / 2) 'DEF FnYb (x) = SIN(x) 'DEF FnF (x, y) = x + y
'Xa = 0: Xb = 2 'DEF FnYa (x) = -x ^ x: DEF FnYb (x) = x ^ x 'DEF FnF (x, y) = x * x + y * y 'Xa = -4: Xb = 4 'DEF FnYa (x) = -SQR(ABS(16 - x * x)) 'DEF FnYb (x) = SQR(ABS(16 - x * x)) 'DEF FnF (x, y) = SQR(ABS(16 - x * x - y * y)) Xa = 0: Xb = 2 DEF FnYa (x) = x * x: DEF FnYb (x) = SQR(8 * x) DEF FnF (x, y) = EXP(-x * SQR(y)) CLS Hassasiyet = .01 '1E-2 - 1E-4 arası normal değer CALL Romberg2(Xa, Xb, Hassasiyet, Dintegral, iHata) IF iHata <> 0 THEN PRINT "İntegral yakınsamadı(Romberg2)" PRINT "Hesaplanan yaklaşık değer="; Dintegral ELSE PRINT "İntegral(Romberg2)="; Dintegral END IF
END ' Romberg2 ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
360
361
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı SUB Romberg2 (Xa, Xb, Hassasiyet, Dintegral, iHata) '---------------------------------------------------------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1998 ' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı Romberg metodu ile hesaplanır.
İki katlı integral: Romberg metodu ile integrasyon (alt program)
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
x = Xa CALL Yintegral(x, iAralikSayisi, Yint) Dintegral = Yint
'Çağrılan alt program: YamukKurali '----------------------------------------------------------------------
CALL YamukKurali(Xa, Xb, iAralikSayisi, Dintegral) t(1, 1) = Dintegral
em de r
FOR i = 1 TO MaxRomberg iAralikSayisi = 2 * iAralikSayisi CALL YamukKurali(Xa, Xb, iAralikSayisi, Dintegral) i1 = i + 1 t(i1, 1) = Dintegral
' Romberg tablosu FOR j = 1 TO i t(i1, j + 1) = t(i1, j) + (t(i1, j) - t(i, j)) / (4 ^ j - 1) NEXT j Dintegral = t(i1, i1) Hata = ABS(t(i1, i1) - t(i, i)) IF Hata <= Hassasiyet THEN EXIT SUB NEXT i iHata = 1 ' yakınsamadı
x = Xa FOR k = 1 TO iAralikSayisi - 1 x = x + DeltaX CALL Yintegral(x, iAralikSayisi, Yint) Dintegral = Dintegral + Yint NEXT k Dintegral = DeltaX * Dintegral
END SUB ' YamukKuralı sonu
SUB Yintegral (x, iAralikSayisi, Yint) '------------------------------------' X=sabit icin y boyunca integral Ya = FnYa(x) Yb = FnYb(x) deltay = (Yb - Ya) / iAralikSayisi Yint = .5 * (FnF(x, Ya) + FnF(x, Yb)) y = Ya FOR j = 1 TO iAralikSayisi - 1 y = y + deltay Yint = Yint + FnF(x, y) NEXT j Yint = deltay * Yint END SUB ' Yintegral sonu
w
w
w .e
END SUB ' Romberg2 sonu
x = Xb CALL Yintegral(x, iAralikSayisi, Yint) Dintegral = .5 * (Dintegral + Yint)
sn o
iAralikSayisi = 10 ' değiştirilebilir(10-20 arası normal) MaxRomberg = 10 ' değiştirilebilir(5-10 arası normal) DIM t(MaxRomberg + 1, MaxRomberg + 1) iHata = 0 IF Xb < Xa THEN iHata = 1 ' aralık hatalı EXIT SUB END IF
SUB YamukKurali (Xa, Xb, iAralikSayisi, Dintegral) '------------------------------------------------------' sabit x için y boyunca yamuk kurali ileintegral hesabı ' çağrılan alt program: Yintegral '------------------------------------------------------Dintegral = 0 ' yamuk kurali ile integral hesabi DeltaX = (Xb - Xa) / iAralikSayisi
ri. co
Aralıklar ve f(x,y,z) çağıran programda aşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
tla
' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
361
362
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
'----------------------Ana program GaussLegendre2--------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1998 ' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı Gauss-Legendre metodu ile hesaplanır.
İki katlı integral: Gauss-Legendre metodu ile integrasyon (ana program)
Aralıklar ve f(x,y,z) ana programda aşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
'Çağrılan alt program: GaussLegendre2 '----------------------------------------------------------------------
tla
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
ri. co
' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
sn o
DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB GaussLegendre2 (Xa, Xb, Hassasiyet, Dintegral, iHata) DECLARE SUB GauLeg (ai, bi, x(), w(), n) ' aralıkların ve F(x,y) fonksiyonunun tanmlanması Pi = 4 * ATN(1)
' Pi=3.14... sayısı
Xa = -2: Xb = 2 DEF FnYa (x) = -1: DEF FnYb (x) = 1 DEF FnF (x, y) = EXP(-x * x * y * y)
em de r
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = 0: DEF FnYb (x) = 1 'DEF FnF (x, y) = (1 - y * y) * COS(x) ^ 2 'Xa = 0: Xb = 2 'DEF FnYa (x) = 0 'DEF FnYb (x) = SQR((4 - x * x) / 2) 'DEF FnF (x, y) = 4 - x * x - 2 * y * y 'Xa = 0: Xb = 2 'DEF FnYa (x) = 1 - x 'DEF FnYb (x) = EXP(-x) 'DEF FnF (x, y) = SQR(x + y)
w
w
w .e
'Xa = 0: Xb = Pi / 2 'DEF FnYa (x) = TAN(x / 2) 'DEF FnYb (x) = SIN(x) 'DEF FnF (x, y) = x + y
'Xa = 0: Xb = 2 'DEF FnYa (x) = -x ^ x: DEF FnYb (x) = x ^ x 'DEF FnF (x, y) = x * x + y * y 'Xa = -4: Xb = 4 'DEF FnYa (x) = -SQR(ABS(16 - x * x)) 'DEF FnYb (x) = SQR(ABS(16 - x * x)) 'DEF FnF (x, y) = SQR(ABS(16 - x * x - y * y)) 'Xa = 0: Xb = 2 'DEF FnYa (x) = x * x: DEF FnYb (x) = SQR(8 * x) 'DEF FnF (x, y) = EXP(-x * SQR(y)) CLS Hassasiyet = .01 'Değiştirilebilir,1e-2 - 1E-4 arası normal değer CALL GaussLegendre2(Xa, Xb, Hassasiyet, Dintegral, iHata) IF iHata <> 0 THEN PRINT "Yakınsamadı, yaklaşık değer(GaussLegendre2)="; Dintegral ELSE PRINT "İntegral(GaussLegendre2)="; Dintegral END IF
END ' GaussLegendre2 ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
362
363
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
SUB GaussLegendre2 (Xa, Xb, Hassasiyet, Dintegral, iHata) '---------------------------------------------------------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 1998 ' F(x,y) fonksiyonunun [Xa,Xb] ve [Ya(x),Yb(x)] aralığında iki katlı ' integralı Gauss-Legendre metodu ile hesaplanır.
İki katlı integral: Gauss-Legendre metodu ile integrasyon (alt program)
Aralıklar ve f(x,y,z) çağıran programda aŞağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) Def fnF(x,y)=... (integralı hesaplanacak fonksiyon)
'Çağrılan alt program: GauLeg '----------------------------------------------------------------------
tla
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
ri. co
' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y) : integralı alınacak fonksiyon ' Hassasiyet: Hassasiyet
iMax = LOG(MaxNokta) / LOG(2) iHata = 0 Eskiintegral = 0
sn o
MaxNokta = 1024 ' öngörülen maksimum Gauss-Legendre nokta sayısı DIM x(MaxNokta), w(MaxNokta)
SUB GauLeg (ai, bi, x(), w(), n) '------------------------------------------------------------------' Gauss-Legendre integrasyon ordinatları ve ağırlıkları hesaplanır ' ai: integralin alt sınırı ' bi: integralin üst sınırı ' x(n): Gauss-Legendre ordinatlarının depolandığı vektör ' w(n): Gauss-Legendere ağırlıklarının depolandığı vektör ' n: Gaus-Legendre integral nokta sayısı
em de r
FOR i = 4 TO iMax NoktaSayisi = 2 ^ i ' Gauss-Lgendre koordinatları: CALL GauLeg(-1, 1, x(), w(), NoktaSayisi)
GauLeg: Bu alt program GaussLegendre2 tarafından çağrılır
Hx = .5 * (Xb - Xa) HxOrta = .5 * (Xb + Xa) Dintegral = 0
FOR NoktaX = 1 TO NoktaSayisi x = Hx * x(NoktaX) + HxOrta Xint = 0 Ya = FnYa(x) Yb = FnYb(x) Hy = .5 * (Yb - Ya) HyOrta = .5 * (Yb + Ya)
w
w
w .e
FOR NoktaY = 1 TO NoktaSayisi y = Hy * x(NoktaY) + HyOrta Fxy = FnF(x, y) Xint = Xint + w(NoktaY) * Fxy NEXT NoktaY
Dintegral = Dintegral + w(NoktaX) * Hy * Xint NEXT NoktaX
Dintegral = Dintegral * Hx hata = ABS(Dintegral - Eskiintegral) IF hata <= Hassasiyet THEN EXIT SUB Eskiintegral = Dintegral
NEXT i iHata = 1' Yakınsamadı END SUB ' GaussLegendre2 sonu
' çağrılan alt program: yok ' Fortran kodu http://www.haoli.org/nr/bookf/f4-5.ps den alınmıştır '------------------------------------------------------------------x1 = ai x2 = bi Pi = 4 * ATN(1)' Pi=3.14... sayısı Hassasiyet = 3E-14: ' Gauleg için hassasiyet(değiştirmeyiniz!) m = (n + 1) / 2 xm = .5 * (x2 + x1) x1 = .5 * (x2 - x1)
FOR i = 1 TO m z = COS(Pi * (i - .25) / (n + .5)) ' # işareti DOUBLE anlamındadır z1 = 0 WHILE ABS(z - z1) > Hassasiyet p1 = 1 p2 = 0 FOR j = 1 TO n p3 = p2 p2 = p1 p1 = ((2 * j - 1) * z * p2 - (j - 1) * p3) / j NEXT j pp = n * (z * p1 - p2) / (z * z - 1) z1 = z z = z1 - p1 / pp WEND x(i) = xm - x1 * z x(n + 1 - i) = xm + x1 * z w(i) = 2 * x1 / ((1 - z * z) * pp * pp) w(n + 1 - i) = w(i) NEXT i END SUB ' Gauleg sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
363
364
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
Aralıklar ve f(x,y,z) ana programda Xaşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) DEF FnZa(x,y)=... (sabit sayı veya fonksiyon) DEF FnZb(x,y)=... (sabit sayı veya fonksiyon) Def fnF(x,y,z)=... (integralı hesaplanacak fonksiyon)
tla
' ' ' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' Za(x,y), Zb(x,y): z ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y,z) : integralı hesaplanacak fonksiyon ' Hassasiyet: Hassasiyet
Üç katlı integral: GaussLegendre metodu ile integrasyon (ana program)
ri. co
'----------------------Ana program GaussLegendre 3--------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 2010 ' F(x,y,z) fonksiyonunun [Xa,Xb], [Ya(x),Yb(x)] ve [Za(x,y),Zb(x,y)] ' aralığında üç katlı integralini Gauss-Legendre metodu ile hesaplar.
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
sn o
'Çağrılan alt program: GaussLegendre3 '---------------------------------------------------------------------DEFINT I-N DEFDBL A-H, O-Z DECLARE SUB GaussLegendre3 (Xa, Xb, Hassasiyet, Dintegral, iHata) DECLARE SUB GauLeg (Ai, Bi, x(), w(), n) Pi = 4 * ATN(1) ' Pi=3.14... sayısı
em de r
Xa = 0: Xb = 1 DEF fnYa (x) = 0: DEF fnYb (x) = 2 DEF fnZa (x, y) = 0: DEF fnZb (x, y) = 3 DEF fnF (x, y, z) = x * x * y * y * z * z
'Xa = 0: Xb = 2 'DEF fnYa (x) = 0: DEF fnYb (x) = 3 'DEF fnZa (x, y) = 0: DEF fnZb (x, y) = SQR(9 - y * y) 'DEF fnF (x, y, z) = z * z 'Xa = 0: Xb = 4 'DEF fnYa (x) = 0: DEF fnYb (x) = SQR(4 * x - x * x) 'DEF fnZa (x, y) = 0: DEF fnZb (x, y) = 2 * x * x * y 'DEF fnF (x, y, z) = 1
'Xa = -2: Xb = 2 'DEF fnYa (x) = -SQR(4 - x * x): DEF fnYb (x) = SQR(4 - x * x) 'DEF fnZa (x, y) = 0: DEF fnZb (x, y) = SQR(4 - x * x - y * y) 'DEF fnF (x, y, z) = z
w
w
w .e
'Xa = 0: Xb = 6 'DEF FnYa (x) = 0: DEF FnYb (x) = (12 - 2 * x) / 3 'DEF fnZa (x, y) = 0: DEF fnZb (x, y) = (12 - 2 * x - 3 * y) / 6 'DEF FnF (x, y, z) = 1 'Xa = -Pi / 2: Xb = Pi 'DEF FnYa (x) = -SIN(x) ^ 2: DEF FnYb (x) = SIN(x) ^ 2 'DEF fnZa (x, y) = -x - y: DEF fnZb (x, y) = x + y 'DEF FnF (x, y, z) = SIN(x) + COS(y) + SIN(z)
CLS Hassasiyet = .01 ' Değiştirilebilir, 0.01-0.0001 arası normal değer CALL GaussLegendre3(Xa, Xb, Hassasiyet, Dintegral, iHata) IF iHata <> 0 THEN PRINT "Yakınsamadı, yaklaşık değer(GaussLegendre3)="; Dintegral ELSE PRINT "İntegral(GaussLegendre3)="; Dintegral END IF END ' GaussLegendre3 ana sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
364
365
39. PROGRAMLAR: Tek ve çok katlı belirli integral hesabı
SUB GaussLegendre3 (Xa, Xb, Hassasiyet, Dintegral, iHata) '---------------------------------------------------------------------' Ahmet TOPÇU, Osmangazi Üniversitesi, Eskişehir, 2010 ' F(x,y,z) fonksiyonunun [Xa,Xb], [Ya(x),Yb(x)] ve [Za(x,y),Zb(x,y)] ' aralığında üç katlı integralini Gauss-Legendre metodu ile hesaplar.
Üç katlı integral: Gauss-Legendre metodu ile integrasyon (alt program)
Aralıklar ve f(x,y,z) çağıran programda Xaşağıdaki gibi tanımlanmalıdır: Xa=... (sabit sayı) Xb=... (sabit sayı) DEF FnYa(x)=... (sabit sayı veya fonksiyon) DEF FnYb(x)=... (sabit sayı veya fonksiyon) DEF FnZa(x,y)=... (sabit sayı veya fonksiyon) DEF FnZb(x,y)=... (sabit sayı veya fonksiyon) Def fnF(x,y,z)=... (integralı hesaplanacak fonksiyon)
tla
'Çıktı: ' Dintegral: hesaplanan integral ' iHata=0 : integral yakınsadı ' iHata<>0: integral yakınsamadı
ri. co
' ' ' ' ' ' ' '
m
'Veri: ' Xa, Xb : x ekseni boyunca integralin alt ve üst sınırı ' Ya(x), Yb(x): y ekseni boyunca alt ve üst sınırın fonksiyonu ' Za(x,y), Zb(x,y): z ekseni boyunca alt ve üst sınırın fonksiyonu ' F(x,y,z) : integralı hesaplanacak fonksiyon ' Hassasiyet: Hassasiyet
iHata = 0 Eskiintegral = 0 iMax = LOG(MaxNokta) / LOG(2)
sn o
'Çağrılan alt program: GaussLegendre3 '---------------------------------------------------------------------MaxNokta = 1024 ' =2^10 Öngörülen maksimum Gauss-Legendre nokta sayısı DIM x(MaxNokta), w(MaxNokta)
SUB GauLeg (Ai, Bi, x(), w(), n) '------------------------------------------------------------------' Gauss-Legendre integrasyon ordinatları ve ağırlıkları hesaplanır ' Ai: integralin alt sınırı ' Bi: integralin üst sınırı ' x(n): Gauss-Legendre ordinatlarının depolandığı vektör ' w(n): Gauss-Legendere ağırlıklarının depolandığı vektör ' n: Gaus-Legendre integral nokta sayısı
em de r
FOR i = 4 TO iMax NoktaSayisi = 2 ^ i NoktaSayisiX = NoktaSayisi ' x yönü nokta sayısı NoktaSayisiY = NoktaSayisi ' y yönü nokta sayısı NoktaSayisiZ = NoktaSayisi ' z yönü nokta sayısı ' Gauss-Lgendre koordinatları: CALL GauLeg(-1, 1, x(), w(), NoktaSayisi) Hx = .5 * (Xb - Xa) HxOrta = .5 * (Xb + Xa) Dintegral = 0 FOR iX = 1 TO NoktaSayisiX x = Hx * x(iX) + HxOrta AintX = 0 Ya = fnYa(x) Yb = fnYb(x) Hy = .5 * (Yb - Ya) HyOrta = .5 * (Yb + Ya)
w
w
w .e
FOR iY = 1 TO NoktaSayisiY y = Hy * x(iY) + HyOrta aintY = 0 Za = fnZa(x, y) Zb = fnZb(x, y) Hz = .5 * (Zb - Za) HzOrta = .5 * (Zb + Za)
FOR iZ = 1 TO NoktaSayisiZ z = Hz * x(iZ) + HzOrta Fxyz = fnF(x, y, z) aintY = aintY + w(iZ) * Fxyz NEXT iZ AintX = AintX + w(iY) * Hz * aintY
NEXT iY Dintegral = Dintegral + w(iX) * Hy * AintX NEXT iX Dintegral = Dintegral * Hx hata = ABS(Dintegral - Eskiintegral) IF hata <= Hassasiyet THEN EXIT SUB Eskiintegral = Dintegral NEXT i
GauLeg: Bu alt program GaussLegendre3 tarafından çağrılır
' çağrılan alt program: yok ' Fortran kodu http://www.haoli.org/nr/bookf/f4-5.ps den alınmıştır '------------------------------------------------------------------x1 = Ai x2 = Bi Pi = 4 * ATN(1)' Pi=3.14... sayısı Hassasiyet = 3E-14: ' Gauleg için hassasiyet(değiştirmeyiniz!) m = (n + 1) / 2 xm = .5 * (x2 + x1) x1 = .5 * (x2 - x1)
FOR i = 1 TO m z = COS(Pi * (i - .25) / (n + .5)) ' # işareti DOUBLE anlamındadır z1 = 0 WHILE ABS(z - z1) > Hassasiyet p1 = 1 p2 = 0 FOR j = 1 TO n p3 = p2 p2 = p1 p1 = ((2 * j - 1) * z * p2 - (j - 1) * p3) / j NEXT j pp = n * (z * p1 - p2) / (z * z - 1) z1 = z z = z1 - p1 / pp WEND x(i) = xm - x1 * z x(n + 1 - i) = xm + x1 * z w(i) = 2 * x1 / ((1 - z * z) * pp * pp) w(n + 1 - i) = w(i) NEXT i
iHata = 1' Yakınsamadı END SUB ' Gauleg sonu END SUB ' GaussLegendre3 sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
365
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz Ahmet TOPÇU
sn o
tla
Ders notları 2014
Sayısal sıralama
em de r
26.7 2.09 a= − 8.88 0.975
w
w
w .e
İlhan Zeynep a = Çağla Şirin Işık
− 8.88 0.975 a= 2.09 26.7
Türkçe metin sıralama
Çağla Işık a = İlhan Şirin Zeynep
40
SIRALAMA-ARAMA METOTLARI (Sorting-Searching) Sıralama metotları: • Bubble sıralama • Insertion sıralama • Shell sıralama • Quick sıralama • Gnome sıralama
Arama metotları: • Squential arama • Binary arama • Jump arama
367
40. SIRALAMA(SORTING) VE ARAMA(SEARCHING) METOTLARI
40. SIRALAMA(SORTING) VE ARAMA(SEARCHING) METOTLARI
m
Bilgisayar güçlüdür, ancak yükü de ağırdır. İntel’in kurucularından Gordon Moore 1975 yılında bilgisayarların gücünün her iki yılda bir katlanacağını öne sürmüş ve bu öngörüsü genelde gerçekleşmiştir(Moore yasası). Bilgisayarların giderek artan gücüne paralel olarak, işlenecek veri de katlanmıştır. Milyonlarca veriye hızlı erişimi sağlamak için sıralama ve arama yöntemleri de önem kazanmıştır.
ri. co
Sıralama(sorting): Elemanları rastgele dizilmiş bir listenin çabuk erişilebilir şekilde düzenlenmesidir, örnek: Telefon rehberi. Sadece sayılar içeren, n elemanlı bir a vektörünün elemanları küçükten büyüğe veya büyükten küçüğe sıralanmak istenebilir. Veya, alfasayısal dizi (karakter ve rakamlardan oluşan dizi) içeren a vektörünün A dan Z ye veya Z den A ya sıralanması gerekebilir. i=1, 2, … , n-1 için
tla
aiai+1 sağlanıyorsa büyükten-küçüğe doğru sıralı(ters sıralı)
denir. Uygulamada çoğunlukla küçükten-büyüğe sıralama gerekli olur.
sn o
a vektörü alfasayısal olsa dahi bu koşullar geçerlidir. Çünkü karakterlerin karşılığı (kodu) gene bir sayıdır. A=65, B=66, … , Z=90 gibi(ASCII kod tablosu) . Dolayısıyla A
em de r
Sıralamanın tanımı çok basit gözükmekle birlikte, uygulaması oldukça karmaşıktır. İyi bir sıralama metodu özetle şöyle tanımlanır: 1. Hızlı olmalı 2. Mümkün olduğunca az bellek gerektirmeli
Bu iki koşul 1980 li yıllarda da geçerliydi, bugün de geçerlidir. 1980 li yıllarda işlenecek veri az fakat bilgisayarlar çok yavaş ve düşük bellekli idiler(Örnek: 4 MH işlemci hızı, 64 Kb ana bellek, 320 KB disket. Renk, grafik, hard disk, CD, fare, Türkçe klavye, bilgisayarlar arası uyumluluk yok). Günümüz bilgisayarları çok hızlı, yüksek bellekli fakat işlenecek veri çok fazladır (Örnek: 3 GH çoklu işlemci, 3-8 GB ana bellek, 1 Tera Byte hard disk. Renk, grafik, DVD, fare, Türkçe klavye, bilgisayarlar arası uyumluluk var).
w
w
w .e
Farklı amaca yönelik onlarca sıralama yöntemi vardır. Uygulamada adı sıkça geçen aşağıdaki sıralama yöntemlerinin programları ve karşılaştırmalı test sonuçları bir sonraki bölümde verilecektir. Adı geçen sıralama yöntemlerinin bellek gereksinimi hemen hemen aynıdır. İngilizce adı
Bubble sort
Insertion sort
Heap sort
Türkçe adı
Kabarcık veya elemeli sıralama Eklemeli sıralama Yığın sıralama
Shell sort
Shell veya kabuk sıralama
Quick sort Gnome sort
1 2
Hız En iyi1 En kötü durumda durumda
Açıklama
n
n2
Genelde çok yavaştır, fakat herkesin aklına öncelikle gelen basit bir programı vardır. Bu nedenle Student sort (öğrenci sıralaması) da denir. Hemen hiç kullanılmaz.
n
n2
Sıralı bir listeye yeni bir eleman eklenecekse çok hızlıdır. Programı basittir.
n Log(n)
n Log(n)
-
n Log2(n)
Hızlı sıralama
n Log(n)
n Log(n)
Cüce sırlama
n
n2
Hızı Quick sort a yakın, programı daha basit bir sıralamadır. Insertion sort un genelleştirilmiş şeklidir. Donald Shell tarafından 1959 yılında geliştirilmiştir. Programı oldukça basittir. Kabuk sıralama olarak Türkçeleştirilmesi uygun değildir, çünkü “Shell” araştırmacının soyadıdır. Genelde en hızlı ve en çok kullanılan yöntemdir. 1960-1961 yıllarında C.A.R Hoare tarafından Rusça-İngilizce sözlüğün sıralanması amacıyla geliştirilmiş ve birçok araştırmacı tarafından iyileştirilmiştir. Programı oldukça karmaşıktır2. Insert ve bubble sort arasında bir sıralamadır. Yavaştır. Hamid Sarbazi-Azad tarafından 2000 yılında geliştirilmiştir.
“En iyi durumda” veya “En kötü durumda” yöntemin n ye bağlı işlem sayısı(sorgulama (if ) ve yer değiştime (swap) sayısı) olarak algılanabilir. Quick sort 20. yüzyılın en iyi 10 algoritmasından biri seçilmiştir: http://amath.colorado.edu/resources/archive/topten.pdf Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
367
368
40. SIRALAMA(SORTING) VE ARAMA(SEARCHING) METOTLARI
m
Türkçe karakter sıralama: Türkçe metin içeren(ad-soyad gibi) listelerin sıralanması zorluk yaratır. Çünkü yukarıda açıklandığı gibi, Türkçeye özgü ÇçIıİiĞğOoÖöUuÜüŞş karakterleri işletim sistemine bağımlı olarak kod tablolarında gelişi güzel yer almaktadır. Bu nedenle Türkçe metin içeren listelerin sıralanabilmesi için özel kod oluşturulması ve sıralama programının özel olarak hazırlanması zorunludur. Sonraki bölümde örnek bir program verilecektir.
ri. co
Arama(searching): n elemanlı a(n) vektöründe aranan bir değerin a(n) nin hangi satırında olduğunun belirlenmesi işlemidir. a(n) nın elemanları sadece sayılar veya alfasayısal(adsoyad gibi) dizi içerebilir. Uygulamada Sequential search(doğrusal arama), ikili arama(binary search) ve Blok ikili arama(Jump search) yöntemleri sıkça kullanılmaktadır. Doğrusal arama(sequantial veya linear search): 1 ile n işlem gerektirir. a(n) vektörü sıralı veya sırasız olabilir. Tesadüfen; a(1)=aranan ise bir işlemde, a(n)=aranan ise n işlemde arama işlemi son bulur. Genelde çok yavaştır, fakat herkesin aklına öncelikle gelen basit bir programı vardır. Bu nedenle Student arama (öğrenci araması) da denir. a(n) sıralı değilse kullanılır. a(n) sıralı olması durumunda kullanılmaz.
•
İkili arama(binary search): a(n) vektörü sıralı olmak zorundadır. İşlem sayısı 1 ile Log(n) arasında değişir. Bilinen en hızlı arama yöntemidir, programı çok basittir.
•
Blok ikili arama(block veya Jump seach): ikili arama yönteminin benzeridir. a(n) vektörü sıralı olmak zorundadır. İşlem sayısı 1 ile Log(n) arasında değişir.
sn o
tla
•
Sonraki bölümde arama programlarına ve test sonuçlarına yer verilecektir.
w
w
w .e
em de r
Burada yer verilmeyen başka onlarca arama yönteminin olduğunu da belirtelim. Örnek: Fibonacci arama, Radix arama.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
368
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Bilgisayar Destekli
Nümerik Analiz Ahmet TOPÇU
sn o
tla
Ders notları 2014
Sayısal sıralama
em de r
26.7 2.09 a= − 8.88 0.975
w
w
w .e
İlhan Zeynep a = Çağla Şirin Işık
PROGRAMLAR: • • • • •
Bubble sıralama Insertion sıralama Shell sıralama Quick sıralama Gnome sıralama
− 8.88 0.975 a= 2.09 26.7
Türkçe metin sıralama
Çağla Işık a = İlhan Şirin Zeynep
41 Sıralama (Sorting)metotları
370
41. PROGRAMLAR: Sıralama (sorting) metotları
41. PROGRAMLAR: Sıralama (sorting) metotları Sayısal sıralama:
ri. co
m
Bubble, Insertion, Heap, Shell, Quick ve Gnome sıralama metotlarının test sonuçları ve programları aşağıda verilmiştir. Bu metotların hepsi de hemen aynı miktarda bellek kullanmaktadır. Gerçek sayılardan oluşan n elemanlı a(n) vektörü kullanılarak her metodun hızı belirlenmiştir. a(n) vektörünün yapısına bağlı olarak sıralama yöntemleri çok değişik davranış göstermektedir. Tek bir vektör ile karşılaştırma yapmak yanlış sonuca götürür. Bu nedenle üç farklı yapıda a(n) vektörü seçilmiştir. Aynı tip bir vektör küçükten-büyüğe tüm sıralama metotları ile ayrı ayrı sıralanarak her metodun hızı belirlenmiştir. Test için kullanılan a(n) vektörleri aşağıdaki gibi seçilmiştir: t tipi: a(n)=[n, n-1, … , 2, 1] tamamen ters sıralı n tane ondalık sayı içeren vektör.
tla
h tipi: a(n)=[2,3, … , n-1, n, 1] hemen hemen sıralı n tane ondalık sayı içeren vektör(sadece 1 sayısı doğru yerinde değil).
r tipi: a(n)=[… rasgele sayılar …] n tane rasgele ondalık sayı içeren sırasız vektör.
sn o
Eleman sayısı n=100, 200, …,1000 alınarak a(n) vektörü kurulmuş ve 1000 kez sıralanmıştır. Aynı vektörün 1000 kez sıralanmasının amacı, ölçülebilir bir zaman elde etmeye yöneliktir. Test sonuçlarının n-zaman(saniye) grafikleri izleyen sayfalarda verilmiştir.
em de r
Programlarda a(n) vektörü değişkeni tek hassasiyetli(SINGLE) tanımlanmıştır. İstenirse Çift hassasiyetli veya başka bir tip olarak (DOUBLE, INTEGER,…) tanımlanabilir. Ayrıca sıralanacak a(n) vektörünün tamamının bellekte olduğu varsayılmıştır.
Alfasayısal sıralama:
ÇçIıİiĞğOoÖöUuÜuŞş gibi Türkçeye özgü karakterlerin kod tablolarında mantıklı bir sıra izlememesi nedeniyle Türkçe metinlerin sıralanması özel kod ve program gerektirir. Örnek olması açısından, Quick sıralama yöntemi kullanılarak yazılmış bir program verilmiştir. Bu programda sadece AaBbCcÇçDdEeFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpQqRrSsŞşTtUuÜüVvWwXxYyZz0123456789
w
w
w .e
karakterleri dikkate alındığından, bunlar dışında (örneğin Â, α, ä, $, {, @, gibi) karakterler içeren metinler doğru sıralanamayacaktır. Ancak; listede olmayan karakterler eklenerek program geliştirilebilir.
Not: Uygulamada genellikle 1.
a(n) vektörü ana bellekte değil, bir çevre depolama biriminde (hard disk, flash bellek) üzerindedir.
2.
Bir vektör sıralanınca o vektöre bağlı birçok bilginin de beraber taşınması gerekir. Örneğin vatandaşlık numarasına göre kişiler sıralanacaksa, kişilerin adı, soyadı, v.s. gibi bilgilerinin de beraber taşınması veya bu bilgilerin adresinin de taşınması zorunludur. Açıkçası sıralama problemi gerçekte daha karmaşıktır. Burada verilen alt programlar temel alınarak amaca cevap verecek şekilde iyileştirilebilirler.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
370
371
41. PROGRAMLAR: Sıralama (sorting) metotları
Karşılaştırma
Saniye 250
200
200
150
Bubble sıralama
150
100
100
50
50 n 400
600
800
1000
200
Saniye 8
400
600
800
1000
600
800
1000
600
800
1000
n
sn o
Saniye 8
7
7
6 5
Insertion sıralama
tla
200
ri. co
Saniye 250
m
t tipi: a=[n, n-1, … , 2, 1] tamamen ters sıralı sayısal vektör için:
6 5
Heap sıralama
4
Shell sıralama
4
3
em de r
3
2
2
1
1
n
200
400
600
800
n
1000
Saniye 8
200
400
Saniye 250
7
5
Quick sıralama
200 150
Gnome sıralama
4
100
3 2
50
1
n 200
400
600
800
1000
n 200
400
w
w
w .e
6
Tamamen ters sıralı vektör için Gnome en yavaş, Quick en hızlı sıralamadır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
371
372
41. PROGRAMLAR: Sıralama (sorting) metotları
h tipi: a=[2,3, … , n-1, n, 1] hemen hemen sıralı sayısal vektör için:
Saniye 60
50
5 4
Bubble sıralama
30
3
20
2
10
1 n 400
600
800
1000
200
400
600
800
1000
600
800
1000
Saniye 6
600
800
1000
sn o
Saniye 6
5
5 4
Heap sıralama
3
Shell sıralama
3
2
em de r
2
1
1
n
200
400
600
800
5
w
w .e
4
w
n
1000
Saniye 6
3
n
tla
200
Insertion sıralama
ri. co
40
4
m
Saniye 6
200
Saniye 6
5 4
Quick sıralama
3
2
2
1
1
200
400
Gnome sıralama
n 400
600
800
1000
n 200
400
Hemen hemen sıralı vektör için Bubble en yavaş, Insertion ve Gnome en hızlı sıralamadır.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
372
373
41. PROGRAMLAR: Sıralama (sorting) metotları
Saniye 120
Saniye 120
100
100 80 Bubble sıralama
Insertion sıralama
60
60
40
40
20
20 n 400
600
800
sn o 8
Heap sıralama
8
800
1000
600
800
1000
600
800
1000
Shell sıralama
6
6
4
em de r
4
2
2
200
400
600
800
n
n
200
1000
Saniye 12
Saniye 120
10
100
8
80
w .e
w
n
600
10
10
6
400
Saniye 12
Saniye 12
w
200
1000
tla
200
ri. co
80
m
r tipi: a=[… rasgele sayılar … ] rasgele sayılardan oluşan sırasız vektör için:
60
Quick sıralama
4
40
2
20
200
400
Gnome sıralama
n 400
600
800
1000
n 200
400
Rasgele sayılardan oluşan sırasız bir vektör için Gnome en yavaş, Quick en hızlı sıralamadır.
SONUÇ: En iyi sıralama metodu hangisidir? 1. Sıralanacak vektör hemen hemen sıralı ise: Uygulamada çoğu kez vektör sıralıdır ve zaman zaman yeni bir eleman eklenmesi ve yeniden sıralanması gerekir. Bu durumda en hızlı sıralama metodu Insertion veya Gnome sıralamadır, Insertion öncelikle tercih edilir. 2. Diğer her tip vektör için: Quick sıralama. Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
373
374
41. PROGRAMLAR: Sıralama (sorting) metotları
'-----------------Sıralama(Sorting) test---------------------' Ahmet TOPÇU, Anadolu Üniversitesi, Eskişehir,1985 ' Eskişehir Osmangazi Üniversitesi, 2010
Sıralama ana programı
' Sayısal vektörlerin sıralama yöntemleri: ' Bubble Sort, Insertion Sort, Heap Sort, Shell Sort ' QuickSort, GnomeSort
Kuruldu = 0 FOR i = 0 TO 7 READ s$(i) NEXT i
em de r
sn o
100 CLS FOR i = 0 TO 7 PRINT i; s$(i) NEXT i IF Kuruldu = 0 THEN PRINT "Vektör kurulu değil!" ELSE ' kurulan b yi a ya kopyala FOR i = 1 TO n a(i) = b(i): PRINT a(i); NEXT i PRINT : PRINT PRINT "n="; n; " Elemanlı vektör kurulu:" END IF
tla
DATA A Vektörünü kur,Bubble,Insertion,Heap,Shell,Quick,Gnome,Son n = 100 ' a vektörünün eleman sayısı. test için n<=10000) DIM s$(7), a(n), b(n)
ri. co
m
' a(n):sıralanacak vektör ' b(n):yardımcı vektör(sadece test için gerekli) ' n:vektörün eleman sayısı '------------------------------------------------------------DEFINT I-N DEFSNG A-H, O-Z DECLARE SUB BubbleSort (n, a()) DECLARE SUB insertionSort (n, a()) DECLARE SUB HeapSort (n, a()) DECLARE SUB ShellSort (n, a()) DECLARE SUB QuickSort (n, a()) DECLARE SUB GnomeSort (n, a()) DECLARE SUB VektorKur (n, b(), ihata) DECLARE SUB Checkit (n, a())
PRINT INPUT "Seçenek="; iSecenek IF iSecenek = 7 THEN END IF iSecenek <> 0 AND Kuruldu = 0 THEN PRINT "önce vektörü kurunuz!" PRINT INPUT "Enter tuşuna basınız"; z$ GOTO 100 END IF
w
w
w .e
t = TIMER SELECT CASE iSecenek CASE 0 CALL VektorKur(n, b(), ihata) IF ihata <> 0 THEN GOTO 100 ' kurulan b yi a ya kopyala FOR i = 1 TO n a(i) = b(i) NEXT i Kuruldu = 1 CASE 1 CALL BubbleSort(n, a()) CASE 2 CALL insertionSort(n, a()) CASE 3 CALL HeapSort(n, a()) CASE 4 CALL ShellSort(n, a()) CASE 5 CALL QuickSort(n, a()) CASE 6 CALL GnomeSort(n, a()) CASE 7 END
CASE ELSE GOTO 100 END SELECT
Sıralama ana programının devamı sonraki sayfada
VektorKur alt programı
SUB VektorKur (n, b(), ihata) '----------------------------------------------' n elemanlı b(n) vektörünü sayılar ile doldurur
' t:ters sıralı sayılardan oluşan vektöru kur ' h:hemen hemen sıralı sayılardan oluşan vektörü kur ' r:rasgele sayılardan oluşan vektörü kur ' bu alt program sadece test için gereklidir. '----------------------------------------------' b vektörünün kurulması ihata = 0 PRINT n; " elemanlı vektör kurulacak, vektör tipini seçin:" INPUT "Vektörün tipi(t,h,r)="; Tip$ ' Hemen hemen sıralı IF Tip$ = "h" THEN FOR i = 1 TO n - 1 b(i) = i + 1 NEXT i b(n) = 1 EXIT SUB END IF ' Tamamen ters sıralı IF Tip$ = "t" THEN FOR i = 1 TO n b(i) = n - i + 1 NEXT i EXIT SUB END IF ' rasgele IF Tip$ = "r" THEN FOR i = 1 TO n b(i) = RND(1) NEXT i ELSE ihata = 1 PRINT "Yanlış veri=": INPUT "Enter tuşuna basınız"; z$ END IF END SUB 'VektorKur sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
374
375
41. PROGRAMLAR: Sıralama (sorting) metotları
Sure = TIMER - t PRINT : PRINT s$(iSecenek); " n="; n; : PRINT
Sıralama ana programının devamı
END ' sıralama Test sonu
ri. co
PRINT : PRINT : PRINT s$(iSecenek); " n="; n; "Süre="; Sure; "Saniye" INPUT "Enter tuşuna basınız"; z$ GOTO 100
m
' sıralama doğru mu? Kontrol et IF iSecenek <> 0 THEN CALL Checkit(n, a()) ' a yı yazdır FOR i = 1 TO n PRINT a(i); NEXT i
tla
BubbleSort alt programı
sn o
SUB insertionSort (n, a()) '----------------------------------------' gerçek sayılardan oluşan a(n) vektörü ' Insertion sıralama yöntemi ile küçükten ' büyüğe doğru sıralanır. ' n: vektörün eleman sayısı '----------------------------------------FOR j = 2 TO n i=j b = a(j) 40 i = i - 1 IF a(i) > b THEN a(i + 1) = a(i) IF i > 0 GOTO 40 END IF a(i + 1) = b NEXT j
em de r
SUB BubbleSort (n, a()) '----------------------------------------' gerçek sayılardan oluşan a(n) vektörü ' Bubble sıralama yöntemi ile küçükten ' büyüğe doğru sıralanır. ' n: vektörün eleman sayısı '----------------------------------------FOR i = 1 TO n - 1 k=i c = a(k) FOR j = i + 1 TO n IF a(j) < c THEN k=j c = a(k) END IF NEXT j b = a(i) a(i) = c a(k) = b NEXT i
END SUB ' BubbleSort sonu
insertSort alt programı
END SUB '
ShellSort alt programı
w
w
w .e
SUB ShellSort (n, a()) '----------------------------------------' gerçek sayılardan oluşan a(n) vektörü ' Shell sıralama yöntemi ile küçükten ' büyüğe doğru sıralanır. ' n: vektörün eleman sayısı '-----------------------------------------
L = 2 ^ INT(LOG(n) / LOG(2)) - 1 WHILE L > 2 L = INT(L / 2) FOR j = 1 TO L FOR k = j + L TO n STEP L i=k b = a(i) DO IF a(i - L) <= b THEN EXIT DO a(i) = a(i - L) i=i-L LOOP WHILE i > L a(i) = b NEXT k NEXT j WEND
END SUB 'ShellSort sonu
SUB GnomeSort (n, a()) '----------------------------------------' gerçek sayılardan oluşan a(n) vektörü ' Genome sıralama yöntemi ile küçükten ' büyüğe doğru sıralanır. ' n: vektörün eleman sayısı '-----------------------------------------
GnomeSort alt programı
i=2 j=2 WHILE i <= n IF a(i - 1) <= a(i) THEN i=j j=j+1 ELSE SWAP a(i - 1), a(i) i=i-1 IF i = 1 THEN i=j j=j+1 END IF END IF WEND EXIT SUB END SUB ' GnomeSort sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
375
376
41. PROGRAMLAR: Sıralama (sorting) metotları
HeapSort alt programı
m
SUB HeapSort (n, a()) '----------------------------------------' gerçek sayılardan oluşan a(n) vektörü ' Heap sıralama yöntemi ile küçükten ' büyüğe doğru sıralanır. ' n: vektörün eleman sayısı '-----------------------------------------
tla
WHILE iS1 > 0 L1 = L(iS1) iR1 = iR(iS1) iS1 = iS1 - 1
QuickSort alt programı
WHILE L1 < iR1 iL2 = L1 iR2 = iR1 b = a(INT((L1 + iR1) / 2)) WHILE iL2 <= iR2 WHILE a(iL2) < b iL2 = iL2 + 1 WEND
em de r
i=L j=L+L 2 IF j <= m THEN IF j < m THEN IF a(j) < a(j + 1) THEN j = j + 1 END IF IF b < a(j) THEN a(i) = a(j) i=j j=j+j ELSE j=m+1 END IF GOTO 2 END IF a(i) = b
SUB QuickSort (n, a()) '----------------------------------------' gerçek sayılardan oluşan a(n) vektörü ' Quick sıralama yöntemi ile küçükten ' büyüğe doğru sıralanır. ' n: vektörün eleman sayısı '----------------------------------------DIM L(40), iR(40) iS1 = 1 L(1) = 1 iR(1) = n
sn o
1 IF L > 1 THEN L=L-1 b = a(L) ELSE b = a(m) a(m) = a(1) m=m-1 IF m = 1 THEN a(1) = b EXIT SUB END IF END IF
ri. co
L=n/2+1 m=n
GOTO 1
w
w
w .e
END SUB 'HeapSort sonu
WHILE b < a(iR2) iR2 = iR2 - 1 WEND
IF iL2 <= iR2 THEN SWAP a(iL2), a(iR2) iL2 = iL2 + 1 iR2 = iR2 - 1 END IF WEND
IF iL2 < iR1 THEN iS1 = iS1 + 1 L(iS1) = iL2 iR(iS1) = iR1 END IF iR1 = iR2 WEND WEND
END SUB 'QuickSort sonu
Checkit alt programı
SUB Checkit (n, a()) '-----------------------------------------------' sıralamanın doğru olup olmadığını kontrol eder. ' bu alt program sadece test için gereklidir '-----------------------------------------------FOR i = 1 TO n - 1 IF a(i) > a(i + 1) THEN PRINT : PRINT "Sıralama hatalı!": INPUT "Enter tuşuna basınız!"; z$ EXIT SUB END IF NEXT i
END SUB ' Check it sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
376
377
41. PROGRAMLAR: Sıralama (sorting) metotları
'------------------Ana program QuickAlfa test------------------' Ahmet TOPÇU, Anadolu Üniversitesi, 1985 ' Satırları Türkçe harf dizini içeren a$(n) vektörü ' Quick sıralama yöntemi ile A dan Z ye alfabetik sıralanır ' n: vektörün satır sayısı ' iEsas: Sıralamaya esas alınacak karakter sayısı ' iEsas=0: dizinin tüm karakterlerini dikkate al ve sırala ' iEsas=1 Dizinin sadece ilk karakterini dikkate al ve sırala ' iEsas=3 Dizinin sadece ilk üç karakterini dikkate al ve sırala '----------------------------------------------------------------
ri. co
m
QuickAlfa ana programı
DATA 40 : ' n nin değeri DATA 0 : ' iEsas değeri(satırdaki tüm karakterleri dikkate al)
DEFINT I-N SUB SUB SUB SUB
QuickSortAlfa (n, a$()) TurkceKodaDondur (n, a$(), iEsas, TurkceKod$) TurkceKodTablosu (TR$, TurkceKod$) TurkceKaraktereDondur (n, a$(), iEsas, TR$)
CLS READ n ' a$ ın satır sayısı DIM a$(n) ' a$ için yer ayır
sn o
DECLARE DECLARE DECLARE DECLARE
Buradaki Türkçe karakterler program Windows ortamına taşındığında düzgün görüntülenmez, taşındıktan sonra düzeltilmelidir
tla
' A$ ın satır verileri DATA İbrahim,Şükrü,Ünal,Defne TOPÇU,Şener ZOR DATA Şebnem AY,Çetin ÇINAR,Ömer BAĞ,Ali ÇAKIR,Sema DATA Uğur,Oğuz,Şengül,Çakır-2,Ümit Kara DATA İlker,Emre TAÇ,Şirin,Adnan,Betül YAŞ DATA Filiz,Cem,Gülşen,Havva TOPÇU,Çakır-1 DATA Ziya,Yusuf TOPÇU,Işık,Tamer,Yelda DATA Çağrı Şen,Çağatay,Çelen,Özer,Kemal ER DATA Timur,Özcan,İnci,Irmak,Şebnem TAŞ
em de r
READ iEsas ' sıralamaya esas alınacak karakter sayısı FOR i = 1 TO n READ a$(i) NEXT i PRINT "Sıralanmamış vektör (QuickAlfa):" FOR i = 1 TO n PRINT a$(i) NEXT i PRINT INPUT "Enter tuşuna basınız"; b$
CALL TurkceKodTablosu(TR$, TurkceKod$) CALL TurkceKodaDondur(n, a$(), iEsas, TurkceKod$) CALL QuickSortAlfa(n, a$())
CALL TurkceKaraktereDondur(n, a$(), iEsas, TR$)
w
w
w .e
CLS PRINT "Sıralanmış vektör (QuickAlfa):" FOR i = 1 TO n PRINT a$(i) NEXT i
END ' Quick Alfa Test sonu
SUB TurkceKodTablosu (TR$, TurkceKod$) '------------------------------------------------' Türkçe karakter tablosu ve kodlarını hazırlar '------------------------------------------------' Türkçe harfler ve rakamlar: TR$ = "AaBbCcÇçDdEeFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpQqRrSsŞşTtUuÜüVvWwXxYyZz" TR$ = TR$ + "0123456789" TR$ = TR$ + SPACE$(255 - LEN(TR$))
' TR$ içindeki her karaktere 1,2,3,.. kodlarını ata TurkceKod$ = SPACE$(255) 'TurkceKod->türkçe karşılığı vektörü FOR i = 1 TO 255 k = ASC(MID$(TR$, i, 1)) MID$(TurkceKod$, k, 1) = CHR$(i) NEXT i
TurkceKodTablosu alt programı
Buradaki Türkçe karakterler program Windows ortamına taşındığında düzgün görüntülenmez, taşındıktan sonra düzeltilmelidir
END SUB 'TurkceKodTablosu sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
377
378
41. PROGRAMLAR: Sıralama (sorting) metotları
FOR j = 1 TO L k = ASC(MID$(a$(i), j, 1)) MID$(a$(i), j, 1) = MID$(TR$, k, 1) NEXT j NEXT i
Alt programları
m
TurkceKaraktereDondur TurkceKodaDondur
ri. co
SUB TurkceKaraktereDondur (n, a$(), iEsas, TR$) '---------------------------------------------' a$(n) ın her satırının ilk iEsas karakterini ' Türkçe karaktere geri döndürür '---------------------------------------------FOR i = 1 TO n L = iEsas L1 = LEN(a$(i)) IF iEsas >= 1 AND iEsas < L1 THEN L = iEsasa ELSE L = L1 END IF
END SUB ' TurkceKaraktereDondur sonu
SUB QuickSortAlfa (n, a$()) '---------------------------------------------------------' Ahmet TOPÇU, Anadolu Üniversitesi, 1985 ' Satırları Türkçe harf dizini içeren a$(n) vektörü ' Quick sıralama yöntemi ile A dan Z ye alfabetik sıralanır ' büyüğe doğru sıralanır. ' n: vektörün satır sayısı '---------------------------------------------------------DIM L(40), iR(40) ' index1-index2 arasını sırala index1 = 1 index2 = n IF index1 < 1 OR index1 > index2 THEN EXIT SUB IF index2 < index1 OR index2 > n THEN EXIT SUB
em de r
sn o
SUB TurkceKodaDondur (n, a$(), iEsas, TurkceKod$) '---------------------------------------------------------------' A$(n) ın her satırının ilk iEsas karakterinin ' kodunu program koduna çevirir ' iEsas: Sıralamaya esas alınacak karakter sayısı ' iEsas=0: dizinin tüm karakterlerini dikkate al ve sırala ' iEsas=1 Dizinin sadece ilk karakterini dikkate al ve sırala ' iEsas=3 Dizinin sadece ilk üç karakterini dikkate al ve sırala '---------------------------------------------------------------FOR i = 1 TO n L = iEsas L1 = LEN(a$(i)) IF iEsas >= 1 AND iEsas < L1 THEN L = iEsasa ELSE L = L1 END IF
tla
QuickAlfa alt programı
FOR j = 1 TO L k = ASC(MID$(a$(i), j, 1)) MID$(a$(i), j, 1) = MID$(TurkceKod$, k, 1) NEXT j NEXT i
w
w
w .e
END SUB ' TurkceKodaDondur sonu
index1 = 1 L(1) = 1 iR(1) = index2 WHILE index1 > 0 L1 = L(index1) iR1 = iR(index1) index1 = index1 - 1 WHILE L1 < iR1 iL2 = L1 iR2 = iR1 b$ = a$(INT((L1 + iR1) / 2)) WHILE iL2 <= iR2 WHILE a$(iL2) < b$ iL2 = iL2 + 1 WEND WHILE b$ < a$(iR2) iR2 = iR2 - 1 WEND IF iL2 <= iR2 THEN SWAP a$(iL2), a$(iR2) iL2 = iL2 + 1 iR2 = iR2 - 1 END IF WEND IF iL2 < iR1 THEN index1 = index1 + 1 L(index1) = iL2 iR(index1) = iR1 END IF iR1 = iR2 WEND WEND END SUB ' QuickAlfa sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
378
ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ
ri. co
Bilgisayar Destekli
m
Mühendislik Mimarlık Fakültesi İnşaat Mühendisliği Bölümü E-Posta: [email protected] Web: http://mmf2.ogu.edu.tr/atopcu
Nümerik Analiz
w
w
w .e
em de r
Ahmet TOPÇU
sn o
tla
Ders notları 2014
PROGRAMLAR: • • •
Sıralı(Sequential) arama İkili(Binary) arama Blok ikili(Jump) arama
42 Arama (Searching) metotları
380
42. PROGRAMLAR: Arama (searching) metotları
42. PROGRAMLAR: Arama (searching) metotları Sayısal arama:
ri. co
m
Doğrusal arama(Sequential veya Linear search), İkili arama(Binary search) ve Blok ikili arama(Jump search) metotlarının test sonuçları ve programları aşağıda verilmiştir. Bu metotların hepsi de hemen aynı miktarda bellek kullanmaktadır. Gerçek sayılardan oluşan n elemanlı a(n) vektörü kullanılarak her metodun hızı belirlenmiştir. Aranan sayının a(n) vektöründe bulunduğu yere bağlı olarak arama yöntemleri farklı davranış sergilerler. Bu nedenle testler a(n)=[1, 2, 3, … , n-1, n] sıralı vektöründe 1 ve n-1 sayısı için yapılmıştır.
tla
Eleman sayısı n=100, 200, …,1000 alınarak a(n) vektörü kurulmuş, 1 veya n-1 sayısı 1000000 (bir milyon) kez aranmıştır. Aynı vektörde aynı sayının 1000000 kez aranmasının nedeni, ölçülebilir bir zaman elde etmeğe yöneliktir. Test sonuçlarının n-zaman(saniye) grafikleri izleyen sayfalarda verilmiştir.
sn o
Programlarda a(n) vektörü değişkeni tek hassasiyetli(SINGLE) tanımlanmıştır. İstenirse Çift hassasiyetli veya başka bir tip olarak (DOUBLE, INTEGER,…) tanımlanabilir. Ayrıca a(n) vektörünün tamamının bellekte olduğu varsayılmıştır.
Karşılaştırma:
em de r
a=[1, 2, … , n-1, n] sayısal vektöründe 1 sayısının aranması:
Saniye 5
Saniye 6
5.75
4 3
5.5 5.25
Sıralı arama (sequential search)
5
2
4.75 4.5
w
w .e
1
w
İkili sıralama (Binary search)
4.25
n 400
600
800
n
1000
200
400
600
800
1000
Saniye 6
5.75 5.5 5.25
İkili blok arama (Jump search)
5 4.75 4.5 4.25 n 200
400
600
800
1000
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
380
381
42. PROGRAMLAR: Arama (searching) metotları
Saniye 7
120
6.5
100
Sıralı arama (sequential search)
6
80 5.5 60 5
40
4.5
20 n 400
600
1000
200
400
600
800
n
1000
sn o
Saniye 7
6.5 6
800
tla
200
İkili sıralama (Binary search)
ri. co
Saniye 140
m
a=[1, 2, … , n-1, n] sayısal vektöründe n-1 sayısının aranması:
İkili blok arama (Jump search)
5.5
em de r
5
4.5
200
400
600
800
n
1000
SONUÇ: En iyi arama metodu hangisidir?
w
w
w .e
1. Vektör sırasız ise ve sıralanmak istenmiyorsa: Sıralı arama kullanılır diğerleri kullanılamaz. 2. Vektör sıralı ise: İkili ve Blok ikili sıralama kullanılır. İkili arama tercih edilir. Zaman açısından ikili ve Blok ikili arama arasında hemen hiç fark yoktur. İkili aramanın programı daha basittir.
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
381
382
42. PROGRAMLAR: Arama (searching) metotları
'-----------------Arama(Searching) test----------------------' Ahmet TOPÇU, Anadolu Üniversitesi, Eskişehir, 1985 ' Eskişehir Osmangazi Üniversitesi, 2010
Arama ana programı
' Sayısal vektörlerde arama yöntemleri: ' Sıralı arama(Sequential search), ikili arama(binary earch)
ri. co
m
' a(n): Sayılar içeren vektör ' n:vektörün eleman sayısı ' Aranan: A(n) vektörü içinde aranacak değer ' index=0 aranan değer bulunamadı ' index>0 aranan değer index nolu satırda bulundu '------------------------------------------------------------DEFINT I-N DEFSNG A-H, O-Z DECLARE FUNCTION iSequentialSearch (n, a(), Aranan) DECLARE FUNCTION iBinarySearch (n, a(), Aranan) DECLARE FUNCTION JumpSearch (n, a(), Aranan) DIM i AS LONG DATA Sequential,Binary,Jump,Son ' n elemanlı a vektörü oluştur: n = 10000 DIM s$(4), a(n)
'veri: ' a(n): küçükten-büyüğe sıralı sayılar içeren vektör ' Aranan: aranan değer
sn o
Aranan = n - 1' bu değerin bulunduğu satırı bul
'çıktı: ' iBinarySearch=iNdex : Aranan değer iNdex nolu satırda bulundu ' iBinarySearch=0: Aranan değer bulunamadı '-------------------------------------------------iStart = 0 iEnd = n ' iStart+1 ile iEnd arasında aranan değerini ara WHILE iStart <= iEnd
em de r
PRINT INPUT "Seçenek="; iSecenek IF iSecenek = 4 THEN END
tla
FUNCTION iBinarySearch (n, a(), Aranan) '-------------------------------------------------' a(n) sıralı vektöründe Aranan değerini arar
FOR i = 1 TO n a(i) = i NEXT i
100 CLS RESTORE FOR i = 1 TO 4 READ s$(i) PRINT i; s$(i) NEXT i
iBnarySearch alt programı
w
w
w .e
t = TIMER SELECT CASE iSecenek CASE 1 FOR i = 1 TO 1000000 iNdex = iSequentialSearch(n, a(), Aranan) NEXT i CASE 2 FOR i = 1 TO 1000000 iNdex = iBinarySearch(n, a(), Aranan) NEXT i CASE 3 FOR i = 1 TO 1000000 iNdex = JumpSearch(n, a(), Aranan) NEXT i CASE 4 END CASE ELSE GOTO 100 END SELECT
iNdex = (iStart + iEnd) / 2 IF a(iNdex) = Aranan THEN iBinarySearch = iNdex ' index nolu satırda bulundu EXIT FUNCTION END IF IF a(iNdex) > Aranan THEN iEnd = iNdex - 1 ELSE iStart = iNdex + 1 END IF
WEND iBinarySearch = 0 ' bulunamadı
END FUNCTION ' iBinarySearch sonu
Sure = TIMER - t PRINT s$(iSecenek); " Arama: " PRINT Aranan; " sayısının bulunduğu index="; iNdex PRINT : PRINT "Süre="; Sure; "Saniye" INPUT "Enter tuşuna basınız"; z$ GOTO 100
END ' Arama test sonu
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
382
383
42. PROGRAMLAR: Arama (searching) metotları
FUNCTION JumpSearch (n, a(), Aranan) '-------------------------------------------------' a(n) vektöründe Aranan değerini arar
JumpSearch alt programı
LenBlok = n ^ (2 / 3) iBlokSayisi = INT(n / LenBlok) iStart = LenBlok iEnd = n
tla
iNdex = 0 JumpSearch = 0 FOR i = iStart TO iEnd STEP LenBlok IF a(i) >= Aranan THEN iNdex = i EXIT FOR END IF NEXT i
ri. co
'çıktı: ' JumpSearch=index : Aranan değer index nolu satırda bulundu ' JumpSearch=0: Aranan değer bulunamadı '--------------------------------------------------
m
'veri: ' a(n): sayılar içeren vektör(sıralı olması gerekmez) ' n: a vektörünün satır sayısı ' Aranan: aranan değer
sn o
IF iNdex = 0 THEN IF a(n) < Aranan THEN EXIT FUNCTION iStart = iBlokSayisi * LenBlok + 1 ELSE IF a(iNdex) = Aranan THEN JumpSearch = iNdex EXIT FUNCTION END IF iStart = (INT(iNdex / LenBlok) - 1) * LenBlok + 1 iEnd = iNdex END IF
em de r
iSequentialSearch alt programı
' Block içinde binary search WHILE iStart <= iEnd iNdex = (iStart + iEnd) / 2 IF a(iNdex) = Aranan THEN JumpSearch = iNdex EXIT FUNCTION END IF
IF a(iNdex) > Aranan THEN iEnd = iNdex - 1 ELSE iStart = iNdex + 1 END IF WEND JumpSearch = 0
'veri: ' a(n): sayılar içeren vektör(sıralı olması gerekmez) ' Aranan: aranan değer 'çıktı: ' iBinarySearch=index : Aranan değer index nolu satırda bulundu ' iBinarySearch=0: Aranan değer bulunamadı '-------------------------------------------------index1 = 1 index2 = n ' index1 ile index2 satırları arasında aranan değerini ara FOR iNdex = index1 TO index2 IF a(iNdex) = Aranan THEN iSequentialSearch = iNdex ' index nolu satırda bulundu EXIT FUNCTION END IF NEXT iNdex iSequentialSearch = 0 ' bulunamadı END FUNCTION ' iSequentialSearch sonu
w
w
w .e
END FUNCTION
FUNCTION iSequentialSearch (n, a(), Aranan) '-------------------------------------------------' a(n) vektöründe Aranan değerini arar
Ahmet TOPÇU, Bilgisayar Destekli Nümerik Analiz, Eskişehir Osmangazi Üniversitesi, 2014, http://mmf2.ogu.edu.tr/atopcu/
383