+ All Categories
Home > Documents > LU FACKTOR ODEV

LU FACKTOR ODEV

Date post: 21-Feb-2023
Category:
Upload: uludag
View: 0 times
Download: 0 times
Share this document with a friend
13
1 İÇİNDEKİLER Giriş....................................................................2 Özet....................................................................2 1.1) Carl Friedrich Gauss kimdir?..........................3 1.2) L U – Ayrışımı...................................................3 1.3) C Dilinde LU Ayrıştırması ve Kodları.............9 1.3.1) Programın Açıklaması....................................11
Transcript

1

İÇİNDEKİLER

Giriş....................................................................2

Özet....................................................................2

1.1) Carl Friedrich Gauss kimdir?..........................3

1.2) L U – Ayrışımı...................................................3

1.3) C Dilinde LU Ayrıştırması ve Kodları.............9

1.3.1) Programın Açıklaması....................................11

2

GİRİŞ

L U factorization, Gauss’un bulmuş olduğu, lineer cebir’de bir matrisi alt ve üst üçgenlere ayırarak diagonalinden ikiye bölme işlemidir. L U yönteminde L alt matrisi, U ise üst matrisi temsil eder. Buradaki L alt anlamına gelen Lower’dan, U ise üst anlamına gelen Upper’dan gelmektedir.

ÖZET

Bu çalışmada Gauss’un yok etme metotlarından biri olan LU ayrışımı inceledik. Bir matrisi bir nevi çarpanlarına ayırarak, alt ve üst üçgen şeklinde, çözüme ulaşma yöntemini ele aldık. Daha çok bilgisayar yöntemlerinde kullanılan bu yöntem paradan ve zamandan tasarruf bakımından etkili bir yöntemdir. Ayrıca örnek olarak kullanıcının girdiği bir matrise LU ayrışımı yapan programın kodlarını ve ekran görüntülerini içeren bilgiler açıklamalarıyla beraber mevcuttur.

3

1.1) Carl Friedrich Gauss kimdir?

Carl Friedrich Gauss ya da Gauß (30 Nisan 1777 – 23 Şubat 1855)

Alman kökenli matematikçi ve bilim insanı. Katkıda bulunduğu alanlardan bazıları; sayılar kuramı, analiz, diferansiyel geometri, jeodezi, elektrik, manyetizma, astronomi ve optiktir. "Matematikçilerin prensi" ve "antik çağlardan beri yaşamış en büyük matematikçi" olarak da bilinen Gauss, matematiğin ve bilimin pek çok alanına etkisini bırakmıştır ve tarihin en nüfuzlu matematikçilerinden biri olarak kabul edilir.

Gauss´un dehası çok erken yaşlarda kendini göstermiş ve konuşmayı öğrenmeden önce toplama ve çıkarma yapmayı öğrenmiştir. Güç koşullar altında sürdürdüğü eğitimini, 14 yaşında bir asilin sağladığı destekle güvence altına alabilmiştir. 16 yaşında Eukleides Geometrisi´nin alternatifi olacak yeni bir geometri tasarlamış ve 18 yaşındayken Lagrange ve Newton´un eserlerini incelemiştir. Üniversitede öğrenciyken, sadece pergel ve cetvel kullanarak onyedi kenarlı düzgün bir çokgenin çizilmesi metodunu bulmuştur. Bu buluşundan çok mutlu olmuş ve mezarının üzerine bu çokgenin oyulmasını istemiştir. Archimedes tarafından başlatılan bu geleneğin bir matematikçiyi etkilediği anlaşılmaktadır. Sayılar teorisi üzerine yazmış olduğu ilk büyük eseri "Disquistiones Aritmeticae” (Aritmetik araştırmaları) ona şimdiki ününü kazandırmıştır.

1.2) LU – AYRIŞIMI

LU ayrışımı Gauss’un yok etme metotlarından biridir. Bu metodda bir matris alt ve üst üçgen matrislerinin çarpımı olarak yazılır. Bu ayrışım A X = B lineer sisteminin çözümü için bir algoritma verir. Bu, bilgisayarlar üzerinde kullanılan bir metottur. Bu metodun çok kullanılmasının esas sebebi lineer sisteminin çözümünün bulunmasının en ekonomik yolu olmasıdır. Bu durum uygulamalı problemlerde karşımıza çıkar. Örneğin bir elektrik şirketi, gerekli çıktıları üretmek için gerekli girdileri belirlemek zorundadır. Sistemin ikinci tarafı güne hafta saatten saate değiştiği halde girdiler ve çıktılar katsılar matrisi belirli olan bir lineer sisteme bağımlı olabilir. Bu kesimde tartışılan ayrışım, lineer cebirin diğer problemlerinin çözümünde de yararlıdır.

U tüm köşegen elemanları sıfırdan farklı bir üst üçgen matris olduğunda A X = B lineer sistemi, [U ⋮ B] ilaveli matrisi satırca indirgenmiş eşelon biçimine veya satırca eşelon biçimine dönüştürülmeksizin çözülebilir.

4

Böyle bir sistemin ilaveli matrisi

nnn

n

n

n

bu

buubuuubuuuu

000

000

3333

222322

11131211

ile verilir. Çözüm aşağıdaki algoritma ile elde edilir.

xn=

xn-1=

Xj= ∑

,

j=n, n-1,....,2,1

Bu işlem gauss yok etme ile birlikte eşlemede kullandığımız geriye yerine koyma metodudur. Benzer şekilde, eğer L köşegen elemanları sıfırdan farklı olan bir alt üçgen matris ise, L X = B lineer sistemi aşağıdaki işlemlerden oluşan “ileri doğru yerine koymayla” çözülür. İlaveli matris

nnnnnn bllll

blllbllbl

321

3333231

22221

111

000000

biçimine sahiptir ve çözüm

5

x1 =

x2=

Xj=∑

,

j= 2,....,n den elde edilir. O halde, her denklemden bir bilinmeyeni çözerek ilk denklemden aşağı doğru devam ederiz.

Aşağıda vereceğimiz örnekte ileri doğru yerine koymayı göstereceğiz.

Sual 1

5x1 = 10

4x1 – 2x2 = 28

2x1 + 3x2 + 4x2 = 26

Lineer sistemini çözmek için ileri yerine koymayı kullanalım. Önceki algoritmadan

X1 = = 2

X2= = -10

X3 = = 13

elde edilir. Bu da verilen alt üçgen sistemin çözümünün

X= 2

−10 13

olduğunu gösterir.

6

Önceki sayfada gösterdiğimiz örnekteki gibi, katsayıları, üst veya alt üçgen matris olan bir sistemin kolayca çözülebilir olduğu ilginçtir. İleri veya geri yerine koyma algoritmaları hızlı ve basit kullanıma sahiptir. Bunlar lineer denklem sistemlerinin çözümü için başka önemli nümerik metodlarda da kullanılır.

Mesela, nxn tipindeki bi A matrisinin üst üçgen bir U matrisi ile alt üçgen bir L matrisinin çarpımı olarak yazılabildiğini kabul edelim. Yani

A = L U

olsun.

Bu durumda, A’nun LU- çarpımı veya LU ayrışımına sahip olduğunu söyleyebiliriz. A matrisinin LU ayrışımı A X = B lineer sisteminin çözümünde etkili olarak kullanılabilir. A yeri LU yazarsak

( L U )X = B

Matrisin çarpma işlemlerindeki özelliğinden yukarıdaki matris denklemini

L ( U X ) = B

şeklinde yazarız. U X = Z alarak matris denklemi

L Z = B

şekline gelir.

L alt üçgen biçiminde olduğundan, Z’yi ileri yerine koymakla doğrudan çözeriz. Önce Z’yi belirledikten sonra, U bir üst üçgen matris olduğundan geri yerine koymayla U X = Z’yi çözeriz. Özetleyecek olursak, A, LU- ayrışımına sahip n x n tipinde bir matris ise, A X = B’nin çözümü, önce ileri yerine koyma, sonra geri yerine koyma ile hesaplanır. Aşağıda vereceğimiz sual ile bunu göstereceğiz.

7

Sual 2

6x1 - 2x2 - 4x3 + 4x4 = 2

3x1 – 3x2 – 6x3 + x4 = -4

-12x1 + 8x2 + 21x3 - 8x4 =8

-6x1 -10x3 + 7x4=-43

Lineer sistemini gözönüne alalım. Burada katsayılar matrisi

A=

7100682181216334426

biçimindedir. Sistem

L =

121101220012/10001

ve U =

8000250014204426

olmak üzere LU- ayrışımına sahiptir. LU- ayrışımını kullanarak verilen sistemi çözmek için, aşağıdaki gibi uygulama yaparız.

B =

43842

olsun. L U X = B yazarak A X = B sistemini çözeriz. Önce U X = Z alalım ve L Z = B’yi ileri yerine koymayla çözelim.

8

021101220012/10001

4

3

2

1

zzzz

=

43842

olmak üzere;

z1 = 2

z2 = -4

z3 = 8 + 2z1 + 2z2 = 2

z4 = -43 + z1 – z2 + 2z3 = -32

elde edilir. Sonra U X = Z’yi geri yerie koymayla çözelim:

8000250014204426

4

3

2

1

xxxx

=

32252

olmak üzere;

x4 = = -4

x3 = = -1.2

x2= =6.9

x1= = 4.5

elde ederiz. Böylece lineer sistemin çözümü

X =

42.19.65.4

olur.

9

1.3) C Dilinde LU Ayrıştırması ve Kodları #include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

{

int i,j,k,l,m,n,size;

double l1,lxu;

double A[100][100] = {0}, L[100][100] = {0};

printf("Matrisin boyutunu giriniz mxm: ");

fflush(stdout);

scanf("%d", &size);

for (i = 0; i < size; i++)

{

printf("%d. satiri girin\n", i + 1);

fflush(stdout);

for (j = 0; j < size; j++)

scanf("%lf", &A[i][j]);

}

printf("A matrix:\n");

for (i = 0; i < size; i++)

{

for (j =0; j < size; j++)

printf("%12lf", A[i][j]);

printf("\n");

}

for (i = 0; i < size - 1; i++)

{

L[i][i] = 1

10

for (k = i + 1; k < size; k++)

{

if (A[i][i] == 0)

{

printf("LU ayrisimi gerceklestirilemiyor!\n");

getch();

return EXIT_FAILURE;

}

l1 = -A[k][i]/A[i][i];

for (l = 0; l < size; l++)

A[k][l] = l1*A[i][l] + A[k][l];

L[k][i] = -l1;

}

}

L[size - 1][size - 1] = 1;

printf("U matrix:\n");

for (i = 0; i < size; i++)

{

for (j = 0; j < size; j++)

printf("%12lf", A[i][j]);

printf("\n");

}

printf("L matrix:\n");

for (i = 0; i < size; i++)

{

for (j = 0; j < size; j++)

printf("%12lf", L[i][j]);

printf("\n");

}

printf("L*U=A\n");

11

for (i = 0; i < size; i++)

{

for (j = 0; j < size; j++)

{

lxu = 0;

for( k = 0; k < size; k++)

lxu += (L[i][k]*A[k][j]);

printf("%12lf", lxu);

}

printf("\n");

}

getch();

return EXIT_SUCCESS;

}

1.3.1) Programın Açıklaması

Bu program kullanıcı tarafından girilen bir matristen LU- ayrışımı algoritmalarını kullanarak L ve U matrislerini elde eder. Ayrıca elde edilen L ve U matrislerini çarparak kullanıcın girdiği matrisi elde edip kendi sağlamasını yapar.

Ana fonksiyonumuzu tanımladıktan sonra matrisleri oluşturmak için kullanacağımız sayaçları, yardımcı elemanları ve A, L matrislerini maksimum boyutlarıyla tanımladık.

Kullanıcıdan matris boyutunu girmesini istedik ve bu sayıyı size adlı elemana atadık. Daha sonra matrisin elemanlarını satır satır girmesi için for dögüsü yardımıyla kullanıcıya komutlar gönderip girdiği elemanlardan aynı döngü yardımıyla bir A matrisi oluşturduk. Oluşturulan matrisi ekran görüntüsüne veren for döngüsünü yazdık. Böylelikle bütün işlem sonlandığında kullanıcı girdiği matrisi görmüş olacak.

12

Programdan ekran alıntısı 1.:

L ve U matrislerini oluşturmak için kurduğumuz içiçe for döngülerinde L matrisinin

elemanlarını l1 olarak adlandırdığımız eleman yardımıyla oluşturmaya başladık aynı

zamanda U matrisini oluşturmak için A matrisini daha önceden ekrana verdiğimiz için

A matrisini U matrisine dönüştürdük. Böylelikle L ve U matrislerini elde etmiş olduk.

Elde ettiğimiz yeni A matrisi yani U matrisini ekrana veren ve L matrisini ekrana veren for döngülerini yazdık.

Programdan ekran alıntısı 2.:

13

Aynı şekilde L matrisinide ekrana veren döngüyü yazdıktan sonra, LU=A sağlamasını yapan (L matrisi ile U matrisini çarpan) ve sonucu ekrana yazdıran for döngüsünüde yazarak programı tamamladık.

Programdan ekran alıntısı 3.:


Recommended