Numerical Method

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

Đề cương Phương pháp tính

21020055 - Trần Thùy Dung

May 29

1 Giải gần đúng phương trình


1. Trình bày các phương pháp giải gần đúng phương trình. Áp dụng và giải phương trình
f (x) = sin (x) với x ∈ [3, 4].

Phương pháp Khởi tạo i = 1 i = 2 i = 3


Chia đôi:
p = 3.5 p = 3.25 p = 3.125
p = (a + b)/2
a = 3, b = 4 f (p) < 0 f (p) < 0 f (p) > 0
- f (p) < 0 ∶ a ← p
[a, b] ∶ [3.5, 3] [a, b] ∶ [3.25, 3] [a, b] ∶ [3.25, 3.125]
- f (p) > 0 ∶ b ← p
Điểm bất động: g(p) = f (p) + p
p1 = 3.141 p2 = 3.14159265
p ← g(p) p0 = 3
Newton:
f (pn−1 ) p0 = 3 p1 = 3.143 p2 = 3.141592653
pn = pn−1 − ′
f (pn−1 )
Dây cung:
pn = pn−1 −
p0 = 4 p1 = 3.157 p2 = 3.139 p3 = 3.141592
f (pn−1 )(pn−1 − pn−2 )
f (pn−1 ) − f (pn−2 )
Điểm sai: p1 = 3.157 p2 = 3.142
a.f (b) − b.f (a) [a, b] ∶ [4, 3] f (p1 ) < 0 f (p2 ) < 0 p3 = 3.141592
p=
f (b) − f (a) [a, b] ∶ [3.157, 3] [a, b] ∶ [3.142, 3]

2 Giải hệ phương trình


2.1 Giải chính xác
Trình bày các phương pháp giải trực tiếp hệ phương trình tuyến tính.
Giải. Các phương pháp giải trực tiếp:

• Phương pháp Cramer, phương pháp thế, phương pháp sử dụng ma trận nghịch đảo.
• Phương pháp khử Gauss, Gauss-Jordan. Thực hiện các thao tác hàng.
• Phân tích nhân tử. Nếu phân tích A = LU , với L là ma trận tam giác dưới và U là
ma trận tam giác trên, thì có thể tính y từ Ly = b, rồi tính được x từ y = U x. Một số
phương pháp phân tích dưới đây có thể áp dụng:

– Phương pháp Cholesky: Chỉ áp dụng khi A là ma trận xác định dương. Ta

1
phân tích A = L ● LT , với L là ma trận tam giác dưới. Xác định L:
¯
U

√ aj1
l11 = a11 , lj1 = (2 ≤ j ≤ n)
l11
¿
Á j−1
ljj = Á
Àa − ∑ l 2
jj js (2 ≤ j ≤ n)
s=1

1 j−1
lpj = (apj − ∑ ljs .lps ) (2 ≤ j, j + 1 ≤ p ≤ n)
ljj s=1

– Phương pháp Doolittle: Ta phân tích:


⎡ 1 0 0⎤ ⎡a11 a12 a13 ⎤
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
A = ⎢l21 1 0⎥ ● ⎢ 0 u22 u23 ⎥
⎢ ⎥ ⎢ ⎥
⎢l31 l32 1⎥ ⎢ 0 0 u33 ⎥⎦
⎣ ⎦ ⎣
´¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¸ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¶ ´¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¸ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¶
L U

Các phần tử của L, U xác định như sau:

U1j = A1j L1j = 1/Ujj ⋅ A1j


Uij = Aij − ∑j−1
k=1 Lik .Ukj Lij = 1/Ujj ⋅(Aij − ∑j−1
k=1 Lik .Ukj ) (i > 1)

– Phương pháp Crout: Ta phân tích:


⎡l11 0 0 ⎤ ⎡1 u12 u13 ⎤ ⎡l11 l11 u13 ⎤⎥
⎢ ⎥ ⎢ ⎥ ⎢ l11 u12
⎢ ⎥●⎢ ⎥ ⎢ ⎥
A = ⎢l21 l22 0 ⎥ ⎢0 1 u23 ⎥ = ⎢l21 l21 u12 + l22 l21 u13 + l22 u23 ⎥⎥
⎢ ⎥ ⎢ ⎥ ⎢
⎢l31 l32 l33 ⎥ ⎢0 0 1 ⎥⎦ ⎢⎣l31 l31 u12 + l32 l31 u13 + l32 u23 + l33 ⎥⎦
⎣ ⎦ ⎣
´¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¸¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¶ ´¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¸ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹¶ ´¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¸¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¶
L U A

Sau đó giải thủ công các phần tử trên ma trận.

Ví dụ : Áp dụng các phương pháp trên với:

⎡ 9 −3 −3⎤
⎢ ⎥
⎢ ⎥
A = ⎢−3 10 1 ⎥
⎢ ⎥
⎢−3 1 5 ⎥
⎣ ⎦
Phân tích A theo phương pháp Cholesky và Doolittle. Áp dụng giải hệ phương trình
Ax = b, với b = [−9, −1.5, 5]T

Giải:
Phương pháp Gauss-Jordan. Đưa về ma trận bậc thang thu gọn.
⎡ 9 −3 −3 −9⎤⎥ ⎡ 0 27 0 −13.5⎤ ⎡−3 10 1 −1.5⎤
⎢ ⎢ ⎥ ⎢ ⎥
⎢ ⎥ 3D2 +D1 →D1 ⎢ ⎥ ⎢ ⎥
⎢−3 10 1 −1.5⎥ ÐÐÐÐÐÐ→ ⎢−3 10 1 −1.5⎥ Ð → ⎢ ⎥
⎢ ⎥ D2 −D3 →D3 ⎢ ⎥ ⎢ 0 1 0 −0.5⎥
⎢−3 1 5 5⎥⎦ ⎢ 0 9 −4 −6.5⎥ ⎢ 0 9 −4 −6.5⎥
⎣ ⎣ ⎦ ⎣ ⎦
⎡−3 10 1 −1.5⎤ ⎡1 0 0 ⎤
−1⎥
9D2−D3 →D3 ⎢
⎢ ⎥ 10D +D −D →D ⎢
⎥ 1 ⎢ ⎥
ÐÐÐÐÐÐ→ ⎢ 0 1 0 −0.5⎥ ÐÐÐÐÐÐÐÐÐ → ⎢0 1 0 −0.5⎥
2 3 1

D →D3 ⎢ ⎥ D →D1 ⎢ ⎥
⎢ 0 0 1 0.5⎥ ⎢0 0 1 0.5⎥
1 1
4 3 3 1
⎣ ⎦ ⎣ ⎦
Phương pháp Cholesky. Ta xây L theo từng cột. Tại mỗi cột j hiện tại, mình tính phần
tử trên đường chéo ljj trước tiên (bởi các phần tử cột trước); rồi bắt đầu tính các phần tử
cùng cột nhưng hàng dưới, tăng dần theo hàng.
⎡ 3 0 0⎤ ⎡y1 ⎤ ⎡ −9⎤ ⎡ −3⎤
⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥
Ta có: Ly = b hay ⎢−1 3 0⎥ ⎢y2 ⎥ = ⎢−1.5⎥, suy ra y = ⎢−1.5⎥
⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢−1 0 2⎥ ⎢y3 ⎥ ⎢ 5⎥ ⎢ 1⎥
⎣ ⎦⎣ ⎦ ⎣ ⎦ ⎣ ⎦
⎡3 −1 −1⎤ ⎡x1 ⎤ ⎡ −3⎤ ⎡ −1⎤
⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥
LT x = y hay ⎢0 3 0 ⎥ ⎢x2 ⎥ = ⎢−1.5⎥, suy ra x = ⎢−0.5⎥
⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢0 0 2 ⎥ ⎢x3 ⎥ ⎢ 1⎥ ⎢ 0.5⎥
⎣ ⎦⎣ ⎦ ⎣ ⎦ ⎣ ⎦

2
Phương pháp Doolitle. Xây các phần tử trên đường chéo trước, rồi xây L đi xuống và U
đi sang phải.

⎡ 1 0 0⎤ ⎡9 −3 −3⎤
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
A = ⎢−1/3 1 0⎥ ● ⎢0 9 0⎥
⎢ ⎥ ⎢ ⎥
⎢−1/3 0 1⎥ ⎢0 0 4⎥
⎣ ⎦ ⎣ ⎦
´¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹¸¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¶ ´¹¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¸¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¶
L U

⎡ 1 0 0⎤⎥ ⎡⎢y1 ⎤⎥ ⎡⎢ −9⎤⎥ ⎡ −9⎤


⎢ ⎢ ⎥
⎢ ⎥●⎢ ⎥ ⎢ ⎥ ⎢ ⎥
Ta có Ly = b hay ⎢−1/3 1 0⎥ ⎢y2 ⎥ = ⎢−1.5⎥, suy ra y = ⎢−4.5⎥⎥
⎥ ⎢ ⎥ ⎢ ⎥ ⎢

⎢−1/3 0 1⎥⎦ ⎢⎣y3 ⎥⎦ ⎢⎣ 5⎥⎦ ⎢ 2⎥
⎣ ⎣ ⎦
⎡9 −3 ⎤ ⎡ ⎤
−3⎥ ⎢x1 ⎥ ⎢ −9⎥ ⎡ ⎤ ⎡ ⎤
⎢ ⎢ −1⎥
⎢ ⎥●⎢ ⎥ ⎢ ⎥ ⎢ ⎥
U x = y hay ⎢0 9 0⎥⎥ ⎢⎢x2 ⎥⎥ = ⎢⎢−4.5⎥⎥, suy ra x = ⎢⎢−0.5⎥⎥

⎢0 0 4⎥⎦ ⎢⎣x3 ⎥⎦ ⎢⎣ 2⎥⎦ ⎢ 0.5⎥
⎣ ⎣ ⎦

2.2 Giải gần đúng Lặp


Sau khi viết lại hệ dưới dạng dưới đây, ta được ma trận A có đường chéo là các phần tử 1.

x1 = + c12 x2 + c13 x3 + ...


x2 = c21 x1 + + c23 x3 + ...

xn = cn1 x1 + cn2 x2 + cn3 x3 + ...

Phương pháp lặp đơn Jacobi: Phương pháp lặp Gauss-Seidel:


x0 = b x0 = d
C =I −A C = −(I + L)−1 U, d = (I + L)−1 b
xn = C ● xn−1 + b xn = C ● xn−1 + d
Ví dụ

(a) Tính toán 3 lần lặp, sai số 10−3 các phương pháp trên, giải gần đúng hệ phương
trình Ax = b với b = [−9, −1.5, 5]T , x(0) = 0 và

⎡ 9 −3 −3⎤
⎢ ⎥
⎢ ⎥
A = ⎢−3 10 1⎥
⎢ ⎥
⎢−3 1 5⎥
⎣ ⎦

(b) Chạy chương trình với A là ma trận vuông cấp 10.


(c) Đánh giá sai số

(a) Phần cộng, nhân ma trận, tính ma trận nghịch đảo có thể bấm máy.
⎡ 1 −1/3 −1/3⎤
⎢ ⎥
⎢ ⎥
Ta chuyển A = ⎢−0.3 1 0.1⎥⎥

⎢−0.6 0.2 1⎥⎦

⎡ 0 1/3 1/3⎤ ⎡ −1⎤
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
Phương pháp Jacobi. C = I − A = ⎢0.3 0 −0.1 ⎥ , b = ⎢−0.15⎥.
⎢ ⎥ ⎢ ⎥
⎢0.6 −0.2 0⎥⎦ ⎢ 1⎥⎦
⎣ ⎣

i xTi [Cxi ]T
0 [0, 0, 0] [0, 0, 0]
1 [−1, −0.15, 1] [0.283, −0.4, −0.57]
2 [−0.717, −0.55, 0.43] [−0.04, −0.258, −0.32]
3 [−1.04, −0.408, 0.68]

3
3 Nội suy

Bảng 1: Phương pháp nội suy

Xây đa thức pn (x) bậc n từ n + 1 bộ giá trị (xi , fi ):


lk = (x − x0 )(x − x1 )...(x − xk−1 )(x − xk+1 )...(x − xn )
Lagrange Lk (x) = lk (x) / lk (xk )
pn (x) = ∑nk=0 Lk (x).fk
∆i+1 fj = ∆i fj+1 − ∆i fj , r = (x − x0 )/h
j xj fj ... ∆n−1 fj ∆n fj
0 x0 f0 ... ∆n−1 f0 ∆n f0
Newton Forward 1 x1 f1 ... ∆n−1 f1
xi = x0 + i ∗ h ⋮ ⋰
(các mốc cách đều h) n xn f n
f (x) ≈ pn (x) = ∑ns=0 (rs)∆s f0
= f0 + r∆f0 + r(r−1)
2! ∆ f0 + ... +
2 ∆ f0
r(r−1)...(r−n+1) n
n!

∇i fj = ∇i−1 fj − ∇i−1 fj−1 , r = (x − x0 )/h


j xj fj ... ∇n−1 fj ∇n fj
0 x0 f0
Newton Backward ⋮ ⋱
xi = x0 + i ∗ h n − 1 xn−1 fn−1 ... ∇n−1 f1
(các mốc cách đều h) n xn fn ... ∇n−1 fn ∇n fn
f (x) ≈ pn (x) = ∑ns=0 (r+s−1
s
)∇s f0
= f0 + r∇f0 + r(r+1)
2! ∇ f0 + ... +
2 ∇ f0
r(r+1)...(r+n−1) n
n!

Với (i ∈ [0, n − 1]) xây dựng đa thức gi (x) cho đoạn [xi , xi+1 ]
gi (x) = ai (x − xi )3 + bi (x − xi )2 + ci (x − xi ) + di
(0,1,2) (0,1,2)
gi (xi ) = yi = fi và gi (xi+1 ) = gi+1 (xi + 1)
hi = xi+1 − xi , Si = gi (xi )(∀i = 0, .., n − 1) và Sn = Sn−1
′′

Si+1 − Si Si yi+1 − yi hi (2Si − Si+1 )


ai = , bi = , c i = − , di = y i
Cubic Spline 6hi 2 hi 6
Giải hệ phương trình ẩn S0 , S1 , .., Sn ∶
S0 = f (2) (x0 )
Sn = f (2) (xn )
yi+1 − yi yi − yi−1
hi−1 Si−1 + 2(hi−1 + hi )Si + hi Si+1 = 6( − )
hi hi−1

Ví dụ

Cho hàm số f (x) = sin (x).


(a) Xây dựng đa thức nội suy cho f (x) trên [0, π/2] theo 4 điểm mốc cách đều theo
phương pháp Lagrange, Newton và Spline với f (2) (0) = 0, f (2) (π/2) = −1. Đánh giá
sai số.
(b) Lập trình để xây dựng đa thức nội suy cho f (x) trên [0, π/2] theo 50 điểm mốc cách
đều theo phương pháp Lagrange, Newton và Spline với f (2) (0) = 0, f (2) (π/2) = −1.
Đánh giá sai số.

Giải.
π 2π
(a) n = 3, x = [0, , , 0.5π]
3 3
Phương pháp Lagrange.

4
π π π
(x − )(x − )(x − 0.5π) π (x − 0)(x − )(x − 0.5π)
pn (x) = f (0) 6 3 + f( ) 3
π π 6 π π π π
(0 − )(0 − )(0 − 0.5π) ( − 0)( − )( − 0.5π)
6 3 6 6 3 6
π π π
π (x − 0)(x − 6 )(x − 0.5π) (x − 0)(x − )(x − )
6 3
+ f( ) + f (0.5π)
3 π π pi π π π
( − 0)( − )( − 0.5π) (0.5π − 0)(0.5π − )(0.5π − )
3 3 6 3 6 3
pn (x) = −0.11387x3 − 0.06547x2 + 1.02043x

Phương pháp Newton.


j xj fj ∆fj ∆2 fj ∆ 3 fj
0 0 0 0.5 −0.13397 −0.09809
1 π
6 0.5 0.36603 −0.23206
2 0.86603 0.13397
3 0.5π 1
(x − 0) 6x
r= =
h π
(1.90985x)(1.90985x − 1)
p(x) = 0 + 0.5(1.90985x) − 0.13397
2
(1.90985x)(1.90985x − 1)(1.90985x − 2)
− 0.09809
6
p(x) = −0.11389x3 − 0.06544x2 + 1.02041x

https://atozmath.com/CONM/NumeInterPola.aspx?q=LI Lagrange
https://atozmath.com/CONM/NumeInterPola.aspx Newton
Phương pháp Spline.
S0 = f 2 (0) = 0
π
S3 = f 2 ( ) = −1
2
π
Do h0 = h1 = h2 =
6 √
π 2π π 36 3
S0 + S1 + S2 = ( − 1)
6 3 6 π 2
π 2π π 36 3 √
S1 + S2 + S3 = ( − 3)
6 3 6 π 2
Giải hệ ta có: S1 = −0.50998, S2 = −0.89213

5
4 Xấp xỉ bình phương tối thiểu
(a) Trình bày các phương pháp xấp xỉ bình phương tối thiểu rời rạc và liên tục.
⎛ 1 ⎞ 2
Áp dụng phương pháp xấp xỉ bình phương tối thiểu rời rạc cho f (x) = e−x /2
⎝ (2π)−0.5 ⎠
với x trên đoạn [0, 1].
(b) Tính bằng tay với 5 điểm mốc cách đều, xây dựng đa thức bậc 1, bậc 2 theo phương
pháp bình phương tối thiểu. Đánh giá sai số.
(a) Áp dụng phương pháp xấp xỉ bình phương tối thiểu liên tục cho f (x) = sin (x) với x
trên đoạn [0, π/2]. Đánh giá sai số.
Giải.
(a) Phương pháp xấp xỉ bình phương tối thiểu rời rạc và liên tục:
- Phương pháp xấp xỉ bình phương tối thiểu rời rạc:

• Bước 1: Xác định tập hữu hạn điểm rời rạc trên miền [a, b].
• Bước 2: Xác định hàm xấp xỉ P (xn ) = an xn + an−1 xn−1 + ... + a0 x0 với n <= m.

a0 ∑ x0i + a1 ∑ x1i + ... + an ∑ xni = ∑ yi x0i

a0 ∑ x1i + a1 ∑ x2i + ... + an ∑ xn+1


i = ∑ yi x1i
...
a0 ∑ xni + a1 ∑ xn+1
i + ... + an ∑ x2n
i = ∑ y i xi
n

m
• Bước 3: Xác định sai số bình phương E = ∑ (f (xi ) − P (xi ))2
i=1

- Phương pháp xấp xỉ bình phương tối thiểu liên tục:

• Bước 1: Xác định hàm xấp xỉ P (xn ) = an xn + an−1 xn−1 + ... + a0 x0 với n <= m.
n b b
∑ ak ∫ xj+k dx = ∫ xj f (x) dx,
k=0 a a

với mỗi j = 0, 1, ..., n


m
• Bước 2: Xác định sai số bình phương E = ∑ (f (xi ) − P (xi ))2
i=1

(b) Bảng giá trị x, f (x), x2 , y2, xy:

i x f (x) x2 y2 xy
0 0 2.5066 0 6.2832 0
1 0.1 2.4941 0.01 6.2206 0.2494
2 0.2 2.457 0.04 6.0368 0.4914
3 0.3 2.3963 0.09 5.7424 0.7189
4 0.4 2.3139 0.16 5.3542 0.9256
sum 1 12.168 0.3 29.6372 2.3853

Đa thức bậc 1 có dạng: P (xi ) = a0 + a1 x với:


m m m m
∑ x2i ∑ yi − ∑ xi yi ∑ xi 0.3 ∗ 12.168 − 2.3853 ∗ 1
a0 = i=1 i=1 i=1 i=1
= = 2.5302
m
m( ∑ x2i ) − ( ∑ xi )2
m
5 ∗ 0.3 − 12
i=1 i=1

m m m
m ∑ xi y i − ∑ x i ∑ y i 5 ∗ 2.3853 − 1 ∗ 29.6372
a1 = i=1 i=1 i=1
= = −0.483
m
m( ∑ x2i ) − ( ∑ xi )2
m
5 ∗ 0.3 − 12
i=1 i=1

6
Ta có P (xi ) = 2.5302 − 0.483x
m
Sai số: E = ∑ (f (xi ) − P (xi ))2 ≈ 1.9072 ∗ 10− 3
i=1

Đa thức bậc 2 có dạng: P (xi ) = a2 x2 + a1 x2 + a0 với:

a0 ∑ x0i + a1 ∑ x1i + an ∑ x2i = ∑ yi x0i

a0 ∑ x1i + a1 ∑ x2i + an ∑ x3i = ∑ yi x1i


a0 ∑ x2i + a1 ∑ x3i + an ∑ x4i = ∑ yi x2i

Phần còn lại là huyền thoại, các thanh niên tự giải nốt.
(c) Đa thức bậc 2 có dạng P2 (x) = ax x2 + a1 x + a0 với:
π/2 π/2 π/2 π/2
a0 ∫ 1 dx + a1 ∫ x dx + a2 ∫ x2 dx = ∫ sin(x) dx
0 0 0 0

π/2 π/2 π/2 π/2


a0 ∫ x dx + a1 ∫ x2 dx + a2 ∫ x3 dx = ∫ x sin(x) dx
0 0 0 0
π/2 π/2 π/2 π/2
a0 ∫ x2 dx + a1 ∫ x3 dx + a2 ∫ x4 dx = ∫ x2 sin(x) dx
0 0 0 0
hay
1.5708a0 + 1.2337a1 + 1.2919a2 = 1
1.2337a0 + 1.2919a1 + 1.5220a2 = 1
1.2919a0 + 1.5220a1 + 1.9126a2 = 1.1416
suy ra
a0 = −0.0246, a1 = 1.1967, a2 = −0.3389
Vậy P2 (x) = −0.0246 + 1.1967x + −0.3389x2

7
5 Tính gần đúng đạo hàm

Ví dụ

(a) Viết các công thức tính gần đúng đạo hàm bậc nhất và bậc 2. Áp dụng tính gần
1
đúng đạo hàm cho hàm số f (x) = e−x /2 trên [0, 1] với 5 điểm mốc cách
2

(2π)0.5

đều. Đánh giá sai số.


(b) Tính bằng máy trên [0, 1] với 50 điểm mốc cách đều. Đánh giá sai số.

Giải.
(a) Chỉ cần chọn 1 phương pháp để tính.
Đạo hàm của f (x) tại x0 làlà:

f (x0 + h) − f (x0 )
f (x0 ) = lim

h→0 h
Từ đó có một các đơn giản để tính xấp xỉ đạo hàm của f (x0 ) là:

f (x0 + h) − f (x0 )
f (x0 ) ≈

h
với sai số
∣ hf (2) (ξ) ∣
E=
2

Bảng 2: Công thức tính đạo hàm

3-point
2h [f (x0 + h) − f (x0 − h)]
1
midpoint
h2 (3)
Sai số: 6 f (ξ1 ) với ξ1 ở giữa x0 − h và x0 + h
3-point
2h [−3f (x0 ) + 4f (x0 + h) − f (x0 + 2h)]
1
endpoint
h2 (3)
Sai số: 3 f (ξ0 ) với ξ0 ở giữa x0 và x0 + 2h
5-point
12h [f (x0 − 2h) − 8f (x0 − h) + 8f (x0 + h) − f (x0 + 2h)]
1
midpoint
h4 (5)
Sai số: 30 f (ξ) với ξ ở giữa x0 − 2h và x0 + 2h
5-point
12h [−25f (x0 ) + 48f (x0 + h) − 36f (x0 + 2h) + 16f (x0 + 3h) − 3f (x0 + 4h)]
1
endpoint
h4 (5)
Sai số: 5 f (ξ) với ξ1 ở giữa x0 và x0 + 4h
Đạo hàm
f (2) (x0 ) = h−2 .[f (x0 − h) − 2f (x0 ) + f (x0 + h)]
bậc 2
h2 (4)
Sai số: 12 f (ξ) với ξ ở giữa x0 − h và x0 + h

Đánh giá sai số dựa trện h và bậc của h.


2
Chọn h = 0.2, mốc x0 = 0.2 với f (x) =
−x
1
(2π)0.5 e
2

Áp dụng công thức 3 điểm:


1
f (x0 ) = [−3f (x0 ) + 4f (x0 + h) − f (x0 + 2h)]

2h
1
⇔ f (0.2) = [−3f (0.2) + 4f (0.4) − f (0.6)]

2 ∗ 0.2
h2 (3) 0.22 (3)
Đánh giá sai số: E = 3 f (ξ) = 3 f (ξ) với ξ ∈ [0.2, 0.6]

8
hoặc
1
f (x0 ) = [f (x0 + h) − f (x0 − h)]

2h
1
⇔ f (0.2) = [f (0) + f (0.4)]

2 ∗ 0.2
Đánh giá sai số: E = h3 f (3) (ξ) = 0.22 (3)
(ξ) với ξ ∈ [0, 0.4]
2
6 f
Áp dụng công thức 5 điểm:
1
f (x0 ) = [−25f (x0 ) + 48f (x0 + h) − 36f (x0 + 2h) + 16f (x0 + 3h) − 3f (x0 + 4h)]

12h
1
⇔ f (0.2) = [−25f (0.2) + 48f (0.4) − 36f (0.6) + 16f (0.8) − 3f (1.0)]

12 ∗ 0.2
h4 (5) 0.24 (5)
Đánh giá sai số: E = 5 f (ξ) = 5 f (ξ) với ξ ∈ [0.2, 1.0]
hoặc
1
f (x0 ) = [f (x0 − 2h) − 8f (x0 − h) + 8f (x0 + h) − f (x0 + 2h)]

12h
1
⇔ f (0.2) = [f (−0.2) − 8f (0) + 8f (0.4) − f (0.6)]

12h
Đánh giá sai số: E = h30 f (5) (ξ) = 0.2 (5) (ξ) với ξ ∈ [−0.2, 0.6]
4 4
30 f
(Nhớ chú ý đừng như công thức 5-point midpoint này dính -0.2 ngoài khoảng [0,1] rồi)
Áp dụng công thức tính đạo hàm bậc 2:

f (2) (x0 ) = h−2 [f (x0 − h) − 2f (x0 ) + f (x0 + h)]

⇔ f (2) (0.2) = h−2 [f (0) − 2f (0.2) + f (0.4)]


Đánh giá sai số: E = h12 f (4) (ξ) = 0.2 (4) (ξ) với ξ ∈ [0, 0.4]
2 2
12 f
Tương tự với các điểm mốc khác.
Vì sai số dựa trên h và bậc của h, chọn h càng nhỏ mang lại hiệu quả tính toán các tốt và
công thức 5 điểm sẽ cho hiệu quả tính toán tốt hơn công thức 3 điểm.

(b)

6 Tính gần đúng Tích phân xác định

Ví dụ

(a) Viết các công thức tính gần đúng tích phân theo công thức hình thang, công thức
Simpson và công thức điểm giữa. Áp dụng, tính gần đúng tích phân cho hàm số
1
f (x) = e−x /2 trên [0, 1] với 4 điểm mốc. Đánh giá sai số.
2

(2π)−0.5
(b) Tính bằng máy trên [0, 1] với 50 điểm mốc. Đánh giá sai số.

(a) Có 3 dạng:
Bảng 3: Phương pháp tính tích phân

h = (b − a)/n
Trapezoidal Rule Tn = h2 [f (x0 ) + 2f (x1 ) + ... + 2f (xn−1 ) + f (xn )]
Midpoint Rule Mn = h [f ( x0 +x
2
1
) + f ( x1 +x
2
2
) + ... + f ( xn−12+xn )]
Chẵn: x2, Lẻ: x4
Simpson Rule
Sn = h3 [f (x0 ) + 4f (x1 ) + 2f (x2 ) + ... + 2f (xn−2 ) + 4f (xn−1 ) + f (xn )]

9

Áp dụng: f (x) = 2π.e−x /2 , h = 0.25, Đáp án: 2.14473
2

h = (b − a)/n = (1 − 0)/4 = 0.25


Trapezoidal Rule Tn = 0.25
2 [f (0) + 2f (0.25) + 2f (0.5) + 2f (0.75) + f (1)] = 2.13680
Midpoint Rule Mn = 0.25 [f (0.125) + f (0.375) + f (0.625) + f (0.875)] = 2.14871
Simpson Rule Sn = 0.25
3 [f (0) + 4f (0.25) + 2f (0.5) + 4f (0.75) + f (1)] = 2.14480

(b) Chạy chương trình:


1 import IntegralApprox
2 from math import pi , e
3
4 if __name__ == " __main__ " :
5 f = lambda x : (2 * pi ) ** 0.5 * e ** ( - x **2/2)
6 a , b = (0 , 1)
7 n = 50
8
9 trap = IntegralApprox . TrapezoidalRule ()
10 mid = IntegralApprox . MidpointRule ()
11 simp = IntegralApprox . SimpsonRule ()
12
13 print ( " Trapezoidal Rule : " , trap . solve (f , a , b , n ) )
14 print ( " Midpoint Rule : " , mid . solve (f , a , b , n ) )
15 print ( " Simpson Rule : " , simp . solve (f , a , b , n ) )

Kết quả:
Trapezoidal Rule: 2.144681614275053
Midpoint Rule : 2.1140466356463916
Simpson Rule : 2.1447322933497492

7 Giải gần đúng phương trình vi phân

Ví dụ

(a) Trình bày các phương pháp giải gần đúng PTVP bậc nhất.
Áp dụng giải PT y ′ = 2xy, y(1) = 1, h = 0.1, tính đến y2 . Đánh giá sai số.
(b) Lập trình tính đến y10 với h = 0.01. Đánh giá sai số.

(a) Phương trình vi phân là phương trình có dạng F (x, y, y ′ , ..., y (n)) = 0.

10
Bảng 4: Áp dụng các phương pháp xấp xỉ PTVP bậc nhất

x0 = 1, y0 = 1, f (x, y) = 2xy i=1 i=2


x2 = 1.2
Chuỗi Taylor. x1 = 1.1
y2 = 1.2 + (2.64)(0.1)
yi+1 = yi + f (xi , yi ).h y1 = 1 + 2(0.1) = 1.2
= 1.464
Mid-point.
x0.5 = 1.05 x1.5 = 1.15
xi+1/2 = xi + h/2
y0.5 = 1.1 y1.5 = 1.366
yi+1/2 = yi + h/2.f (xi , yi )
f0.5 = 2.31 f1.5 = 3.1418
fi+1/2 = f (xi+1/2 , yi+1/2 )
y1 = 1.231 y2 = 1.545
yi+1 = yi + h.fi+1/2
Heun.
ỹi+1 = yi + hf (xi , yi ) (đệm) ỹ1 = 1.2 ỹ2 = 1.503
yi+1 = yi + h2 [f (xi , yi ) y1 = 1.232 y2 = 1.548
+f (xi+1 , ỹi+1 )]
Runge-Kutta (RK4)
k1 = f (xi , yi ) k1 = 2 k1 = 2.714
k2 = f (xi + h2 , yi + 12 k1 h) k2 = 2.31 k2 = 3.150
k3 = f (xi + h2 , yi + 12 k2 h) k3 = 2.343 k3 = 3.200
k4 = f (xi + h, yi + k3 h) k4 = 2.715 k4 = 3.730
yi+1 = yi + h6 (k1 + 2k2 y1 = 1.234 y2 = 1.553
+2k3 + k4 )

(b) Kết quả chạy chương trình:

Bảng 5: Chạy chương trình giải gần đúng PTVP

i Taylor Midpoint Heun RK4


0 1.02 1.020301 1.020302 1.020303365234
1 1.040604 1.041222302614 1.041224353624 1.04122718172
2 1.0618323216 1.062785079401 1.062788234935 1.062792629519
3 1.083706067425 1.085011326951 1.085015643149 1.085021714204
4 1.106247153627 1.107923901747 1.107929437507 1.107937301744
5 1.129478343854 1.131546556614 1.131553373732 1.131563154992
6 1.153423284743 1.155903978852 1.155912142159 1.155923971837
7 1.178106543037 1.181021830107 1.18103140763 1.181045425118
8 1.203553644366 1.206926788097 1.20693785121 1.206954204377
9 1.229791113814 1.233646590249 1.233659213849 1.233678059539

Ví dụ

(a) Trình bày các phương pháp giải gần đúng hệ PTVP bậc nhất và bậc cao. Áp dụng
giải hệ sau:

x(2) = e−x + x − cos t



y ′ = 3 y − tx′
x(0) = −2, x′ (0) = 0, y(0) = 8

Chuyển bài toán trên thành 1 hệ tương đương các phương trình vi phân bậc nhất
với các giá trị ban đầu. Lấy 2 bước với phương pháp Euler và độ dài bước h = 0.5
cho hệ này.

11
(b) Giải bằng máy với h = 0.01 trên đoạn [0, 1]. Đánh giá sai số.

(a) ● Hệ n PTVP bậc nhất có dạng: Y (x) = [y1 (x), y2 (x), ..., yn (x)]T
Khi đó: F (y, x) = dYdx(x) = [ y1dx
(x) y2 (x) (x) T
, dx , ..., yndx ]
Ta giải tương tự với các phương pháp nêu ở bài trước (cho PTVP bậc nhất), thay Y
thành vector.
● Đối với hệ PTVP bậc cao, ta đưa về hệ phương trình bậc nhất.
⎡x′ ⎤ ⎡ ⎤ ⎡−2⎤
⎢ ⎥ ⎢ √
z ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
Áp dụng. Đặt z = x′ , ta có F (x, y, z) = ⎢y ′ ⎥ = ⎢ 3 y − tz ⎥ , Y (0) = ⎢ 8 ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢z ′ ⎥ ⎢e−z + x − cos (t)⎥ ⎢0⎥
⎣ ⎦ ⎣ ⎦ ⎣ ⎦

Bảng 6: Áp dụng giải hệ phương trình vi phân bậc cao

i = 0 i = 1 i = 2
Y = [−2, 8, 0]T Y = [−2, 9, −1]T Y = [−2.5, 10.29, −1.08]T
F = [0, 2, −2]T F = [−1, 2.58, −0.159]T

(b) Kết quả chạy chương trình với h = 0.01 trên đoạn [0, 1]: (Tự chạy nha).

12
8 Tính gần đúng trị riêng bằng phương pháp lũy thừa

Ví dụ

(a) Trình bày các phương pháp tính gần đúng trị riêng trội nhất và véctơ riêng trội
nhất. Áp dụng tính với ma trận cấp 2 với 5 bước. Đánh giá sai số.
(b) Lập trình với ma trận cấp 10 với 50 bước. Đánh giá sai số.

Giải. Các phương pháp tính gần đúng trị riêng trội nhất và vector riêng trội nhất:

Bảng 7: Phương pháp lũy thừa

Euclidean Scaling Maximum Entry Scaling


Axi ● xi
λ Axi ● xi → λ →λ
x i ● xi
xi Axi−1 / ∥Axi−1 ∥ Axi−1 / max(Axi−1 )
² i
²
i
A x0 A x0

Ví dụ ma trận cấp 2:

3 2 1
A=[ ] , with x0 = [ ]
2 3 0
Euclidean Scaling.

Maximum Entry Scaling.

13
14

You might also like