Kübik spline

Diğer interpolasyon yöntemleri ile aynı olan amacı, belli bir fonksiyonun ayrık parçalarının (noktalarının) bilgilerini kullanarak, aynı fonksiyonun bilinmeyen başka noktaları için bir veri elde etmektir.
Sınırlı bir fonksiyon ya da fonksiyonun belirli sınırları içinde işlem yapılır. Sınır noktaları belirli ve sabittir. Her bir Xi ve Xi+1 değeri arasında kalan bölge S
olarak adlandırılır ve buna kübik spline interpolantı denir. Bu interpolant aşağıdaki koşulları sağlar;
Koşullar
1. S(x) [Tüm S'ler]bir kübik polinomdur ve her bir alt aralık [Xi, Xi+1] için Sk [k=0,1,2... n-1] olarak gösterilir.
2. Sk(xk)=f(xk) ve Sk(xk+1)=f(xk+1) [k=0,1,2... n-1].
3. Sk+1(xk+1)=Sk(xk+1) [k=0,1,2... n-2] ==>Açıkça görülüyor ki bir herhangi bir aralığın ilk noktası bir önceki aralığın son noktasıdır.
4. S'k+1(xk+1)=S'k(xk+1) [k=0,1,2... n-2]==> 3. eşitlikten bu iki noktanın fonksiyon üzerinde aynı olduğunu göstermiştik. Aynı nokta olduklarından dolayı açıktır ki alınan
eğimler (türevler) de eşittir.
5. Sk+1(xk+1)=S'k(xk+1)[k=0,1,2... n-2]==>3 ve 4. eşitliğe bakarsak noktaların ve eğimlerin de aynı olduğunu görürüz. Buna bağlı olarak 2. türevleri yani konvekslik veya
konkavlıkları da aynıdır.
6. Aşağıdaki sınır koşullarından bir tanesi doğru olarak kabul edilir. Bunun nedeni bilinmeyen sayısı ile denklem sayısını eşitlemektir. Burada x0 ve xn sınır noktalarıdır.
S(x0)=S(xn) => Doğal kübik spline. [İlk ve son noktanın 2. türevleri eşit alınır.]
S'(x0)=f'(x0) ve S'(xn)=f'(xn) => Kenetli kübik spline.
ÇIKARIM
Sk(x)=ak+bk(x-xk)+ck(x-xk)2+dk(x-xk)3 [k=0,1,2... n-1] {1. denklem}
Sk(xk)=ak=f(xk) [2. koşuldan dolayı]
Sk+1(xk+1)=ak+1=Sk(xk+1) [3. koşuldan dolayı]
ak+1=ak+bk(xk+1-xk)+ck(xk+1-xk)2+dk(xk+1-xk)3 [k=0,1,2... n-2] {2. denklem}
hk=(xk+1-xk) {3. denklem}
ak+1=ak+bk hk+ck hk2+dk hk3 [k=0,1,2... n-2] {4. denklem}
not: ak=f(xk)
S'k(x)=bk+2ck(x-xk)+3dk(x-xk)2 [k=0,1,2... n-1] {5. denklem}
S'k(xk)=bk [k=0,1,2... n-1] {6. denklem}
S'k+1(xk+1)=S'k(xk+1)=bk+1 [k=0,1,2... n-2][4. koşuldan dolayı]{7. denklem}
not: bk=S'(xk)
Sk(x)= 2ck + 6dk(x-xk) [k=0,1,2... n-1] {8. denklem}
Sk(xk)= 2ck [k=0,1,2... n-1] {9. denklem}
ck+1= Sk+1(xk+1)/2== Sk (xk+1)/2 [5. koşuldan dolayı]
ck+1=ck+3dkhk [k=0,1,2... n-2] {10. denklem}
not: ck=S''(xk)/2
[10. denklemden dolayı]===> dk=(ck+1-ck)/3hk {11. denklem}
[4. ve 11. denklemlerden dolayı] ===> ak+1=ak+bkhk+ckhk2+[(ck+1-ck)/3hk]hk3
> ak+1 ak+bkhk+hk2(2ck+ck+1)/3 {12. denklem}
[7. ve 11. denklemlerden dolayı]===> bk+1=bk+2ckhk+3hk2[(ck+1-ck)/3hk]
> bk+1 bk+hk(ck+ck+1) {13. denklem}
[12. denklemden dolayı] ===> bk=[(ak+1-ak)/hk] -hk(2ck+ck+1)/3 {14. denklem}
[14. denklemden dolayı] ===> bk-1=[(ak-ak-1)/hk-1] -hk-1(2ck-1+ck)/3 {15. denklem}
[15. denklemden dolayı] ===> bk = bk-1+hk+(ck-1+ck)
[14. ve 15. denklemklerden dolayı] ===>
[(ak+1-ak)/hk] -hk(2ck+ck+1)/3 = [(ak-ak-1)/hk-1] -hk-1(2ck-1+ck)/3 +hk-1(ck-1+ck)
=> [3(ak+1-ak)/hk]-[3(ak-ak-1)/hk-1]hk(2ck+ck+1)-hk-1(ck-1+ck)+3hk-1(ck-1+ck)
> hk-1ck-1+2(hk-1+hk)ck+hkck+1 3(ak+1-ak)/hk-3(ak-ak-1)/hk-1 {16. denklem}
Bu 16 denklemin sonucu olarak artık sistemde bilinmeyen olarak sadece ck'lar [k=0,1,2... n] kalır ve bk ile dk'lar ck cinsinden yazılır. Bu şekilde ck'ların bulunması ile birlikte 11 ve 14. denklemlerden dk ve bk'lar da bulunur. hk ve ak'lar ise zaten fonksiyon üzerindeki xk'lar ve onların değerlerine bakarak belirlenir. [ak=f(xk) ve hk=xk+1-xk]
Bu şekilde tüm a, b, c ve d değerlerinin bulunması ile kübik polinom olan Sk(x)[k=0,1,2.. n-1] bulunur.
Bu noktadan itibaren tek problem ck'ların bulunmasıdır. 16. denklemden ck'ların ak'lar üzerinden bulunmasının sağlanması için her a ve c değerlerinin tek olması gerekmektedir. 6. koşul göz önüne alındığında ise istenilen şartlar tamamlanmış olunur.
ALGORİTMA
1. x0, x1... xn ve f(x0), f(x1)... f(xn)==> Girilecek değerler.
2. hi=xi+1-xi [i=0,1,2... n]
3. Ri=3(ai+1-ai)/hi-3(ai-ai-1)/hi-1 [i=0,1,2... n]
4. l0=1, M0=0, Z0=0
5. i=1,... n-1 D0
li=2(xi+1-xi-1)-hi-1 Mi-1
Mi=hi/li
Zi=(Ri-hi-1 zi-1)/li
6. ln=1, Zn=0, cn=0
7. P=n-1, n-2...0
cj=-Zj-Mj cj+1
bj=(aj+1-aj)/hj-hj(cj+1+2cj)/3
dj=(cj+1-cj)/3hj
8. S'in yapılanması (construct).
İnterpolasyon