matlab uygulamalari · ders notu matematĠk bÖlÜmÜ ... merkezİ sonlu fark yaklaŞimlari...
Post on 03-Jan-2020
26 Views
Preview:
TRANSCRIPT
İÇİ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
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
3 boyutlu grafik çizimi için plot3(), mesh(), skaler değerli fonksiyonların
grafikleri için contour(). plot3() komutları kullanılır.
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);
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, .
top related