Lời nói đầu Nhu cầu nâng cao chất lượng đào tạo sinh viên và các bài toán thực tiễn rất đa dạng, phức tạp là đòi hỏi cấp thiết đưa vào môn học PHƯƠNG PHÁP TÍNH nhằm giúp cho sinh viên k
Trang 1Tr ườ ng Đại h ọ c Th ủ y l ợ i
Phạm Phú Triêm
phương pháp tính
Trang 2
Carl Friedrich Gauss
(1777-1855)
vua Toán học
Trang 3MỤC LỤC
Lời nói đầu 4
Chương 1: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH 5
1.1 Phương pháp Cholesky 5
1.2 Phương pháp lặp Gauss-Seidel 8
1.3 Phương pháp nới lỏng 13
Chương 2 : PHƯƠNG TRÌNH VÀ HỆ PHƯƠNG TRÌNH PHI TUYẾN 22
2.1 Phương pháp chia đôi 22
2.2 Phương pháp dây cung 25
2.3 Phương pháp tiếp tuyến 28
2.4 Phương pháp lặp đơn 31
2.5 Phương pháp Newton-Raphson cho hệ phương trình 33
2.6 Phương pháp lặp Seidel cho hệ phương trình 37
Kiểm tra nhận thức 42
Chương 3 : NỘI SUY GIÁ TRỊ HÀM SỐ 44
3.1 Công thức nội suy Gregory-Newton tiến 44
3.2 Công thức nội suy Gregory-Newton lùi 46
3.3 Công thức nội suy Gauss 48
3.4 Công thức nội suy Lagrange 50
3.5 Công thức nội suy Newton 51
3.6 Công thức bình phương nhỏ nhất 54
Bài tập 57
Kiểm tra nhận thức 58
Chương 4 : XẤP XỈ ĐẠO HÀM VÀ TÍCH PHÂN XÁC ĐỊNH 59
4.1 Xấp xỉ giá trị đạo hàm theo tỷ sai phân 59
4.2 Xấp xỉ giá trị đạo hàm theo công thức Richardson 60
4.3 Xấp xỉ giá trị đạo hàm theo công thức nội suy với các mốc cách đều 62
a- Công thức nội suy Gregory-Newton tiến 62
b- Công thức nội suy Gregory-Newton lùi 62
c- Công thức nội suy Gauss 62
4.4 Xấp xỉ giá trị đạo hàm theo công thức nội suy với các mốc bất kỳ 65
a- Công thức nội suy Lagrange 65
b- Công thức nội suy Newton 65
c- Công thức bình phương nhỏ nhất 65
4.5 Xấp xỉ giá trị tích phân xác định A 68
a- Công thức hình thang 68
b- Công thức Simpson 68
4.6 Dãy quy tắc 71
a- Dãy quy tắc hình thang 71
b- Dãy quy tắc Simpson 72
Bài tập 75
Kiểm tra nhận thức 78
Chương 5: XẤP XỈ NGHIỆM PHƯƠNG TRÌNH VI PHÂN 79
5.1 Xấp xỉ nghiệm phương trinh vi phân cấp một 79
a- Phương pháp Euler 79
b- Phương pháp Runge-Kutta bậc hai 80
c- Phương pháp Runge-Kutta bậc bốn 80
5.2 Xấp xỉ nghiệm hệ phương trình vi phân cấp một 82
a- Phương pháp Euler 82
Trang 4b- Phương pháp Runge-Kutta bậc bốn 83
5.3 Xấp xỉ nghiệm phương trình vi phân cấp 2 85
5.4 Xấp xỉ nghiệm phương trình đạo hàm riêng 86
Kiểm tra nhận thức 96
Trang 5Lời nói đầu
Nhu cầu nâng cao chất lượng đào tạo sinh viên và các bài toán thực tiễn rất đa dạng, phức tạp là đòi hỏi cấp thiết đưa vào môn học PHƯƠNG PHÁP TÍNH nhằm giúp cho sinh viên khối kỹ thuật- Kỹ sư tương lai, tiếp cận với cách giải gần đúng
phương trình, hệ phương trình có đánh giá sai só , kết hợp trên cơ sở làm quen và
tự nâng cao khả năng lập trình bằng một ngôn ngữ thường được sử dụng, đó là PASCAL
Bộ môn Toán và tác giả trân trọng giới thiệu Giáo trình này và vô cùng cảm ơn các ý kiến đóng góp quý giá của độc giả
Hà nội 8-2005
Trang 6Chương 1: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
Chúng ta biết rằng hầu hết các bài toán thực tế đều dẫn đến giải hệ phương
trình tuyến tính Các phương pháp giải hệ được trình bày khá đầy đủ trong các tài liệu
về Đại số tuyến tính Tuy nhiên mọi cách giải về mặt thực tiễn đều phải tính gần đúng
gắn liền với sai số Vì vậy trong chương này chúng ta giải quyết vấn đề nêu ra trên
đây
1.1 Phương pháp Cholesky Giải hệ AX = B
(1.1.1) trong đó A = 11 1 1
n n n n a a a a é ù ê ú ê ú ê ú ê ú ê ú ë û , X = 1
n x x é ù ê ú ê ú ë û , B = 1
n b b é ù ê ú ê ú ë û
(1.1.2)
Các bước cơ bản của phương pháp này là ** Tìm 2 ma trận tam giác L = 2131 32 1 2 3 1 1 0 0 0 0 1 0 0 0 1 0 0
1
n n n n n l l l l l l l -é ù ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ë û , U =
11 12 13 1 1 1 22 23 2 1 2 33 3 1 3
0
0 0
0 0 0 0
n n n n n n n n u u u u u u u u u u u u u -é ù ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ë û
(1.1.3)
thoả mãn
LU = A
(1.1.4) ** Giải hệ sau đây tìm Y
LY= B
(1.1.5) ** Tìm nghiệm X từ hệ
UX= Y
(1.1.6)
Đó chính là nghiệm của hệ (1.1.1) Thật vậy AX = L(UX) = LY = B Để tìm L , U ta tìm lần lượt hàng 1 của U , cột 1 của L , hàng 2 của U , cột 2 của L , theo công thức tổng quát sau đây
Trang 71
1 1 1
ïï
ïï ïïî
a l u
= , 31
31 11
a l u
y
x u
3 2
a l u
= = , 31
31 11
1 2
a l u
Trang 8-
y
x u
5 4 5 4
Begin Write('A[',I,J,']=');Readln(A[I,J]); End;
Writeln(' Nhap vecto B ');
Trang 9For I:=1 to N do Write('X[',I,']=',X[I]);
If DK=2 then Writeln('Khong tinh duoc');
Readln;
END
1.2 Phương pháp lặp Gauss-Seidel
Giải hệ
Trang 10* Điều kiện hội tụ: A xác định dương, có nghĩa là
'
.
'
ïí ïï ïï
'
'
x c x c - x - c - x - b
ìïï ïï ïï ïï ïï ïï ïïí ïï ïï ïï ïï ïï
trong đó εx> 0 , cho trước (sai số đối với nghiệm) thì ta dừng ở X(1)
* Ngược lại, có nghĩa là
Trang 11'
'
ìïï ïï ïï ïï ïï ïï ïïí ïï ïï ïï ïï ïï
'
'
-ìïï ïï ïï ïï ïï ïï ïïí ïï ïï
ïï ïï
Trang 12* Kiểm tra điều kiện đường chéo trội ⎜a11 ⎜= ⎜5 ⎜> ⎜– 1 ⎜ + ⎜2 ⎜= ⎜a12 ⎜ +
* Kiểm tra điều kiện xác định dương: a11 = 5 > 0
Sau khi đổi dấu 2 vế của phương trình thứ 2 ta tính được
0,2.0 0,4.0 1,2 1,2 0,25.1,2 0,25.0 0,5 0,8 0,5.1,2 0,25.0,8 0,25 1,05
x x x
ïï
íï ïï
0,2.0,8 0,4.1,05 1,2 0,94 0,25.0,94 0,25.1,05 0,5 0,9975 0,5.0,94 0,25.0,9975 0,25 0,969375
x x x
ïï
íï ïï
* Tìm xấp xỉ thứ ba X(3) = (x1(3) x2(3) x3(3)) của nghiệm theo công thức (1.2.9) :
(3) 1 (3) 2 (3) 3
0,2.0,9975 0,4.0,969375 1,2 1,01175 0,25.1,01175 0,25.0,969375 0,5 0,995281 0,5.1,01175 0,25.0,995281 0,25 1,004695
x x x
ïï
íï ïï
ïî
* Tính sai số
Trang 13Writeln('Nhap ma tran AB : N hang, N+1 cot ’);
Writeln('N cot dau la cac cot cua ma tran A’);
Writeln('cot thu N+1 la cot cac he so tu do B ’);
For I:=1 to N do
For J:=1 To M do
Begin Write('AB[',I,J,']=');Readln(AB[I,J]); end;
Write(' So buoc lap toi da KMAX=');Readln(KMAX);
Write(' Sai so EPS =');Readln(EPS);
DK:=1;I:=1;
{ Kiem tra tinh cheo troi }
While ((I<=N) and (DK=1)) do
{ Khi tinh cheo troi thoa man ta nhap xap xi ban dau }
Writeln(‘ Nhap xap xi ban dau X’);
Begin
For I:=1 to N do
Begin Write('X0[',I,']=');Readln(X0[I]); end;
end;
Trang 14K:=1;
While ((K<KMAX) and (DK=1)) do
{ Tinh cac thanh phan XK[I] o buoc lap thu K khi khong su dung cac gia tri XK[1] , XK[2] , , XK[I] da tinh o tren de tinh XK[I+1], ,XK[N] ; I = 1 , , N– 1 }
Trang 15* Điều kiện hội tụ: A xác định dương, có nghĩa là
ïí ïï ïï
'
'
ïï ïï
* Nếu
⎜Rh(0) ⎜ ≤ εf (1.3.7)
trong đó εf > 0 , cho trước (sai số đối với phương trình) thì ta dừng ở X(0)
* Ngược lại, có nghĩa là
Trang 16⎜Rh(0) ⎜ > εf
(1.3.8) ta tìm xấp xỉ thứ nhất X (1) = (x 1 (1) x n (1) ) của nghiệm theo công thức (1)(1) (0)(0) (0) ; 1, , ;
h h h i i x x R x x i n i h ìï = + ïï íï ï = = ¹ ïî
(1.3.9) và tính xấp xỉ thứ nhất R (1) = (R 1 (1) R n (1) ) của sai số theo công thức (0)(0) 0 (0) (0) ; 1, , ;
h i h i h i R R c R R i n i h ìï = ïï íï ï = + = ¹ ïî
(1.3.10) * Xác định Rh(1) thoả mãn ⎜Rh(1) ⎜= max(⎜R1(1) ⎜, , ⎜Rn(1) ⎜)
(1.3.11) * Nếu
⎜Rh(1) ⎜ ≤ εf
(1.3.12) thì ta dừng ở X(1) * Ngược lại, có nghĩa là
⎜Rh(1) ⎜ > εf
(1.3.13)
tương tự ta tìm xấp xỉ thứ 2 của nghiệm và xấp xỉ thứ 2 của sai số
* Một cách tổng quát Ta tiếp tục cho đến xấp xỉ thứ k : X (k) = (x 1 (k) x n (k) ) của nghiệm được tính theo công thức ( )( ) (( 1)1) ( 1) ; 1, , ;
k k k h h h k k i i x x R x x i n i h - -ìï = + ïï íï ï = = ¹ ïî
(1.3.14) và tính xấp xỉ thứ k : R (k) = (R 1 (k) R n (k) ) của sai số theo công thức (0)( ) 0 ( 1) ( 1) ; 1, , ;
h k k k i h i h i R R c R - R - i n i h ìï = ïï íï ï = + = ¹ ïî
(1.3.15)
và dừng lại ở X(k) khi
⎜Rh(k) ⎜= max(⎜R1(k) ⎜, , ⎜Rn(k) ⎜)
(1.3.16) thoả mãn
⎜Rh(k) ⎜≤ εf
(1.3.17) hoặc
Trang 17(1.3.18)
trong đó M là số bước lặp tối đa cho trước mà ta phải dừng mặc dù tại bước lặp
thứ M – 1 vẫn chưa
đảm bảo sai số
Nội dung tư tưởng của phương pháp nới lỏng : Biến đổi sao cho trong xấp xỉ tiếp theo,
sai số tương ứng với phương trình thứ h (sai số xấp xỉ có trị tuyệt đối lớn nhất) sẽ bằng
không Điều này thể hiện bởi các công thức (1.3.14), (1.3.15)
* Kiểm tra điều kiện xác định dương: a11 = 5 > 0
Sau khi đổi dấu 2 vế của phương trình thứ 2 ta tính được
0 0,2.0 0,4.0 1,2 1,2 0,25.0 0 0,25.0 0,5 0,5 0,5.0 0,25.0 0 0,25 0,25
R R R
ïï
íï ïï
Trang 18cho nên ta chuyển sang bước sau với h = 1
R
ìï =ïï
íï ïï
0 0,85 0,85
(1) 02
R
ìï =ïï
-íï ïï
R
ìï =ïï
-íï ïï
Trang 19ïí ïï ïï
Write('So buoc lap toi da la LMAX=');Readln(LMAX);
Write('Sai so EPS =');Readln(EPS);
Trang 20If ABS(R[K1})<EPS then DK:=2 ELSE
Trang 21Phương pháp nới lỏng
Trang 22b1-Dừng ở xấp xỉ thứ 4 X(4) = ( 1,1 1,7475 1,1395 )
b2-Dừng ở xấp xỉ thứ 4 X(4) = ( 1,1 1,7475 1,1395 )
b3-Dừng ở xấp xỉ thứ 8 X(8) = ( 1,132094 1,830643 1,1152919 ) b4-Dừng ở xấp xỉ thứ 11 X(11) = ( 1,130200 1,884884 1,162042 )
c - Phương pháp Gauss-Seidel
Dừng ở xấp xỉ X(6) = ( 0,999477 –1,000426 0,999579 – 0,999930 )
Phương pháp nới lỏng
Dừng ở xấp xỉ X(18) = ( 1,41845 0,989316 0,543982 – 1,2 )
Trang 23Chương 2 : PHƯƠNG TRÌNH VÀ HỆ PHƯƠNG TRÌNH PHI TUYẾN
Trong thực tế ta gặp không ít các bài toán gắn liền với phương trình đại số
cấp cao hoặc siêu việt và hệ phương trình phi tuyến Ta biết rằng cách xấp xỉ hệ bởi
hệ tuyến tính dẫn đến sai số rất lớn Vì vậy trong chương này ta sẽ trình bày một số
phương pháp trực tiếp xấp xỉ nghiệm
2.1 Phương pháp chia đôi
Giải gần đúng phương trình
F(x) = 0 (2.1.1)
thoả mãn điều kiện
* F '(x) không đổi dấu trên [a ; b] (2.1.2)
* F(a)F(b) < 0 (2.1.3)
Nội dung của phương pháp
Lấy giá trị giữa của đoạn [a(k) ; b(k)] làm xấp xỉ thứ k+1 của
trong đó a(0) = a , b(0) = b và tính F(x(1))
* Nếu
⎜F(x(1)) ⎜ ≤ εf (2.1.5)
trong đó εf > 0, cho trước (sai số đối với hàm) thì ta dừng ở x(1)
* Ngược lại, có nghĩa là
⎜F(x(1)) ⎜ > εf (2.1.6)
thì ta tìm xấp xỉ thứ hai của nghiệm là x(2) bởi công thức
(2) (1) (1)
2
x = + (2.1.7)
Trang 24⎜x(2) – x(1) ⎜ ≤ εx (2.1.8)
trong đó εx > 0 cho trước (sai số đối với nghiệm) thì ta dừng ở x(2)
* Ngược lại, có nghĩa là
⎜x(2) – x(1) ⎜ > εx (2.1.9)
thì ta tính F(x(2))
* Nếu
⎜F(x(2)) ⎜ ≤ εf (2.1.10)
thì ta dừng ở x(2)
* Ngược lại, có nghĩa là
⎜F(x(2)) ⎜ > εf (2.1.11)
trong đó
a(k-1) = a(k-2) , b(k-1) = x(k-1) nếu F(a(k-2))F(x(k-1)) < 0 hoặc
a(k-1) = x(k-1) , b(k-1) = b(k-2) nếu F(b(k-2))F(x(k-1)) < 0 khi thoả mãn một trong các điều kiện
⎜x(k) – x(k - 1) ⎜ ≤ εx (2.1.13)
hoặc
⎜F(x(k)) ⎜ ≤ εf (2.1.14)
ïï ïï
íï ïï
ï = ïïî
Trang 25ln
ln 2
b a x
-³ (2.1.16)
x = + =
Dấu của F(x) + + + + –
Trang 26K,DK,M:Integer;
A,B,C,YA,YB,YC,EPSX:Real;
Function F(X:Real):Real;
Begin F:=sin(X) – 3*X + 2; End;
{Giải phương trình sinx – 3x + 2 = 0 trên [A;B] }
BEGIN
Write('A= ');Readln(A);
Write('B = ');Readln(B);
Write(' Sai so theo X : EPSX = ');Readln(EPSX);
M:=1+Trunc((ln(B- A)- ln(EPSX))/ln(2));
Writeln('So buoc lap toi thieu la',M);
thoả mãn điều kiện
Trang 27* F '(x) không đổi dấu trên [a,b] (2.2.2)
* F(a)F(b) < 0 (2.2.3)
Nội dung của phương pháp
Nghiệm chính xác x* được xấp xỉ bởi x là hoành độ giao điểm dây
* Ngược lại, có nghĩa là
⎜F(x(1)) ⎜ > εf (2.2.6)
thì tìm xấp xỉ thứ hai của nghiệm là x(2) bởi công thức
( )( )
( ) ( )
(1) (1) (1) (2) (1)
trong đó εx > 0 , cho trước (sai số đối với nghiệm) thì ta dừng ở x(2)
* Ngược lại, có nghĩa là
⎜x(2) – x(1) ⎜> εx (2.2.9)
trong đó
Trang 28a(k - 1) = a(k - 2) , b(k - 1) = x(k - 1) nếu F(a(k - 2))F(x(k - 1)) < 0 hoặc
a(k - 1) = x(k - 1), b(k - 1) = b(k - 2) nếu F(b(k - 2))F(x(k - 1)) < 0
và dừng ở x(k) khi thoả mãn một trong các điều kiện
⎜x(k) – x(k - 1) ⎜ ≤ εx (2.2.11)
hoặc
⎜F(x(k)) ⎜ ≤ εf (2.2.12)
ïï ïï
íï ïï
ï = ïïî
Trang 29Write(' Sai so theo ham : EPSF =');Readln(EPSF);
Write(' So buoc lap toi da M =');Readln(M);
Trang 30thoả mãn điều kiện
* F '(x), F ”(x) không đổi dấu trên [a,b] (2.3.2)
* F(a)F(b) < 0 (2.3.3)
Nội dung của phương pháp
Nghiệm chính xác x* được xấp xỉ bởi x là hoành độ giao điểm
tiếp tuyến với trục 0x
trong đó εx > 0 , cho trước (sai số đối với nghiệm) thì ta dừng ở x(1)
* Ngược lại, có nghĩa là
⎜x(1) – x(0) ⎜ > εx (2.3.6)
ta tính F(x(1))
* Nếu
⎜F(x(1)) ⎜ ≤ εf (2.3.7)
trong đó εf > 0 cho trước (sai số đối với hàm) thì ta dừng ở x(1)
* Ngược lại, có nghĩa là
⎜F(x(1)) ⎜ > εf (2.3.8)
ta tính xấp xỉ thứ 2 theo công thức
( )
( )
(1) (2) (1)
Trang 31( )
( 1) ( ) ( 1)
hoặc
⎜ F(x(k)) ⎜ ≤ εf (2.3.12)
ïï ïï
íï ïï
ï = ïïî
* *
* *
Dấu của F”(x) 0 – – x(1) –
x(2) 1 x
Trang 32thoả mãn điều kiện
* F '(x) không đổi dấu trên [a ; b] (2.4.2)
* F(a)F(b) < 0 (2.4.3)
Nội dung của phương pháp
Giải phương trình sau đây tương đương với (2.4.1)
x = ϕ(x) (2.4.4)
trong đó hàm ϕ(x) thoả mãn các điều kiện:
⎜ϕ’(x) ⎜ ≤ q < 1 , ∀x ∈ [a ; b] (2.4.5)
ϕ (x) ∈ [a ; b] , ∀x ∈ [a ; b] (2.4.6)
* Cho tuỳ ý xấp xỉ ban đầu của nghiệm là x(0) ∈ [a;b]
* Tính xấp xỉ thứ nhất của nghiệm là x(1) = ϕ (x(0))
* Nếu
⎜x(1) – x(0) ⎜ ≤ εx (2.4.7)
trong đó εx > 0, cho trước (sai số đối với nghiệm) thì ta dừng ở x(1)
* Ngược lại, có nghĩa là
⎜x(1) – x(0) ⎜ > εx (2.4.8)
ta tính F(x(1))
* Nếu
⎜F(x(1)) ⎜ ≤ εf (2.4.9)
trong đó εf > 0, cho trước (sai số đối với hàm) thì ta dừng ở x(1)
* Ngược lại, có nghĩa là
⎜F(x(1) ⎜ > εf (2.4.10)
Trang 33ta tính xấp xỉ thứ hai của nghiệm là x(2) = ϕ (x(1))
hoặc
⎜F(x(1) ⎜ ≤ εf (2.4.12)
ïï ïï
íï ïï
ï = ïïî
= + = ϕ(x) không thoả mãn (2.4.6) vì ϕ(2) = 1 1
2 + = 43 ∉ [1 ; 2]
* Cách biến đổi
x= 3 x+ 1 = ϕ(x)
Trang 342.5 Phương pháp Newton-Raphson cho hệ phương trình
Giải hệ phương trình phi tuyến
1 1
1
( , , ) 0
Trang 35Xấp xỉ hệ đã cho bởi hệ dừng ở đạo hàm riêng cấp 1 theo khai triển Taylor của
trong đó εx > 0, cho trước (sai số đối với nghiệm) thì ta dừng ở X(1)
* Ngược lại, có nghĩa là
Trang 36X(2) = X(1) – (J(X(1)))- 1F(X(1)) (2.5.10)
* Một cách tổng quát
Ta dừng lại ở xấp xỉ thứ k của nghiệm
X (k) = X (k - 1) – (J(X (k - 1))) - 1F(X (k - 1)) (2.5.11)
thoả mãn một trong các điều kiện sau đây
2 1
Trang 37Vì vậy ta dừng ở xấp xỉ thứ hai của nghiệm X (2) = ( 0,093468 – 0,193519 )
Write('Xap xi ban dau X(0) ');
Write('X1(0)=');Readln(X10);Write('X2(0)=');Readln(X20);
Trang 38{ D11 là đạo hàm riêng của F1 theo X1 tại (X10,X20),
D12 là đạo hàm riêng của F1 theo X2 tại (X10,X20),
D21 là đạo hàm riêng của F2 theo X1 tại (X10,X20),
D22 là đạo hàm riêng của F2 theo X2 tại (X10,X20) }
2.6 Phương pháp lặp Seidel cho hệ phương trình
Giải hệ phương trình phi tuyến
( , , ) 0
1 1
Trang 39Giải hệ sau đây tương đương vơi hệ (2.6.1) :
1 1 1
1
( , , )
ïï = ïî
g x
=
¶ å
ïïí ïï ïï
ïï =ïïïî
trong đó εx > 0, cho trước (sai số đối với nghiệm) thì ta dừng ở X(1)
* Ngược lại, có nghĩa là
thay xấp xỉ thứ nhất X(1) = (x1(1) xn(1)) của nghiệm vào vế phải của (2.6.2)
để tìm xấp xỉ thứ hai của nghiệm là X(2) = (x1(2) xn(2))
ïïí ïï ïï
ïï =ïïïî
Trang 40-ìïï = ïï ïï
ïïí ïï ïï
ïï =ïïïî
* Thay xấp xỉ ban đầu của nghiệm là X(0) để tìm xấp xỉ thứ nhất X(1) = (x1(1) x2(1))
x x
ïïï íï
-ïïî
* Tính sai số theo công thức (2.6.5)