HBM512 Bilimsel Hesaplama II Ödev 3 - web.itu.edu.trturalh/web/courses/hbm512/hw3_sol.pdf · 2 1....
Transcript of HBM512 Bilimsel Hesaplama II Ödev 3 - web.itu.edu.trturalh/web/courses/hbm512/hw3_sol.pdf · 2 1....
HBM512
Bilimsel Hesaplama II
Ödev 3 Hazırlayan: Hamdi Nadir Tural 702061013 Hesaplamalı Bilim ve Mühendislik
2
1. Aşağıda verilen ayrık veriler kullanılarak, kübik tiriz eğrisi çizilmesi istenmektedir.
x(ft) y(ft) 0.000 1.20 0.250 1.18 0.750 1.10 1.250 1.00 1.500 0.92 1.750 0.80 1.875 0.70 2.000 0.55 2.125 0.35 2.250 0.00
Sorunun çözümüne geçmeden, tiriz eğrilerinin teorisini inceleyelim.
Şimdiye kadar olan incelemelerimiz, genel olarak cebirsel fonksiyonların belli bir aralıkta
çokterimli yaklaşımından oluşmakta idi. Ancak bu durumda, yüksek mertebeli
çokterimlilerin salınımlı (oscillatory) doğası ve küçük bir aralıktaki küçük değişmelerin
genel olarak çokterimlinin tanım aralığında büyük değişim yaratması karşımıza çıkan en
büyük problemdir. Bununla ilgili örnekler daha önceki ödevlerimizde doğrudan karşımıza
çıkmıştı.
Bu duruma, tanım aralığını daha küçük aralıklara bölmek ve bu küçük aralıklarda tanımlı
çokterimliler üretmek yeni bir çözüm yöntemidir. Bu tür bir yaklaşımla oluşturulan
fonksiyonlara Parçalı Çokterimli Yaklaşımı (Piecewise Polynomial Approximation)
denilmektedir. Bu yaklaşımın en basiti Parçalı Doğrusal Yaklaşımdır. Bu yaklaşım
))](,()),...,(,()),(,[( 2211 nn xfxxfxxfx ayrık noktaları arasında çizilen doğrulardan
ibarettir.
Bu doğrusal yaklaşımın en büyük dezavantajı, tanım aralıklarının uç noktalarında, düzgün
bir türevlenebilirlik özelliklerinin olmamasıdır ki bu geometrik manada çizilen eğrinin
düzgün (smooth) olmaması anlamına gelir. Böyle bir durumda, 2. dereceden (Quadric)
veya 3. dereceden (Cubic) çokterimlilerin oluşturulması çözüm olabilir. 2. dereceden bir
yaklaşım bütün tanım aralığında türevlenebilirlik (geometrik olarak düzgün) özelliğine
haizdir ancak bu tanım aralığının başlangıç ve bitiş noktalarında türev almak için yeterli
sınır koşul sağlanamayabilir. (Bu kısımdaki ispatlar [1] ve [2] numaralı kaynaklardan
incelenebilir.)
Bütün bu problemlerin aşılması için parçalı çokterimli yaklaşımı olarak Kübik Tiriz
Yaklaşımı yaygın olarak kullanılmaktadır. En genel halde Kübik Tiriz Çokterimlisi dört adet
sabit sayı içermektedir ( 32)( dxcxbxaxP +++= denklemindeki dcba ,,, gibi). Bu bize
çokterimlinin hem tanım aralığı içerisinde hem de tanım aralığının uç noktalarında
türevlenebilirlik kabiliyetini de sağlar (ikinci türevi 2
2
dx
Pdtanımlı).
3
Şimdi, ],[ ba aralığında bxxxa n =<<<= ...10 noktalarında tanımlı bir )(xf
fonksiyonuna ait kübik tirizi oluşturmak için gerekli olan koşulları yazalım;
a. )(xS bir kübik çokterimli olmak üzere 1,...,1,0 −= nj için ],[ 1+jj xx alt aralığında
tanımlı olan çokterimli )(xS j olarak gösterilir.
b. Her bir nj ,...,1,0= için )()( jj xfxS = ’dir.
c. Her bir 2,...,1,0 −= nj için )()( 111 +++ = jjjj xSxS ’dir.
d. Her bir 2,...,1,0 −= nj için )()( 111 +++ ′=′ jjjj xSxS ’dir.
e. Her bir nj ,...,1,0= için )()( 111 +++ ′′=′′ jjjj xSxS ’dir.
f. Ve aşağıdaki sınır koşullardan birini taşıma şartı ile
- 0)()( 0 =′′=′′ nxSxS (Doğal Tiriz)
- )()( 00 xfxS ′=′ ve )()( nn xfxS ′=′ (Kenetlenmiş Tiriz)
Koşullarını sağlayan eğriler Parçalı Kübik Tiriz yaklaşımını ifade etmektedir. Şimdi verilen
bir f fonksiyonuna yukarıdaki koşulları sağlayan bir Kübik Tiriz Eğrisi uyduralım;
32 )()()()( jjjjjjj xxdxxcxxbaxS −+−+−+=
şeklindeki çokterimli 1+<≤ jj xxx aralığında tanımlı, parçalı yaklaşımız olsun.
Bu durumda,
)()( jjj xfaxS == olacağından “c” koşulu kullanılarak,
31
2111111 )()()()()( jjjjjjjjjjjjjjj xxdxxcxxbaxSxSa −+−+−+=== +++++++
yazılabilir. Görüldüğü üzere )( 1 jj xx −+ terimi karşımıza çıkmaktadır. Bu terim için yeni
bir tanımlama yapalım;
)( 1 jjj xxh −= + olsun. Yine fonksiyondan görüleceği üzere )( jj xfa = ’yi kullanarak
denklemi yeniden yazarsak,
321 jjjjjjjj hdhchbaa +++=+ (1)
Aynı yaklaşımı kullanarak, )( jj xSb ′= tanımı kullanılarak,
2)(3)(2)( jjjjj xxdxxcbxS −+−+=′
Bu denkleme “d” koşulu uygulanarak,
21 32 jjjjjj hdhcbb ++=+ (2)
bulunur. Yine aynı yaklaşımla, 2/)( jj xSc ′′= tanımı ve “e” koşulu kullanılarak,
jjjj hdcc 31 +=+ (3)
elde edilir. jd buradan çekilerek (1) ve (2) numaralı denklemlerde yerine konulursa,
)2(3 1
2
1 ++ +++= jjj
jjjj cch
hbaa (4)
)( 11 ++ ++= jjjjj cchbb (5)
4
elde edilir. (4) denklemi jb bilinmeyeni için düzenlenerek,
)2(3
)(1
11 ++ +−−= jjj
jjj
j cch
aah
b (6)
denklemi elde edilir. Burada indiler bir azaltılarak (5) denkleminde yerine konursa,
)(3
)(3
)(2 11
11111 −−
++−−− −−−=+++ jjj
jjj
jjjjjjj aah
aah
chchhch (7)
lineer denklem sistemi elde edilir. burada tek bilinmeyen jc değerleridir. Bu denklem
takımı matris halinde yazılırsa,
+
+=
−−−−
10000)(2..
.....0.)(20.001
1122
1100
nnnn hhhh
hhhhA
−−−
−−−
=
−−−
−−
0
)(3
)(3
.
)(3
)(3
0
212
11
010
121
nnn
nnn
aah
aah
aah
aah
B ve
=
−
n
n
cc
cc
x
1
1
0
.
şeklindeki BxA =. lineer denklem takımıdır. Buradan jc sayıları çözülerek önce jc ve
sonra da jc katsayılarının hesabı yapılabilir. Dikkat edilecek bir husus, oluşturulan
denklem takımının Doğal Tiriz (Natural Spline) durumu için çıkarılmış olmasıdır.
Kenetlenmiş Tiriz (Clamped Spline) için sadece 0c ve nc katsayılarının hesabının
değiştiği göz önüne alınarak yeniden denklem takımı oluşturulmalıdır. Bu kısım ödevde
uygulanmayacağı için gösterilmemiştir.
Buna göre dcb ,, katsayılarının hesap adımlarını gösteren bir blok diyagram çizelim;
Şekil 1. Katsayıların Hesap Adımlarını Gösteren Blok Diyagram
jx
jy ja
jhjc
jb
jd
Bilinenler Hesaplanacak Değerler
5
Yalnız burada dikkat edilecek olan husus, jc katsayılarının hesabında bir lineer denklem
takımının çözümünün bulunmasının gerekmesidir. Böyle bir sistemin çözümü için birçok
çözüm yöntemi vardır. Örneğin, Gauss Eliminasyon yöntemi, Doolittle, Crout ve Choleski
faktorizasyon yöntemleri, Cramer yöntemi vs. Algoritma olarak uygulanması en basit olan
Cramer yöntemi seçilerek, lineer denklem sistemi çözülmüştür.
Buna göre denklem sisteminin oluşturulması, çözümü ve çizdirilmesi için Matlab’te bir m-
file kodu yazılmıştır;
Program girdileri:
xi, yi : ayrık girdi noktaları
n : girilen nokta sayısı
Program çıktıları:
Sj(x) : uydurulan kübik tiriz fonksiyonları
Algoritma: Algoritma yukarıda verilen blok diyagram kullanılarak, katsayıların hesabı
yapılacak, denklem sisteminin çözümünde Cramer yöntemi kullanılacaktır.
Başla:
Oku x,y,n;
%hj değerlerini oluştur:
Döngü 1: i=1’den n-1’e kadar
h(i)=x(i+1)-x(i);
Döngü 1 Son
% A matrisinin oluşturulması
A(1,1)=1;
A(n,n)=1;
Döngü 2: i=2’den n-1’e kadar
A(i,i)=2*(h(i)+h(i-1));
A(i,i-1)=h(i-1);
A(i,i+1)=h(i);
Döngü 2 Son
% B matrisinin oluşturulması
B(1)=0;
B(n)=0;
6
Döngü 3: i=2’den n-1’e kadar
B(i)=(3/h(i))*(y(i+1)-y(i))-(3/h(i-1))*(y(i)-y(i-1));
Döngü 3 Son
% Cramer Kuralını kullanarak A.x=B lineer denklem isteminin çözümü
% Burada Cx pivoting matris, C ise sonuç matrisi
Döngü 4: i=1’den n’e kadar
cx=A;
cx(:,i)=B;
c(i)=1/det(A)*det(cx);
Döngü 4 Son
% Tiriz için b ve d katsayılarının hesabı
Döngü 5: i=1’den n-1’e kadar
b(i)=(1/h(i))*(y(i+1)-y(i))-(h(i)/3)*(2*C(i)+C(i+1));
d(i)=(C(i+1)-C(i))/(3*h(i));
Döngü 5 Son
% S(i) tiriz eğri ailesinin oluşturulması
% S(i)=a(i)+b(i)*(x-x(i))+c(i)*(x-x(i))^2+d(i)*(x-x(i))^3
Döngü 6: i=1’den n-1’e kadar
S(i)= a(i)+b(i)*(x-x(i))+C(i)*(x-x(i))^2+d(i)*(x-x(i))^3;
Döngü 6 Son
Ekrana Çizdir: S(i)
Program Sonu
7
Program Çıktıları
A matrisi: B Matrisi:
1 0 0 0 0 0 0 0 0 0 0 0.25 1.5 0.5 0 0 0 0 0 0 0 -0.24
0 0.5 2 0.5 0 0 0 0 0 0 -0.12 0 0 0.5 1.5 0.25 0 0 0 0 0 -0.36 0 0 0 0.25 1 0.25 0 0 0 0 -0.48 0 0 0 0 0.25 0.75 0.125 0 0 0 -0.96 0 0 0 0 0 0.125 0.5 0.125 0 0 -1.2 0 0 0 0 0 0 0.125 0.5 0.125 0 -1.2 0 0 0 0 0 0 0 0.125 0.5 0.125 -3.6 0 0 0 0 0 0 0 0 0 1 0
)(xS Tiriz denklemleri:
)(1 xS 1.2000-0.065631*x-0.22991*x3 )(2 xS 1.2072-0.10874*x-0.17243*(x-0.2500)2+0.13981*(x-0.2500)3 )(3 xS 1.2322-0.17631*x+0.037289*(x-0.7500)2-0.16934*(x-0.7500)3 )(4 xS 1.3325-0.26603*x-0.21673*(x-1.2500)2+0.0033347*(x-1.2500)3 )(5 xS 1.4806-0.37376*x-0.21422*(x-1.5000)2-0.84287*(x-1.5000)3 )(6 xS 1.9181-0.63891*x-0.84638*(x-1.7500)2-3.5384*(x-1.7500)3 )(7 xS 2.6057-1.0164*x-2.1733*(x-1.8750)2+5.6342*(x-1.8750)3 )(8 xS 3.1412-1.2956*x-0.060455*(x-2.0)2-18.998*(x-2.0000)3 )(9 xS 5.0277-2.2013*x-7.1849*(x-2.1250)2+19.160*(x-2.1250)3
Şekil 2. Tiriz yaklaşımı ve Ayrık noktaların Çizimi
8
Yorumlar:
- Kübik tiriz yaklaşımının düzgün (smooth) bir eğri oluşturduğu görülmektedir.
- Kübik tirizin en büyük faydası, eğimin çok hızlı değiştiği bölgede görülür. Bunun
temel nedeni, noktalar arasında yapılan bir lineer yaklaşımın (her ayrık nokta
arasında doğrular çizmek), fonksiyonun eğim değişimini takip edememesidir. Bizim
eğrilerimiz için bu [1.75,2.5]x ∈ aralığıdır.
- Ek bir bilgi olarak, günümüzde bilgisayar kontrollü makinalar yeni bir tiriz
yaklaşımı olan NURBS (Non-Uniform Rational B-Spline) yöntemini kullanmaktadır.
Bu yöntemle keskin köşelerin işlenmesi, ani eğim değişimlerinin takibi, yüksek hız
ve doğrulukta işleme gibi problemler çözülebilmektedir.
9
2. Bu problemin çözümünde lineer interpolasyon (regresyon) ve kübik tiriz yaklaşımı
kullanılması istenmektedir. Buna bağlı olarak bu yaklaşımları inceleyelim;
- Kübik Tiriz Yaklaşımı:
Kübik tiriz yaklaşımının temeli 1. soruda anlatılsa da burada tekrar kısa bir gösterim
yapılacaktır.
Yukarıda çıkarımı yapılan (7) denkleminin çözümü için lineer denklem takımı
oluşturulmuştu. Bu denklem takımı;
)(3
)(3
)(2 11
11111 −−
++−−− −−−=+++ jjj
jjj
jjjjjjj aah
aah
chchhch ’ nin çözümü olan,
BxA =. şeklindeki;
+
+=
−−−−
10000)(2..
.....0.)(20.001
1122
1100
nnnn hhhh
hhhhA
−−−
−−−
=
−−−
−−
0
)(3
)(3
.
)(3
)(3
0
212
11
010
121
nnn
nnn
aah
aah
aah
aah
B ve
=
−
n
n
cc
cc
x
1
1
0
.
sistemidir. Buradan jc katsayılarının hesabı yapılabilir. Bundan sonra
)2(3
)(1
11 ++ +−−= jjj
jjj
j cch
aah
b (Soru1 Denklem 6)
)(31
1 jjj
j cch
d −= + (Soru1 Denklem 3 dönüştürülmüş hali)
denklemleri kullanılarak bütün katsayılar hesap edilir ve )(xS j tiriz denklemleri
oluşturularak, eğri çizilir.
- Lineer Regresyon:
Bu durum bizi Lineer regresyon yaklaşımına götürmektedir. Bu yaklaşım bilindiği üzere
lineer bir yaklaşım yaparken, hatayı ayrik noktalar ile denklem arasındaki farkın karesi
olarak almaktadır. Burada yapılacak olan bu farkı minimize eden katsayıların hesabını
yapmaktır. Aşağıda bu hatayı minimize eden denklem takımı verilmiştir;
∑∑==
=++n
ii
n
ii YaXan
02
01).1(
∑∑∑===
=+n
iii
n
ii
n
ii YXaXaX
02
0
2
01 ..
10
Burada katsayılar;
)1(0 += nS , ∑=
=n
iiXS
01 , ∑
=
=n
iiXS
0
22 , ∑
=
=n
iiYT
00 , ∑
=
=n
iiiYXT
01
Denklemin düzenlenmiş hali,
02110. TaSaS =+
12211. TaSaS =+
Buradan a1 ve a2 çözümleri;
2120
11021
SSS
TSTSa
−
−= ,
2120
01102
SSS
TSTSa
−
−=
olarak bulunur.
Sorunun a) şıkkında bazı zaman değerlerine karşılık gelen T(F) sıcaklık değerleri
istenmektedir. Bunun için hem lineer regresyonla hem de kübik tiriz yöntemi ile
oluşturulan fonksiyonlarda bu t(s) değerleri yerine konularak çözülebilir. Ancak sorunun
b) şıkkında bazı T(F) sıcaklıklarına ulaşma süresi sorulmaktadır. Bu durum bir denklemin
köklerini bulma problemini karşımıza getirir. Lineer regresyon ile çözüm kolaydır ancak
kübik tiriz eğrileri 3. dereceden nonlineer eğrilerdir. Bu noktada başka bir sayısal yöntem
uygulanarak, 3. dereceden denklemin kökleri hesap edilmelidir. Bu çözüm için birçok
iteratif metot vardır. Örneğin Bisection, Secant, Regula Falsi, Newton-Raphson vs. Biz
burada Newton-Raphson metodunu kullanarak istenen t(s) sürelerinin hesabını
yapacağız.
Lineer Regresyon için t(s) hesabı;
2
121 a
aTttaaT
−=→+= kullanılarak süre hesap edilebilir.
Newton-Raphson ile t(s) hesabının algoritması;
Döngü
)(/)( 000 tftftt ′−=
|| 0tthata −=
Eğer hata<tolerans ise Döngüden çık
tt =0
Döngü Devam
Görüldüğü üzere belirli başlangıç değerinden başlayıp hatayı kabul edilebilir bir toleransa
indirene kadar döngü devam edecektir.
11
Bu denklemler Matlab’te yazılan bir m-file kodu ile çözülmüştür.
Algoritma;
Başla
Oku T(F),t(s);
% En Küçük Kareler Hesabı
Katsayıların hesabı;
İlk değerleri ata;
S0=n+1, S1=0, S2=0, T0=0, T1=0,
Döngü 1: i=1’den n’ye kadar
S1=S1+t(i)
S2=S2+(t(i))^2
T0=T0+T(i)
T1=T1+t(i)*T(i);
Döngü 1 Son
Fonksiyonun Katsayılarını Hesapla;
a1=(S2*T0-S1*T1)/(S0*S2-S1^2)
a2=(S0*T1-S1*T0)/(S0*S2-S1^2)
% t=[0.6, 2.5, 4.7, 8.9] zaman değerleri için
% T(F) sıcaklık hesabı
tt=[0.6, 2.5, 4.7, 8.9]
Döngü 2: i=1’den 4’ye kadar
Tkk(i)=a1+a2*tt(i)
Döngü 2 Son
% T=[75, 85, 90, 105] sıcaklık değerleri için
% geçen t(s) süresinin hesabı
TT=[75 85 90 105];
Döngü 3: i=1’den 4’ye kadar
skk(i)=(TT(i)-a1)/a2;
Döngü 3 Son
12
% Kubik Triz Hesabı
% h(i) noktalar arasındaki adım hesabı
Döngü 4: i=1’den n-1’e kadar
h(i)=ts(i+1)-ts(i);
Döngü 4 Son
% Doğal tiriz için A matrisinin değerleri ata
A(1,1)=1;
A(n,n)=1;
Döngü 5: i=2’den n-1’e kadar
A(i,i)=2*(h(i)+h(i-1)); %matrisin diyagonali
A(i,i-1)=h(i-1); %matris diyagonalinin 1 altı
A(i,i+1)=h(i); %matris diyagonalinin 1 üstü
Döngü 5 Son
% Doğal tiriz için A matrisinin değerleri ata
B(1)=0;
B(n)=0;
Döngü 6: i=2’den n-1’e kadar
B(i)=(3/h(i))*(Tf(i+1)-Tf(i))-(3/h(i-1))*(Tf(i)-Tf(i-1));
Döngü 6 Son
% Cramer Kuralını kullanarak A.x=B lineer denklem isteminin çözümü
% Burada Cx pivoting matris, C ise sonuç matrisi
Döngü 7: i=1’den n’ye kadar
Cx=A;
Cx(:,i)=B;
C(i)=1/det(A)*det(Cx);
Döngü 7 Son
% Tiriz için b ve d katsayılarının hesabı
Döngü 8: i=1’den n-1’e kadar
b(i)=(1/h(i))*(Tf(i+1)-Tf(i))-(h(i)/3)*(2*C(i)+C(i+1));
d(i)=(C(i+1)-C(i))/(3*h(i));
Döngü 8 Son
13
% S(i) tiriz eğri ailesinin oluşturulması
% S(i)=a(i)+b(i)*(x-x(i))+c(i)*(x-x(i))^2+d(i)*(x-x(i))^3
Döngü 9: i=1’den n-1’e kadar
S(i)= Tf(i)+b(i)*(x-ts(i))+C(i)*(x-ts(i))^2+d(i)*(x-ts(i))^3
Döngü 9 Son
% t=0.6 için S1, t=2.5 için S3, t=4.7 için S5,
% t=8.9 için S9 parça fonksiyonları kullanılacak
Tks(1)= S1(0.6);
Tks(2)= S3(2.5);
Tks(3)= S5(4.7);
Tks(4)=S9(8.9);
% Nonlineer Fonksiyonlar için Newton-Raphson Metodu
% ile T=[75, 85, 90, 105] sıcaklık değerleri için
% geçen t(s) süresinin hesabı
% T=75 için S1, T=85 için S2, T=90 için S3,
% T=105 için S4 parça fonksiyonları kullanılacak
Döngü 10: i=1’den 4’e kadar
hata=10000; % iterasyon hatası için başlangıç değeri
pp=ts(i);
ft=S(i)-TT(i);
Döngü 11 :hata>1.e-5 olduğu müddetçe devam
p=pp-ft(pp)/diff(ft(pp));
hata=mutlakdeğer(p-pp);
pp=p;
Döngü 11 Son
sol(i)=p;
Döngü 10 Son
Ekrana Çizdir: S(i), a1+a2t.(s)
Program Sonu
14
Program Çıktıları:
Lineer Regresyon için;
61.397a1 = 6.6317a2 =
Buradan lineer regresyon denklemi;
tT .6317.6397.61 += olarak bulunur.
Kübik Tiriz için;
)(xS Tiriz denklemleri:
)(1 xS 72.500+4.3814*x+1.2186*x3 )(2 xS 70.063+8.0371*x+3.6557*(x-1.0)2-3.3928*(x-1.0)3 )(3 xS 76.060+5.1701*x-6.5227*(x-2.0)2+7.2526*(x-2.0)3 )(4 xS 50.652+13.883*x+15.235*(x-3.0)2-10.818*(x-3.0)3 )(5 xS 63.001+11.900*x-17.218*(x-4.0)2+6.2182*(x-4.0)3 )(6 xS 130.91-3.8816*x+1.4366*(x-5.0)2+0.24498*(x-5.0)3 )(7 xS 110.94-0.27344*x+2.1715*(x-6.0)2-0.99809*(x-6.0)3 )(8 xS 102.67+1.0754*x-0.82273*(x-7.0)2+0.047376*(x-7.0)3 )(9 xS 113.92-0.42798*x-0.68060*(x-8.0)2+0.50859*(x-8.0)3
)(10 xS 112.27-0.26343*x+0.84515*(x-9.0)2-0.28172*(x-9.0)3
Şekil 3. Tiriz yaklaşımı, Lineer Regresyon ve Ayrık noktaların Çizimi
15
a) Verilen Süreler için Sıcaklık Hesabı;
t(s) T(F)
Lineer Reg. T(F)
Kübik Tiriz 0.6 65.376 75.392 2.5 77.976 88.261 4.7 92.565 112.63 8.9 120.42 109.93
Şekil 4. İki yöntemle de hesap edilen Sıcaklıklar
b) Verilen Sıcaklıklar için Geçecek Süre Hesabı;
T(F) t(s)
Lineer Reg. t(s)
Kübik Tiriz 75 2.0513 0.52934 85 3.5592 1.7822 90 4.3132 2.7912
105 6.575 3.6605
16
Şekil 5. İki yöntemle de hesap edilen Süreler
Yorumlar:
Şekil 3’den görüleceği gibi, lineer regresyon ayrık veriyi çok iyi takip etmemektedir. Kübik
tiriz ise bütün noktalardan geçerek, pekte düzgün olmayan (eğri bütün olarak ele
alınırsa) bir eğri oluşturmaktadır. Genel olarak deneye bağlı verilere eğri uydurma
probleminde, en küçük kareler yöntemi çok sık kullanılır. Ancak burada verilerin bağlı
olduğu sistemin doğasına bakılması gerekmektedir. Yani doğrudan bir lineer yaklaşım
yerine, eğrinin doğasına mutabık olan bir fonksiyon için lineer regresyon uygulanmalıdır.
Bu fonksiyon bir çokterimli yaklaşımı, logaritmik (y=a1+a2.log(x) veya y=a1+a2.ln(x))
veya üstel bir fonksiyon olabilir (y=a1+a2.ex veya y=a1+a2x).
Ayrık noktalar tek başına çizdirilerek bakıldığında, Kontrol Teorisine dayanarak, 1. derece
bir sistemin basamak cevabını andıran bir eğriye benzemektedir. Sistemin Isıl bir sistem
olması da bu varsayımı destekliyor. Zira ısıl sistemler 1. mertebe diferansiyel denklemler
kullanılarak ifade edilirler. Yani aşağıdaki denklemi andırıyor;
Γ−
−=t
eaatT 21)(
(t:zaman, a1 ve a2 başlangıç değere(initial val.) bağlı katsayılar, Γ sistemin zaman sabiti)
17
Eğer veriler gerçek deney sonuçlarından alınmış ise (bana göre mümkün), yukarıda
vermiş olduğum denkleme uygun bir Lineer Regresyon, verinin gerçek trendini gösteren
bir eğri oluşturacaktır. (Burada yazdıklarım gereksiz görülebilir ama Kontrol Teorisi
üzerine yapmış olduğum çalışmalardan dolayı, biraz da farklı bir alandan bilgi aktarmak
istedim)
Şekil 6. Ayrık Veriler
18
3. Verilen ayrık noktalar için sayısal türev alma işlemi temel olarak, bu noktalardan geçen
bir çokterimli oluşturularak, oluşturulan çok terimlinin istenen noktada türevlenmesinden
ibarettir.
Sonlu farklar kullanarak, bir fonksiyonun ileri ve geri farklar çokterimlilerini Taylor serisi
kullanarak açalım,
Rxfh
xfh
xfhxfhxf +′′′+′′+′+=+ )(!3
)(!2
)()()(32
(İleri Farklar)
Rxfh
xfh
xfhxfhxf +′′′−′′+′−=− )(!3
)(!2
)()()(32
(Geri Farklar)
Bu ifadeler kullanılarak birinci türev çekilirse,
hxfhxf
xf)()(
)(−+
=′ (İleri Fark)
hhxfxf
xf)()(
)(−−
=′ (Geri Fark)
hhxfhxf
xf2
)()()(
−−+=′ (Merkezi Fark)
yazılabilir. Hata ifadeleri yazılırsa,
Rxfh
xfh
Hata −′′′−′′−= )(!3
)(!2
2
(İleri Fark)
Rxfh
xfh
Hata −′′′+′′−= )(!3
)(!2
2
(Geri Fark)
Rxfh
Hata −′′′−= )(!3
2
(Merkezi Fark)
Yukarıda bulunan ifadeler kullanılarak f’’, f’’’,fıv vs. hesap edilebilir. Ancak tahmin
edileceği üzere bu işlem f’ ve f’’ için kolay olsa da, daha büyük mertebe türevler için zor
olacaktır. Bu sorunu çözmenin yolu, çokterimli yaklaşımını uygulamaktır.
dxxRd
dxxPd
dxxfd
xRxPxf nnnn
))(())(())(()()()( +=→+=
İleriye Doğru Türev Alma:
n. dereceden ileriye doğru sonlu fark terimlisini yazalım,
))...((!.
...)()( 100
00
0 −−−∆
++−∆
+= nn
n
n xxxxhn
fxx
hf
fxP
α dönüşümü ile,
!)1)...(1(
...)( 000 nn
fffxP nn
+−−∆++∆+=
αααα
bu çokterimlinin türevini alırsak,
dxd
dxPd
dxxPd nn α
α))(())((
= şeklini alır. α ’nın tanımı kullanılarak,
19
hdxd
hxx 10 =→
−=
αα bulunur. Denklemde yerine konursa,
αdxPd
hdxxPd nn ))((1))((
=
0xx = için türev almak istenirse 00 →⇒→ αxx sınır koşulu ile,
+
∆−
∆+
∆−∆=
=
....432
1))(( 04
03
02
0
0
ffff
hdxxPd
xx
n ifadesine ulaşılır. Bu ifade algoritmik bir
hale getirilirse, aşağıdaki denklem elde edilir.
−∆= ∑
=
+
=
n
i
ii
xx
n
if
hdxxPd
1
10 )1(1))((
0
Geriye Doğru Türev Alma:
n. dereceden geriye doğru sonlu fark terimlisini yazalım,
))...((!.
...)()( 100
00
0 +−−−∇
++−∇
+= nn
n
n xxxxhn
fxx
hf
fxP
α dönüşümü ile,
!)1)...(1(
...)( 000 nn
fffxP nn
−++∇++∇+=
αααα
ileri farklarda olduğu gibi, α ’nın tanımı kullanılarak bu çokterimlinin türevini alınırsa,
αdxPd
hdxxPd nn ))((1))((
=
0xx = için türev almak istenirse 00 →⇒→ αxx sınır koşulu ile,
+
∇+
∇+
∇+∇=
=
....432
1))(( 04
03
02
0
0
ffff
hdxxPd
xx
n ifadesine ulaşılır. Bu ifade de
algoritmik bir hale getirilirse, aşağıdaki denklem elde edilir.
∇= ∑
==
n
i
i
xx
n
if
hdxxPd
1
01))((
0
Merkezi Türev Alma:
n. dereceden merkezi fark terimlisini Stirling ifadesi cinsinden yazalım,
...!6
)2)(1()1)(2(!5
)2)(1()1)(2(!4
)1()1(!3
)1()1(!2
)(
06
05
04
03
02
2
00
+−−++
+−−++
+
−++
−++++=
ff
fffffxPn
δααααααµδααααα
δααααµδαααδααδµ
20
Buradan görüleceği üzere çift üstlü ( ...,, 642 δδδ ) ifadelerde 2α çarpanı bulunmaktadır.
Bu durum 0
)(
=ααdxdPn teriminde çift üstlü ifadelerin düşmesi anlamına gelir (ispatı
istenirse yapılabilir). Bu ifade genelleştirilirse,
*
00
12
0 )!12(!!..)1(1)(1))((
0
+−
== ∑=
+
==
m
i
iin
xx
n
iii
fhd
xdPhdx
xPdµδ
α α
*m: (n-1)/2 değerinin tamsayı olan kısmı. Genel programlama açısından m=int((n-1)/2)
İnceleme ve Karşılaşılan Problemler:
Buraya kadar gerekli olan bütün denklemler çıkarılmış oldu ancak bu denklemlerin sadece
0xx = ( 0=α ) noktasında geçerli olduğunu unutmayalım. Eğer eğrinin bütün noktalarına
ait bir türev ifadesi geliştirilmek istenirse, n. dereceden çokterimlinin çıkarılması(ister
0xx − ’a isterse α ’ya bağlı olsun) ve bu çokterimlinin istenen ixx = noktasında
türevinin alınması gerekmektedir. Bu noktada ikinci bir husus (aslında birinci), alınan
nokta sayısına bağlı olarak oluşturacağınız çokterimlinin derecesidir. Soruda 101 adet
nokta alınması istenmiş ki bu )(100 xP ’in oluşturulması gerektiğini belirtmektedir.
)(100 xP ’ün oluşturulmasını adım adım incelerken, karşımıza çıkacak problemlere de
bakalım;
• Önce ]4,0[ aralığını 100 eşit parçaya bölelim
• 04.0100
04=
−=h hesap adımı oluşturuldu
• Fonksiyonu hnx .0 + (n=0,1,2,..,100, 00 =x ileri farklar) noktalarında hesap
ederek 101x101 farklar tablosunu oluşturalım
• Farklar tablosundan aldığımız değerlerle )(100 xP ’ü oluşturalım
• Teorik olarak buraya kadar hiçbir problem görülmüyor. Ancak )(100 xP ’i açık halde
yazarsak (örnek olarak ileri fark alındı);
))...((!.100
...)()( 9901000
100
00
0100 xxxxh
fxx
hf
fxP −−∆
++−∆
+= veya (1)
!100)99)...(1(
...!)!.(
!)( 0
10000
100
00100
−−∆++∆+=
−∆= ∑
=
ααααα
αfff
iifxP
i
i (2)
hem (1) numaralı hem de (2) numaralı denklemlere bakıldığında, 0100f∆ teriminin
katsayıları, 0xx ≠ veya 0≠α durumu için çok büyük sayıların çarpımı (mutlak değer
açısından) ve çok büyük sayıların bölünmesi şeklinde bir sonuca itmektedir. Burada iki
adet problem karşımıza çıkmaktadır; 1. Büyük sayıların bir biri ile çarpımından ortaya
çıkan aritmetic overflow, ve 2. Bölme işleminden kaynaklanan aritmetic underflow
problemleridir. 1. durumda bilgisayarların gösterebileceği maksimum sayıya bağlı
21
olarak karşımıza çıkar. 2. durum ise bilgisayarların gösterebileceği minimum (sıfıra en
yakın) sayıya bağlı olarak karşımıza çıkar(bu durum 2. ödevde incelenmişti). Matlab’te
“double precision” (64 bit) olarak sayılar hesap edilmesine ve anlamlı rakam gösterimi
32 haneye kadar (teorik olarak böyle bir limit yok, ancak donanım desteği olarak 32
haneye kadar yapabiliyorum) yapılabilmesine karşın, )(35 xP ’e kadar ( 0.115h =
kullanılarak) fonksiyona doğru yaklaşan bir çokterimli oluşturulabilmiştir. Daha küçük
hesap adımlarında çokterimli salınım yapmaya başlamaktadır. Bununla ilgili grafikler
aşağıda verilmiştir.
Şekil 7. )(35 xP ve Ayrık Veriler: Çokterimli, ayrık veriler üzerine tam oturuyor
22
Şekil 8. )(37 xP (h=0.11) ve Ayrık Veriler: Salınım hareketleri belirgin halde
• )(100 xP için oluşturulan tablodan, 0xx = ( 0=α ) noktaları için tablo değerlerini
inceleyelim. Tabloda 040f∆ teriminden sonraki değerler giderek artmaya
başlamıştır. Esas olarak kararlı bir sonuca ulaşabilmek için, tablodaki değerlerin
“0” doğru gitmeleri gerekmektedir. Fakat bu olay belli bir yere kadar ( 040f∆ )
devam etmesine rağmen bu noktadan sonra giderek artış göstermektedir. Bu hem
)(100 xP ’ün oluşturulmasında karşımıza çıkan diğer bir etken olmakta, hem de
0xx = ( 0=α ) değerlerini kullanarak çıkaracağımız (ileri, geri ve merkezi fark
ifadeleri için basitleştirilmiş denklemler) denklemlerin düzgün bir sonuç vermesine
engel olmaktadır.
• )(100 xP ’ün oluşturması sırasında karşılaşılan başka bir problem de, hesaplama
zamanıdır. Örneğin )(37 xP hesaplanırken yaklaşık 6.68 sn gibi bir zaman
geçerken, bu süre )(40 xP için 23.65sn ve )(100 xP içinse 8dakika483sn ≈ gibi bir
süre geçmektedir. Burada bilgisayarın donanım konfigürasyonu ve CPU yükü de
etkili olmaktadır ancak çokterimlinin derecesiyle nerdeyse eksponansiyel artan bir
hesap süresi gerekmektedir.
23
• Bu yüzden, genel türev ifadesi için )(32 xP (h=0.125) kullanılarak hesap
yapılmıştır.
• Basitleştirilmiş türev ifadeleri için de h=0.125 hesap adımı ile oluşturulan farklar
tablosu kullanılmıştır.
Sorunun çözümü için Matlab’te bir m-file kodu yazılmıştır.
Algoritma: ilk önce farklar tablosu oluşturulacak, bu tablodan okunan değerlerle önce
ileri, geri ve merkezi farklar kullanarak 0xx = noktalarında çokterimlilerin türevleri hesap
edilecek. Daha sonra h=0.125 adım aralığı kullanılarak ileri fark çokterimlileri ( )(32 xP ) ve
bu çokterimlilerin ]4,0[∈x aralığındaki her hesap adımında türevleri ( dxxPd /))(( 32 )
hesap edilecektir.
Program girdileri:
xi, yi : ayrık girdi noktaları
n : girilen nokta sayısı
Program çıktıları:
dPn_İleri : x=x0=0’da ileri fark çokterimlisinin türevi
dPn_Geri : x=x0=4’de geri fark çokterimlisinin türevi
dPn_Merkezi : x=x0=2’de merkezi fark çokterimlisinin türevi
Pn(x) : uydurulan çokterimlinin
dPn/dx : uydurulan çokterimlinin türevi
Başla:
Oku x,y,n;
%Tabloların oluşturulması:
f(:,1)=y; % Y’ yi Fark Tablosunun Birinci Sütununa ata
Döngü 1: j=2’den n’ye
Döngü 2: i=j’den n’ye
f(i,j)= f(i,j-1)-f(i-1,j-1)
Döngü 2 Son
Döngü 1 Son
h=x(2)-x(1) % Adım aralığını hesapla
% ileri fark türevi x=x0=0
% ilk değerlerin atanması
24
dPx_dalfa_ileri= f(2,2);
Döngü 2: i=3’den n’ye kadar
dPx_dalfa_ileri=dPx_dalfa_ileri+(f(i,i)*(-1)^(i+1)/i);
Döngü 2 Son
dPx_dx_ileri=(1/h)*dPx_dalfa_ileri % dPx/dx=(1/h)*dPx/dalfa
% geri fark türevi x=x0=4
% ilk değerlerin atanması
dPx_dalfa_geri= f(n,2);
Döngü 3: i=3’den n’ye kadar
dPx_dalfa_geri=dPx_dalfa_geri+(f(n,i)*(-1)^(i+1)/i);
Döngü 3 Son
dPx_dx_geri=(1/h)*dPx_dalfa_geri % dPx/dx=(1/h)*dPx/dalfa
% merkezi fark türevi x=x0=2
m=floor((n-1)/2);
dPx_dalfa_merkezi= ((f(m,2)+f(m+1,2))/2);
Döngü 4: i=2’den n’ye kadar
dPx_dalfa_merkezi=dPx_dalfa_merkezi+((f(m+i-1,2*i+1)+f(m+i,2*i+1))/2)*(-
1)^(i)*(i!*i!))/(2*i+1)!;
Döngü 4 Son
dPx_dx_merkezi=(1/h)*dPx_dalfa_merkezi % dPx/dx=(1/h)*dPx/dalfa
% alfa* 0f∆ +alfa.(alfa-1)* 02f∆ +...+alfa(alfa-1)...(alfa-(n-1))* 0f
n∆
% 0fn∆ değerleri için katsayılarının hesabı
faktor(1)=(xp-x(1))/h; % İlk değeri ata
Döngü 3: i=2’den n’ye kadar
faktor(i)=faktor(i-1)*(xp-x(i))/(h*i); % ))...((!.
)( 100
−−−∆
= ni
i
xxxxhi
fifaktor hesabı
Döngü 3 Son
Pxp=f(1,1); % İlk değeri ata, ilk değer= 0f
Döngü 4: i=2’den n’ye kadar
25
Pxp=Pxp+f(i,i)*faktor(i-1) % Fark tablosunun diyagonalindeki değerlerle ile
% katsayıları çarp
Döngü 4 Son
Pxp’yi hesapla
dPxp hesapla
Ekrana Çiz: Pxp,dPxp
Program Sonu
26
Program Çıktıları:
Türev değerleri;
0x 0
))(( 32
xxdxxPd
=
İleri Fark 0 2.3161 Merkezi Fark 2 0.4462 Geri Fark 4 0.0605
Şekil 9. )(32 xP (h=0.125) ve Ayrık Veriler
27
Şekil 10. )(32 xP (h=0.125), Ayrık Veriler ve dxxPd /))(( 32
Şekil 11. )(100 xP (h=0.125) ve Ayrık Veriler: aşırı salınım hareketleri
28
Yorumlar:
Genel olarak yorumlar “İnceleme ve Karşılaşılan Problemler” bölümünde incelenmiş
durumdadır. Burada eklenecek ileri, geri ve merkezi farkları kullanarak 0xx = ( 0=α )
noktalarında hesap edilen değerlerin, çizilen grafikle örtüştüğünün görülmesidir.
29
Kaynaklar: 1. Burden R.L., Faires J.D., Numerical Analysis, 7th Ed. Brooks/Cole, 2001. 2. Hoffman J.D., Numerical Methods for Engineers and Scientists, 2nd Ed., McGraw
Hill Inc., 2001. 3. Kunz K.S., Numerical Analysis, McGraw Hill Inc., 1957. 4. Hildebrand F.B., Introduction to Numerical Analysis, 2nd Ed., McGraw Hill Inc.,
1974.
30
Ek1) 1. Soru için yazılan Matlab kodu; clear,clc; x=[0 0.25 0.75 1.25 1.5 1.75 1.875 2 2.125 2.25]; y=[1.2 1.18 1.1 1 0.92 0.8 0.7 0.55 0.35 0]; n=size(x,2); % % Kubik Triz Hesabı % A=zeros(n); %Doğal Tiriz Katsayıları %A.x=B Şeklindeki lineer denklem sisteminin çözümü % for i=1:n-1 h(i)=x(i+1)-x(i); end A(1,1)=1; A(n,n)=1; for i=2:n-1 A(i,i)=2*(h(i)+h(i-1)); A(i,i-1)=h(i-1); A(i,i+1)=h(i); end B = zeros(n,1); B(1)=0; B(n)=0; for i=2:n-1 B(i)=(3/h(i))*(y(i+1)-y(i))-(3/h(i-1))*(y(i)-y(i-1)); end % % Cramer Kuralını kullanarak A.x=B lineer denklem isteminin çözümü % Burada Cx pivoting matris, C ise sonuç matrisi for i=1:n Cx=A; Cx(:,i)=B; C(i)=1/det(A)*det(Cx); end % Tiriz için b ve d katsayılarının hesabı for i=1:n-1 b(i)=(1/h(i))*(y(i+1)-y(i))-(h(i)/3)*(2*C(i)+C(i+1)); d(i)=(C(i+1)-C(i))/(3*h(i)); end % S(i) tiriz eğri ailesinin oluşturulması % S(i)=a(i)+b(i)*(x-x(i))+c(i)*(x-x(i))^2+d(i)*(x-x(i))^3
31
syms xp for i=1:n-1 S(i)=vpa(y(i)+b(i)*(xp-x(i))+C(i)*(xp-x(i))^2+d(i)*(xp-x(i))^3,5); end % % Tiriz denklemlerinde tanım aralıklarında 0.0625 adımla % S(x) değerlerinin hesabı % nx=0 for i=1:n-1 nn=(x(i+1)-x(i))/0.0625; for j=1:nn xSS(j+nx)=((j-1)*0.0625+x(i)) SS(j+nx)=subs(S(i),xSS(j+nx)); end if i==n-1 SS(j+nx+1)=y(n) xSS(j+nx+1)=x(n) end nx=j+nx end figure plot(xSS,SS,'.-b') hold on plot(x,y,'.r','MarkerSize',15) hold off grid on title('Tiriz ve Ayrik Veriler') xlabel('x(ft.)') ylabel('y(ft.)') axis equal axis([0 2.5 0 1.4]) legend('Tiriz Yak.','Ayrik Veri')
32
Ek2) 2. Soru için yazılan Matlab kodu; clear,clc; ts=[0:10]; Tf=[72.5 78.1 86.4 92.3 110.6 111.5 109.3 110.2 110.5 109.9 110.2]; n=size(Tf,2); % girilen veri sayısı %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % En Küçük Kareler Hesabı % S0=n+1; % S1=0; % Başlangıç Değerleri S2=0; T0=0; T1=0; for i=1:n S1=S1+ts(i); S2=S2+(ts(i))^2; T0=T0+Tf(i); T1=T1+ts(i)*Tf(i); end a1=(S2*T0-S1*T1)/(S0*S2-S1^2); a2=(S0*T1-S1*T0)/(S0*S2-S1^2); yy=a1+a2*ts; % Lineer En Küçük Kareler eğrisini kullanarak % t=[0.6, 2.5, 4.7, 8.9] zaman değerleri için % T(F) sıcaklık hesabı tt=[0.6, 2.5, 4.7, 8.9]; for i=1:4 Tkk(i)=a1+a2*tt(i); end % Lineer En Küçük Kareler eğrisini kullanarak % T=[75, 85, 90, 105] sıcaklık değerleri için % geçen t(s) süresinin hesabı TT=[75 85 90 105]; for i=1:4 skk(i)=(TT(i)-a1)/a2; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Kubik Triz Hesabı % A=zeros(n); %Doğal Tiriz Katsayıları %A.x=B Şeklindeki lineer denklem sisteminin çözümü %
33
% h(i) noktalar arasındaki adım hesabı for i=1:n-1 h(i)=ts(i+1)-ts(i); end A(1,1)=1; A(n,n)=1; for i=2:n-1 A(i,i)=2*(h(i)+h(i-1)); A(i,i-1)=h(i-1); A(i,i+1)=h(i); end B = zeros(n,1); B(1)=0; B(n)=0; for i=2:n-1 B(i)=(3/h(i))*(Tf(i+1)-Tf(i))-(3/h(i-1))*(Tf(i)-Tf(i-1)); end % % Cramer Kuralını kullanarak A.x=B lineer denklem isteminin çözümü % Burada Cx pivoting matris, C ise sonuç matrisi for i=1:n Cx=A; Cx(:,i)=B; C(i)=1/det(A)*det(Cx); end % Tiriz için b ve d katsayılarının hesabı for i=1:n-1 b(i)=(1/h(i))*(Tf(i+1)-Tf(i))-(h(i)/3)*(2*C(i)+C(i+1)); d(i)=(C(i+1)-C(i))/(3*h(i)); end % S(i) tiriz eğri ailesinin oluşturulması % S(i)=a(i)+b(i)*(x-x(i))+c(i)*(x-x(i))^2+d(i)*(x-x(i))^3 syms x for i=1:n-1 S(i)=vpa(Tf(i)+b(i)*(x-ts(i))+C(i)*(x-ts(i))^2+d(i)*(x-ts(i))^3,5); end for j=1:n-1 for i=1:5 SS(i+5*(j-1))=subs(S(j),((i-1)*0.2+ts(j))); end end SS(5*(n-1)+1)=Tf(n); % Kübik Tiriz eğrisini kullanarak % t=[0.6, 2.5, 4.7, 8.9] zaman değerleri için % T(F) sıcaklık hesabı
34
% t=0.6 için S(1), t=2.5 için S(3), t=4.7 için S(5), % t=8.9 için S(9) parça fonksiyonları kullanılacak Tks(1)=subs(S(1),0.6); Tks(2)=subs(S(3),2.5); Tks(3)=subs(S(5),4.7); Tks(4)=subs(S(9),8.9); % Nonlineer Fonksiyonlar için Newton-Raphson Metodu % ile T=[75, 85, 90, 105] sıcaklık değerleri için % geçen t(s) süresinin hesabı % T=75 için S(1), T=85 için S(2), T=90 için S(3), % T=105 için S(4) parça fonksiyonları kullanılacak for i=1:4 hata=10000; %hata iterasyon için başlangıç değeri pp=ts(i); ft=S(i)-TT(i); while hata>1.e-5 p=pp-subs(ft,pp)/subs(diff(ft,x),pp); hata=abs(p-pp); pp=p; end sol(i)=p; end sxx=0:0.2:10; figure plot(ts,Tf,'.r','MarkerSize',15) grid on title('Ayrik Sicaklik-Zaman Verisinin Dagilimi') xlabel('t(s)') ylabel('T(F)') figure plot(sxx,SS,'.-g') hold on plot(ts,yy,'.-b') hold off hold on plot(ts,Tf,'.r','MarkerSize',15) hold off axis([0 10 60 140]) grid on legend('Tiriz Yaklasimi','Lineer Regresyon','Ayrik Data') title('Lineer Regresyon vs. Kubik Tiriz Yaklasimlari') xlabel('t(s)') ylabel('T(F)') figure plot(tt,Tks,'.b','MarkerSize',16) hold on plot(tt,Tkk,'.r','MarkerSize',16) hold off
35
grid on title('Tiriz ve Lineer En Küçük Kareler ile Sicaklik Tahmini') xlabel('t(s)') ylabel('T(F)') legend('Tiriz Yak.','Lineer Regresyon',2) axis([0 10 60 130]) figure plot(sol,TT,'.b','MarkerSize',16) hold on plot(skk,TT,'.r','MarkerSize',16) hold off grid on title('Tiriz (Newton-Raphson Yöntemi) ve Lineer En Küçük Kareler ile Süre Tahmini') xlabel('t(s)') ylabel('T(F)') legend('Tiriz Yak.','Lineer Regresyon',2) axis([0 7 60 110])
36
Ek3) 3. Soru için yazılan Matlab kodu; clear,clc; tic x=0:0.125:4; y=sin(3*x).*exp(-x); n=size(y,2); f(:,1)=y'; for j=2:n for i=j:n f(i,j)=f(i,j-1)-f(i-1,j-1); end end syms xp; h=x(2)-x(1); % ileri fark türevi x=x0=0 dPx_dalfa_ileri=vpa(f(2,2)); for i=3:n dPx_dalfa_ileri=dPx_dalfa_ileri+(f(i,i)*(-1)^(i+1)/i); end dPx_dx_ileri=(1/h)*dPx_dalfa_ileri % geri fark türevi x=x0=4 dPx_dalfa_geri=vpa(f(n,2)); for i=3:n dPx_dalfa_geri=dPx_dalfa_geri+(f(n,i)*(-1)^(i+1)/i); end dPx_dx_geri=(1/h)*dPx_dalfa_geri % merkezi fark türevi x=x0=2 m=floor((n-1)/2); dPx_dalfa_merkezi=vpa((f(m,2)+f(m+1,2))/2); for i=2:m dPx_dalfa_merkezi=dPx_dalfa_merkezi+(f(m+i-1,2*i+1)+f(m+i,2*i+1))/2*(-1)^(i)*(factorial(i)*factorial(i))/factorial(2*i+1); end dPx_dx_merkezi=(1/h)*dPx_dalfa_merkezi % İleri Fark Polinomunun Hesabı factor(1)=(xp-x(1))/h; for i=2:n factor(i)=vpa(factor(i-1)*(xp-x(i))/(h*i)); end Pxp=f(1,1); for i=2:n Pxp=Pxp+vpa(f(i,i)*factor(i-1)); end Pxp=collect(Pxp); pxd=collect(diff(Pxp,'xp')); clear yxy,clear xy; xy=[0:0.01:4];
37
yxy=subs(Pxp,xy); toc figure plot(xy,yxy,'-r','MarkerSize',12) hold on plot(x,y,'.b') hold off grid on title('ileri Farklar Cokterimlisi ve Ayrik Veriler') xlabel('x') ylabel('y(x)') legend('P_{32}(x)','Ayrik Veriler') figure yxyd=subs(pxd,xy); plot(xy,yxyd,'-r','MarkerSize',12) hold on plot(xy,yxy,'-b') hold off hold on plot(x,y,'.k','MarkerSize',12) hold off grid on title('ileri Farklar Cokterimlisi, Cokterimlinin Türevi ve Ayrik Veriler') xlabel('x') ylabel('y(x)') legend('d(P_{32}(x))/dx','P_{32}(x)','Ayrik Veriler')