Tuesday, January 25, 2011

Ikinci Farkliliklar Matrisi (Second Differences Matrix)

Bazi diferansiyel denklemleri yaklasiksal olarak cozmek icin gerekli matrislerden biri caprazinda 1 -2 1 sayilarini iceren bir ozel matristir. 3x3 boyutta suna benzer
[[-2, 1, 0],
[1, -2, 1],
[0, 1,-2]]
Bu matrisi daha buyuk boyutlarda yaratmak icin guzel bir numara sudur. Matrisi parca parca yaratip toplayarak elde edebiliriz. Once ortasinda 2 sayisi olan matrisi yaratiriz:
I2 = -2*np.eye(8)
Sonuc
[[-2. -0. -0. -0. -0. -0. -0. -0.]
[-0. -2. -0. -0. -0. -0. -0. -0.]
[-0. -0. -2. -0. -0. -0. -0. -0.]
[-0. -0. -0. -2. -0. -0. -0. -0.]
[-0. -0. -0. -0. -2. -0. -0. -0.]
[-0. -0. -0. -0. -0. -2. -0. -0.]
[-0. -0. -0. -0. -0. -0. -2. -0.]
[-0. -0. -0. -0. -0. -0. -0. -2.]]

Daha sonra caprazin bir ustunde -1 olan matrisi yaratalim:
np.diag(np.ones((7)), k=1)

[[ 0. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 1. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]]

k=1 parametresi "orta capraza hangi uzakliktaki caprazi" yaratmak istedigimizi kontrol ediyor.

Simdi diger taraftaki -1 caprazini yaratalim. Burada iki yontem var: ya k=-1 kullaniriz, ya da daha basit bir yontem, bir onceki matrisin devrigini (transpose) aliriz. Sonuc ayni olacaktir.

Tum bu matrisleri toplarsak elimize gerekli farklilik matrisi gecer.
print I2 + E + E.T

[[-2. 1. 0. 0. 0. 0. 0. 0.]
[ 1. -2. 1. 0. 0. 0. 0. 0.]
[ 0. 1. -2. 1. 0. 0. 0. 0.]
[ 0. 0. 1. -2. 1. 0. 0. 0.]
[ 0. 0. 0. 1. -2. 1. 0. 0.]
[ 0. 0. 0. 0. 1. -2. 1. 0.]
[ 0. 0. 0. 0. 0. 1. -2. 1.]
[ 0. 0. 0. 0. 0. 0. 1. -2.]]

Kaynak: Strang, G. Computational Science and Engineering

No comments: