85
MATLAB UYGULAMALARI Hazırlayan: ARZU ERDEM COġKUN MATLAB UYGULAMALARI DERS NOTU MATEMATĠK BÖLÜMÜ

MATLAB UYGULAMALARI · DERS NOTU MATEMATĠK BÖLÜMÜ ... MERKEZİ SONLU FARK YAKLAŞIMLARI (CENTRAL DIFFERENCE APPROXIMATION) .....64 MERKEZİ OLMAYAN SONLU FARKLAR (NONCENTRAL FINITE

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

MATLAB UYGULAMALARI

Hazırlayan:

ARZU ERDEM COġKUN

MATLAB UYGULAMALARI

DERS NOTU

MATEMATĠK BÖLÜMÜ

İÇİNDEKİLER

BÖLÜM 1 - MATLAB DA BASİT İŞLEMLER .............................................................................................. 3

MATLAB DA VERİLER .............................................................................................................................. 4

MATLABDA OPERATÖRLER ................................................................................................................... 7

ARİTMATİK OPERATÖRLER ................................................................................................................ 7

KARŞILAŞTIRMA VE MANTIKSAL İŞLEMLER ................................................................................ 8

AKIŞ KONTROLLERİ ................................................................................................................................. 9

IF,ELSE,ELSEIF ....................................................................................................................................... 9

SWITCH .................................................................................................................................................. 10

WHILE ..................................................................................................................................................... 10

FOR .......................................................................................................................................................... 11

BREAK .................................................................................................................................................... 11

FONKSİYONLAR ...................................................................................................................................... 11

GRAFİK ÇİZİMİ ......................................................................................................................................... 14

BÖLÜM 2 - LİNEER DENKLEM SİSTEMLERİ .......................................................................................... 20

DİREK YÖNTEMLER ................................................................................................................................ 20

GAUSS ELİMİNASYONU (GAUSS ELIMINATION) ......................................................................... 21

LU AYRIŞIMI (LU DECOMPOSİTİION) ............................................................................................. 23

GAUSS-JORDAN ELİMİNASYONU (GAUSS-JORDAN ELIMINATION) ....................................... 25

İTERATİF YÖNTEMLER .......................................................................................................................... 27

JACOBI ITERASYONU (JACOBI ITERATION) ................................................................................. 28

GAUSS-SEIDEL İTERASYONU (GAUSS-SEIDEL ITERATION) ..................................................... 30

BÖLÜM 3 - İNTERPOLASYON VE EĞRİ UYDURMA .............................................................................. 34

LAGRANGE POLİNOMLARI İLE İNTERPOLASYON (INTERPOLATION BY LAGRANGE

POLYNOMIAL) .......................................................................................................................................... 34

NEWTON POLİNOMLARI İLE İNTERPOLASYON (INTERPOLATION BY NEWTON

POLYNOMIAL) .......................................................................................................................................... 36

KÜBİK SPLİNE (ŞERİTLER) İLE İNTERPOLASYON (INTERPOLATION BY CUBIC SPLINE) ..... 39

EĞRİ UYDURMA ....................................................................................................................................... 42

POLİNOM FONKSİYONLARI İLE EĞRİ UYDURMA (POLYNOMIAL CURVE FIT) ................... 42

EXPONANSİYEL FONKSİYONLARI İLE EĞRİ UYDURMA (EXPONANTIAL CURVE FIT) ..... 46

BÖLÜM 3 - F(X)=0 FORMUNDA LİNEER OLMAYAN DENKLEMLERİN ÇÖZÜMLERİ .................... 50

SABİT NOKTA İTERASYONU (FIXED POINT ITERATION) .............................................................. 50

İKİYE BÖLME YÖNTEMİ (BISECTION METHOD) .............................................................................. 52

REGULA FALSİ YÖNTEMİ (REGULA FALSI – FALSE POSITION METHOD)................................. 55

NEWTON – RHAPSON YÖNTEMİ (NEWTON-RHAPSON METHOD) ............................................... 57

KİRİŞLER YÖNTEMİ (SECANT METHOD) ........................................................................................... 60

DENKLEMLERİN SEMBOLİK ÇÖZÜMLERİ (SYMBOLIC SOLUTION FOR EQUATIONS) ........... 62

BÖLÜM 4. - NÜMERİK DİFERANSİYEL (NUMERICAL DIFFERENTIATION) .................................... 64

MERKEZİ SONLU FARK YAKLAŞIMLARI (CENTRAL DIFFERENCE APPROXIMATION) ......... 64

MERKEZİ OLMAYAN SONLU FARKLAR (NONCENTRAL FINITE DIFFERENCE

APPROXIMATION) ................................................................................................................................... 65

SONLU FARK YAKLAŞIMLARINDAKİ HATALAR (ERRORS IN FINITE DIFFERENCE

APPROXIMATION) ................................................................................................................................... 66

MATLAB DA DİFERANSİYEL KOMUTLARI (DERIVATIVES IN MATLAB) .................................. 68

BÖLÜM 5 - NÜMERİK İNTEGRALLEME (NUMERICAL INTEGRATION) ........................................... 71

YAMUK KURALI (TRAPEZOIDAL RULE) ............................................................................................ 72

SIMPSON KURALI (SIMPSON’S RULE) ................................................................................................ 75

BÖLÜM 6- ADİ DİFERANSİYEL DENKLEMLER (ORDINARY DIFFERENTIAL EQUATION) .......... 78

EULER YÖNTEMİ (EULER’S METHOD) ............................................................................................... 78

RUNGE KUTTA YÖNTEMİ (RUNGE KUTTA METHOD) .................................................................... 80

MATLAB DA ADİ DİFERANSİYEL DENKLEMLER (ORDINARY DIFFERENTIAL EQUATION IN

MATLAB) ................................................................................................................................................... 82

KAYNAKLAR ................................................................................................................................................ 84

BÖLÜM 1 - MATLAB DA BASİT İŞLEMLER

Matlab programında dosyalar *.m uzantılıdır. Eğer yeni bir dosya

oluĢturmak istiyorsanız File/New/M-File seçeneğini seçerek

oluĢturabilirsiniz. Var olan dosyanızı açmak için ise File/Open seçeneğini

seçmelisiniz.

Matlab clear() komutunu çalıĢtırmadığınız müddet içerisinde, programdan

çıkmadığınız zaman dilimi içinde tüm verilerinizi size gösterir. MATLAB da

Veriler

Matlab da değiĢkenler harf ile baĢlamalıdır ve harf duyarlılığı mevcuttur.

Verilerin adlarının uzunluğunda bir kısıtlama mevcut değildir ancak sadece

N karakteri anlamlıdır. Her matlab versiyonunda bu N sayısı değiĢmektedir.

Sizdeki Matlab kurulunda mevcut N sayısını bulmak için “namelengthmax”

komutunu kullanmalısınız. Örneğin

Matlab da ayrıca bazı özel sabitler için tanımlamalar da mevcuttur.

Örnek 1.

MATLAB DA VERİLER

Matlab ın pek çok özelliğinden birisi, skaler de dâhil olmak üzere tüm

verileri vektör ve matris olarak düĢünmesidir. Matlabda veriler Double ve

Single tipi olmak üzere 64 bit ve 32 bit yer kaplayacak Ģekilde depolanırlar.

Örnek 2.

matrislerini oluĢturmak

için aĢağıdaki kodu girmelisiniz.

Matlab da iki türlü veri dosyası mevcuttur. Biri ikili (binary) biçimideki veri

dosyasıdır ve *.mat uzantılıdır. Bu dosyaların içinde birden fazla veri

bulunabilir ve sadece MATLAB programında görebilirsiniz bu verileri. Bir

diğer veri dosyası türü ise ASCII veri dosyasıdır ve *.dat uzantıldırı. Bu

türlü dosyaları baĢka programlar ile paylaĢabilirsiniz ancak sadece bir veri

bulundurur.

Örnek 3. Yukarıdaki örnekte tanımlanan A,B,C verilerini kaydetmek silmek ve

tekrar yüklemek için:

Eğer B vektörünü ASCII veri doyası olarak kaydetmek istiyorsanız:

Eğer B vektörünü yüklemek istiyorsanız:

Verilerin klavye yardımı ile girilmesi için “input” komutu kullanılır.

Verilerin gösterimleri için “format” komutu kullanılmaktadır.

Bazı değiĢken türleri aĢağıdaki gibidir:

Stil Açıklama Örnek

short

(default)

Virgülden sonra 4

basamak

3.1416

long Double değiĢkenlerde virgülden sonra 15

basamak, Single değiĢkenlerde 7 basamak

3.141592653589793

shortE Bilimsel gösterim,

Virgülden sonra 4

basamak

3.1416e+00

longE Bilimsel gösterim,

Double değiĢkenlerde

virgülden sonra 15

basamak, Single

değiĢkenlerde 7

basamak.

3.141592653589793e+00

shortG Toplamda 5

basamak..

3.1416

longG Double değiĢkenlerde

toplamda 15 basamak, Single

değiĢkenlerde 7 basamak

3.14159265358979

shortEng Bilimsel gösterim,

Virgülden sonra 4

3.1416e+000

basamak,

exponansiyel üst 3.

longEng Bilimsel gösterim, Double değiĢkenlerde virgülden sonra 15

basamak, Single değiĢkenlerde 7 basamak,

exponansiyel üst 3.

3.14159265358979e+000

bank Virgülden sonra 2

basamak.

3.14

hex Hexadecimal

gösterim

400921fb54442d18

rat Rasyonel gösterim 355/113

Örnek 4.

Matlab da kullanılan görüntüleme komutları ise “”disp( )” ve „fprintf( )‟

komutlarıdır. Genel kullanım fprintf(formatSpec,A1,...,An) Ģeklindedir.

Burada A1,...,An değiĢkenlerdir.

Matlab Kodu Açıklama Matlab Kodu Açıklama

%c Karakter Tipleri \n Yeni satır

%s String Tipleri \t Tab (boĢluk)

%d Ondalıklı Tam sayı

\b Geri boĢluk

%f Yuvarlanan sayı \r Geri dönüĢ

%e Exponansiyel

ondalık

\f Form geçmiĢi

%x Hex-ondalık %% %

%bx 16 hex-ondalık

basamaklı yuvarlanan sayı

„‟ „

Örnek 5.

A1 = [9.9, 9900];A2 = [8.8, 7.7 ; 8800, 7700]; fprintf('X is %4.2f meters

or %8.3f mm\n' ,A1,A2)

X is 9.90 meters or 9900.000 mm

X is 8.80 meters or 8800.000 mm

X is 7.70 meters or 7700.000 mm

Örnek 6. x = 0:.1:1; A = [x; exp(x)]; fprintf('%6s %12s\n','x','exp(x)'); fprintf(fileID,'%6.2f %12.8f\n',A);

x exp(x) 0.00 1.00000000 0.10 1.10517092 0.20 1.22140276 0.30 1.34985881 0.40 1.49182470 0.50 1.64872127 0.60 1.82211880 0.70 2.01375271 0.80 2.22554093 0.90 2.45960311 1.00 2.71828183

MATLABDA OPERATÖRLER

ARİTMATİK OPERATÖRLER

+ Toplama

- Çıkarma

* Çarpma

^ Kuvvet

/ Sağ Bölme X*A=BX=A/B

\ Sol Bölme A*X=BX=A\B

.* Eleman Elemana Çarpma

./ Eleman Elemana Bölme

.^ Eleman Elemana Kuvvet Alma

Örnek 7.

Örnek 8.

KARŞILAŞTIRMA VE MANTIKSAL İŞLEMLER

< KÜÇÜK

> BÜYÜK

<= KÜÇÜK EġĠT

>= BÜYÜK EġĠT

== EġĠT

~= EġĠT DEĞĠL

& VE

| VEYA

~ DEĞĠL

Örnek 9.

Örnek 10.

AKIŞ KONTROLLERİ

IF,ELSE,ELSEIF

Örnek 11.

SWITCH

Örnek 12.

WHILE

Örnek 13. 1000$ LIK BĠR YATIRIM %6 KAR ORANI ĠLE 10000$ OLMASI

ĠÇĠN KAÇ YIL GEÇMESĠ GEREKMEKTEDĠR?

FOR

Örnek 14.

BREAK

Herhangi bir döngüyü kırmak için kullanılır!

Örnek 15.

FONKSİYONLAR

Genel olarak fonksiyon kullanımı function[outputargs]=function name(input

arguments) komutu ile kullanılır. Fonksiyonlar function_name.m dosyası

olsarak kaydedilmelidir. Bir fonksiyonun içinde baĢka fonksiyon olabilir ki

bunlara alt fonksiyonlar -subfunction – denir. Bir fonksiyon birden fazla

değiĢkene sahip olabilir. Fonksiyonlardaki girdi ve çıktıları nargin nargout ile

bulabilrisiniz.

Örnek 16. ( ) fonksiyonunun köklerini Newton yöntemi ile

bulalım: ( )

( )

Örnek 17. Ayrıca fonksiyon içinde fonksiyon kullanımı da yapabilirsiniz!

Eğer fonksiyon çok komplike değil ise

komutu kullanılır.

Örnek 18.

Matlab da tanımlı fonksiyonlar da mevcuttur.

Fonksiyon Açıklama Fonksiyon Açıklama

cos(x) exp(x)

sin(x) log(x) ( )

tan(x) log10(x)

acos(x) arccos(x) abs(x) Mutlak değer

asin(x) arcsin(x) angle(x) Kompleks sayının

açısı

atan(x) arctan(x) sqrt(x) karekök

cosh(x) real(x) Reel kısım

sinh(x) imag(x) Sanal kısım

tanh(x) conj(x) Kompleks eĢlenik

acosh(x) arccosh(x) round(x) En yakın

tamsayıya yuvarlama

asinh(x) arcsinh(x) fix(x) En yakın

tamsayıya

yukardan yuvarlama

atanh(x) arctanh(x) floor(x) En büyük tamsayı

max maksimum ceil(x) En küçük tamsayı

min minimum sign(x) Pozitif te +1,

negatif te -1

sum toplam mod(y,x)

prod çarpım eval(f) Ġfadenin değeri

norm feval(f,a) Fonksiyonun

değeri

sort Artan sıralama polyval Polinom

fonksiyonlarının değeri

clock ġimdiki an poly Kökleri verilen

polinom

date ġimdiki zaman roots Polinomun kökleri

find Eleman(ları)

bulma

tic Zamanlayıcı

çalıĢtırır

Ġ,j √ toc Zamanlayıcı

durdurur

pi inf

NaN Tanımsız Sayı

GRAFİK ÇİZİMİ

Ġki boyutlu grafik çizimleri için (Kartezyen koordinatta) plot() komutu

kullanılır.

Polar koordinat için ploar() komutu kullanılır.

Ayrıca semilogx(),semilogy(),loglog(),stairs(), stem(), bar()/barh(),ve hist()

gibi konutları da mevcuttur.

Plot komutunda kullanılan bazı grafik çizgilerinin özelliklerini aĢağıdaki

tabloda görebiliriz.

Çizgi Tipi Nokta Tipi Renk

- sürekli . nokta

r-kırmızı m-eflatun

: noktalı

g-yeĢil y-sarı

-- kesikli

b-mavi c-gök mavisi

-. Nokta kesikli

k-siyah

Örnek 19.

Örnek 20. Kayıtlı bir fonksiyonun grafiğini çizmek için

Örnek 21. Polar koordinatlarda kullanımı için

Örnek 22. DeğiĢik grafik çizimlerine örnekler:

3 boyutlu grafik çizimi için plot3(), mesh(), skaler değerli fonksiyonların

grafikleri için contour(). plot3() komutları kullanılır.

Örnek 23. 3 boyutlu grafik çizimi:

BÖLÜM 2 - LİNEER DENKLEM SİSTEMLERİ

Bu bölümde aĢağıdaki denklem sitemlerini çözeceğiz:

Bu denklem sistemini matris formunda da yazarız. Burada

M ile denklem sayısını N ile bilinmeyen sayısını gösterirsek, M ve N nin

durumlarına göre 3 durum mevcuttur.

1. M<N durumu: Eğer denklem sayısı (M), bilinmeyen sayısından (N) az ise

çözüm tek değildir, çok çözüm vardır.

2. M>N durumu: Eğer denklem sayısı (M), bilinmeyen sayısından (N) fazla

ise tüm denklemleri sağlayan çözüm mevcut değildir. Bu yüzden en

küçük kareler yöntemi kullanılır.

3. M=N durumu: Eğer denklem sayısı (M), bilinmeyen sayısına (N) eĢit ise

matrisin determinantı sıfırdan farklı ise (Matris tekil matris değil ise)

Ģeklinde çözüm elde edilir.

Örnek 1.

M=N durumunda 2 türlü çözüm söz konusudur. Bunlardan ilki Direk

yöntemlerdir bir diğeri ise iterasyon yöntemleridir.

DİREK YÖNTEMLER

Direk Yöntemler olarak, 3 yöntem vardır. Burda yöntemlerde amaç matrsilerin

satır sütunlarını değiĢtirerek veya onları belirli sabitler ile çarpıp bölerek elde

edilen matris üzerinden iĢlemler yapılır. Bu yöntemler sırasıyla

1. Gauss Eliminasyonu

2. LU Yöntemi

3. Gauss-Jordan Eliminasyonu

GAUSS ELİMİNASYONU (GAUSS ELIMINATION)

Basitlik için M=N=3 durumunu düĢünelim:

Ġlk önce 2. Ve 3. Denklemlerde terimlerini yok etmek için 1.denlemi

ifadesi ile çarpıp 2.denklem ile toplayacağız ve benzer Ģekilde 1.denlemi

ifadesi ile çarpıp 3.denklem ile toplayacağız. Böylece aĢağıdaki denklemi elde

ederiz:

Burada m,n=1,2,3 için ,

,m,n=2,3. Aynı Ģekilde

3.denklemde terimlerini yok etmek için 2.denlemi

⁄ ifadesi ile çarpıp

3.denklem ile toplayacağız ve

Denklem sistemini elde ederiz. Burada n,m=3 için

ġimdi genel olarak düĢünürsek:

Formülüzasyonunu elde ederiz. Daha sonra çözmek için

Elde ederiz. Sonra 2.denklemde yerine yazarsak

Ve en son da 1.denklemde yerine yazarsak

Elde ederiz. Yine genelleĢtirirsek

Sonucunu elde ederiz.

MATLAB KODU 1.

,

function x=gauss(A,b);

clc;

[n m]=size(A);

x=zeros(m,1);

if size(b)~=[n,1]

disp('Boyut uyuşmaz');

elseif m~=n

disp('Program kare matris içindir!')

else

% elimine işlemi başlasın

for j=1:n-1 % sütunlar

for i=j+1:n % satırlar

if A(i,j)~=0

lambda=A(i,j)/A(j,j);

A(i,j:n)=A(i,j:n)-lambda*A(j,j:n);

b(i)= b(i) - lambda*b(j);

end

end

end

for j=n:-1:1

x(j)=(b(j)-A(j,j+1:n)*x(j+1:n))/A(j,j);

end

end

end

LU AYRIŞIMI (LU DECOMPOSİTİION)

A bir tekil olmayan matris olmak üzere A matrisinin LU çarpımı Ģeklinde

yazabiliriz. Burada L alt üçgensel matris, U ise üst üçgensel matristir. Basitlik

olması açısından 3x3 kare matris düĢünelim:

Buradaki hesaplamalardan ilk satırın eĢitliğinden,

Ġkinci satırların eĢitliğinden

Son satırın eĢitliğinden de

Elde ederiz. Daha sonra da Ax=b denklem sistemi yerine LUx=b denklem sistemi

düĢünülür. Burada Ux=y yazılarak Ly=b denklem sisteminden y bilinmeyenleri

bulunur ve sonra da Ux=y sisteminde x bilinmeyeni iki aĢamalı olarak bulunur.

MATLAB KODU 2.

function [L U]=lu_ayrim(A)

clc;

[n m]=size(A);

if m~=n

disp('Program kare matris içindir!')

else

U=zeros(n);L=eye(n);

U(1,1:n)=A(1,1:n);L(1:n,1)=A(1:n,1)/U(1,1);

for i=2:n

for j=i:n

U(i,j)=A(i,j)-L(i,1:i-1)*U(1:i-1,j);

end

for j=i+1:n

L(j,i)=(A(j,i)-L(j,1:i-1)*U(1:i-1,i))/U(i,i);

end

%L(i+1:n,i)=L(i+1:n,i)/U(i,i);

end

end

function soltion

clc;clear all;warning off;

A=[1 2 5;-1 0 2; 2 1 3];b=[2;0;1];

[L U]=lu_ayrim(A);

[n m]=size(A);y=zeros(n,1);x=zeros(n,1);

for i=1:n

y(i)=b(i)-L(i,1:i-1)*y(1:i-1);

end

for i=n:-1:1

x(i)=(y(i)-U(i,i+1:n)*x(i+1:n))/U(i,i);

end

fprintf('%5s %3s\n','Çözüm','-x-');

fprintf('%12.8f\n',x)

Ayrıca MATLAB ın içinde de LU ayrımı için program vardır. ġimdi bundan biraz

bahsedelim. Bunun için öncelikle P permütasyon matrisini tanımlayalım.

Tanım 1. P permütaston matrisi satırların değiĢtiren bir matristir. Örneğin,

ve permitasyon matrisi için önemli bir özellik matrisin transpozu, matrisin

tersine eĢittir, yani: .

[L,U,P] = lu(A) kodu matlabda P*A = L*U sonucunu verir. Ax=b denklemi yerine

PAx=Pb=b‟ denklemini düĢünelim ve LUx=b‟ denklemini ele alıp yukarıdaki

iĢlemlerin aynısını yaparız.

MATLAB KODU 3.

function lu_matlab_soltion

clc;clear all;warning off;

A=[1 2 5;-1 0 2; 2 1 3];b=[2;0;1];

[L,U,P] = lu(A);b=P*b;

[n m]=size(A);y=zeros(n,1);x=zeros(n,1);

for i=1:n

y(i)=b(i)-L(i,1:i-1)*y(1:i-1);

end

for i=n:-1:1

x(i)=(y(i)-U(i,i+1:n)*x(i+1:n))/U(i,i);

end

fprintf('%5s %3s\n','Çözüm','-x-');

fprintf('%12.8f\n',x)

GAUSS-JORDAN ELİMİNASYONU (GAUSS-JORDAN ELIMINATION)

Gauss-Jordan Eliminasyonunda A matrisi Birim matrise dönüĢtürülecek Ģekilde

iĢlemler uygulanılır. 3x3 matris için Gauss eliminasyonu uygulanarak aĢağıdaki

matris elde edilir:

Son satırda ye bölersek

elde ederiz. Sonrasında 3. satırı

ile çarparak 1.ve 2. Satırlardan çıkartırsak

sonucunu elde ederiz. Tekrar

2.satırı ile bölersek

sonucunu elde ederiz. 2.satırı

ile çarpıp ilk satırdan çıkartırsak

sonucunu elde ederiz. Burada tekrar ilk

satırı ile bölersek

ifadesinde A matrisini birim matrise döndürmüĢ

oluruz. Sağ taraftaki vektörler de çözüm olur.

MATLAB KODU 4.

function gauss_jordan_elimination

clc;clear all;warning off;

A=[1 2 5;-1 0 2; 2 1 3];b=[2;0;1];[n m]=size(A);

A=[A b];%genişletilmiş matris

for j=1:n-1 % sütunlar

for i=j+1:n % satırlar

if A(i,j)~=0

lambda=A(i,j)/A(j,j);

A(i,j:n+1)=A(i,j:n+1)-lambda*A(j,j:n+1);

end

end

A(j,1:n+1)=A(j,1:n+1)/A(j,j);

end

A(n,n:n+1)=A(n,n:n+1)/A(n,n);

for j=n:-1:1

for i=j-1:-1:1

lambda=A(i,j);

A(i,i:n+1)=A(i,i:n+1)-lambda*A(j,i:n+1);

end

end

x=A(:,n+1);

fprintf('%5s %3s\n','Çözüm','-x-');

fprintf('%12.8f\n',x)

İTERATİF YÖNTEMLER

ġu ana kadar direk yöntemlerden bahsettik. Bu yöntemlerin ortak özelliği sonlu

sayıda iĢlem ile çözümü elde etmeleridir.

Ġteratif yöntemler baĢlangıçta verilen tahmini bir çözüm ile baĢlar ve gerçek

çözüme yaklaĢana kadar aynı yötemleri tekrarlar. Zaman zaman iterasyonlar

oldukça çok olmasına bu yöntemlerin rağmen bazı avantajları da mevcuttur.

Bunlardan bir tanesi seyrek matrisler için sadece sıfır olmayan elamanlar ile

iĢlem yapılmasıdır. Ayrıca yuvarlama hataları kendiliğinden telafi edilebilir yani

bir itersyonda mevcut olan iterasyon hatası daha sonraki iterasyonda sıfırlanır.

Tabi bunun yanı sıra iterasyon yöntemleri her zaman yakınsak değildir.

Yakınsaklıktan bahsetmek için matrisin köĢegen baskın olması gerekmektedir.

Ayrıca baĢlangıç iterasyonunun yakınsaklıkta etkisi yoktur. Sadece iterasyon

sayısına etkisi olmaktadır.

JACOBI ITERASYONU (JACOBI ITERATION)

Basitlik açısından yine 3x3 matrisi ele alalım. Örneğin

Sistemi için

Ģeklinde yazarız. Böylece Jacobi iterasyonunu

ile ifade ederiz. Genel anlamda Ax=b formunda verilen

denklem sistemleri için:

Uyarı 1. Yöntemin yakınsak olması için A matrisinin köĢegen baskın olması

gerekmektedir. Yani koĢulu sağlanmalıdır.

MATLAB KODU 5.

function jordan_iterasyonu

clc;clear all;warning off;

A=[4 -1 1;4 -8 1;-2 1 5];b=[7;-21;15];

% A=[4 1 0 0 0 0 0; 1 4 1 0 0 0 0;0 1 4 1 0 0 0; 0 0 1 4 1 0 0; 0 0 0 1

4 1 0; 0 0 0 0 1 4 1 ; 0 0 0 0 0 1 4];

% b=[ 5;6;6;6;6;6;5];

[n m]=size(A);

L=tril(A,-1);U=triu(A,1);D=diag(diag(A)) ;

x0=zeros(n,1);x1=x0;%başlangıç iterasyonu

Nit=1000; % maksimum iterasyon

%%%%1.yol%%%%%

tic

for k=1:Nit

x1=inv(D)*(b-(L+U)*x0);

if norm(x1-x0)<eps

break

else

x0=x1;

if k==Nit

disp('Yakınsak değildir')

end

end

end

toc

fprintf('%5s %3s\n','Çözüm','-x-');

fprintf('%12.8f\n',x1)

fprintf('İterasyon %6.0f\n', k)

x0=zeros(n,1);x2=x0;%başlangıç iterasyonu

%%%%2.yol%%%%%

tic

for k=1:Nit

for i=1:n

x2(i)=(b(i)-A(i,1:i-1)*x0(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);

end

if norm(x2-x0)<eps

break

else

x0=x2;

if k==Nit

disp('Yakınsak değildir')

end

end

end

toc

fprintf('%5s %3s\n','Çözüm','-x-');

fprintf('%12.8f\n',x2)

fprintf('İterasyon %6.0f\n', k)

Elapsed time is 0.193913 seconds.

Çözüm -x-

2.00000000

4.00000000

3.00000000

İterasyon 35

Elapsed time is 0.002244 seconds.

Çözüm -x-

2.00000000

4.00000000

3.00000000

İterasyon 35

GAUSS-SEIDEL İTERASYONU (GAUSS-SEIDEL ITERATION)

Basitlik açısından yine 3x3 matrisi ele alalım. Örneğin

Sistemi için

Ģeklinde yazarız. Böylece Gauss-Seidel iterasyonunu

Ģeklinde ifade edilir. Genel anlamda

Ax=b formunda verilen denklem sistemleri için:

veya

, ile ifade edilir.

MATLAB KODU 6.

function gauss_seidel_iterasyonu

clc;clear all;warning off;

A=[4 -1 1;4 -8 1;-2 1 5];b=[7;-21;15];

% A=[4 1 0 0 0 0 0; 1 4 1 0 0 0 0;0 1 4 1 0 0 0; 0 0 1 4 1 0 0; 0

0 0 1 4 1 0; 0 0 0 0 1 4 1 ; 0 0 0 0 0 1 4];

% b=[ 5;6;6;6;6;6;5];

[n m]=size(A);

L=tril(A,-1);U=triu(A,1);D=diag(diag(A)) ;

x0=zeros(n,1);x1=x0;%başlangıç iterasyonu

Nit=1000; % maksimum iterasyon

%%%%1.yol%%%%%

tic

for k=1:Nit

x1=inv(D)*(b-L*x1-U*x0);

if norm(x1-x0)<eps

break

else

x0=x1;

if k==Nit

disp('Yakınsak değildir')

end

end

end

toc

fprintf('%5s %3s\n','Çözüm','-x-');

fprintf('%12.8f\n',x1)

fprintf('İterasyon %6.0f\n', k)

x0=zeros(n,1);x2=x0;%başlangıç iterasyonu

%%%%2.yol%%%%%

tic

for k=1:Nit

for i=1:n

x2(i)=(b(i)-A(i,1:i-1)*x2(1:i-1)-

A(i,i+1:n)*x0(i+1:n))/A(i,i);

end

if norm(x2-x0)<eps

break

else

x0=x2;

if k==Nit

disp('Yakınsak değildir')

end

end

end

toc

fprintf('%5s %3s\n','Çözüm','-x-');

fprintf('%12.8f\n',x2)

fprintf('İterasyon %6.0f\n', k)

Elapsed time is 0.001566 seconds.

Çözüm -x-

2.00000000

4.00000000

3.00000000

Ġterasyon 35

Elapsed time is 0.001321 seconds.

Çözüm -x-

2.00000000

4.00000000

3.00000000

Ġterasyon 19

BÖLÜM 3 - İNTERPOLASYON VE EĞRİ UYDURMA

Bu bölümde interpolasyon ve eğri

uydurma konu baĢlıklarını

irdeleyeceğiz. Ġnterpolasyon ayrık

noktalarda tanımlanan bir veriyi

bağlantı kurararak verilen noktaların

arasında bir noktadaki değerinin

bulunmasına olanak sağlayacaktır.

Bunun yanı sıra eğri uydurmada ise,

verilen veriler doğrultusunda en iyi

eğriyi bulmayı sağlayacaktır. Eğri

uydurmada bulunan grafik, verilen

verile üzerinden geçmek zorunda değildir.

LAGRANGE POLİNOMLARI İLE İNTERPOLASYON (INTERPOLATION BY LAGRANGE POLYNOMIAL)

, N+1 adet verilen nokta olsun. Bu noktalardan

geçen N.dereceden polinomu Ģeklinde

yazarız. Katsayıları bulmak için noktalardan geçtiği bildiğimizden,

(N+1)x(N+1) denklem sistemini elde ederiz. Noktalar çoğaldıkça denklem

sisteminde bilinmeyenler ve denklemler artacağı için katsayıları bulmak her

zaman kolay olmayacaktır. Bu yüzden katsayılarını

bulmak için Lagrange polinomları adı verilen alternatif bir yol vereceğiz:

,

Burada ve ( ) {

koĢulu

sağlanmaktadır. Örneğin aĢağıda ile 3 noktalı

interpolasyon yapılmıĢtır.

MATLAB KODU 1.

function lagrange_polinom

clc;clear all;

%Giriş:x=[x0 x1...xN], y = [y0 y1 ... yN]

%Çıktılar: l = N.dereceden Lagrange polinom

% L = Lagrange polinom katsayısı

xk = [-2 -1 1 2]; yk = [-6 0 0 6]; % noktalar

n=length(xk);

x=[-2:0.1:2];L=ones(length(x));

for i=1:n

for j=1:n

if i~=j

L(i,:)=L(i,:).*(x-xk(j))/(xk(i)-xk(j));

end

end

end

y=0;

for i=1:n

y=y+yk(i)*L(i,:);

end

plot(xk,yk,'*r',x,y,'k')

NEWTON POLİNOMLARI İLE İNTERPOLASYON (INTERPOLATION BY NEWTON POLYNOMIAL)

noktaları verilen Newton polinomları

N.derecedendir ve her polinom bir önceki polinom cinsinden yazılabilir. Lagrange

polinomlaronda ise iki polinom arasında bir bağlantı kurulamaz.

,

Olarak verilir. Burada katsayıları aĢağıdaki Ģekilde hesaplanır:

Tekrar 2.dereceden polinomu yazarsak ve noktadaki değerini yerine koyarsak,

Ve bu iĢlemi genelleĢtirirsek,

sonucunu elde ederiz.

Bunu tablo halinde aĢağıdaki Ģekilde gösteririz:

MATLAB KODU 2.

function newton_polinom

clc;clear all;

%Giriş:x=[x0 x1...xN], y = [y0 y1 ... yN]

%Çıktılar: l = N.dereceden Newton polinom

xk = [-2 -1 1 2]; yk = [-6 0 0 6]; % noktalar

n=length(xk);

Df(:,1)=(yk(2:n)-yk(1:n-1))./(xk(2:n)-xk(1:n-1));

for i=2:n-1

Df(1:n-i,i)=(Df(2:n-i+1,i-1)-Df(1:n-i,i-1))'./((xk(2+i-1:n)-xk(1:n-

i)));

end

a(1)=yk(1);a(2:n)=Df(1,1:n-1);

x=[-2:0.1:2];nx=length(x);

Newton(1,1:nx)=a(1)*ones(1,nx);

for i=2:n

c=1;

for j=1:i-1

c=c.*(x-xk(j));

end

Newton(i,1:nx)=Newton(i-1,1:nx)+a(i)*c;

end

save ('newton_polinom.mat','Newton','xk','yk','x')

plot(xk,yk,'*r',x,Newton(n,:),'k')

KÜBİK SPLİNE (ŞERİTLER) İLE İNTERPOLASYON

(INTERPOLATION BY CUBIC SPLINE)

Eğer N+1 verilen nokta için Lagrange veya Newton interpolasyonu ile bir polinom

yazarsak N. Dereceden bir polinom elde ederiz ve bu da N-1 lokal maksimum

veya minimum noktası olması demektir. Bu ise N-1 adet salınım demektir ve

polinom kıvrımları (polynomial wiggle) olarak adlandırılır. Ve ayrıca nokta sayısı

arttıkça bu salınım da artmaktadır. Bu varsayımdan yola çıkarak verilen noktalar

arasında polinom oluĢturma fikri doğmuĢtur. Ġki nokta arasını lineer doğrular ile

birleĢtirebiliriz ancak bu pürüzsüz bir eğri oluĢturmaz. Ġki nokta arasında 2.

Dereceden bir polinom da oluĢturabiliriz ancak bitiĢik iki aralıktaki polinomunu

2. türevi eĢit olmayabilir. Ve uygulamalarda, örneğin bilgisayar destekli

dizaynlarda (computer aidede design), bilgisayar destekli imalatlarda (computer

design manufacturing), bilgisayar grafikleme, robot yörünge planlaması gibi, 2.

türevin sürekliliği talep edilmektedir. Bu yüzden de her bir aralıkta 3. Dereceden

polinomlar oluĢturulmaktadır ve bunlara kübik Ģeritler veya kübik spline

denilmektedir.

Bunun için aĢağıdaki yöntemler uygulanır:

1. noktalarının her bir alt aralığında oluĢturulan polinomu

kübik polinomdur.

2. Ve sonunda elde edilen fonksiyon tüm k+1 noktasından

geçmektedir.

3. Her bir parçalı kübik polinomunu kendisinin, türevinin ve 2. Türevinin

sürekliliği talep edil mektedir.:

4. Üç noktalarda 2. Türev sıfır olduğu kabul edilir:

Tüm bu koĢullar ile birlikte her bir kübik polinomda 4 katsayı mevcuttur ve bu

Ģekilde k adet polinom olması sebebi ile 4k bilinmeyen mevcuttur. Her aralıkta

süreklilikten 2k denklem ve iç noktalardaki türevlerin sürekliliğinden de 2(k-1)

denklem ve üç noktalardaki 2.türevin sıfır olmasından da 2 koĢul yani 2 denklem

ile birlikte 4k toplam denklem elde edilir. Ve sonuç olarak 4k bilinmeyenli 4k

denklemden oluĢan bir sistem elde edilir kübik spline deki katsayıları bulmak

için ve bu sistem

ġeklinde olup

Verilenleri ile birlikte vektörü bulunur. Burada olarak

doğal kübik spline formatındadır. Daha sonra bulunan z vektörü ile

Kübik spline oluĢturulur. Burada sistemin oluĢturulduğu adımları detaylı bir

Ģekilde incelemek isterseniz APPLIED NUMERICAL METHODS USING MATLAB,

Won Y. Yang, Wenwu Cao, Tae S. Chung, John Morris, 2005 kitabının 133-136

sayfalarını incelemeniz önerilir.

MATLAB kendi içinde verilen noktalar için “spline(x,Y,xx)” komutu ile bu

denklem sistemini adım adım oluĢturarak çözmektedir.

MATLAB KODU 3.

function matlab_spline

clc;clear all;

%Giriş:x=[x0 x1...xN], y = [y0 y1 ... yN]

x = 0:10;% verilen noktalar

y = sin(x);

xx = 0:.25:10;

yy = spline(x,y,xx);

plot(x,y,'*r',xx,yy,'k')

title('Kübik Spline')

EĞRİ UYDURMA

Eğer deneysel sonuçlar ile elde edilen verilerimiz mevcut ise bu verilerin ölçüm

hatalarını barındırması çok normaldir. Eğri uydurmadaki asıl amaç verilen bu

noktalara ortalama olarak yakın bir eğri çizebilmektir. Tabi en yakın sorusu bize

en yakın eğriyi nasıl bulabiliriz sorusunu da beraberinde getirmektedir.

POLİNOM FONKSİYONLARI İLE EĞRİ UYDURMA (POLYNOMIAL CURVE FIT)

1.dereceden polinom (doğru) ile eğri

uydurmak için :

( ) fonksiyonu olsun. Buna

göre a,b katsayılarını bulmak için

Ve bunu

[

] [ ] [

] olmak üzere Au=y sisteminin çözülmesi

gerekmektedir. Tabi bilinmeyen sayısı 2, denklem sayısı n>2 olduğundan çözüm

için en küçük kareler (least squares method) yöntemi kullanılmalıdır. Sistemi ise

( )

ġeklinde çözülür veya

( ) ∑( )

Fonksiyonunun minimum olması ile mümkündür

Her iki denklemi de 2n ile bölüp tekrar düzenlersek

Denklem sistemini elde ederiz. Burada

. Denklem sistemi 2 denklem 2

bilinmeyen olması sebebi ile tektir ve

formülleri

ile bulunur. Bu ifadede pay ve paydanın oldukça birbirine yakın olması

durumunda hata oranı fazla olabilir bu yüzden bu ifadeye denk olarak

Kullanılır. Bu durumu genelleĢtirirsek, en küçük kareler ile uydurulan eğir

lineer formda yani

Olarak verilsin. Burada fonksiyonları temel fonksiyonlardır. Yukarıdaki

gibi en küçük kareler yöntemini

Olarak tanımlanır ve çözüm bu fonksiyonun minimum olması ile elde edilir.

Böylece

denklem sistemini elde edieriz. -2 ye bölüp denklem sistemini tekrar yazarsak,

bu da ,

matris formunda verilen denklem sistemi demektir. By

denkleme normal denklemi de denir ve burada

.

Bu genel bilgiden sonra m-1. Dereceden polinom ile uydurma için

olsun.

de temel fonksiyonlardır. Buna göre yukarıdaki iĢlemlerden

veya

Olarak yazılır. Benzer Ģekilde en küçük kareler yönteminde doğruluğun yeterli

olmaması durumunda W ile gösterilen ve etki matrisi adı verilen bir matris ile

çarpılarak

fonksiyonunun minimum olması hedeflenir. MATLAB da polinom ile eğri

uydurma “polyfit(x,y,n)” komutudur. Burada (x(i),y(i)) noktalarından geçen n.

dereceden bir polinom elde edilir.

MATLAB KODU 4.

function polyfit_matlab

clc;clear all;

%Giriş:x=[x0 x1...xN], y = [y0 y1 ... yN]

x=[-3:3]';xx=[-3:0.1:3]';

y=[-0.2774 0.8958 -1.5651 3.4565 3.0601 4.8568 3.8982]';

p1=polyfit(x,y,1);f1=polyval(p1,xx);

p3=polyfit(x,y,3);f3=polyval(p3,xx);

p5=polyfit(x,y,5);f5=polyval(p5,xx);

p7=polyfit(x,y,7);f7=polyval(p7,xx);

p9=polyfit(x,y,9);f9=polyval(p9,xx);

p11=polyfit(x,y,11);f11=polyval(p11,xx);

subplot(3,2,1)

plot(x,y,'*r',xx,f1,'k');title('1.dereceden polinom uydurma')

subplot(3,2,2)

plot(x,y,'*r',xx,f3,'k');title('3.dereceden polinom uydurma')

subplot(3,2,3)

plot(x,y,'*r',xx,f5,'k');title('5.dereceden polinom uydurma')

subplot(3,2,4)

plot(x,y,'*r',xx,f7,'k');title('7.dereceden polinom uydurma')

subplot(3,2,5)

plot(x,y,'*r',xx,f9,'k');title('9.dereceden polinom uydurma')

subplot(3,2,6)

plot(x,y,'*r',xx,f11,'k');title('11.dereceden polinom uydurma')

Warning: Polynomial is not unique; degree >= number of data points.

Warning: Polynomial is not unique; degree >= number of data points.

Warning: Polynomial is not unique; degree >= number of data points.

EXPONANSİYEL FONKSİYONLARI İLE EĞRİ UYDURMA (EXPONANTIAL CURVE FIT)

Eğri uydurulan fonksiyon Ģeklinde olsun. Eğer her iki

taraftan ln alırsak fonksiyon da lineer eğri uydurma haline gelir.

Böylece noktalarından geçen F(x) fonksiyonu ile lineer eğriyi

uyduracağız.

kalan terimi ile

kalan terimi aynıdır.

Alıştırma 1. AĢağıdaki değerler için exponansiyel eğri uydurunuz.

Öncelikle eğri Ģeklinde olduğundan bunu lineerleĢtirelim ve her

iki taraftan ln ifadesini uygulayalım: . Burada lineer

polinomdaki ln(a) ve b katsayılarını bulmalıyız. Böylece yeni veriler

Polyfit kodunu uyguladıktan sonra ifadesinde yazarak

eğrisini buluruz.

MATLAB KODU 5.

function polyfit_matlab_nl

clc;clear all;

%Giriş:x=[x0 x1...xN], y = [y0 y1 ... yN]

% lineer olmayan eğri uydurma.

% bu örnekte exponansiyel eğri uydurma yapılmıştır.

x=[1.2 2.8 4.3 5.4 6.8 7.9]';xx=[1.2:0.1:7.9]';

y=[7.5 16.1 38.9 67.0 146.6 266.2]';

lny=log(y);

p1=polyfit(x,lny,1); % şu anda b ve lna sayıları bulundu.

a=exp(p1(2));b=p1(1);f=a*exp(b*xx);

plot(x,y,'or',xx,f,'k');title('exponansiyel fonksiyon ile eğri

uydurma')

AĢağıdaki tabloda bazı lineer olmayan eğriler için lineerleĢtilmiĢ eğriler ve değiĢen

parametreler verilmiĢtir.

BÖLÜM 3 - F(X)=0 FORMUNDA LİNEER OLMAYAN

DENKLEMLERİN ÇÖZÜMLERİ

f(x)=0 denkleminin çözümüne, denklemin kökleri veya fonksiyonun sıfırları denir.

Bir denklemin bir yada birden fazla kökü olabildiği gibi hiç kökü de yoktur.

Örneğin denkleminin bir tek x=0 kökü varken,

denkleminin Ģeklinde

sonsuz kökü vardır. Bu bölümde denklemin kökünün bulunması için yöntemler

verilip MATLAB kodu yazılacaktır.

SABİT NOKTA İTERASYONU (FIXED POINT ITERATION)

Eğer g(x) fonksiyonu ve g‟(x) fonksiyonu sürekli ve |g‟(x)|<1 ise x=g(x)

denkleminin bir tek çözümü vardır ve çözüm iterasyon

yöntemi ile elde edilir.

Yakınsaklık: durumu

Iraksak:

Yakınsaklık

durumu

Iraksaklık: durumu

Alıştırma 1. denkleminin kökünü [0,1] aralığında bulacak Ģekilde

sabit nokta iterasyonunu MATLAB kodunu yazınız.

MATLAB KODU 1.

function sabit_nokta

clc;clear all;

%x=2^(-x), [0,1]

xx=linspace(0,1,100);

gx=2.^(-xx);

x0=0;

plot(x0,0,'or');hold on;

x1=2^(-x0);plot(x1,0,'or');line([x0 x0],[0,x1],[1

1],'Marker','*','LineStyle','-','Color','m');hold on;it=1;

while abs(x1-x0)>eps

x0=x1;

x1=2^(-x0);

plot(x1,0,'or');line([x0 x0],[0,x1],[1

1],'Marker','*','LineStyle','-','Color','m');hold on;

it=it+1;

end

plot(xx,xx,xx,gx);xlabel('x');ylabel('y');title(['g(x)=2^{-x} eğrisi ile

f(x)=x doğrusunun kesim noktası ',num2str(x1)])

fprintf('g(x)=2^{-x} eğrisi ile f(x)=x doğrusunun kesim noktası %6.4f dir ve iterasyon %6.4f

dir',x1,it)

save ('sabit_nokta.mat','it','x1','x0')

g(x)=2^{-x} eğrisi ile f(x)=x doğrusunun kesim noktası 0.6412 dir ve iterasyon 46.0000 dir

İKİYE BÖLME YÖNTEMİ (BISECTION METHOD)

Eğer f(x)=0 denkleminin (a,b) aralığında kökü olması için f(a).f(b)<0 koĢulu

sağlanması gerekmektedir.

Yöntem için adımlar aĢağıdaki gibidir:

Algoritma

1.Adım: i=1 olarak belirle

2.Adım: m=(a+b)/2

3.Adım: Eğer f(m)<eps veya |b-a|/2<eps ise m çözümdür ve programdan çık

4.Adım: Eğer f(a)f(m)<0 ise bm olarak belirle, Eğer f(m)f(b)<0 ise am olarak

belirle

5.Adım ii+1 olarak belirle ve 2.Adıma dön

Alıştırma 2. fonksiyonunun (0.6,0.8)

aralığındaki kökünü Ġkiye bölme yöntemi ile MATLAB programında yazınız.

MATLAB KODU 2.

function ikiye_bolme

%bisection method

clc;clear all;

a=0.6;b=0.8;x=[a:0.01:b];y=f(x);it=1;

if f(a)*f(b)>0

fprintf('x^3-10*x^2+5 fonksiyonunun (%4.2f,%4.2f) aralığında kökü

yoktur',a,b)

else

m=(a+b)/2;

while (abs(f(m))>eps) & ((b-a)/2>eps)

plot(a,0,'or');line([a a],[0,f(a)],[1

1],'Marker','*','LineStyle','-','Color','m');hold on;

plot(b,0,'or');line([b b],[0,f(b)],[1

1],'Marker','*','LineStyle','-','Color','m');hold on;

it=it+1;

if f(a)*f(m)<0

b=m;

elseif f(m)*f(b)<0

a=m;

end

m=(a+b)/2;

end

end

plot(x,y);xlabel('x');ylabel('y');title(['x^3-10*x^2+5=0 denklemini kökü

',num2str(m)])

grid on

fprintf('x^3-10x^2+5=0 denkleminin kökü %6.4f dir ve iterasyon %6.4f

dir',m,it)

function y=f(x);

y=x.^3-10*x.^2+5;

x^3-10x^2+5=0 denkleminin kökü 0.7346 dir ve iterasyon 50.0000 dir

REGULA FALSİ YÖNTEMİ (REGULA FALSI – FALSE POSITION METHOD)

Eğer f(x)=0 denkleminin (a,b) aralığında kökü olması için f(a).f(b)<0 koĢulu

sağlanması gerekmektedir.

Yöntem için adımlar aĢağıdaki gibidir:

Algoritma

1.Adım: i=1 olarak belirle

2.Adım:

3.Adım: Eğer f(x*)<eps veya |b-a|/2<eps ise x* çözümdür ve programdan çık

4.Adım: Eğer f(a)f(x*)<0 ise bx* olarak belirle, Eğer f(x*)f(b)<0 ise ax* olarak

belirle

5.Adım ii+1 olarak belirle ve 2.Adıma dön

Alıştırma 3. fonksiyonunun (1.6,3) aralığındaki kökünü

Regula Falsi yöntemi ile MATLAB programında yazınız.

MATLAB KODU 3.

function regula_falsi

%regula_falsi method

clc;clear all;

a=1.6;b=3;x=[a:0.01:b];y=f(x);it=1;

if f(a)*f(b)>0

fprintf('(tan(\pi-x)-x=0) denkleminin (%4.2f,%4.2f) aralığında kökü

yoktur',a,b)

else

m=(a*f(b)-b*f(a))/(f(b)-f(a));

while abs(f(m))>0.001

line([a b],[f(a) f(b)],[1 1],'Marker','*','LineStyle','-

','Color','m');hold on;

it=it+1;

if f(a)*f(m)<0

b=m;

elseif f(m)*f(b)<0

a=m;

end

m=(a*f(b)-b*f(a))/(f(b)-f(a));

end

plot(x,y);xlabel('x');ylabel('y');title(['tan(\pi-x)-x=0 denklemini

kökü ',num2str(m)])

grid on

fprintf('tan(pi-x)-x=0 denkleminin kökü %6.4f dir ve iterasyon %6.4f

dir',m,it)

end

function y=f(x)

y=tan(pi-x)-x;

tan(pi-x)-x=0 denkleminin kökü 2.0289 dir ve iterasyon 100.0000 dir

NEWTON – RHAPSON YÖNTEMİ (NEWTON-RHAPSON METHOD)

Kök bulma algoritmalarından en ünlüsü Newton-Rhapson yöntemidir. Çözüme

çok hızlı yakınsayan basit bir programdır. Bu yöntem hem fonksiyonun kendisini

hemde türevini içerir. Yöntem aĢağıdaki iterasyon ile sonraki noktayı bulmayı

hedefler:

Yöntem için adımlar aĢağıdaki gibidir:

Algoritma

1.Adım: i=1 olarak belirle. Eğer ise programı durdur ve hata mesajı ver.

2.Adım:

3.Adım: Eğer f(xi+1)<eps ise xi+1 çözümdür ve programdan çık

4.Adım ii+1 olarak belirle ve 2.Adıma dön

Alıştırma 4. fonksiyonunun (1.6,3) aralığındaki kökünü

Newton-Rhapson yöntemi ile MATLAB programında yazınız.

MATLAB KODU 4.

function newton_rhapson

%newton_rhapson method

clc;clear all;

a=1.6;b=3;xx=[a:0.01:b];y=f(xx);it=1;x(it)=a;

while abs(f(x(it)))>eps

if abs(df(x(it)))<eps

disp('Program türev sıfır durumunda hesaplanamaz!')

break;

else

line([x(it) x(it)-f(x(it))/df(x(it))],[f(x(it)),0],[1

1],'Marker','*','LineStyle','-','Color','m');hold on;

x(it+1)=x(it)-f(x(it))/df(x(it));

it=it+1;

end

end

plot(xx,y);xlabel('x');ylabel('y');title(['tan(\pi-x)-x=0

denklemini kökü ',num2str(x(it))])

grid on

fprintf('tan(pi-x)-x=0 denkleminin kökü %6.4f dir ve iterasyon

%6.4f dir',x(it),it)

function y=f(x)

y=tan(pi-x)-x;

function y=df(x)

y=-(1+(tan(pi-x)).^2)-1;

tan(pi-x)-x=0 denkleminin kökü 2.0288 dir ve iterasyon 10.0000 dir

KİRİŞLER YÖNTEMİ (SECANT METHOD)

KiriĢler yöntemi Newton-Rhapson yöntemindeki türevin sonlu fark yaklaĢımı

yazılması ile elde edilir. Newton rhapson yönteminde türev yerine

yazılarak iterasyonu

Olarak yazarız.

Yöntem için adımlar aĢağıdaki gibidir:

Algoritma

1.Adım: i=1 olarak belirle.

2.Adım:

3.Adım: Eğer f(xi+1)<eps ise xi+1 çözümdür ve programdan çık

4.Adım ii+1 olarak belirle ve 2.Adıma dön

Alıştırma 5. fonksiyonunun x0=-2.6, x1=-2.4 vererek

kökünü KiriĢler yöntemi ile MATLAB programında yazınız.

MATLAB KODU 5.

function kirisler_yontemi

clc;clear all;

it=1;x(it)=-2.6;it=it+1;x(it)=-2.4;

xx=[x(1):0.01:-1.98];y=f(xx);

while abs(f(x(it)))>0.001

x(it+1)=(x(it-1)*f(x(it))-x(it)*f(x(it-1)))/(f(x(it))-f(x(it-1)));

line([x(it-1) x(it+1)],[f(x(it-1)),f(x(it+1))],[1

1],'Marker','*','LineStyle','-','Color','m');hold on;

it=it+1;

end

plot(xx,y);xlabel('x');ylabel('y');title(['x.^3-3*x+2=0 denklemini kökü

',num2str(x(it))])

grid on

fprintf('x.^3-3*x+2=0 denkleminin kökü %6.4f dir ve iterasyon %6.4f

dir',x(it),it)

function y=f(x);

y=x.^3-3*x+2;

x.^3-3*x+2=0 denkleminin kökü -2.0000 dir ve iterasyon 6.0000 dir

DENKLEMLERİN SEMBOLİK ÇÖZÜMLERİ (SYMBOLIC SOLUTION FOR EQUATIONS)

MATLAB da solve() komutu denklemlerin sembolik veya nümerik köklerini

bulmak için kullanılır.

MATLAB KODU 6.

BÖLÜM 4. - NÜMERİK DİFERANSİYEL (NUMERICAL

DIFFERENTIATION)

Nümerik diferansiyelleme f(x) fonksiyonunun herhangi bir x=a noktasındaki

türevinin, verilen ayrık noktaları yardımı ile

hesaplanmasıdır. Fonksiyonun sonlu fark türev yaklaĢımları için Taylor

serisinden faydalanılır.

Buradan yukarıdaki denklemleri topladığımız ve çıkardığımızda aĢağıdaki

ifadeleri elde ederiz:

MERKEZİ SONLU FARK YAKLAŞIMLARI (CENTRAL DIFFERENCE APPROXIMATION)

(f) denkleminden

elde ederiz. Böylece sağ taraftaki ilk terimi tutarsak fonksiyonun 1. Türevinin

merkezi sonlu fark yaklaĢımı

ile ifade edilir. (e) denkleminden ise 2.türevin merkezi sonlu fark yaklaĢımı

veya

ile

ifade edilir. (f) ve (h) denklemlerinde 1.türevi elimine edersek 3.türev yaklaĢımını

olarak buluruz ve aynı Ģekilde (e) ve (g) denklemlerinde 2.türevi elimine edersek

4.türev yaklaĢımını

olarak elde ederiz.

MERKEZİ OLMAYAN SONLU FARKLAR (NONCENTRAL FINITE DIFFERENCE APPROXIMATION)

Burada tek yönlü türevlerden bahsedeceğiz ve bu ifadeler ileri ve geri sonlu fark

yaklaĢımları (forward and backward finite difference approximations) olarak

adlandırılır. (a) denkleminden

elde ederiz veya sadece sağ taraftaki ilk terimi yazarsak

ileri fark yaklaĢımını elde

ederiz. Benzer Ģekilde (b) denkleminden de

geri fark yaklaĢımını elde ederiz.

Tabi burdaki O(h) kesme hatası merkezi farkta ki O(h^2) kadar iyi değildir. (a) ve

(c) denklemlerinden 2.türev sonlu fark yaklaĢımı

olarak

bulunur.

ġimdi merkezi olmayan 1.türev yaklaĢımındaki yuvarlama hatasını daha iyi hale

getirelim.(a) ve (c) denklemlerinde yani

denklemlerinde 2.türevi elimine edersek,

sonucunu elde ederiz böylece daha iyi bir kesme hatası içeren 1.türev merkezi

olmayan sonlu fark yaklaĢımı

= ile ifade

edilir.

SONLU FARK YAKLAŞIMLARINDAKİ HATALAR (ERRORS IN FINITE DIFFERENCE APPROXIMATION)

Bütün sonlu fark yaklaĢımlarının katsayıları toplamı sıfırdır. Yuvarlama hatları

böylece kaçınılmazdır. Yeterince küçük h değeri için

birbirine çok yakındır. Böylece sonlu fark

yaklaĢımlarındaki katsayılar ile çarpılıp toplandığında bazı terimler kaybolur.

Diğer yandan h yeterince büyük olduğunda ise kesme hatası oldukça büyük

olmaktadır. Bu durumdan kurtulmak için aĢağıdaki durumları takip ederiz.

1. Çift haneli hassaslıkta hesaplamalar kullanın

2. En az kararlılığına sahip sonlu fark yaklaĢımlarını tercih

etmelisiniz.

Alıştırma 1. fonksiyonun x=1 noktasında 2.türevini sonlu fark

yaklaĢımı ile MATLAB da hesaplayınız.

MATLAB KODU 1.

function turev_sonlu_fark

clc;clear all;

% ikinci türev yaklaşımı farklı h adımları içinh

h(1)=0.64;x=1;y2turev(1)=(f(x+h(1))-2*f(x)+f(x-h(1)))/h(1)^2;

fprintf('%6s | %17s | %17s | \n','h','6 haneli yaklaşım', '8 haneli

yaklaşım')

fprintf('__________________________________________________ \n')

fprintf('%6.5f | %7.6f \t \t \t| %9.8f \t \t

|\n',h(1),y2turev(1),y2turev(1))

for i=2:10

h(i)=h(i-1)/2;

y2turev(i)=(f(x+h(i))-2*f(x)+f(x-h(i)))/h(i)^2;

fprintf('__________________________________________________ \n')

fprintf('%6.5f | %7.6f \t \t \t| %9.8f \t \t

|\n',h(i),y2turev(i),y2turev(i))

end

function y=f(x);

y=exp(-x);

h | 6 haneli yaklaşım | 8 haneli yaklaşım |

__________________________________________________

0.64000 | 0.380609 | 0.38060910 |

__________________________________________________

0.32000 | 0.371029 | 0.37102941 |

__________________________________________________

0.16000 | 0.368665 | 0.36866492 |

__________________________________________________

0.08000 | 0.368076 | 0.36807569 |

__________________________________________________

0.04000 | 0.367928 | 0.36792849 |

__________________________________________________

0.02000 | 0.367892 | 0.36789170 |

__________________________________________________

0.01000 | 0.367883 | 0.36788251 |

__________________________________________________

0.00500 | 0.367880 | 0.36788021 |

__________________________________________________

0.00250 | 0.367880 | 0.36787963 |

__________________________________________________

0.00125 | 0.367879 | 0.36787949 |

MATLAB DA DİFERANSİYEL KOMUTLARI (DERIVATIVES IN MATLAB)

MATLAB da diferansiyel diff() komutu ile uygulanılır. diff komutu iki vektörün

farkını alabildiği gibi aynı zamanda fonksiyonun sembol olarak yazılması

durumunda türevi de hesaplayabilir. Ancak noktaları verilen analitik ifadesi

verilmeyen fonksiyonlar için yine de diff komutu ile sonlu fark yaklaĢım

yöntemleri ile hesaplamalar yapılır.

MATLAB KODU 2.

function matlab_turev

% MATLAB da diff komutu ile türev

clc;clear all;

syms x y

f=exp(-x);g=sin(x)*exp(-pi*y^2);

fx=diff(f,x);gx=diff(g,x);gy=diff(g,y);

xx=linspace(0,1,50);yy=xx;

[X Y]=meshgrid(xx,yy);

fi=inline(f);fxi=inline(fx);gi=inline(g);gxi=inline(gx);gyi=inline(gy);

figure

plot(xx,fi(xx),xx,fxi(xx),'r')

legend('f(x)=exp(-x)','df/dx=-exp(-x)');

title('f(x) fonksiyonu ve türevinin grafiği')

figure('Renderer', 'painters', 'Position', [10 10 900 600])

subplot(1,3,1)

mesh(X,Y,gi(X,Y));title('g(x,y)=sin(x)*exp(-pi*y^2) fonksiyonu');

subplot(1,3,2)

mesh(X,Y,gxi(X,Y));title('g_x(x,y)=cos(x)*exp(-pi*y^2) fonksiyonu');

subplot(1,3,3)

mesh(X,Y,gyi(X,Y));title('g_y(x,y)=-2*pi*y*sin(x)*exp(-pi*y^2)

fonksiyonu');

Ayrıca komutu verilen h adımı ve y noktaları

için dy/dx türevini hesaplar ve komutu da yine

verilen h adımı ve y noktaları için 2.türevi hesaplar.

BÖLÜM 5 - NÜMERİK İNTEGRALLEME (NUMERICAL

INTEGRATION)

Bu bölümde integraline nümerik olarak elde etme

yöntemlerini ele alacağız. Gerçekte nümerik integral, nümerik diferansiyelden

daha kesin bir değere sahiptir. Bu yöntemler temelde 2 ye ayrılır. Birincisi

Newton-Cotes formülleri ve Gaussian dörtlemesidir.

Newton – Cotes formüllerinde f(x) fonksiyonunun polinom yaklaĢımı esas alınır.

(a,b) aralığını n-1 alt aralığa böldüğümüzde ki aralıkların boyu h=(b-a)/(n-1),

fonksiyonun bu noktalarından geçen (n-1). Dereceden polinom uydurularak

fonksiyonun integrali yerine polinomunu integrali hesaplanılır.

I= = burada

Bu formile Newton-Cotes formülü denir. n=2 durumunda formüle Yamuk

yöntemi (trapezoidal rule), n=3 için Simpson yöntemi, n=4 için Simpson 3/8

kuralı denir.

YAMUK KURALI (TRAPEZOIDAL RULE)

Newton-Cotes formülünde n=2 durumudur. Bu durumda

Ve bu değerleri Newton-Cotes formülünde yazdığımızda integrali,

Olarak elde ederiz. Yamuk yöntemindeki hata

Olarak verilir. Pratikte yamuk yöntemi (a,b) aralığının parçalanması ile elde edilir.

(a,b) aralığını n-1 alt aralığa bölüp her bir alt aralıkta yamuk formülü ile integrali

hesaplarsak,

Bu durumda integral tim alt aralıklardaki integrallerin toplamı olacaktır. Sonuç

olarak

Formülüne genelleĢmiĢ yamuk formülü denir. Burada herbir alt aralıktaki hata

olup, toplam hata

olarak veririz.

Alıştırma 1. integralini yamuk yöntemi ile

hesaplayınız.

MATLAB KODU 1.

function yamuk_yontemi

clc;clear all;

a=0;b=4;n=400;h=(b-a)/n;

x=linspace(a,b,n);y=f(x);

Int=(y(1)+2*sum(y(2:n-2))+y(n))*h/2;

Matlab_Int=quad(@f,a,b);

area(x,y)

title(['Yamuk yöntemi ile integral=',num2str(Int),', quad(@func,a,b)=',

num2str(Matlab_Int)])

legend('400*x.*(1-x).*exp(-2*x)');

function y=f(x);

y=400*x.*(1-x).*exp(-2*x);

SIMPSON KURALI (SIMPSON’S RULE)

Simpson 1/3 kuralı Newton-Cotes formülünde n=3 yazarak elde edilir. Ve

integral

Formülü ile hesaplanır.

(a,b) aralığını n-1 alt aralığa bölüp, herbir alt aralıkta Simpson yöntemini

kullanırsak alt aralıktaki integral,

elde ederiz. Böylece (a,b) aralığındaki integrali

Ġntegralinden

GenelleĢmiĢ Simpson formülünü elde ederiz. Simspon yönteminin hatası ise

Dir.

Alıştırma 2. integralini yamuk yöntemi ile

hesaplayınız.

MATLAB KODU 2.

function Simpson13_yontemi

clc;clear all;

a=0;b=4;n=400;h=(b-a)/n;

x=linspace(a,b,n);y=f(x);

Int=(y(1)+2*sum(y(3:2:n-2))+4*sum(y(2:2:n-1))+y(n))*h/3;

Matlab_Int=quad(@f,a,b);

area(x,y)

title(['Simpson 1/3 yöntemi ile integral=',num2str(Int),',

quad(@func,a,b)=', num2str(Matlab_Int)])

legend('400*x.*(1-x).*exp(-2*x)');

function y=f(x);

y=400*x.*(1-x).*exp(-2*x);

BÖLÜM 6- ADİ DİFERANSİYEL DENKLEMLER (ORDINARY

DIFFERENTIAL EQUATION)

Bu bölümde

baĢlangıç değer problemlerinin çözümleri için nümerik yöntemleri ele alacağız.

EULER YÖNTEMİ (EULER’S METHOD)

baĢlangıç değer problemi için Euler yöntemi

,

formülü ile hesaplanır.

Alıştırma 1. ( ) baĢlangıç değer probleminin çözümünü

h=0.5, h=0.25,h=0.125 alarak [0,2] aralığında Euler yöntemi MATLAB da

çözünüz. BaĢlangıç değer probleminin çözümü olduğuna göre

gerçek çözüm ve Euler yöntemi ile elde edilen çözümlerin grafiklerini

çizdiriniz.

MATLAB KODU 1.

function Euler_yontemi

% Başlangıç değer problemlerinin çözümü için Euler yöntemi

clc;clear all;

h=[0.5 0.25 0.125];renk=['r' 'y' 'b'];

for j=1:3

clear t;

t=[0:h(j):2];n(j)=length(t);yk=kesin(t);y(1)=yk(1);

for i=1:n(j)-1

y(i+1)=y(i)+h(j)*f(t(i),y(i));

end

plot(t,y,renk(j));hold on;

end

plot(t,yk,'k')

legend(['h=' num2str(h(1))],['h=' num2str(h(2))],['h='

num2str(h(3))],'Kesin Çözüm',2)

function yt=f(t,y)

% sağ taraf fonksiyonu

yt=1-y;

function y=kesin(t)

%kesin çözüm

y=1-exp(-t);

RUNGE KUTTA YÖNTEMİ (RUNGE KUTTA METHOD)

baĢlangıç değer problemi için Runge Kutta yöntemi

Formülü ile hesaplanır.

Alıştırma 2. ( ) baĢlangıç değer probleminin çözümünü

h=0.5, h=0.25,h=0.125 alarak [0,2] aralığında Runge Kutta metodu ile

MATLAB da çözünüz. BaĢlangıç değer probleminin çözümü

olduğuna göre gerçek çözüm ve Runge Kutta metodu ile elde edilen

çözümlerin grafiklerini çizdiriniz.

MATLAB KODU 2.

function Runge_Kutta_yontemi

% Başlangıç değer problemlerinin çözümü için Euler yöntemi

clc;clear all;

h=[0.5 0.25 0.125];renk=['r' 'y' 'b'];

for j=1:3

clear t;

t=[0:h(j):2];n(j)=length(t);yk=kesin(t);y(1)=yk(1);

for i=1:n(j)-1

f1=f(t(i),y(i));

f2=f(t(i)+h(j)/2,y(i)+f1*h(j)/2);

f3=f(t(i)+h(j)/2,y(i)+f2*h(j)/2);

f4=f(t(i)+h(j),y(i)+f3*h(j));

y(i+1)=y(i)+h(j)*(f1+2*f2+2*f3+f4)/6;

end

plot(t,y,renk(j));hold on;

end

plot(t,yk,'k')

legend(['h=' num2str(h(1))],['h=' num2str(h(2))],['h='

num2str(h(3))],'Kesin Çözüm',2)

title('Runge Kutta Yöntemi')

function yt=f(t,y)

% sağ taraf fonksiyonu

yt=1-y;

function y=kesin(t)

%kesin çözüm

y=1-exp(-t);

MATLAB DA ADİ DİFERANSİYEL DENKLEMLER (ORDINARY

DIFFERENTIAL EQUATION IN MATLAB)

baĢlangıç değer probleminin MATLAB da çözümü için dsolve() komutu kullanılır.

Burada MATLAB sembolik paketi içermesi gerekmektedir!

Alıştırma 3. ( ) baĢlangıç değer probleminin çözümünü

MATLAB da dsolve() komutu kullanarak bulunuz.

MATLAB KODU 3.

function dsolve_komutu

clc;clear all;

tic

syms t y;

cozum=dsolve('Dy=1-y','y(0)=0');

toc

disp(['Cozum:' cozum])

Elapsed time is 1.509307 seconds.

[ Cozum, 1 - exp(-t)]

KAYNAKLAR

Kiusalaas, J. (2005). NUMERICAL METHODS IN ENGINEERING WITH MATLAB.

Cambridge University Press.

MATHEWS, J., & FINK, K. (1999). NUMERICAL METHODS USING MATLAB.

Yang, W., Cao, W., Chung, T.-S., & Morris, J. (2005). APPLIED NUMERICAL

METHODS USING MATLAB. New Jersey: John Wiley & Sons, Inc.,

Hoboken, .