PHƯƠNG TÍCH CHẬP VÀ HỆ TOEPLITZ
TRẦN THANH SƠN
Trang nhan đề
Lời cảm ơn
Mục lục
Mở đầu
Chương_1: Ma trận Toeplitz và Circulant toeplitz
Chương_2: Phương trình Fredholm loại hai
Chương_3: Thuật toán Toeplitz
Kết luận
Tài liệu tham khảo
LỜI CẢM ƠN
Lời đầu tiên, tôi xin kính gởi đến Thầy hướng dẫn, PGS. TS. Đinh Ngọc Thanh lời cảm ơn sâu sắc về sự tận tình chỉ bảo của Thầy để tôi có thể hoàn thành luận văn này.
Xin cám ơn tất cả Quý Thầy Cô trong hội đồng chấm luận văn đã dành cho tôi thời gian quý báu và những góp ý sâu sắc trong buổi bảo vệ luận văn. Xin cám ơn Quý Thầy Cô trong Khoa Toán – Tin Trường Đại Học Khoa Học
Tự Nhiên đã tận tình hướng dẫn và cung cấp cho tôi những kiến thức cần thiết trong suốt thời gian học tập tại trường.
Xin cám ơn Quý Thầy Cô thuộc Phòng Đào tạo Sau Đại học – Trường Đại
Học Khoa Học Tự Nhiên đã tạo điều kiện thuận lợi cho tôi để hoàn thành khóa học.
Xin cám ơn BGH Trường ĐHTG và đặc biệt là các đồng nghiệp trong Khoa
Cơ bản đã cho tôi khoảng thời gian rất thuận lợi để tôi hoàn thành khóa học.
Xin chân thành cám ơn sự nhiệt tình giúp đỡ của bạn Nguyễn Duy Nhất trong quá trình làm luận văn.
Cám ơn các bạn học viên lớp Cao học Giải tích khóa 16 đã hỗ trợ cho tôi rất nhiều trong thời gian qua.
Lời thân thương nhất xin gởi đến gia đình tôi, nơi tạo cho tôi mọi điều kiện thuận lợi để học tập và thực hiện tốt luận văn.
56 trang |
Chia sẻ: maiphuongtl | Lượt xem: 2261 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Luận văn Phương trình tích chập và hệ Toeplitz, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
thức trên vào phương trình (1.2), ta được
( ) ( ) ( )n 1 i i
i 0
g t K t,s f s , t [a ;b]
−
=
= ∀ ∈∑ (1.3)
Khi đó, tại các điểm jt t= , với j 0, n 1= − , ta có hệ phương trình
( ) ( ) ( )n 1j j i i
i 0
g t K t ,s f s
−
=
=∑
và tại những điểm j js t= , ta được hệ phương trình tuyến tính theo giá trị của Nn
hàm f tại các điểm is ,
( ) ( ) ( )n 1j j i i
i 0
g s K s ,s f s
−
=
=∑ (1.4)
Trong trường hợp nhân K có dạng ( ) ( )K t,s t s= ϕ − , trong đó ϕ là một
hàm số thực cho trước, ta có
( )j, i j i j it s s t −= ϕ − = ,
và với ( )j jg s g= , ( )i if s f= , phương trình (1.4) được viết lại thành
n 1 n 1
j j, i i j i i
i 0 i 0
g t f t f
− −
−
= =
= =∑ ∑
7
nghĩa là ta được hệ
o 0 1 1 2 2 (n 1) n 1 0
1 0 0 1 1 2 (n 2) n 1 1
2 0 1 1 0 2 (n 3) n 1 2
n 1 0 n 2 1 n 3 2 0 n 1 n 1
t f t f t f t f g
t f t f t f t f g
t f t f t f t f g
t f t f t f t f g
− − − − −
− − − −
− − −
− − − − −
+ + + + =
+ + + + =
+ + + + =
+ + + + =
…
…
…
……
…
(1.5)
Hệ phương trình (1.5) được viết lại dưới dạng phương trình ma trận
nT f g= ,
trong đó
0 1 2 (n 1)
1 0 1 (n 2)
n 2 1 0 (n 3)
n 1 n 2 n 3 0
t t t t
t t t t
T t t t t
t t t t
− − − −
− − −
− −
− − −
=
…
…
…
⋮ ⋮ ⋮ ⋱ ⋮
…
là ma trận Toeplitz cấp n và
0
1
n 1
g
g
g
g
−
=
⋮
là những ma trận đã biết, và
0
1
n 1
f
f
f
f
−
=
⋮
là ma trận Nn cần tìm.
8
Một trường hợp đặc biệt của ma trận Toeplitz là ma trận Toeplitz đối xứng
dạng
0 1 2 n 1
1 0 1 n 2
n 2 1 0 n 3
n 1 n 2 n 3 0
t t t t
t t t t
T t t t t
t t t t
−
−
−
− − −
=
…
…
…
⋮ ⋮ ⋮ ⋱ ⋮
…
.
Chú ý rằng ma trận Toeplitz đối xứng được hoàn toàn xác định chỉ bằng n
số thực 0 1 n 1t , t , t − ∈ℝ .
1.2. Vectơ riêng và giá trị riêng
Nhắc lại rằng số phức α được gọi là một trị riêng của ma trận A nếu tồn tại
vectơ x khác vectơ không sao cho
Ax x= α (1.6)
và khi đó vectơ x được gọi là một vectơ riêng tương ứng với trị riêng α .
Trường hợp đặc biệt khi A là ma trận Hermite, nghĩa là *A A= , trong đó
*A là ma trận liên hợp chuyển vị của A thì các trị riêng của A là số thực. Khi đó, ta
có thể giả sử dãy giá trị riêng ( )iα của ma trận A là dãy không tăng, nghĩa là
0 1 2α ≥ α ≥ α ≥…
Xét dãy ma trận Toeplitz Hermite n k j k, j 0,1,...,n 1T t − = − = ứng với tập giá trị
riêng { }n,i ; i 0,1,2,..., n 1τ = − . Dáng điệu tiệm cận của các giá trị riêng
{ }n,i ; i 0,1,2,...,n 1τ = − này được cho bởi Định lý Szegö với điều kiện tồn tại sự
liên hệ của chuỗi Fourier với các hệ số kt ,
( ) [ ]ikk
k
f t e , 0;2
+∞
λ
=−∞
λ = λ ∈ pi∑ (1.7)
và
9
( )
2
ik
k
0
1
t f e d
2
pi
− λ
= λ λ
pi ∫
. (1.8)
Điều kiện này có nghĩa rằng dãy ( )kt xác định một hàm f và ngược lại,
các kt được xác định từ một hàm số f. Khi đó, dãy các ma trận Toeplitz được ký
hiệu bởi ( )nT f . Khi ( )nT f là ma trận Hermite thì *k kt t− = và f là hàm nhận giá trị
thực. Khi đó với mỗi hàm F liên tục trên miền xác định của f , định lý Szegö cho
( ) ( )( )2n 1 n,k
n k 0 0
1 1lim F F f d
n 2
pi
−
→∞
=
τ = λ λ
pi
∑ ∫ (1.9)
Chẳng hạn, với ( )F x x= , ta có
( )
2n 1
n,k
n k 0 0
1 1lim f d
n 2
pi
−
→∞
=
τ = λ λ
pi
∑ ∫ (1.10)
và điều này có nghĩa là trung bình cộng các trị riêng của nT (f ) hội tụ về tích phân
của hàm f .
Mặt khác, do vết ( )Tr A là tổng các phần tử trên đường chéo của A và cũng
chính là tổng của các giá trị riêng của A khi A là ma trận Hermite, nên từ (1.10), ta
suy ra
( )( ) ( )2n
n
0
1 1lim Tr T f f d
n 2
pi
→∞
= λ λ
pi ∫
(1.11)
Tương tự, với sF(x) x= , ta được
( )
2n 1
s s
n,k
n k 0 0
1 1lim f d
n 2
pi
−
→∞
=
τ = λ λ
pi
∑ ∫ (1.12)
Nếu f là hàm thực và các giá trị riêng thỏa n,k m 0 ; n,kτ ≥ > ∀ thì do hàm
F(x) ln x= liên tục trên [ )m ; + ∞ , ta suy ra
10
( )
2n 1
n,i
n i 0 0
1 1lim ln ln f d
n 2
pi
−
→∞
=
τ = λ λ
pi
∑ ∫ (1.13)
Mặt khác, do định thức của các ( )nT f chính là tích các giá trị riêng của nó,
( )( ) n 1n n,i
i 0
det T f
−
=
= τ∏ ,
(1.13) trở thành
( )( )( ) ( )21 n 1nn n,i
n x i 0 0
1 1lim ln det T f lim ln ln f d
n 2
pi
−
→∞ →∞
=
= τ = λ λ
pi
∑ ∫ (1.14)
Nếu f bị chặn dưới thì tất cả các giá trị riêng của nT (f ) sẽ bị chặn dưới và
(1.14) mô tả giới hạn của dãy định thức Toeplitz.
2. MA TRẬN CIRCULANT TOEPLITZ
2.1. Khái niệm ma trận Circulant Toeplitz
Ma trận C được gọi là ma trận Cicurlant Toeplitz nếu nó là ma trận Toeplitz
có dạng
0 1 2 n 1
n 1 0 1 2
n 1 0 1
1 n 1 0
c c c c
c c c c
C c c c
c c c
−
−
−
−
=
…
⋮
⋱
⋮ ⋱ ⋱
…
(1.15)
ký hiệu ( )k, j j k mod nC C c − = = . Đây là một trường hợp đặc biệt của ma trận Toeplitz,
trong đó là mỗi hàng dưới của ma trận là một dịch chuyển tuần hoàn của hàng trên.
Ma trận Cicurlant Toeplitz thường dùng để xấp xỉ cũng như biểu diễn dáng
điệu tiệm cận của các ma trận Toeplitz.
11
2.2. Vectơ riêng và giá trị riêng
Giá trị riêng kψ và vectơ riêng (k )y của C là nghiệm phương trình
Cy y= ψ (1.16)
hoặc tương đương với n phương trình sai phân
m 1 n 1
n m k k k m k m
k 0 k m
c y c y y ; m 0, 1, ,n 1
− −
− + −
= =
+ = ψ = −∑ ∑ … . (1.17)
Đổi chỉ số, ta được
n 1 m n 1
k k m k k (n m) m
k 0 k n m
c y c y y ; m 0, 1, ,n 1
− − −
+ − −
= = −
+ = ψ = −∑ ∑ … (1.18)
Ta có thể giải các phương trình sai phân này với cùng một phương pháp
giải các phương trình vi phân bằng cách tìm nghiệm đặc biệt của nó. Do phương
trình là tuyến tính với các hệ số hằng, một nghiệm đặc biệt hợp lý là kky = ρ (tương
tự như dạng nghiệm mũ ( ) sty t e= trong phương trình vi phân tuyến tính). Thay vào
(1.18), ta được
n 1 m n 1
k m k (n m) m
k k
k 0 k n m
c c
− − −
+ − −
= = −
ρ + ρ = ψρ∑ ∑
hay
n 1 m n 1
k n k
k k
k 0 k n m
c c
− − −
−
= = −
ρ + ρ ρ = ψ∑ ∑ .
Nếu ta chọn n 1−ρ = , nghĩa là ρ là một căn bậc n phức của đơn vị, ta nhận
được giá trị riêng
n 1
k
k
k 0
c
−
=
ψ = ρ∑ (1.19)
với vectơ riêng tương ứng
12
( )T2 n 11y 1, , , ,
n
−
= ρ ρ ρ… (1.20)
Cụ thể, với
2i m
n
m e
pi
−ρ = , ta có giá trị riêng
2 imkn 1
n
m k
k 0
c e
pi
−
−
=
ψ =∑ (1.21)
và vectơ riêng tương ứng
( )( )2 i n 12 imn n T(m) 1y 1,e , ,e
n
pi −pi
− −
= …
Từ định nghĩa của trị riêng và vectơ riêng,
(m) (m)
mCy y ; m 0,1, ,n 1= ψ = −… (1.22)
và do (1.21) chính là biểu thức Fourier rời rạc (DFT) của dãy k(c ) , ta có thể phục
hồi k(c ) từ các kψ bằng công thức biến đổi Fourier ngược. Đặc biệt,
( )
( )
2 imk
n
2 i l k m
n
n 1 n 1 n 1
2 ilm 2 ilm
m k
m 0 m 0 k 0
n 1 n 1
k l
k 0 m 0
1 1
e c e e
n n
1
c e c
n
pi
pi −
− − −
−pi pi
= = =
− −
= =
ψ =
= =
∑ ∑∑
∑ ∑
(1.23)
trong đó ta dùng tính chất
2 imk
n
n l
k mod n
m 0
n khi k mod n 0
e n
0 khi k mod n 0
pi
−
=
=
= δ =
≠
∑ (1.24)
với ký hiệu Kronecker
m
1 khi m 0
0 khi m 0
=δ =
≠
Như vậy, giá trị riêng của ma trận Circulant là biến đổi Fourier rời rạc của
dòng đầu tiên của nó, và ngược lại, dòng đầu tiên của ma trận Circulant là biến đổi
Fourier rời rạc ngược của các giá trị riêng của nó.
13
Phương trình (1.22) có thể được viết lại dưới dạng ma trận
CU U= Ψ (1.25)
trong đó
(0) (1) (2) (n 1)
2 imk
n
m,k 0,1, , n 1
U y y y y
1
e
n
−
pi
−
= −
=
=
…
…
là ma trận mà mỗi vectơ cột là một vectơ riêng và ( )kdiagΨ = ψ là ma trận chéo
với các phần tử chéo là 0ψ , 1ψ , ..., n 1−ψ . Hơn nữa (1.24) cho thấy U là ma trận
unita. Thật vậy, ký hiệu phần tử hàng k cột j của *UU bởi k, ja và chú ý rằng k, ja
chính là tích của hàng thứ k của U,
2 imk
n
1
e ;m 0,1, ,n 1
n
pi
−
= −
…
với cột thứ j của *U ,
2 imj
n
1
e ;m 0,1, ,n 1
n
pi
= −
… .
Do đó
( )
( )
2 im j kn 1
n
k, j k j mod n
m 0
1
a e
n
pi −
−
−
=
= = δ∑
và ta có *UU I= . Tương tự *U U I= . Do vậy (1.25) trở thành
*C U U= Ψ (1.26)
*U CUΨ = (1.27)
2.3. Các phép toán trên ma trận Circulant
Từ các kết quả nhận được trong phần trên, ta tổng kết một số tính chất quan
trọng về phép toán trên ma trận Circulant như sau :
14
Định lý. Mỗi ma trận Circulant C có vectơ riêng
( )( )2 i n 12 imn n T(m) 1y 1,e , ,e
n
pi −pi
− −
= … ,
với m 0, 1, ,n 1= −… , tương ứng với các giá trị riêng
2 imkn 1
n
m k
k 0
c e
pi
−
−
=
ψ =∑
và có thể biểu thị dưới dạng
*C U U= Ψ
trong đó U có các vectơ cột chính là các vectơ riêng và Ψ là ma trận chéo
( )kdiagΨ = ψ . Đặc biệt, mọi ma trận Circulant có cùng các vectơ riêng có thể biểu
diễn bởi ma trận U và bất kỳ ma trận C có dạng *C U U= Ψ là ma trận Circulant.
Cho ( )k jC c −= và ( )k jB b −= là hai ma trận Circulant cấp n với các giá trị
riêng tương ứng
2 imkn 1
n
m k
k 0
c e
pi
−
−
=
ψ =∑ ,
2 imkn 1
n
m k
k 0
b e
pi
−
−
=
β =∑ .
Khi đó
(1) C và B giao hoán,
*CB BC U U= = γ ,
trong đó ( )m mdiagγ = ψ β , và CB cũng là ma trận Circulant.
(2) C B+ là ma trận Circulant và
*C B U U+ = Ω
trong đó ( )( )m m k m−Ω = ψ + β δ .
(3) Nếu m 0 ; m 0, 1, ,n 1ψ ≠ = −… thì C là không suy biến và
1 1 *C U U− −= Ψ .
15
Chứng minh. Ta có
*C U U= Ψ và *B U U= Φ ,
với ( )mdiagΨ = ψ và ( )mdiagΦ = β .
(1) Ta có
* * * *CB U U U U U U U U BC= Ψ Φ = ΨΦ = ΦΨ =
và vì ΦΨ là ma trận chéo nên ta suy ra CB là ma trận Circulant.
(2) *C B U( )U+ = Ψ + Φ
(3) Nếu Ψ không suy biến, thì
1 * * 1 * 1 * *CU U U U U U U U UU I− − −Ψ = Ψ Ψ = ΨΨ = = .
Do đó,
1 1 *C U U− −= Ψ .
16
Chương 2
PHƯƠNG TRÌNH FREDHOLM LOẠI HAI
Trong chương này, chúng ta khảo sát phương trình Fredholm loại hai dạng
( ) ( ) ( ) ( )
b
a
f t K t,s f s ds g t= λ +∫ (2.1)
với ( )f t là Nn hàm cần tìm, ( )g t và ( )K t,s là các hàm cho trước, trong đó ( )K t,s
được gọi là nhân của phương trình tích phân. Khi ( )g t 0= phương trình tương ứng
được gọi là thuần nhất.
Ta khảo sát 3 bài toán sau :
Bài toán 1 : Tìm nghiệm của phương trình không thuần nhất (2.1) với λ và
( )g t cho trước.
Bài toán 2 : Tìm giá trị riêng và vectơ riêng của nhân ( )K t,s , tức là tìm
tham số λ , để phương trình thuần nhất
( ) ( ) ( )
b
a
f t K t,s f s ds= λ∫
có nghiệm không tầm thường ( )f t . Giá trị λ nhận được gọi là giá trị riêng của
( )K t,s và hàm ( )f t 0≠ tương ứng được gọi là hàm riêng (vectơ riêng) của
( )K t,s .
Bài toán 3 : Các giải thuật giải số phương trình Fredholm loại hai và thực
hành một số ví dụ cụ thể.
17
1. TÌM NGHIỆM XẤP XỈ CỦA PHƯƠNG TRÌNH FREDHOLM LOẠI HAI
KHÔNG THUẦN NHẤT
1.1. Phương pháp Nystrom (thay nhân bằng tổng hữu hạn)
Dùng công thức cầu phương
( ) ( )b n j j
j 1a
y s ds w y s
=
=∑∫ (2.2)
trong đó ( )jw là những trọng số của công thức cầu phương và [ ]1 2 ns ,s ,...,s a ; b∈ .
Thay công thức (2.2) vào (2.1), ta được phương trình xấp xỉ
( ) ( ) ( ) ( )n j j j
j 1
f t w K t,s f s g t
=
= λ +∑ (2.3)
Khi đó, với it t= , i 1,..., n= , ta có phương trình
( ) ( ) ( ) ( )ni j i j j i
j 1
f t w K t ,s f s g t
=
= λ +∑ ; i 1,..., n= (2.4)
Đặt ( )i if f t= , ( )i ig g t= , ( )ij i jK K t ,s= và ij i j jK K w=ɶ thì (2.4) được viết
lại thành hệ phương trình tuyến tính
1 11 1 12 2 1n n 1
2 21 1 22 2 2n n 2
n n1 1 n2 2 nn n n
f K f K f ... K f g
f K f K f ... K f g
...
f K f K f ... K f g
= λ + λ + + λ +
= λ + λ + + λ +
= λ + λ + + λ +
ɶ ɶ ɶ
ɶ ɶ ɶ
ɶ ɶ ɶ
(2.5)
hay dưới dạng phương trình ma trận
( )1 K f g− λ ⋅ =ɶ . (2.6)
Hệ (2.5) là hệ gồm n phương trình tuyến tính, n Nn. Giải hệ phương trình
này, ta được giá trị của hàm f tại những điểm ( )it . Tại những điểm t khác, ta dùng
18
(2.3) làm công thức nội suy. Như vậy, biểu thức giải tích của nghiệm gần đúng có
thể lấy ở công thức (2.3).
Để tìm các giá trị riêng gần đúng, trong (2.6) cho ig 0= , ta được hệ
phương trình thuần nhất. Để hệ có nghiệm không tầm thường thì định thức của hệ
phải bằng không. Từ đó, ta được phương trình bậc n của λ . Giải phương trình này,
ta được các giá trị riêng gần đúng 1 n, ...,λ λɶ ɶ . Thay các giá trị riêng này vào hệ thuần
nhất tương ứng, ta được các hàm số riêng tương ứng độc lập tuyến tính của ( )K t,s .
Ví dụ 2.1. Giải xấp xỉ phương trình tích phân Fredholm loại hai với nhân
không suy biến
( ) ( ) ( )1 t s t
0
f t t 1 e f s ds e t= − + −∫ .
Dùng công thức cầu phương Simpson
( ) ( ) ( ) ( )
1
0
1y x dx y 0 4y 0.5 y 1
6
≈ + + ∫ ,
để tìm nghiệm gần đúng tại 1 2 3t 0 ; t 0.5 ; t 1= = = , ta được hệ phương trình tuyến
tính (theo (2.6))
( )
( )
( )
11 1 12 2 13 3 1
21 1 22 2 23 3 2
31 1 32 2 33 3 3
1 K f K f K f g
K f 1 K f K f g
K f K f 1 K f g
− − − =
− + − − =
− − + − =
ɶ ɶ ɶ
ɶ ɶ ɶ
ɶ ɶ ɶ
(2.7)
Do
t t s
1 2 3
1 2 1g(t) e t ;w ,w ,w ;K(t,s) t(1 e )
6 3 6
= − = = = = −
ta suy ra
19
( )
( )
( ) ( )
11 12 13
21
0,25
22
0,5
23
0,5
31 32 33
K K(0,0) 0;K K(0,0.5) 0;K K(0,1) 0
K K(0.5,0) 0;
1K K(0.5,0.5) 1 e ;
2
1K K(0.5,1) 1 e
2
K K(1,0) 0 ; K K(1,0.5) 1 e ; K K(1,1) 1 e
= = = = = =
= =
= = −
= = −
= = = = − = = −
Từ đó, ta có
( ) ( )
( ) ( )
11 12 13
0,25 0,5
21 22 23
0,5
31 32 33
K K K 0
1 1K 0 ; K 1 e ; K 1 e
3 12
2 1K 0 ; K 1 e ; K 1 e
3 6
= = =
= = − = −
= = − = −
ɶ ɶ ɶ
ɶ ɶ ɶ
ɶ ɶ ɶ
và
0.5
1 2 3g 1 ; g e 0.5 ; g e 1= = − = − .
Thay vào (2.7) ta được
( ) ( )
( ) ( )
1
0.25 0.5 0.5
2 3
0.5
2 3
f 1
1 1
e 2 f e 1 f e 0.5
3 12
2 1
e 1 f e 5 f e 1
3 6
=
+ + − = −
− + + = −
(2.8)
Với các xấp xỉ
0.25 0.5e 1.2840254 ; e 1.6487213≈ ≈
( ) ( )
( ) ( )
0.25 0.5
0.5
1 1
e 2 1.0947 ; e 1 0.0541
3 12
2 1
e 1 0.4325 ; e 5 1.2864
3 6
+ ≈ − ≈
− ≈ + ≈
20
(2.8) trở thành
1
2 3
2 3
f 1
1.0947f 0.0541f 1.1487
0.4325f 1.2864f 1.7183
=
+ =
+ =
và ta được 1 2 3f 1 ; f 0.9999 ; f 0.9996= = = .
Ta nhận được một biểu thức giải tích của nghiệm xấp xỉ theo công thức
(2.3)
( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )1 1 1 2 2 2 3 3 3f t w K t,s f s w K t,s f s w K t,s f s g t= + + +
trong đó
1 2 3
0.5 t
1 2 1
w , w , w
6 3 6
K(t,0) 0, K(t,0.5) t(1 e ) ,K(t,1) t(1 e )
f (0) 1, f (0.5) 0.9999, f (1) 0.9996
= = =
= = − = −
= = =
và do đó
( ) ( ) ( )0.5t t t2 1f t t 1 e 0.9999 t 1 e 0.9996 e t3 6= − + − + −
hay
( ) 0.5t t tf t 0.1668t 0.6666te 0.1666te e= − − − +
Nghiệm này cho các giá trị xấp xỉ tại một vài điểm như sau
( ) ( ) ( ) ( ) ( )f 0 1 ; f 0.5 1.0000 ; f 1 0.9996; f 0.4 1.0000 ; f 0.8 0.9999= = = = = .
Chú ý rằng nghiệm chính xác của phương trình là ( )f t 1= .
21
1.2. Phương pháp thay nhân bằng nhân suy biến
Khi nhân ( )K t,s ở phương trình (2.1) có thể biểu diễn dưới dạng
( ) ( ) ( )n i i
i 1
K t,s A t B s
=
=∑ (2.9)
thì nhân ( )K t,s được gọi là nhân suy biến, chẳng hạn các nhân
( ) t st s, t s, sin t s , e ,...−+ ⋅ + là các nhân suy biến. Chú ý rằng nhân ( ) t sK t,s e= tuy
là nhân không suy biến nhưng ta có thể xấp xỉ ( )K t,s bằng nhân suy biến với độ
chính xác tùy ý bằng khai triển Taylor
( )knt s
k 0
t s
e
k!
=
=∑ .
Giả sử ta phải giải phương trình (2.1) với nhân dạng (2.9). Khi đó, ta giả sử
các hệ ( ) ( ) ( ){ }1 2 nA t ,A t ,...,A t và ( ) ( ) ( ){ }1 2 nB s ,B s ,...,B s là các hệ độc lập tuyến
tính trên [ ]a ; b (vì trong trường hợp ngược lại, ta có thể rút gọn bớt số hạng trong
tổng ở vế phải của (2.9)). Thay (2.9) vào phương trình (2.1), ta được
( ) ( ) ( ) ( )
b n
i i
i 1a
f t A (t)B s f s ds g t
=
= λ +∑∫
hay
( ) ( ) ( ) ( ) ( )
bn
i i
i 1 a
f t A t B s f s ds g t
=
= λ +∑ ∫ (2.10)
Đặt
( ) ( )
b
i i
a
C B s f s ds= ∫ (2.11)
thì nghiệm của phương trình đã cho có thể được tìm dưới dạng
22
( ) ( ) ( )n i i
i 1
f t g t C A t
=
= + λ∑ (2.12)
Thay (2.12) vào (2.10), ta có
( ) ( ) ( ) ( ) ( ) ( ) ( )
bn n n
i i i i j j
i 1 i 1 j 1a
g t C A t A t B s g s C A s ds g t
= = =
+ λ = λ + λ +
∑ ∑ ∑∫
Rút gọn hai vế, ta suy ra
( ) ( ) ( ) ( ) ( )
bn n n
i i i i j j
i 1 i 1 j 1a
C A t A t B s g s C A s ds
= = =
= + λ
∑ ∑ ∑∫
nghĩa là
( ) ( ) ( ) ( ) ( ) ( ) ( )
b bn n n n
i i i i i j i j
i 1 i 1 i 1 j 1a a
C A t A t B s g s ds A t C B s A s ds
= = = =
= + λ∑ ∑ ∑ ∑∫ ∫ (2.13)
Đặt
( ) ( )
b
i i
a
g B s g s ds= ∫ , ( ) ( )
b
ij i j
a
B s A s dsα = ∫
và vì ( ) ( ) ( ){ }1 2 nA t ,A t ,...,A t độc lập tuyến tính, (2.13) trở thành hệ phương trình
tuyến tính
n
i i j ij
j 1
C g C
=
= + λ α∑
hay
n
i ij j i
j 1
C C g
=
− λ α =∑ (2.14)
Nếu định thức của (2.14) là ( )D 0λ ≠ thì ta tìm được duy nhất các giá trị
iC ; i 1,...,n= và ta có nghiệm duy nhất của phương trình ở công thức (2.12).
23
Nếu ( )D 0λ = khi kλ = λ , thì kλ là giá trị riêng của ( )K t,s và ta tìm
nghiệm của (2.14) ứng với ig 0= , ta sẽ được hệ hàm số riêng độc lập tuyến tính của
( )K t,s tương ứng với kλ .
Như vậy, thuật toán giải phương trình (2.1) với nhân suy biến gồm các
bước sau :
Bước 1. Tính các tích phân
( ) ( )
b
i i
a
g B s g s ds= ∫ ; ( ) ( )
b
ij i j
a
B s A s dsα = ∫ ; ( )i, j 1,...,n=
Bước 2. Giải hệ phương trình tuyến tính
n
i ij j i
j 1
C C g
=
− λ α =∑ ; ( )i 1,...,n=
Nếu định thức của hệ khác không, thì tồn tại duy nhất iC ( )i 1,...,n=
Bước 3. Nghiệm cần tìm có dạng
( ) ( ) ( )n i i
i 1
f t g t C A t
=
= + λ∑ .
Ví dụ 2.2. Giải phương trình tích phân Fredholm loại hai với nhân suy biến,
( ) ( ) ( )1 t s t
0
f t e f s ds e t+= − + +∫ .
Ta có nhân ( ) t s t sK t,s e e .e+= − = − cho ( ) tA t e= − và ( ) sB s e= .
Ta tìm nghiệm của phương trình dưới dạng,
( ) ( )t t tf t e t C A t e t Ce= + + ⋅ = + − .
Ta có
( ) ( )1 1 1s s s 2s 2
0 0 0
1g s e e ds se ds e ds e 1
2
= + = + = +∫ ∫ ∫
24
( )1 1s s 2s 2
0 0
1
e e ds e ds 1 e
2
α = − = − = −∫ ∫
và ta có phương trình
( ) ( )2 21 1C e 1 C 1 e C 1
2 2
= + + − ⇔ =
Vậy, nghiệm của phương trình là
t tf (t) e t e t= + − = .
Ví dụ 2.3. Ta khảo sát lại ví dụ 2.1 với phương trình
( ) ( ) ( )1 t s t
0
f t t 1 e f s ds e t= − + −∫ .
Ta xấp xỉ ( )K t,s bằng công thức Taylor,
2 2 3 3 2 3
t s 2 3 4t s t s s st (1 e ) t 1 1 ts t ( s) t t
2 6 2 6
− ≈ − + + + = − + − + −
Thay vào phương trình ban đầu, ta được
( ) ( )
1 2 3
2 3 4 t
0
s sf t t ( s) t t f s ds e t
2 6
= − + − + − + −
∫
và ta nhận được phương trình Fredholm loại hai với nhân suy biến.
Ta tìm nghiệm của phương trình dưới dạng
( ) t 2 3 41 2 3f t e t C t C t C t= − + + + ,
trong đó 1 2 3C ,C ,C là nghiệm của hệ (theo (2.14))
1 1 11 2 12 3 13 1
2 1 21 2 22 3 23 2
3 1 31 2 32 3 33 3
C (C C C ) g
C (C C C ) g
C (C C C ) g
− α + α + α =
− α + α + α =
− α + α + α =
hay
25
11 1 12 2 13 3 1
21 1 22 2 23 3 2
31 1 32 2 33 3 3
(1 )C C C g
C (1 )C C g
C C (1 )C g
− α − α − α =
−α + − α − α =
−α − α + − α =
Ta được
1
s
1
0
1 2g (e s)sds 1
3 3
= − − = − − = −
∫
1 2
s
2
0
s e 9g (e s) ds
2 2 8
= − − = − +∫
1 3
s
3
0
s 2e 29g (e s) ds
6 6 30
= − − = −∫
1 1 1
3 4 5
11 12 13
0 0 0
1 1 1
s ds ; s ds ; s ds
4 5 6
α = − = − α = − = − α = − = −∫ ∫ ∫
1 1 1
4 5 6
21 22 23
0 0 0
1 1 1 1 1 1
s ds ; s ds ; s ds
2 10 2 12 2 14
α = − = − α = − = − α = − = −∫ ∫ ∫
1 1 1
5 6 7
31 32 33
0 0 0
1 1 1 1 1 1
s ds ; s ds ; s ds
6 36 6 42 6 48
α = − = − α = − = − α = − = −∫ ∫ ∫
Thay các ig và ijα vào hệ phương trình trên, ta được
1 2 3
1 2 3
1 2 3
5 1 1 2C C C
4 5 6 3
1 13 1 e 9C C C
10 12 14 2 8
1 1 49 2e 29C C C
36 42 48 6 30
+ + = −
+ + = − +
+ + = −
Giải hệ này, ta được (lấy e 2.7183≈ )
26
1
2
3
C 0.5010
C 0.1671
C 0.0418
= −
= −
= −
và ta nhận được một biểu thức giải tích của nghiệm xấp xỉ
( ) t 2 3 4f t e t 0.5010t 0.1671t 0.0418t= − − − − .
Các giá trị xấp xỉ của nghiệm tại một vài giá trị là
( ) ( ) ( ) ( ) ( )f 0 1 ; f 0.5 1.0000 ; f 1 1.0084; f 0.4 0.9999 ; f 0.8 1.0022= = = = = .
Nhắc lại rằng, nghiệm chính xác của phương trình là ( )f t 1= .
2. CHƯƠNG TRÌNH TÍNH XẤP XỈ NGHIỆM PHƯƠNG TRÌNH TÍCH
PHÂN FREDHOLM LOẠI HAI
Trong phần này, chúng tôi đưa ra hai chương trình dùng để giải các phương
trình Fredholm tuyến tính loại hai. Chương trình fred2 được cài đặt giải hệ (2.6)
bằng phân rã LU. Chương trình fredin nhằm tính nội suy Nystrom của phương
trình (2.3).
2.1. Cấu trúc chương trình
Các chương trình được sử dụng gồm fred2 và fredin.
Chương trình fred2 có dữ liệu đầu vào là một con trỏ hàm g trả về ( )g t
và một con trỏ hàm khác ( )ak trả về ( )K t,s , dữ liệu đầu ra là hàm nghiệm f tại
các điểm quadrature, các điểm quadrature và trọng số. Các dữ liệu ra này được sử
dụng cho chương trình fredin nhằm tính nội suy Nystrom của phương trình (2.3)
từ đó trả về giá trị của f tại bất kỳ điểm nào trong đoạn [ ]a ; b .
2.1.1. Chương trình fred2
Chương trình này nhằm giải phương trình tích phân Fredholm loại hai có
dạng
27
( ) ( ) ( ) ( )
b
a
f t K t,s f s ds g t= λ +∫ .
Input :
a, b : Giới hạn trên và giới hạn dưới của tích phân,
n : Số điểm được sử dụng trong luật xấp xỉ tích phân,
con trỏ hàm g : Trỏ đến hàm ( )g t ,
con trỏ hàm ak : Trỏ đến hàm ( )K t,s .
Output :
mảng t có n phần tử : Các hệ số it của luật xấp xỉ tích phân Gaussian,
mảng f có n phần tử : Giá trị hàm nghiệm f tại các điểm it ,
mảng w có n phần tử : Các trọng số Gaussian iw .
Mã lệnh chương trình :
void fred2(int n, float a, float b, float t[], float f[],
float w[],float (*g)(float), float (*ak)(float, float))
{
int i,j,*indx; (1)
float d,**omk;
indx=ivector(1,n); (2)
omk=matrix(1,n,1,n); (3)
gauleg(a,b,t,w,n); (4)
for (i=1;i<=n;i++) { (5)
for (j=1;j<=n;j++) (6)
omk[i][j]=(float)(i == j)-(*ak)(t[i],t[j])*w[j];
f[i]=(*g)(t[i]); (7)
}
ludcmp(omk,n,indx,&d); (8)
lubksb(omk,n,indx,f); (9)
28
free_matrix(omk,1,n,1,n); (10)
free_ivector(indx,1,n);
}
Chú thích
(1) : Khai báo các biến sử dụng trong chương trình.
(2) : Gán indx là vector (mảng một chiều) có n phần tử, indx được sử
dụng cho bước (8).
(3) : Gán omk là ma trận (mảng hai chiều) có kích thước 1..n 1..n× .
(4) : Gọi chương trình gauleg để lấy các hệ số it và trọng số iw của công
thức xấp xỉ tích phân cho n điểm Gauss-Legendre.
(5), (6) : Vòng lặp hai chiều để gán ma trận omk là ma trận ( )1 K− λ ɶ .
(5), (7) : Với i chạy từ 1 đến n, gán [ ]f i bằng ( )ig t . Lúc này f sẽ là cột tự
do g trong hệ ( )1 K f g− λ ⋅ =ɶ .
(8) : Gọi chương trình ludcmp để thực hiện phân rã LU ma trận hệ số của
hệ ( )1 K f g− λ ⋅ =ɶ . Chương trình này nhận vào ma trận vuông omk cấp n, và trả về
kết quả phân rã trở lại trong omk, mảng chứa chỉ số indx và d. Các kết quả trả về
này sẽ được sử dụng cho chương trình lubksb để thực hiện giải hệ với một cột tự
do cụ thể.
(9) : Gọi chương trình lubksb để giải hệ với cột tự do chứa trong f (đã
được gán ở bước (7)). Nghiệm trả về được lưu trở lại trong f. Lúc này, [ ]f i cho ta
giá trị của hàm nghiệm f tại các điểm quadrature it . Các giá trị này sẽ là căn cứ cho
chương trình fredin thực hiện nội suy Nystrom để tính giá trị hàm nghiệm f tại
một điểm bất kỳ trong đoạn [ ]a ; b .
(10) : Giải phóng các biến trung gian, và kết thúc chương trình. Các kết quả
output của chương trình lúc này được chứa trong các mảng t, f và w.
29
2.1.2. Chương trình fredin
Chương trình này nhằm nội suy giá trị của hàm nghiệm f tại một điểm x
bất kỳ trong đoạn [ ]a ; b bằng công thức nội suy Nystrom (2.3).
Input :
a, b : Giới hạn trên và giới hạn dưới của tích phân,
n : Số điểm được sử dụng trong luật xấp xỉ tích phân,
con trỏ hàm g : Trỏ đến hàm ( )g t ,
con trỏ hàm ak : Trỏ đến hàm ( )K t,s ,
mảng t có n phần tử : Các hệ số it của luật xấp xỉ tích phân Gaussian,
mảng f có n phần tử : Giá trị hàm nghiệm f tại các điểm it ,
mảng w có n phần tử : Các trọng số Gaussian iw .
(t, f, và w là các Output của chương trình fred2)
Output :
Giá trị nội suy.
Mã lệnh chương trình :
float fredin(float x, int n, float a, float b, float t[], float f[],
float w[], float (*g)(float), float (*ak)(float, float))
{
int i;
float sum=0.0;
for (i=1;i<=n;i++) sum += (*ak)(x,t[i])*w[i]*f[i];
return (*g)(x)+sum;
}
30
2.2. Kết quả thử nghiệm
Ví dụ 2.4. Giải xấp xỉ phương trình tích phân Fredholm loại hai với nhân
suy biến
( ) ( ) ( )1 t s t
0
f t e f s ds e t+= − + +∫
trong đó ( )f t là Nn hàm cần tìm, ( ) t sK t,s e += − là nhân, ( ) tg t e t= + . Phương
trình này có nghiệm chính xác là ( )f t t= .
Mã lệnh chương trình
DP g(const DP t) (1)
{
const DP EE = 2.71828;
return (pow(EE,t)+t);
}
DP ak(const DP t, const DP s) (2)
{
const DP EE = 2.71828;
return -pow(EE,t+s);
}
int main(void)
{
const int N=8; (3)
DP a=0.0,b=1.0,x,ans; (4)
Vec_DP t(N),f(N),w(N); (5)
NR::fred2(a,b,t,f,w,g,ak); (6)
cout << fixed << setprecision (6);(7)
cout << "Vi du 1" << endl;
for (;;) { (8)
cout << "Nhap vao gia tri x trong khoang tu 0 den 1" << endl;
(8.1)
cin >> x; (8.2)
if (x < 0.0) break; (8.3)
31
ans=NR::fredin(x,a,b,t,f,w,g,ak); (8.4)
cout << "x da nhap, ket qua f(x) xap xi, ket qua f(x) thuc" <<
endl;
cout << setw(10) << x << setw(11) << ans; (8.5)
cout << setw(11) << x << endl << endl; (8.6)
}
return 0; (9)
}
Chú thích
(1) : Định nghĩa hàm ( ) tg t e t= + .
(2) : Định nghĩa hàm ( ) t sK t,s e += − .
(3) : Khai báo hằng số N bằng 8, là số điểm của luật xấp xỉ tích phân.
(4) : Khai báo các giới hạn trên, giới hạn dưới của tích phân, biến x, ans sẽ
được dùng khi chạy thử nghiệm kết quả ở bước (8).
(5) : Khai báo các vectơ t, f, w có N phần tử.
(6) : Gọi chương trình fred2, các kết quả trả về được lưu trong các vectơ
t, f, w.
(7), (8) : Yêu cầu người sử dụng nhập vào một giá trị x để thử nghiệm (8.1,
8.2) (nếu x bé hơn 0 thì kết thúc chương trình (8.3)). Sau đó chương trình sẽ gọi
chương trình fredin tính nội suy Nystrom để có xấp xỉ của ( )f x (được trả về
trong biến ans) (8.4), và xuất các kết quả gồm : giá trị x được nhập vào, giá trị xấp
xỉ ( )f x (8.5), giá trị ( )f x thực (trong ví dụ này, hàm nghiệm chính xác là
( )f x x= ) (8.6).
(9) : Kết thúc chương trình.
Với một số giá trị x = 0.2 ; 0.5 ; 0.8, chương trình nêu trên cho ta kết quả
như sau :
32
Ví dụ 2.5. Giải xấp xỉ phương trình tích phân Fredholm loại hai với nhân
không suy biến
( ) ( ) ( )1 t s t
0
f t t 1 e f s ds e t= − + −∫
trong đó, ( )f t là Nn hàm cần tìm, ( ) ( )t sK t,s t 1 e= − là nhân, ( ) tg t e t= − . Phương
trình này có nghiệm chính xác là ( )f t 1= .
Mã lệnh chương trình
DP g(const DP t)
{
const DP EE = 2.71828;
return (pow(EE,t)-t);
}
DP ak(const DP t, const DP s)
{
const DP EE = 2.71828;
return t*(1-pow(EE,t*s));
}
int main(void)
{
const int N=8;
DP a=0.0,b=1.0,x,ans;
Vec_DP t(N),f(N),w(N);
NR::fred2(a,b,t,f,w,g,ak);
33
cout << fixed << setprecision(6);
cout << "Vi du 2" << endl;
for (;;) {
cout << "Nhap vao gia tri x trong khoang tu 0 den 1" << endl;
cin >> x;
if (x < 0.0) break;
ans=NR::fredin(x,a,b,t,f,w,g,ak);
cout << "x da nhap, ket qua f(x) xap xi, ket qua f(x) thuc" <<
endl;
cout << setw(10) << x << setw(11) << ans;
cout << setw(11) << 1 << endl << endl;
}
return 0;
}
Với một số giá trị x = 0.2 ; 0.4 ; 0.7, chương trình cho kết quả sau
Ví dụ 2.6. Giải xấp xỉ phương trình tích phân Fredholm loại hai với nhân
dạng tích chập
( ) ( )
1
t t s
0
f t e t e f s ds−= + − ∫
trong đó, ( )f t là Nn hàm cần tìm, ( ) ( )t sK t,s e t s−= − = ϕ − là nhân, ( ) tg t e t= + .
Phương trình này có nghiệm chính xác là ( ) t 1f t t e −= + .
34
Mã lệnh chương trình
DP g(const DP t)
{
const DP EE = 2.71828;
return (pow(EE,t)+t);
}
DP ak(const DP t, const DP s)
{
const DP EE = 2.71828;
return -pow(EE,t-s);
}
int main(void)
{
const DP EE = 2.71828;
const int N=8;
DP a=0.0,b=1.0,x,ans;
Vec_DP t(N),f(N),w(N);
NR::fred2(a,b,t,f,w,g,ak);
cout << fixed << setprecision(6);
cout << "Vi du 3" << endl;
for (;;) {
cout << "Nhap vao gia tri x trong khoang tu 0 den 1" << endl;
cin >> x;
if (x < 0.0) break;
ans=NR::fredin(x,a,b,t,f,w,g,ak);
cout << "x da nhap, ket qua f(x) xap xi, ket qua f(x) thuc" <<
endl;
cout << setw(10) << x << setw(11) << ans;
cout << setw(11) << (x+(1.0/EE)*pow(EE,x)) << endl << endl;
}
return 0;
}
Với một số giá trị x = 0.2 ; 0.4 ; 0.7 ; 0.9, chương trình cho kết quả
35
Ví dụ 2.7. Giải xấp xỉ phương trình tích phân Fredholm loại hai với nhân
dạng tích chập và có nhiễu tham số
( ) ( ) ( )
1
2
0
1 f t t s f s ds t t
n
= − + +∫
hay
( ) ( ) ( ) ( )1 2
0
f t n t s f s ds n t t= − + +∫ ,
trong đó ( )f t là Nn hàm cần tìm, ( ) ( ) ( )K t,s n t s t s= − = ϕ − là nhân,
( ) ( )2g t n t t= + . Phương trình này có nghiệm chính xác là
( ) ( )
3 2 3 2
2
2 2
n 10n 12n n 42nf t nt t
n 12 6 n 12
− + + −
= + + + +
.
Với n 10= ta có ( ) 2 15 200f t 10t t
14 42
= + − .
Với n 100= ta có ( ) ( )2f t 100t 89,77227327 t 9,65508057= − + .
Với n 1000= ta có ( ) ( )2 957,9885041f t 1000t 989,9761203 t
6
= − + .
36
Mã lệnh chương trình
DP n = 100;
DP g(const DP t)
{
return n*(t*t+t);
}
DP ak(const DP t, const DP s)
{
return n*(t-s);
}
int main(void)
{
const int N=8;
DP a=0.0,b=1.0,x,ans;
Vec_DP t(N),f(N),w(N);
NR::fred2(a,b,t,f,w,g,ak);
cout << fixed << setprecision(6);
cout << "Vi du 4 voi N = " << (int)n << endl;
for (;;) {
cout << "Nhap vao gia tri x trong khoang tu 0 den 1" << endl;
cin >> x;
if (x < 0.0) break;
ans=NR::fredin(x,a,b,t,f,w,g,ak);
cout << "x da nhap, ket qua f(x) xap xi, ket qua f(x) thuc" <<
endl;
cout << setw(10) << x << setw(11) << ans;
DP tmp = n*x*x + ((-n*n*n+10*n*n+12*n)/(n*n+12))*x + (n*n*n-
42*n*n)/(6*(n*n+12));
cout << setw(11) << tmp << endl << endl;
}
return 0;
}
Với n 10= và các giá trị x = 0.2 ; 0.4 ; 0.7 ; 0.9, chương trình cho
37
Với n 100= và các giá trị x = 0.2 ; 0.4 ; 0.7 ; 0.9, ta được
Với n 1000= và các giá trị x = 0.2 ; 0.4 ; 0.7 ; 0.9, ta có
38
Chương 3
THUẬT TOÁN TOEPLITZ
Trong chương này, chúng ta trình bày giải thuật giải số hệ phương trình
tuyến tính AX B= , với A là ma trận Toeplitz đối xứng nhằm ứng dụng vào việc
giải số các phương trình Fredholm loại một và Fredholm loại hai có nhân là các
hàm dạng tích chập.
1. THUẬT TOÁN TOEPLITZ
Trước hết, ta xét hệ phương trình
0 0 1 1 n n 0
1 0 0 1 n 1 n 1
n 0 n 1 1 0 n n
t f t f t f g
t f t f t f g
t f t f t f g
−
−
+ + + =
+ + + =
+ + + =
…
…
…
…
(3.1)
hay dưới dạng ma trận
nT f g=
với ma trận
0 1 n
1 0 n 1
n
n n 1 0
t t t
t t t
T
t t t
−
−
=
…
…
…
…
là ma trận Toeplitz đối xứng cấp n 1+ và ma trận cột [ ]T0 1 ng g g ... g= là những
ma trận đã biết, còn ma trận cột [ ]T0 1 nf f f ... f= là ma trận Nn hàm cần tìm.
Ta xây dựng [ ]Tn n0 n1 nnf f f f= … là nghiệm của hệ phương trình (3.1)
bằng quy nạp theo n như sau
39
1. Với k 0= , đặt
00 0 0 0 1
0
00 0 00 1
0
a 1, t , t
gf , f t
t
= α = β =
= γ =
2. Giả sử ta có [ ]Tk k0 k1 kkf f f f= … là nghiệm của hệ (3.1) với n k= ,
nghĩa là ta có
k0 k1 kk k ka , a , , a ; ,α β…
và
k0 k1 kk kf , f , , f ; γ…
sao cho các hệ (3.2) và (3.3) sau đây thỏa
k0 0 k1 1 kk k k
k0 1 k1 0 kk k 1
k0 k k1 k 1 kk 0
k0 k 1 k1 k kk 1 k
a t a t a t
a t a t a t 0
a t a t a t 0
a t a t a t
−
−
+
+ + + = α
+ + + =
+ + + =
+ + + = β
…
…
…
…
…
(3.2)
k0 0 k1 1 kk k 0
k0 1 k1 0 kk k 1 1
k0 k k1 k 1 kk 0 k
k0 k 1 k1 k kk 1 k
f t f t f t g
f t f t f t g
f t f t f t g
f t f t f t
−
−
+
+ + + =
+ + + =
+ + + =
+ + + = γ
…
…
…
…
…
(3.3)
Ta cần chứng minh
T
k 1 k 1,0 k 1,1 k 1,k 1f f f f+ + + + + = … là nghiệm của (3.1)
với n k 1= + .
a) Trước hết, ta tính
k 1,0 k 1,1 k 1,k k 1,k 1 k 1 k 1a , a , , a , a ; ,+ + + + + + +α β…
bằng cách đặt
40
k 1,0 k0
k 1,1 k1 k kk
k 1,k kk k k1
k 1,k 1 k k0
a a
a a p a
a a p a
a p a
+
+
+
+ +
=
= +
= +
=
… (3.4)
và
k 1 k k k
k 1 k 1,0 k 2 k 1,1 k 1 k 1,k 1 1
p
a t a t a t
+
+ + + + + + +
α = α + β
β = + + + …
(3.5)
với
k
k
k
p β= −
α
(3.6)
thì ta cần chứng tỏ rằng
k 1,0 0 k 1,1 1 k 1,k 1 k 1 k 1
k 1,0 1 k 1,1 0 k 1,k 1 k
k 1,0 k 1 k 1,1 k k 1,k 1 0
k 1,0 k 2 k 1,1 k 1 k 2,k 2 1 k 1
a t a t a t
a t a t a t 0
a t a t a t 0
a t a t a t
+ + + + + +
+ + + +
+ + + + +
+ + + + + + +
+ + + = α
+ + + =
+ + + =
+ + + = β
…
…
…
…
…
(3.7)
Thật vậy, để kiểm chứng (3.7), ta có
k 1,0 0 k 1,1 1 k 1,k k k 1,k 1 k 1a t a t a t a t+ + + + + ++ + + +…
k0 0 k1 k kk 1 kk k k1 k k k0 k 1a t (a p a )t (a p a )t p a t += + + + + + +…
k0 0 k1 1 kk k k k0 k 1 k1 k kk 1(a t a t a t ) p (a t a t a t )+= + + + + + + +… …
k k k k 1p += α + β = α
k 1,0 1 k 1,1 0 k 1,k k 1 k 1,k 1 ka t a t a t a t+ + + − + ++ + + +…
k0 1 k1 k kk 0 kk k k1 k 1 k k0 ka t (a p a )t (a p a )t p a t−= + + + + + +…
41
k0 1 k1 0 kk k 1 k k0 k k1 k 1 kk 0(a t a t a t ) p (a t a t a t )− −= + + + + + + +… …
k0 p 0 0= + =
k 1,0 k 1 k 1,1 k k 1,k 1 k 1,k 1 0a t a t a t a t+ + + + + ++ + + +…
k0 k 1 k1 k kk k kk k k1 1 k k0 0a t (a p a )t (a p a )t p a t+= + + + + + +…
k0 k 1 k1 k kk 1 k k0 0 k1 1 kk k(a t a t a t ) p (a t a t a t )+= + + + + + + +… …
k
k k
k
0β= β − α =
α
k 1,0 k 2 k 1,1 k 1 k 2,k 2 1 k 1a t a t a t+ + + + + + ++ + + = β…
theo (3.5)
b) Tiếp theo, ta tính
k 1,0 k 1,1 k 1,k k 1,k 1 k 1f , f , , f , f ;+ + + + + +γ…
bằng cách đặt
k 1,0 k0 k k 1,k 1
k 1,1 k1 k k 1,k
k 1,k kk k k 1,1
k 1,k 1 k k 1,0
f f q a
f f q a
f f q a
f q a
+ + +
+ +
+ +
+ + +
= +
= +
= +
=
… (3.8)
và
k 1 k 1,0 k 2 k 1,1 k 1 k 1,k 1 1f t f t f t+ + + + + + +γ = + + +…
với
k 1 k
k
k 1
gq +
+
− γ
=
α
(3.9)
Khi đó, ta cần phải chứng tỏ rằng
42
k 1,0 0 k 1,1 1 k 1,k 1 k 1 0
k 1,0 1 k 1,1 0 k 1,k 1 k 1
k 1,0 k 1 k 1,1 k k 1,k 1 0 k 1
k 1,0 k 2 k 1,1 k 1 k 1,k 1 1 k 1
f t f t f t g
f t f t f t g
f t f t f t g
f t f t f t
+ + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + =
+ + + =
+ + + =
+ + + = γ
…
…
…
…
…
(3.10)
Thật vậy, ta có
k 1,0 0 k 1,1 1 k 1,k k k 1,k 1 k 1f t f t f t f t+ + + + + ++ + + +…
k0 k k 1,k 1 0 k1 k k 1,k 1 kk k k 1,1 k k k 1,0 k 1(f q a )t (f q a )t (f q a )t q a t+ + + + + += + + + + + + +…
k0 0 k1 1 kk k k k 1,0 k 1 k 1,1 k k 1,k 1 0(f t f t f t ) q (a t a t a t )+ + + + += + + + + + + +… …
0 k 0g q .0 g= + =
k 1,0 1 k 1,1 0 k 1,k k 1 k 1,k 1 kf t f t f t f t+ + + − + ++ + + +…
k0 k k 1,k 1 1 k1 k k 1,k 0 kk k k 1,1 k 1 k k 1,0 k(f q a )t (f q a )t (f q a )t q a t+ + + + − += + + + + + + +…
k0 1 k1 0 kk k 1 k k 1,0 k k 1,1 k 1 k 1,k 1 1(f t f t f t ) q (a t a t a t )− + + − + += + + + + + + +… …
1 k 1g q .0 g= + =
k 1,0 k 1 k 1,1 k k 1,k 1 k 1,k 1 0f t f t f t f t+ + + + + ++ + + +…
k0 k 1 k1 k kk 1 k k 1,0 0 k 1,1 1 k 1,k 1 k 1(f t f t f t ) q (a t a t a t )+ + + + + += + + + + + + +… …
k 1 k
k k k 1 k k 1 k 1
k 1
gq g++ + +
+
− γ
= γ + α = γ + α =
α
Từ đó, ta xây dựng được thuật toán giải hệ phương trình (3.1) gồm các
bước như sau :
Bước 1. Với k = 0, đặt
43
00 0 0 0 1
0
00 0 00 1
0
a 1, t , t
gf , f t
t
= α = β =
= γ =
Bước 2. Giả sử, ta đã xây dựng được
k0 k1 kk k k
k0 k1 kk k
a , a , , a ; ,
f , f , , f ;
α β
γ
…
…
thì ta đặt
k 1,0 k0
k 1,1 k1 k kk
k 1,k kk k k1
k 1,k 1 k k0
a a
a a p a
a a p a
a p a
+
+
+
+ +
=
= +
= +
=
…
k 1 k k kp+α = α + β
với
k
k
k
k 1 k
k
k 1
p
gq +
+
β
= − α
− γ
=
α
Bước 3. Nghiệm của hệ phương trình là
T
k 1 k 1,0 k 1,1 k 1,k 1f f f f+ + + + + = …
với
k 1,0 k0 k k 1,k 1
k 1,1 k1 k k 1,k
k 1,k kk k k 1,1
k 1,k 1 k k 1,0
f f q a
f f q a
f f q a
f q a
+ + +
+ +
+ +
+ + +
= +
= +
= +
=
…
44
2. CHƯƠNG TRÌNH GIẢI HỆ PHƯƠNG TRÌNH TOEPLITZ
Chương trình mytoeplitz
Input :
n : Cấp của ma trận Toeplitz.
t : Mảng một chiều gồm n phần tử it ( )i 0,...,n 1= − đại diện cho n đường
chéo của ma trận Toeplitz đối xứng.
g : Mảng một chiều gồm n phần tử ứng với vectơ cột hệ số tự do của hệ cần
giải.
Output :
Mảng f có n phần tử ứng với vectơ nghiệm tìm được.
Mã lệnh chương trình :
void NR::mytoeplitz(float[] t, float[] g, float[] f, int n)
{
int i;
float alpha,beta,gamma,p,q; (1)
float *a, *anext; (2)
a = fvector(1,n);
anext = fvector(1,n);
if (n<2) (3)
{
nrerror("Size of n must be larger than 1");
return;
}
a[0] = 1; (4)
alpha = t[0];
beta = t[1];
f[0] = g[0]/t[0];
gamma = f[0]*t[1];
for(int k=1;k<n;k++) (5)
45
{
p = -beta/alpha; (5.1)
anext[0] = a[0]; (5.2)
for(i=1;i<k;i++)
{
anext[i] = a[i] + p*a[k-i];
}
anext[k] = a[0]*p;
alpha = alpha + p*beta; (5.3)
beta = 0; (5.4)
for(i=0;i<=k;i++)
{
beta += anext[i]*t[k+1-i];
}
q = (g[k] - gamma)/alpha; (5.5)
for(i=0;i<k;i++) (5.6)
{
f[i] = f[i] + q*anext[k-i];
}
f[k] = q*anext[0];
gamma = 0; (5.7)
for(i=0;i<=k;i++)
{
gamma += f[i]*t[k+1-i];
}
for(i=0;i<=k;i++)
{
a[i] = anext[i];
}
}
}
46
Chú thích
(1) : Khai báo các biến sử dụng trong chương trình. alpha ứng với kα ,
beta ứng với kβ , gamma ứng với kγ , p ứng với kp , q ứng với kq .
(2) : Khai báo mảng a và anext có n phần tử, [ ]ia (phần tử thứ i của
mảng a, i 0..n 1= − ) ứng với kia , [i]anext ứng với k 1, ia + .
(3) : Kiểm tra nếu n 2< thì thoát khỏi chương trình.
(4) : Gán các giá trị khởi tạo : 00a 1= , 0tα = , 1tβ = , 000
0
gf
t
= , 0 00 1f tγ = .
(5) : Cho vòng lặp với k chạy từ 1 đến n 1− , lần lượt tính các kia , kα , kβ ,
kif , kγ .
(5.1) : Tính kk
k
p β= −
α
.
(5.2) : Tính k 1,0 k0a a+ = , k 1,1 k1 k kka a p a+ = + , ..., k 1, k kk k k1a a p a+ = + ,
k 1,k 1 k0 ka a p+ + = .
(5.3) : Tính k 1 k k kp+α = α + β .
(5.4) : Tính k 1+β theo công thức k 1 k 1,0 k 2 k 1,1 k 1 k 1,k 1 1a t a t ... a t+ + + + + + +β = + + +
(giá trị của k 1+β được gán trở lại vào biến beta vì phần sau ta không còn dùng đến
kβ nữa).
(5.5) : Tính k 1 kk
k 1
gq +
+
− γ
=
α
.
(5.6) : Tính các k 1,if + theo công thức : k 1,0 k0 k k 1,k 1f f q a+ + += + ,
k 1,1 k1 k k 1, kf f q a+ += + , ..., k 1,k kk k k 1,1f f q a+ += + , k 1, k 1 k k 1,0f q a+ + += .
(5.7) : Tính k 1 k 1,0 k 2 k 1,1 k 1 k 1, k 1 1f t f t ... f t+ + + + + + +γ = + + + .
47
3. KẾT QUẢ THỬ NGHIỆM
3.1. Kết quả thử nghiệm đối với hệ Toeplitz
Ví dụ 3.1. Xét lại hệ phương trình (3.1)
nT f g=
trong đó ma trận
0 1 n
1 0 n 1
n
n n 1 0
t t t
t t t
T
t t t
−
−
=
…
…
…
…
là ma trận Toeplitz đối xứng cấp n 1+ và ma trận cột [ ]T0 1 ng g g ... g= .
a) Với n = 9 và
( )0 1 9 0.000001,0.111111,0.222222,0.333333,0.444444,t , t ,..., t 0.555556,0.666667,0.777778,0.888889,1.0
=
[ ]T0 1 ng g g ... g=
T0.132120, 0.102953, 0.084845, 0.076632, 0.077274,
0.085841, 0.101500, 0.123500, 0.151179, 0.183940
=
Nếu giải bằng thuật giải Toeplitz thì nghiệm của hệ là
T0.026777, 0.049764, 0.044531, 0.039848, 0.035658,
f
0.031908, 0.028552, 0.025550, 0.022863, 0.010608
=
Nếu ta dùng phần mềm Maple 12 thì kết quả là (làm tròn 6 chữ số thập
phân)
T0.026778, 0.049766, 0.044528, 0.039848, 0.035662,
f
0.031914, 0.028535, 0.025556, 0.022869, 0.010605
=
b) Với n = 9 và
48
( )0 1 9 1.00, 1111.11, 2222.22, 3333.33, 4444.44,t , t ,..., t 5555.56, 6666.67, 7777.78, 8888.89, 10000.00
− − − −
=
− − − − −
[ ]T0 1 ng g g ... g= .
Ta xét hai trường hợp sau :
- Trường hợp 1 : với
T1321.2, 1029.53, 848.45, 766.32, 772.74,
g
858.41, 1014.98, 1235.0, 1511.79, 1839.4
− − − − −
=
− − − − −
nếu giải bằng thuật giải Toeplitz, nghiệm thu được là
T0.026789, 0.049752, 0.044531, 0.039848, 0.035658,
f
0.031908, 0.028553, 0.025550, 0.022859, 0.010615
=
và nếu ta dùng phần mềm Maple 12 thì kết quả là (làm tròn 6 chữ số thập phân)
T0.026791, 0.049753, 0.044528, 0.039848, 0.035662,
f
0.031905, 0.028553, 0.025550, 0.022864, 0.010612
=
- Trường hợp 2 : với
[ ]Tg 1000, 2000,3000, 4000,5000, 6000,7000, 8000,9000, 10000= − − − − −
nếu giải bằng thuật giải Toeplitz, nghiệm thu được là
T1.79726, 3.593531, 5.390298, 7.187063, 8.983829,
f
10.780595, 12.577361, 14.374125, 16.175334, 8.089396
− −
=
− − −
và nếu ta dùng phần mềm Maple 12 thì kết quả là (làm tròn 6 chữ số thập phân)
T1.797212, 3.593430, 5.390182, 7.186933, 8.983721,
f
10.780545, 12.577333, 14.374082, 16.175277, 8.089364
− −
=
− − −
49
3.2. Giải một số phương trình Fredholm bằng cách đưa về hệ Toeplitz
Ví dụ 3.2. Cho phương trình Fredholm loại một
( )
1
t
0
e 1 e 2
t s f s ds e t
2e 2e
−
+ +
− = + −
∫ (3.11)
trong đó ( )f t là Nn hàm cần tìm, hàm nhân ( ) ( )K t,s t s t s= ϕ − = − và hàm
t e 1 e 2g(t) e t
2e 2e
−
+ +
= + −
.
Nghiệm chính xác của phương trình là t1f (t) e
2
−
= .
a) Giải trực tiếp sử dụng thuật giải Toeplitz : Ta chia đoạn [ ]0; 1 thành
n 1− đoạn bằng nhau [ ]0 1s ,s , [ ]1 2s ,s , ... , [ ]n 2 n 1s ,s− − , với 0s 0= , n 1s 1− = , nghĩa là
mỗi đoạn có độ dài 1h
n 1
=
−
.
Xấp xỉ tích phân ở vế trái của (3.11) bằng công thức cầu phương,
( ) ( )
1 n 1
i i
i 00
f s ds w f s
−
=
=∑∫ ,
và để đơn giản trong việc tính toán ta chọn iw 1= , với mọi i 0,n 1= − . Khi đó
(3.11) trở thành
( ) ( ) ( )n 1 i i
i 0
g t K t,s f s
−
=
=∑
Tại điểm jt t= ; j 0,...,n 1= − , ta có
n 1
j j i i
i 0
g(t ) K(t ,s )f (s )
−
=
=∑ (3.12)
hay
50
( ) ( ) ( ) ( ) ( )n 1 n 1j j i i j i i
i 0 i 0
g s K s ,s f s s s f s
− −
= =
= = ϕ −∑ ∑
Đặt
( )ji j i j it s s t −= ϕ − = , j jg(s ) g= , i if (s ) f=
(3.12) có thể viết lại dạng
n 1
j j i i
i 0
g t f
−
−
=
=∑
hay dưới dạng phương trình ma trận
nT .f g=
trong đó
0 1 2 (n 1)
1 0 1 (n 2)
n 2 1 0 (n 3)
n 1 n 2 n 3 0
t t t t
t t t t
T t t t t
t t t t
− − − −
− − −
− −
− − −
=
…
…
…
⋮ ⋮ ⋮ ⋱ ⋮
…
là ma trận Toeplitz cấp n và
0
1
n 1
g
g
g
g
−
=
⋮
là những ma trận đã biết và
0
1
n 1
f
f
f
f
−
=
⋮
là ma trận Nn phải tìm.
51
Do ( )t s t sϕ − = − là hàm đối xứng, nên nT là ma trận Toeplitz đối xứng.
Khi đó, nT có dạng
0 1 n 1
1 0 n 2
n
n 1 n 2 0
t t ... t
t t ... t
T
... ... ... ...
t t ... t
−
−
− −
=
.
Giải ví dụ (3.2) với n = 10. Khi đó,
h 0.111111=
is 0 h i h i 0.111111 i= + ⋅ = ⋅ = ⋅ .
( ) ( ) ( ) T0 1 9
T
g g s ,g s ,...,g s
0.13212,0.102953,0.084845,0.076632,0.077274,
0.085841,0.1015,0.1235,0.151179,0.18394
=
=
( )0 1 9 0.000001,0.111111,0.222222,0.333333,0.444444,t , t ,..., t 0.555556,0.666667,0.777778,0.888889,1.0
=
(ta đã cộng thêm 0.000001 vào 0t để phù hợp với thuật giải Toeplitz).
Kết quả nghiệm f là
T0.026777,0.049764,0.044531,0.039848,0.035658,
f
0.031908,0.028552,0.02555,0.022863,0.010608
=
,
với nghiệm chính xác của hệ là t1f (t) e
2
−
= . Ta có bảng so sánh giữa nghiệm f thực
và nghiệm f giải được theo cách trên :
52
(Với n càng lớn, thì kết quả càng xấu đi)
b) Giải bằng cách đưa về dạng Fredholm loại hai : Ta viết lại (3.11) thành
( ) ( )
1
0
0 t s f s ds g t= − −∫
Cộng thêm ( )1 f t
M
vào vế trái (với M khá lớn) và đặt
( ) t e 1 e 2g t e t
2e 2e
−
+ +
= − + −
Ta có
( ) ( ) ( )
1
0
1 f t t s f s ds g t
M
= − +∫ (3.13)
Ta coi như (3.13) xấp xỉ tương đương với (3.11) khi M khá lớn, nghĩa là
nghiệm của (3.13) cũng là nghiệm của (3.11) và ngược lại.
Giải (3.13) với chương trình fred2 đã trình bày ở trên, với M = 100, số
khoảng chia là 10, sử dụng chương trình gauleg để xấp xỉ tích phân, không sử
dụng thuật giải Toeplitz (đương nhiên, vì các khoảng chia không đều nhau), ta có
kết quả
53
(cột Abscissa là cột các it , cột Calc soln là cột nghiệm f đã tính được, cột True soln
là cột f tính từ nghiệm thực t1f (t) e
2
−
= )
Thực hiện lại với M 1000= , ta có
Với M 10000= , ta có
Nếu không dùng chương trình gauleg để chọn khoảng it và iw , mà
chọn it cách đều nhau, cho tất cả iw 1= , thì kết quả sẽ rất xấu :
Với M 10000=
54
Với M 10000= và số khoảng chia là 100
Với số khoảng chia lớn hơn nữa thì chương trình chạy rất chậm, do chương
trình fred2 này vẫn đang sử dụng kiểu giải ma trận bằng phân rã LU.
Trong trường hợp ví dụ này, ta vẫn có thể sử dụng thuật giải Toeplitz, vì
trong phương trình Fredholm loại hai, ma trận hệ số là ( )i j j1 K w− λ (theo phương
trình (2.6)), nên khi các khoảng chia đều nhau, jw 1= với mọi j, và
( ) ( )K t,s t s t s= ϕ − = − là hàm đối xứng, thì ma trận hệ số này cũng có dạng
Toeplitz đối xứng, thậm chí còn tốt hơn trường hợp Fredholm loại một, vì 0t đã
khác 0 ( 0t 1= ).
Với M 10000= và số khoảng chia là 100
55
Nhận thấy rằng kết quả không hề khác so với khi sử dụng kiểu giải ma trận
bình thường (điều này cho thấy thuật giải Toeplitz của ta là chính xác). Tuy nhiên,
ta đã có thể chạy với số khoảng chia lớn hơn mà chương trình không bị chậm.
Với M 10000= và số khoảng chia là 1000
Tuy nhiên, vấn đề cần hướng đến là xấp xỉ được nghiệm thực thì ta vẫn
chưa đạt được.
56
KẾT LUẬN
Luận văn đã trình bày được giải thuật cơ bản cho việc xấp xỉ nghiệm của
phương trình tích phân với dữ liệu rời rạc bằng việc khảo sát một hệ phương trình
tuyến tính.
Đối với phương trình tích phân Fredholm loại hai, ta được bài toán chỉnh
nhưng nếu cần xấp xỉ nghiệm tại một số lớn các điểm nút, hệ phương trình tuyến
tính nhận được là tương đối lớn và như vậy việc sử dụng các giải thuật thông
thường như giải thuật LU sẽ cho thời gian thực khi chạy chương trình là chậm, thậm
chí không khả thi.
Luận văn khảo sát một loại phương trình tích phân quan trọng trong khá
nhiều ứng dụng với nhân có dạng ( ) ( )K t,s t s= ϕ − , với hàm số thực ϕ cho trước.
Phương trình tích phân với nhân loại này cho hệ phương trình tuyến tính với ma
trận các hệ số thuộc loại ma trận Toeplitz mà luận văn đưa ra giải thuật giải với độ
phức tạp ( )O n thay vì ( )2O n cho trường hợp tổng quát.
Đối với phương trình tích phân loại một, luận văn cũng đã đưa ra các tính
số nghiệm xấp xỉ tương ứng với nghiệm của một số các phương trình tích phân loại
hai.
Kết quả nhận được của luận văn chưa thật sự thuyết phục do các phép xấp
xỉ tích phân với các trọng số iw 1= và các điểm nút đều nhau không cho được sai
số nhỏ cần thiết.
Hướng phát triển bổ sung là các kết quả lý thuyết cho việc đánh giá các sai
số trong việc xấp xỉ phương trình tích phân bằng hệ phương trình tuyến tính cũng
như khảo sát trường hợp xấp xỉ tích phân bằng các trọng số cũng như các điểm nút
thay đổi.
57
TÀI LIỆU THAM KHẢO
[1] Đặng Đình Áng, Trần Lưu Cường, Huỳnh Bá Lân, Nguyễn Văn Nhân (2001),
Biến Đổi Tích Phân, NXB Giáo Dục.
[2] Phạm Kỳ Anh (2000), Giải Tích Số, NXB ĐHQG Hà Nội.
[3] Nguyễn Minh Chương, Nguyễn Văn Khải, Khuất Văn Ninh, Nguyễn Văn
Tuấn, Nguyễn Tường (2002), Giải Tích Số, NXB Giáo Dục.
[4] Nguyễn Công Tâm, Đinh Ngọc Thanh (2005), Phương Trình Tích Phân, NXB
ĐHQG TP. Hồ Chí Minh.
[5] Lê Đình Thịnh (1995), Phương Pháp Tính, NXB Khoa học và Kỹ thuật Hà
Nội.
[6] Hồ Thuần, Nguyễn Công Thúy, Nguyễn Quý Hỷ, Phan Văn Hạp (1970), Cơ
Sở Phương Pháp Tính, NXB Đại học và Trung học Chuyên nghiệp.
[7] Trần Văn Trân (2007), Phương pháp số thực hành, NXB ĐHQG Hà Nội.
[8] Dương Thủy Vỹ (2001), Phương Pháp Tính, NXB Khoa học và Kỹ thuật Hà
Nội.
[9] Andreas Kirsch (1996), An Introduction to the Mathematical Theory of
Inverse Problems.
[10] Andrei D. Polyanin and Alexander V. Manzhirov (1998), Handbook of
Integral Equations, CRC Press Boca Raton London New York Washington.
[11] E. C. Titchmarsh (1975), Introduction to the theory of Fourier integrals, 7th
edition, Oxford University Press, London.
[12] N.S. Bakhvalov (1977), Numerical Methods, Mir Publishers, Moscow.
[13] Robert M. Gray, Toeplitz and Circulant Matrices: A review, Stanford
University, Stanford 94305, USA.
58
[14] Seymour Lipschutz, Marc Lars Lipson (2001), Theory and Problems of Linear
Algebra, Third edition, McGraw-Hill.
[15] U. Grenander, G. Szegö (1958), Toeplitz Forms and Their Applications, Univ.
of California Press, Berkeley and Los Angeles, 3, pp. 64-65.
[16] William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery
(1992), Numerical Recipes in C: The Art of Scientific Computing, Cambridge
University Press.