Tải bản đầy đủ (.doc) (263 trang)

phương pháp số

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.08 MB, 263 trang )

tổng công ty bưu chính viễn thông việt nam
học viện công nghệ bưu chính viễn thông

Giáo trình

PHƯƠNG PHáP Số
Biên soạn
TS. Phan Đăng Cầu
ThS. Phan Thị Hà

Hà nội, tháng 10 / 2005


Lời nói đầu
Giáo trình "Phương pháp số" này được biên soạn cho sinh viên đại học năm thứ
hai các chuyên ngành Công nghệ thông tin (CNTT) và Viễn thông(VT) thuộc Học
Viện Công nghệ Bưu chính Viễn thông với thời lượng 30 tiết lý thuyết và 15 tiết thực
hành. Tương tự như các giáo trình về phương pháp số của các trường đại học khác,
giáo trình này bao gồm các kiến thức cơ bản nhất về phương pháp số như số xấp xỉ và
sai số, các phương pháp số trong đại số tuyến tính, phép nội suy và hồi quy, tính gần
đúng nghiệm của phương trình phi tuyến, tính gần đúng đạo hàm và tích phân xác
định, giải gần đúng phương trình vi phân. Như một phần để sinh viên tự tìm hiểu,
chúng tôi bổ sung thêm chương 7 giới thiệu sơ lược về phương pháp Monte-carlo hay
thực ra là phương pháp thử ngẫu nhiên để tính toán xấp xỉ các đại lượng tất định, là
một lĩnh vực quan trọng và có nhiều ứng dụng trong thực tế, trong đó có nghành Bưu
chính Viễn thông.
Hiện nay tài liệu về "Phương pháp số" rất phong phú và cách trình bày cũng rất
đa dạng. Nhiều tài liệu chỉ giới thiệu thuật toán, phần thực hành trên máy sinh viên tự
thực hiện. Cũng có những tài liệu giới thiệu chi tiết các thuật toán cùng các chương
trình cài đặt trên máy tính, giúp cho sinh viên có thể thực hành trên máy dễ dàng hơn.
Chúng tôi theo hướng thứ hai, nghĩa là sau khi giớ i thiệu các thuật toán, chúng tôi


giới thiệu luôn cả chương trình cài đặt. Điểm khác biệt của giáo trình này so với các
tài liệu đã có là thay vì ngôn ngữ Pascal quen thuộc, chúng tôi viết các chương trình
bằng C++ và có thêm phần đồ thị minh họa. Chúng tôi nghĩ rằng khi xem các bảng
số, nhiều khi rất khó nhìn ra mối quan hệ giữa các đại lượng. Ví dụ trong bài toán hồi
quy chẳng hạn, ta cần xác định một đa thức thích hợp xấp xỉ tốt nhất tập số liệu đã
cho. Nếu chỉ nhìn vào các bảng với chi chít các con số ta rất khó phân biệt. Còn nếu
biểu diễn bằng đồ thị, và thêm chức năng lựa chọn tăng giảm bậc của đa thức, ta có
thể nhìn thấy rất rõ đa thức nào xấp xỉ tập số liệu tốt hơn. Lập trình cài đặt các thuật
toán về phương pháp số với một vài yêu cầu về chấ t lượng không phải là một việc
quá đơn giản, nhất là đối với sinh viên năm thứ hai, khi kiến thức về lập trình máy
tính còn khá hạn chế và các em còn phải dành thời gian cho nhiều môn học khác.
Phần lớn các thuật toán trình bày trong giáo trình này đều có chương trình cài đặt
kèm theo cùng với đồ thị minh họa nên nói chung khá dài. Trong khi trình bày các
thuật toán chúng tôi chỉ giới thiệu đoạn chính của chương trình, bạn đọc có thể tham
khảo liệt kê toàn văn các chương trình này trong phần phụ lục. Chúng tôi cũng để lại
một số thuật toán như tính giá trị riêng và véc tơ riêng của ma trận, nội suy bằng
phương pháp làm trơn, các thuật toán Monte-carlo... để các bạn có thể tự rèn luyện
thêm kỹ năng lập trình của mình. Các bạn có thể tự viết chương trình cho mình với
một cách trình bày khác (ví dụ không dùng con trỏ hàm để mô tả các hàm mà nhập
hàm trực tiếp từ màn hình chẳng hạn) và chỉ xem những chương trình có sẵn là đáp
án. Và cũng có thể khi so sánh với đáp án các bạn lại thấy chương trình của mình có


nhiều điểm hay hơn chương trình mẫu. Trong những trường hợp đó chúng tôi rất vui
mừng nghe ý kiến đóng góp của các bạn.
Trong phạm vi của một giáo trình giảng dạy với thời lượng hạn chế, tài liệu này
chỉ có khả năng giới thiệu một số thuật toán quen thuộc, chủ yếu ở mức độ giới thiệu
thuật toán mà chưa đi sâu vào lý thuyết. Một số chi tiết về thuật toán và chương trình
sẽ được giải thích rõ ràng hơn trong bài giảng lý thuyết và thực hành.
Với trình độ hạn chế, tài liệu này chắc chắn còn chứa nhiều thiếu sót, chúng tôi

mong nhận được ý kiến phê bình đóng góp của bạn đọc.
Chúng tôi xin chân thành cảm ơn Lãnh đạo Học Viện Công nghệ Bưu chính
Viễn thông và Phòng đào tạo đã tạo điều kiện thuận lợi để chúng tôi biên soạn tài liệu
này.
Chúng tôi cũng xin chân thành cảm ơn các đồng nghiệp trong Học Viện Công
nghệ Bưu chính Viễn thông và ở các Viện hoặc trường đại học khác về những sự
khích lệ và giúp đỡ nhiệt tình mà chúng tôi đã nhận được trong quá trình biên soạn
giáo trình này.
Hà Tây ngày 25 tháng 10 năm 2005
Nhóm tác giả


mục lục
Chương 1.............................................................................................................1
Sốxâp
́ xỉ vàsai số...............................................................................................1
1.1. Tông
̉ quan vềphương phaṕ sô...........................................................................1
́
1.1.1. Phương phaṕ sốlàgi?̀ ................................................................................1
1.1.2. Những dang
̣ sai sốthương
̀ gặp .................................................................2
1.2. Sai sốtuyêṭ đôí vàsai sốtương đôí..................................................................3
1.2.1. Sai sốtuyêṭ đôí...........................................................................................4
1.2.2. Sai sốtương đôí.........................................................................................4
1.3. Cach
́ viêt́ sốxâṕ xi.̉ ............................................................................................5
1.3.1. Chữsốcónghiã ..........................................................................................5
1.3.2. Chữsốđang

́ tin..........................................................................................5
1.3.3. Cach
́ viêt́ sốxâṕ xỉ......................................................................................6
1.3.4. Sai sốquy tron
̀ .............................................................................................6
1.4. Cać quy tăć tinh
́ sai sô.......................................................................................7
́
1.4.1. Mở đâu
̀ .......................................................................................................7
1.4.2. Sai sốcuả tông
̉ .............................................................................................7
1.4.3. Sai sốcuả tich
́ ..............................................................................................8
1.4.4. Sai sốcuả thương........................................................................................8
1.4.5. Sai sốcuả ham
̀ bât́ ky..................................................................................9
̀
1.5. Sai sốtinh
́ toań vàsai sốphương phaṕ ............................................................10
1.6. Sự ôn̉ đinh
̣ cuả môṭ quátrinh
̀ tinh
́ toań ...........................................................10
1.7. Môṭ vaì điêù vềmôí quan hệ giưã thực tếvàmô hinh
̀ ....................................11

Chương 2...........................................................................................................13
Cać phương phap
́ sốtrong đaị sốtuyên

́ tinh
́ ...............................................13
2.1. Mở đâù ............................................................................................................13
2.2. Ma trâṇ vàđinh
̣ thưć .......................................................................................13
2.2.1. Ma trân
̣ ......................................................................................................13
2.2.2. Đinh
̣ thưć cuả ma trâṇ vuông...................................................................14
2.2.3. Tinh
́ chât́ cuả đinh
̣ thưć ............................................................................16
2.2.4. Cać phương phaṕ tinh
́ đinh
̣ thưć ..............................................................17
2.2.5. Ma trân
̣ nghich
̣ đaỏ ...................................................................................21
2.3. Hệ phương trinh
̀ đaị sốtuyêń tinh
́ ..................................................................22
2.3.1. Phương phaṕ trực tiêṕ giaỉ hệ phương trinh
̀ tuyêń tinh
́ .........................23
2.3.2. aṕ dung
̣ phương phaṕ khử Gauss-Jordan để tinh
́ ma trâṇ nghich
̣ đaỏ ...28
2.3.3. Sự không ôn
̉ đinh

̣ cuả hệ phương trinh
̀ đaị sốtuyêń tinh
́ ......................32


2.3.4. Phương phaṕ lặp giaỉ hệ phương trinh
̀ tuyêń tinh
́ ..................................33
2.4. Tinh
́ giátrị riêng vàvec tơ riêng cuả ma trâṇ .................................................46
2.4.1. Phương phaṕ luỹ thưà để tim
̀ trị riêng trôị va ̀vec tơ riêng gâǹ đung
́ ...47
2.4.2. Phương phaṕ xuông
́ thang để tim
̀ trị riêng trôị tiêṕ theo .......................56
2.4.3. Trường hợp ma trâṇ A đôí xưng
́ vàxać đinh
̣ dương ............................58

Chương 3...........................................................................................................63
Phep
́ nôị suy vàhôì quy ..................................................................................63
3.1. Mở đâù ............................................................................................................63
3.2. Nôị suy đa thưć ...............................................................................................65
3.2.1. Sự duy nhât́ cuả đa thưć nôị suy..............................................................65
3.2.2. Tinh
́ giátrị đa thưć băng
̀ phương phaṕ Horner .......................................66
3.2.3. Sai sốcuả đa thưć nôị suy.........................................................................66

3.2.4. Phương phaṕ nôị suy Lagrange ...............................................................68
3.2.5. Sai phân.....................................................................................................69
3.2.5. Phương phaṕ sai phân Newton ................................................................71
3.2.7. Pheṕ nôị suy ngược ..................................................................................77
3.3. Khơṕ đương
̀ cong - nôị suy spline...................................................................80
3.4. Phương phaṕ binh
̀ phương cực tiêủ ................................................................82
3.4.1. Trường hợp ham
̀ nôị suy làđa thưć hay y phụ thuôc̣ cać tham sốmôṭ
cach
́ tuyêń tinh
́ ....................................................................................................82
3.4.2. Trường hợp y phụ thuôc̣ cać tham sốmôṭ cach
́ phi tuyêń .......................86

Chương 4...........................................................................................................90
Tinh
́ gân
̀ đung
́ nghiêm
̣ cuả phương trinh
̀ phi tuyên
́ ..................................90
4.1. Mở đâù ............................................................................................................90
4.2. Nghiêm
̣ vàkhoang
̉ phân ly nghiêm
̣ ..................................................................90
4.2.1. Nghiêm

̣ cuả phương trinh
̀ môṭ ân̉ ............................................................90
4.2.2. Sự tôǹ taị nghiêm
̣ cuả phương trinh
̀ .........................................................90
4.2.3. Khoang
̉ phân ly nghiêm
̣ ............................................................................90
4.2.4. Vềvân
́ đềđanh
́ giásai sốnghiêm
̣ xâṕ xỉ................................................91
4.3. Môṭ sốphương phaṕ lặp giaỉ phương trinh
̀ ...................................................94
4.3.1. Mở đâu
̀ .....................................................................................................94
4.3.2. Phương phaṕ chia đôi..............................................................................94
4.3.3. Phương phaṕ dây cung.............................................................................98
4.3.4. Phương phaṕ lặp đơn............................................................................105
4.3.5. Phương phaṕ Newton-Rapson hay coǹ goị la ̀phương phaṕ tiêṕ tuyêń 108

Chương 5.........................................................................................................114
Tinh
́ gân
̀ đung
́ đaọ ham
̀ vàtich
́ phân xać đinh
̣ .........................................114



5.1. Mở đâù ..........................................................................................................114
5.2. Tinh
́ đaọ ham
̀ .................................................................................................114
5.2.1. aṕ dung
̣ đa thưć nôị suy..........................................................................114
5.2.2. aṕ dung
̣ công thưć Taylor ........................................................................114
5.3. Tinh
́ gâǹ đung
́ tich
́ phân xać đinh
̣ ..................................................................117
5.3.1. Mô tả baì toan
́ .........................................................................................117
5.3.2. Công thưć hinh
̀ thang..............................................................................117
5.2.3. Công thưć parabol (Simpson) ..................................................................122

Chương 6.........................................................................................................126
Giaỉ gân
̀ đung
́ phương trinh
̀ vi phân ..........................................................126
6.1. Mở đâù ..........................................................................................................126
6.2. Phương phaṕ Euler......................................................................................127
6.3. Phương phaṕ Euler caỉ tiêń ..........................................................................135
6.4. Phương phaṕ Euler-cauchy..........................................................................137
6.5. Phương phaṕ Runge - Kutta..........................................................................139


Chương 7.........................................................................................................143
Phương phap
́ Monte-Carlo ...........................................................................143
7.1. Mở đâù ..........................................................................................................143
7.2. Sai sốcuả phương phaṕ .................................................................................143
7.2.1. Môṭ vaì khaí niêm
̣ xać suât́.....................................................................143
7.2.2. Sai sốcuả phương phaṕ ..........................................................................144
7.3. Taọ cać sốngâũ nhiên, cać biêń cốvàcać phân bốxać suât́.........................148
7.3.1. Taọ cać sốgiả ngâũ nhiên (pseudo-random number) cóphân bô ́đêù ....148
7.3.2. Mô phong
̉ phân bốbât́ ky.......................................................................150
̀
7.4. Tich
́ xâṕ xỉ tich
́ phân xać đinh
̣ .......................................................................152
7.4.1. Mô tả baì toan
́ .........................................................................................152
7.4.2. Phương phaṕ tach
́ riêng phâǹ chinh
́ .......................................................154
7.4.3. Đôí xứng hoá ham
̀ dươí dâú tich
́ phân ..................................................155
7.4.4. Phương phaṕ cać biêń cóphương sai cực tiêủ ......................................155
7.4.5. Phương phaṕ phân chia khoang
̉ con.......................................................156
7.4.6. Môṭ sốnhân

̣ xet́ ......................................................................................158
7.5. Nhâṇ xet́ vềphương phaṕ Monte-carlo.........................................................158

Câu hoỉ vàbaì tâp
̣ ............................................................................................159
Chương 1. Sốxâṕ xỉ vàsai sô...............................................................................159
́
Chương 2. Cać phương phaṕ sốtrong đaị sốtuyêń tinh
́ ......................................159


Chương 3. Pheṕ nôị suy vàhôì quy......................................................................161
Chương 4. Tinh
́ gâǹ đung
́ nghiêm
̣ phương trinh
̀ phi tuyêń ..................................161
Chương 5. Tinh
́ gâǹ đung
́ đaọ ham
̀ vàtich
́ phân xać đinh
̣ ..................................162
Chương 6. Tinh
́ gâǹ đung
́ phương trinh
̀ vi phân..................................................163
Chương 7. Phương phaṕ Monte-carlo..................................................................163

Phụ luc̣ ..............................................................................................................164

Cać chương trinh
̀ C++ caì đặt cać thuâṭ toan
́ ...........................................164
Cać chương trinh
̀ tiêṇ ich
́ chung...........................................................................164
Cać phương phaṕ sốtrong đaị sốtuyêń tinh
́ ........................................................169
Nhâp̣ sốliêụ cho ma trâṇ chữnhâṭ câṕ m x n: NHAPMTCN.CPP ..................169
Nhâp̣ sốliêụ cho ma trâṇ vuông câṕ n: NHAPMTV.CPP ................................173
Tinh
́ đinh
̣ thưć trực tiêṕ băng
̀ đinh
̣ nghia:
̃ DTHUCTT.CPP ............................176
Tinh
́ đinh
̣ thưć cuả ma trân
̣ băng
̀ cach
́ biêń đôỉ ma trâṇ vềdang
̣ tam giać trên:
DINHTHUC.CPP..............................................................................................178
Tinh
́ đaỏ ma trân
̣ băng
̀ phương phaṕ trực tiêp:
́ DAOMTTT.CPP ...................182
Giaỉ hệ phương trinh

̀ tuyêń tinh
́ dung
̀ khử Gauss: KHUGAUSS.CPP .............185
Giaỉ hệ phương trinh
̀ tuyêń tinh
́ dung
̀ khử Gauss-Jordan: ..............................189
GJORDAN.CPP................................................................................................189
Tinh
́ ma trân
̣ đaỏ băng
̀ khử Gauss-Jordan: DAOMTRAN.CPP ......................193
Phương phaṕ lặp Gauss - Seidel: GSEIDEL.CPP .............................................197
Pheṕ nôị suy vàhôì quy.........................................................................................203
Cać phương phaṕ nôị suy: NOISUY.CPP .........................................................203
Phương phaṕ binh
̀ phương cực tiêu:
̉ HOIQUY.CPP ........................................214
Tinh
́ gâǹ đung
́ nghiêm
̣ cuả phương trinh
̀ phi tuyêń ..............................................224
Phương phaṕ chia đôi tim
̀ nghiêm:
̣ CHIADOI.CPP .........................................224
Phương phaṕ dây cung: DAYCUNG.CPP ........................................................229
Phương phaṕ Newton: TTUYEN.CPP ..............................................................234
Tinh
́ gâǹ đung

́ đaọ ham
̀ vàtich
́ phân xać đinh
̣ .....................................................239
Tinh
́ xâṕ xỉ đaọ ham:
̀ DAOHAM.CPP .............................................................239
Phương phaṕ hinh
̀ thang tinh
́ tich
́ phân xać đinh:
̣
HTHANG.CPP ..................246
Tinh
́ tich
́ phân băng
̀ phương phaṕ Simson: SIMSON.CPP ...............................250
Taì liêụ tham khaỏ .................................................................................................256


Chương 1
Số xấp xỉ và sai số
1.1. Tổng quan về phương pháp số
1.1.1. Phương pháp số là gì?
Phương pháp số (numerical method) hay đôi khi còn được gọi là Phương pháp
tính (Computational method), Toán học tính toán (Computational mathematics) hoặc
Giải tích số (Numerical analysis) là một lĩnh vực của toán học chuyên nghiên cứu các
phương pháp giải gần đúng các bài toán bằng cách dựa trên những dữ liệu số cụ thể
và cho kết quả cũng dưới dạng số. Nói gọn hơn, phương pháp số như bản thân tên
gọi của nó, có nghĩa là phương pháp giải các bài toán bằng những con số cụ thể.

Trong phương pháp số ta thường quan tâm đến hai vấn đề:
• Phương pháp để giải bài toán.
• Mối liên hệ giữa lời giải số gần đúng và lời giải đúng, hay vấn đề sai số của lời
giải.
Giải gần đúng nghĩa là lời giải của ta so với lời giải đúng có một sai số nào đó.
Thông thường sai số do rất nhiều nguồn tạo nên và nhiều lúc rất khó tính toán chính
xác là bao nhiêu, thậm chí ngay cả việc đưa ra một ước lượng gần sát với thực tế
cũng khó có thể đạt được. Khi áp dụng một công thức lý thuyết vào thực tế, ví dụ áp
dụng công thức tính diện tích hình tròn πr2 để tính diện tích đáy của một bể chứa
nước chẳng hạn, ta không thể có được số π chính xác. Tùy thuộc vào yêu cầu của
bài toán cụ thể , có khi ta chọn số π xấp xỉ bằng 3.14, có khi là 3.14159, hay chính
xác hơn nữa 3.141595360... Có thể nói rằng có rất nhiều người đã áp dụng cách tính
gần đúng để giải quyết một vấn đề thực tế nào đó, mặc dầu chưa được trang bị những
kiến thức cần thiết về phương pháp số. Một nhà kinh tế khi hoạch định chính sách,
thực hiện tính toán để dự báo về xu thế phát triển của một ngành kinh tế nào đó chẳng
hạn, cũng thực hiện rất nhiều tính toán gần đúng, và có thể nói rằng trong phần lớn
các trường hợp họ không đưa ra được một ước lượng là sai số khoảng bao nhiêu; hay
một kỹ sư xây dựng khi tính toán để xây dựng một ngôi nhà, anh ta thực hiện rấ t
nhiều phép tính, có khi chỉ bằng máy tính bỏ túi, rất khó xác định sai số tích lũy
trong quá trình tính toán. Vậy mà anh ta vẫn hoàn thành công việc, và ngôi nhà xây
xong có vẻ đạt tiêu chuẩn kỹ thuật. Có nghĩa là trong thực tế nhiều khi ta phải giải
quyết những vấn đề mà ta biết là có sai số, nhưng bằng kinh nghiệm nghề nghiệp ta
có cảm giác là sai số như vậy chấp nhận được hay không, và chấp nhận lời giải mà
không hề có một đánh giá về sai số. Vậy thì môn học phương pháp số có thực sự cần
thiết không? Học nó ta sẽ thu được lợi ích gì? Có thực sự cần thiết cho công việc


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

chuyên môn của ta sau này không? Câu trả lời của chúng tôi là có, nhất là khi ta phải

tính toán để giải một bài toán kỹ thuật đòi hỏi độ chính xác cao. Ta biết rằng trong
máy tính các số có thể biểu diễn dưới nhiều dạng khác nhau, ví dụ số thực có thể
biểu diễn với độ chính xác bình thường (single), độ chính xác gấp đôi (double) hay độ
chính xác mở rộng (extended). Nếu ta biết được mối liên hệ giữa lời giải số với lời
giải đúng, sẽ biết nên chọn độ chính xác nào để kết quả đáp ứng được yêu cầu thực
tế. Ngay cả những lĩnh vực mà ta cảm thấy rằng không cần tính toán chính xác như
điều tra nghiên cứu các vấn đề xã hội chẳng hạn, để các kết quả có căn cứ khoa học,
ta phải tiến hành tính toán các khoảng tin cậy, khi đó cần tính toán xấp xỉ tích phân
các hàm số phức tạp như hàm Gama (Γ(x)), hàm Bêta (Β(x)),... nghĩa là ta cần đến
công cụ phương pháp số.
Để có thể thấy rõ thêm sự lựa chọn mô hình, và sau đó là lựa chọn phương pháp tính
toán, đôi khi có ảnh hưởng lớn như thế nào đến kết quả thu được, ta xét một ví dụ
đơn giản sau đây:
Giả sử trong bài toán của ta có việc phải tính biểu thức ( 2 - 1)10 . áp dụng công
thức nhị thức Newton ta có công thức đúng:
( 2 - 1)10 = 3363 - 2378 2

(1.1)

Giá trị của 2 vế của (1.1) vào khoảng 0.000148676. Trong thực tế, ta không tính
được giá trị chính xác của 2 (khoảng 1.41421356240), mà chỉ tính được giá trị gần
đúng. Bảng sau đây cho các kết quả của vế trái và vế phải của (1.1) ứng với các giá
trị gần đúng của 2 .
2

1.4
1.41
1.414
1.41421
1.414213563


Vế trái

Vế phải

0.0001048576
0.00013422659
0.000147912
0.00014866399
0.00014867678

33.8
10.02
0.508
0.00862
0.0001472

Ta có thể thấy rằng cách tính trực tiếp có kết quả khá ổn định, không bị tác động
nhiều bởi sai số tính 2 . Trong lúc đó cách tính dùng nhị thức Newton lại bị tác
động rất lớn khi sai số thay đổi. Ngay cả khi ta lấy

2 ≈ 1.41421, tức là sai số tính

2 nhỏ hơn 0.000005 thì kết quả của vế phải vẫn còn khác rất xa so với giá trị thật.

Vậy rõ ràng khi cần tính biểu thức trên ta nên chọn phương pháp trực tiếp thì sẽ
nhận được kết quả chính xác hơn. Còn nếu đã chọn phương pháp dùng khai triển nhị
thức Newton thì ta phải chọn giá trị xấp xỉ của 2 với độ chính xác khá cao, nếu
không thì kết quả sẽ bị sai lệch rất nhiều.


1.1.2. Những dạng sai số thường gặp
Trong thực hành có khi bài toán của ta là tìm cách tính toán xấp xỉ một mô hình

2


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

toán học đã biết, ví dụ tìm nghiệm của một phương trình đã biết, tính tích phân xác
định của một hàm số nào đó trên khoảng [a,b] cho trước. Tuy vậy ta gặp ngày càng
nhiều những bài toán thực tế mà ngay cả mô hình toán học cũng chưa biết. Ví dụ, ta
phải dự báo về số lượng thuê bao điện thoại trong một vài năm tới, số người truy
nhập internet,...Trong những trường hợp này ta phải bắt đầu từ việc thu thập số liệu,
xây dựng mô hình rồi tìm phương pháp tính toán... Nói chung khi thực hiện một bài
toán bằng phương pháp số ta thường gặp những loại sai số sau đây:
Sai số trong việc mô hình hóa bài toán, do ta không thể tính được hết những yếu tố
ảnh hưởng đến bài toán, hoặc do ta biết được những yếu tố ảnh hưởng nhưng phải đơn
giản hóa mô hình để có thể tính toán được. Ví dụ khi cần tính dung lượng của bể chứa
nước hình trụ, ta biết rằng đáy của hình trụ không phải là một hình tròn chín h xác,
nhưng vẫn giả thiết là hình tròn để việc tính toán được dễ dàng hơn. Hoặc khi cần lập
một mô hình biểu diễn các quan hệ kinh tế, ta biết rằng các mối quan hệ đó nói chung
rất phức tạp, ví dụ không phải là tuyến tính, nhưng do không thể xác định được các
yếu tố đó ảnh hưởng như thế nào nên trong nhiều trường hợp ta vẫn chấp nhận mô
hình tuyến tính...
Sai số phương pháp – là sai số của mỗi phương pháp dùng để tìm lời giải gần đúng.
Trong ví dụ tính nhị thức Newton trên đây ta thấy rằng cùng một giá trị xấp xỉ của
2 nhưng phương pháp tính trực tiếp cho kết quả chính xác hơn phương pháp dùng
khai triển nhị thức Newton.
Sai số của số liệu – Khi đo đạc bằng máy móc hoặc bằng các dụng cụ chuyên dụng ta
chỉ đạt được độ chính xác nhất định. Máy móc hiện đại thường cho kết quả đo chính

xác hơn.
Sai số tính toán – sai số do ta làm tròn khi tính toán.
Những sai số trên đây tổng hợp lại nhiều khi dẫn đến những lời giải quá cách xa so
với lời giải đúng và vì vậy không thể dùng được. Chính vì vậy việc tìm ra những
thuật toán hữu hiệu để giải các bài toán thực tế là điều rất cần thiết. Các phương pháp
số đã được sử dụng có rất nhiều, và nhiều vấn đề hiện nay vẫn còn bỏ ngõ chờ sự
nghiên cứu phát triển của các chuyên gia. Trong tài liệu này chú ng tôi chỉ giới thiệu
một số thuật toán thông dụng để bạn đọc làm quen dần với chuyên nghành này.
Chúng tôi cũng chỉ đề cập đến một số loại sai số như sai số số liệu hay sai số tính
toán, và đôi khi ta có khảo sát về sai số phương pháp, còn sai số do mô hì nh hóa thì
nằm ngoài khuôn khổ tài liệu này. Để giúp bạn đọc có thể thực hành trên máy tính và
nắm sâu hơn bài giảng, chúng tôi giới thiệu các chương trình cài đặt kèm theo viết
bằng ngôn ngữ C++, là ngôn ngữ khá thông dụng hiện nay.

1.2. Sai số tuyệt đối và sai số tương đối
Có rất nhiều công thức vật lý, toán học mà khi áp dụng vào thực tế ta chỉ có
được các giá trị xấp xỉ. Có thể nói rằng trong phần lớn các vấn đề thực tế ta chỉ làm
việc với các đại lượng gần đúng mà thôi. Sai số giữa đại lượng thật và đại lượng xấp
xỉ nhiều khi rất khác biệt. Độ dài một con đường, độ cao của một ngọn núi hay chiều

3


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

cao mực nước sông có thể là những số rất lẻ, thậm chí là số vô tỉ. Thế nhưng khi đo
đạc ta lại cho các kết quả là những số đã làm tròn. Chiều cao ngọn núi ta chỉ lấy đến
m (mét), độ dài con đường thường chỉ lấy đến km, còn chiều cao mực nước sông lại
được đo đến mm (milimét). Vậy sai số như thế nào thì có thể chấp nhận được, nghĩa
là không làm sai lệch ý nghĩa của các tính toán lý thuyết khi áp dụng vào thực tế?


1.2.1. Sai số tuyệt đối
Xét đại lượng đúng A và đại lượng gần đúng của nó là a. Ta nói a xấp xỉ A
và viết a ≈ A. Trị tuyệt đối Ea = | a-A | được gọi là sai số tuyệt đối của a (khi dùng
a để xấp xỉ A). Trong thực tế ta không biết được số đúng A, do đó nói chung sai số
tuyệt đối không tính được. Vì vậy ta tìm cách ước lượng sai số tuyệt đối của a bằng
số ∆ a>0 sao cho
| a - A | ≤ ∆a

(1.2)

Số dương ∆ a được gọi là sai số tuyệt đối giới hạn của a. Rõ ràng nếu ∆ a là sai số
tuyệt đối giới hạn của a thì mọi ∆ > Ea đều là sai số tuyệt đối giới hạn của a. Ta
có thể thấy ngay là nếu sai số tuyệt đối giới hạn quá lớn so với sai số tuyệt đối thì nó
không còn có ý nghĩa về phương diện sai số nữa. Ví dụ ta phải đo nhiệt độ của một
vật mà ta không thể đặt thiết bị đo trực tiếp. Giả sử nhiệt độ thật là 100 0 , ta đo được
1010 , sai số tuyệt đối chỉ là 1 0 nhưng lại đặt sai số tuyệt đối giới hạn là 20 0 thì rõ
ràng sự hình dung của ta về nhiệt độ thật của vật có thể rất sai lệch so với thực tế.
Thật vậy nếu chỉ dựa vào thông tin sai số tuyệt đối giới hạn thì ta phải hình dung là
nhiệt độ của vật biến động trong khoảng 80 0 đến 1200 , trong khi thực ra ta đã có
được kết quả chính xác hơn nhiều. Vì vậy trong những điều kiện cụ thể người ta cố
gắng chọn ∆ a là số dương bé nhất có thể được thoã mãn (1.1). Nếu ∆ a là sai số
tuyệt đối giới hạn của a khi xấp xỉ A thì ta quy ước viết:
A = a ± ∆a

(1.3)

với ý nghĩa của (1.1), tức là
a - ∆a ≤ A ≤ a + ∆a


(1.4)

1.2.2. Sai số tương đối
Sai số tuyệt đối không nói lên đầy đủ "chất lượng của một xấp xỉ". Thật vậy giả
sử một người phải đo đoạn đường rất dài, ví dụ đoạn đường trên Quốc lộ I từ Bắc
đến Nam chẳng hạn, thu được kết quả là 1655 km và sai số tuyệt đối là 1 km.
Người thứ hai phải đo mức nước hồ sông Đà chỗ sâu nhất được 21m, sai số tuyệt đối
là 1 m. Nếu chỉ nhìn vào sai số tuyệt đối, ta thấy người thứ 2 đo chính xác hơn, thậm
chí chính xác hơn 1000 lần so với người thứ nhất. Nhưng bằng cảm giác ta thấy ngay
kết luận đó không hợp lý. Thậm chí ta phải kết luận ngược lại: người thứ nhất đo
chính xác hơn người thứ hai. Trong thực tế ta có thể gặp rất nhiều trường hợp tương
tự. Như vậy bản thân sai số tuyệt đối chưa nói lên độ tin cậy của xấp xỉ, mà ta còn

4


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

phải so sánh độ lớn sai số đó với giá trị thật của đại lượng cần tính.
Gọi Ea là sai số tuyệt đối của a khi dùng a để xấp xỉ A, khi đó đại lượng
εa =

Ea
| A|

(1.5)

được gọi là sai số tương đối của a. Tuy nhiên một lần nữa ta thấy rằng A thường
không biết, vì vậy người ta định nghĩa đại lượng
δa =


∆a
| A|

(1.6)

là sai số tương đối giới hạn của a. Từ đây ta có
∆ a = | a| δa

(1.7)

Từ đây người ta thường viết
A = a(1 ± δa)

(1.8)

Vì trong thực tế ta chỉ có thể thao tác với các sai số giới hạn, do đó người ta thường
gọi một cách đơn giản ∆ a là sai số tuyệt đối, δa là sai số tương đối. Đôi khi người ta
biểu diễn sai số tương đối dưới dạng %. Ví dụ với a =10, ∆ a = 0.05, khi đó ta có δa
= 0.05/10 = 0.5 %.

1.3. Cách viết số xấp xỉ
1.3.1. Chữ số có nghĩa
Một số viết dưới dạng thập phân có thể gồm nhiều chữ số, nhưng ta chỉ kể các
chữ số từ chữ số khác không đầu tiên tính từ trái đến chữ số cuối cùng khác không
phía bên phải là các chữ số có nghĩa. Chẳng hạn số 2.740 có 3 chữ số có nghĩa, số
0.02078 có 4 chữ số có nghĩa.

1.3.2. Chữ số đáng tin
Mọi số thập phân đều có dạng

a = ± α n α n −1 ...α 1α 0 .α −1α − 2 ...α − m = ± Σαs10s
Trong đó αs là những số nguyên từ 0 đến 9. Giả sử a là xấp xỉ của số A với sai
số tuyệt đối là Ea . Nếu Ea ≤ 0.5*10s thì ta nói rằng chữ số αs là đáng tin (và như
vậy các chữ số có nghĩa bên trái αs đều là đáng tin). Nếu Ea > 0.5*10s thì ta nói
rằng chữ số αs là đáng nghi (và như vậy các chữ số bên phải αs đều là đáng nghi).
Ví dụ. Số xấp xỉ a = 4.67329
với Ea = 0.004726. Ta có | Ea | ≤ 0.5 *10-2 do đó các chữ số đáng tin là: 4,6,7; các
chữ số đáng ngờ là 3,2, 9.
với Ea = 0.005726. Ta có | Ea | ≤ 0.5 *10-1 (nhưng | Ea | > 0.5 *10-2 ) do đó các chữ

5


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

số đáng tin là: 4,6; các chữ số đáng ngờ là 7, 3, 2, 9.

1.3.3. Cách viết số xấp xỉ
a. Kèm theo sai số
Cách thứ nhất là viết kèm theo sai số như công thức (1.3) A = a ± ∆ a
b. Mọi chữ số có nghĩa đều đáng tin
Cách thứ hai là viết theo quy ước: mọi chữ số có nghĩa đều đáng tin; có nghĩa là sai
số tuyệt đối Ea không lớn hơn một nửa đơn vị ở hàng cuối cùng.
Nhận xét:
Thực ra trong các tài liệu hiện có khi định nghĩa các chữ số đáng tin và chữ số đáng
nghi người ta dùng khái niệm sai số tuyệt đối giới hạn chứ không dùng khái niệm sai
số tuyệt đối như trên đây. Tuy nhiên theo chúng tôi, nếu hiểu như vậy và cho rằng
trong tính toán chỉ nên giữ lại các chữ số đáng tin thì có lúc sẽ dẫn đến những kết quả
thiếu chính xác. Thật vậy, nếu ta định nghĩa các chữ số đáng tin thông qua khái niệm
sai số tuyệt đối giới hạn thì khi ta tăng giá trị của sai số tuyệt đối giới hạn (theo định

nghĩa thì giá trị mới vẫn là sai số tuyệt đối giới hạn) các chữ số đáng tin có thể trở
thành đáng nghi, và nếu ta bỏ các chữ số này thì thực ra đã bỏ mất các chữ số đáng
tin và kết quả tính toán có thể bị ảnh hưởng nghiêm trọng. Ví dụ, ta có số π được
tính xấp xỉ là 3.14 và ta biết rằng các chữ số này đều đáng tin cậy, vì từ xấp xỉ tốt
hơn của số π thí dụ 3.14159 ta thấy sai tuyệt đối E π <0.002 < 0.005. Tuy nhiên có
thể xem 0.1 là sai số tuyệt đối giới hạn và như vậy chỉ còn lại chữ số 3 là đáng tin.
Ta có thể thấy ngay là nếu bỏ các chữ số đáng nghi trong quá trình tính toán trong
trường hợp này thì thật là sai lầm. Điều này sẽ không xảy ra nếu ta dựa vào sai số
tuyệt đối. Trong các chương sau, khi tính toán xấp xỉ nghiệm các phương trình hay
tính xấp xỉ các đạo hàm , tích phân ta sẽ gặp các đánh giá về sai số (tức là sai số tuyệt
đối giới hạn). Những đánh giá này rất thô, do đó nếu ta dựa vào chúng để bỏ đi các
chữ số đáng nghi thì kết quả sẽ sai lệch đi rất nhiều.

1.3.4. Sai số quy tròn
Trong tính toán với các con số ta thường làm tròn các số theo quy ước sau: nếu
chữ số bỏ đi đầu tiên ≥ 5 thì thêm vào chữ số giữ lại cuối cùng một đơn vị, còn nếu
chữ số bỏ đi đầu tiên < 5 thì để nguyên chữ số giữ lại cuối cùn g.
Giả sử a là xấp xỉ của A với sai số tuyệt đối giới hạn là ∆ a . Giả sử ta quy tròn a
thành a' với sai số quy tròn tuyệt đối giới hạn là θ, tức là
| a' - a| ≤ θ.
Ta có

6


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

| a' - A| = | a' - a + a -A| ≤ | a' - a| + | a -A| ≤ θ + ∆ a
Vậy có thể lấy θ + ∆ a làm sai số tuyệt đối giới hạn của a'. Như vậy việc quy tròn
thường làm tăng sai số tuyệt đối giới hạn. Ví dụ ở mục 1.1 cho ta thấy sai số quy

tròn đôi khi có thể làm sai lệch hẳn kết quả tính toán. Ta nói rằng việc quy tròn
thường làm tăng sai số tuyệt đối giới hạn, vì có những trường hợp việc làm tròn lại
làm giảm sai số. Thí dụ A = 2.359, a = 2.356, tức là sai số tuyệt đối là 0.003, nhưng
khi làm tròn a thành 2.360 thì sai số chỉ còn 0.001.

1.4. Các quy tắc tính sai số
1.4.1. Mở đầu
Trên đây ta đã định nghĩa các loại sai số của một đại lượng xấp xỉ. Tuy nhiên trong
thực tế các đại lượng xấp xỉ thường xuất hiện trong một biểu thức phức tạp. Thí dụ
thể tích của hình cầu được tính bằng V = (1/6)πd3, trong đó ta phải tính xấp xỉ số π
và đường kính d. Vấn đề đặt ra là biết sai số khi tính π và d, liệu ta có thể tính
được sai số của V không. Ta xét bài toán tổng quát hơn như sau:
Xét hàm số u của 2 biến số x và y:
u = f(x,y)
Giả sử x là xấp xỉ của giá trị đúng X, y là xấp xỉ của giá trị đúng Y và ta coi u
là xấp xỉ của giá trị đúng U = f(X,Y).
Cho biết sai số về x và y, hãy lập công thức tính sai số về u.
Cho biến x ta sẽ ký hiệu ∆x = x - X là số gia của x, còn dx là vi phân của x.
Theo định nghĩa về sai số tuyệt đối, ta có | ∆x | ≤ ∆ x
Theo công thức vi phân của hàm nhiều biến ta có:
du =

∂u
∂u
dx +
dy
∂y
∂x

Từ đây

∆u ≈

∂u
∂u
∆x +
∆y
∂y
∂x

Suy ra
∆u = |

∂u
∂u
| ∆x + | | ∆y
∂y
∂x

(1.9)

1.4.2. Sai số của tổng
Cho u = x + y
Ta có

7


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

∂u ∂u

=
=1
∂x ∂y

Từ (1.9) suy ra
∆u = ∆x + ∆y

(1.10)

Ta có quy tắc sau:
Sai số tuyệt đối giới hạn của một tổng bằng tổng các sai số tuyệt đối giới hạn của các
số hạng.
Ghi chú. Xét trường hợp u = x - y và x, y cùng dấu. Lúc đó ta có
Δx + Δy
Δu
=
u
x−y

δu =

Ta thấy rằng nếu | x -y | rất bé thì sai số tương đối giới hạn rất lớn. Do đó trong tính
toán người ta tìm cách tránh trừ những số gần nhau.

1.4.3. Sai số của tích
Cho u = xy
Ta có
∂u
∂u
= y,

=x
∂y
∂x

Từ (1.9) suy ra
∆ u = |y| ∆ x + |x| ∆ y

Do đó

Δu

Δx

Δy

δu = u = x +
= δx + δy
y

Vậy
δu = δx + δy

(1.11)

Ta có quy tắc sau:
Sai số tương đối giới hạn của một tích bằng tổng các sai số tương đối giới hạn của
các số hạng của tích.
Xét trường hợp đặc biệt u = xn ta có
δx n = n δx


(1.12)

1.4.4. Sai số của thương
Cho u =

x
y

8


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

Ta có
x
∂u 1 ∂u
= ,
=− 2
y
∂x y ∂y

Từ (1.9) suy ra
∆u = |

x
1
|∆x + | 2 |∆y
y
y


Ta có
x
1
1
∆u
y
y
1
= ∆ u . | | = | | ( | | ∆ x + | 2 | ∆ y) = | | ∆ x + | | ∆ y =
y
y
y
|u|
x
x
x

Suy ra:
δxy = δx + δy

(1.13)

Ta có quy tắc sau:
Sai số tương đối giới hạn của một thương bằng tổng các sai số tương đối giới hạn
của các số hạng của thương.

1.4.5. Sai số của hàm bất kỳ
Cho u = f(x1, x2,..., xn)
Theo công thức vi phân của hàm nhiều biến ta có:
du =


∂u
∂u
∂u
dx1 +
dx2 + ... +
dxn
∂x 1
∂x 2
∂x n

Từ đây ta có
∂u

∂u

∂u

∆u ≈ ∂x ∆x1 + ∂x ∆x2 + ... + ∂x ∆xn
1
2
n
Suy ra
∆u = |

∂u
|∆
∂x 1

x1


+|

∂u
|∆
∂x 2

x2

+ ... + |

∂u
|∆
∂x n

xn

(1.14)

Ví dụ. Tính sai số tuyệt đối giới hạn và sai số tương đối giới hạn của thể tích hình
cầu:
V=

1
πd3
6

nếu cho đường kính d = 3.7 ± 0.05 cm và π = 3.14 ± 0.0016.
Giải. Xem


π và d là đối số của hàm V, áp dụng (1.12) và (1.13) ta có

δV = δπ + 3δd (Hệ số 1/6 không ảnh hương đến sai số tương đối)

9


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

δπ = 0.0016/3.14 = 0.0005
δd = 0.05/3.7 = 0.0135
Suy ra δV = 0.0005 + 3 * 0.0135 = 0.04
Mặt khác V = (1/6)πd3 = 26.5 cm3
Ta có ∆ V = |V|*δV = 26.5*0.04 = 1.06 ≈ 1.1 cm3
V = 26.5 ± 1.1 cm3

1.5. Sai số tính toán và sai số phương pháp
Như chúng tôi đã nhắc đến ở trên, khi giải một bài toán phức tạp ta phải thay bài
toán đó bằng bài toán đơn giản hơn để có thể tính toán bằng tay hoặc bằng máy.
Phương pháp thay bài toán phức tạp bằng một phương pháp đơn giản tính được như
vậy gọi là phương pháp gần đúng. Sai số do phương pháp gần đúng tạo ra gọi là sai
số phương pháp. Mặc dầu bài toán đã ở dạng đơn giản, có thể tính toán được bằng tay
hoặc trên máy tính, nhưng trong quá trình tính toán ta thường xuyên phải làm tròn các
kết quả trung gian. Sai số tạo ra bởi tất cả những lần quy tròn như vậy được gọi là sai
số tính toán. Trong thực tế việc đánh giá các loại sai số, nhất là sai số tính toán nhiều
khi là bài toán rất khó thực hiện. Để hiểu rõ hơn bản chất của sai số phương pháp và
sai số tính toán ta xét ví dụ sau:
Ta biết rằng với số x bất kỳ ta có
ex = 1+


x
x2
xn
+
+ ... +
+...
1!
2!
n!

Công thức này có thể dùng để tính giá trị ex . Tuy nhiên đây là tổng vô hạn, nên trong
thực tế ta chỉ tính được tổng Sn = 1+

x
x2
xn
+
+ ... +
, nghĩa là ta đã dùng phương
1!
2!
n!

pháp gần đúng. Khi tính tổng Sn ta lại thường xuyên phải làm tròn, do đó ta lại gặp
sai số khi tính toán Sn . Việc đưa ra một đánh giá về sai số tổng hợp của cả hai loại sai
số trên là bài toán rất phức tạp.

1.6. Sự ổn định của một quá trình tính toán
Xét một quá trình tính toán về lý thuyết có vô hạn bước để tính ra một đại lượng
nào đó. Ta nói rằng quá trình tính là ổn định nếu sai số tính toán tức là sai số quy tròn

tích lũy lại không tăng vô hạn. Nếu sai số đó tăng vô hạn thì ta nói quá trình tính là
không ổn định.
Rõ ràng nếu quá trình tính không ổn định thì không có hy vọng tính được đại lượng
cần tính với sai số nhỏ hơn sai số cho phép.
Để kiểm tra tính ổn định của một quá trình tính toán thường người ta giả sử sai số chỉ
xảy ra tại một bước, các bước sau đó coi như không có sai số khác phát sinh. Nếu cuối
cùng sai số tính toán không tăng vô hạn thì coi như quá trình tính là ổn định.

10


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

Ví dụ. Xét quá trình tính
yi+1 = qyi i = 0,1,2,...
Ta thấy
y1 = qy 0
y2 = q2 y0
yn = qn y0
...
Giả sử tại bước k ta mắc sai số ε, tức là thay vì y k ta lại nhận được y k + ε. Để
đơn giản, ta giả thiết k=0 và các số tham gia đều dương. Tại bước n, thay vì y n ta
lại nhận được yn ' = qn (y0+ ε).
Như vậy yn ' - yn = qn (y0+ ε) - qn y0 = qn ε.
Ta thấy ngay là nếu | q | < 1 thì sai số tính toán bị chặn, không tăng vô hạn, do đó
quá trình tính là ổn định. Còn nếu | q | > 1 thì sai số tính toán tăng vô hạn, do đó
quá trình tính là không ổn định.

1.7. Một vài điều về mối quan hệ giữa thực tế và mô hình
Theo những điều vừa nói trên đây thì ta luôn hiểu thực tế là tuyệt đối đúng, sai

số chỉ xảy ra khi ta muốn mô hình hóa thực tế và tiến hành tính toán mô hình đó.
Thực vậy, ta có cảm giác rằng giới tự nhiên đang hoạt động một cách chính xác: hệ
mặt trời đã có khoảng 5 tỷ năm tuổi, nhưng sự vận hành của nó có vẻ vẫn hoàn hảo:
hàng ngày mặt trời mọc, mặt trời lặn đều theo quy luật. Cứ sau 365 ngày + 1/4 ngày
thì quả đất quay đủ một vòng quanh mặt trời và hầu hết các vùng trên trái đất đều
trải qua bốn mùa. Ta có thể hình dung rằng chỉ cần mỗi năm sự vận hành của các
hành tinh sai lệch đi chút ít thì trong hàng tỷ năm sai số tích lũy có thể sẽ gây nên
những biến cố khôn lường! Tuy nhiên theo các nhà thiên văn thì sự vận hành của các
hành tinh không tuyệt đối hoàn hảo như ta tưởng. Xét vị trí của mặt trời và trái đất
chẳng hạn, theo lý thuyết thì nếu ngày hôm nay mặt trời đứng ở vị trí giữa bầu trời
tính từ đông sang tây thì sau 24 giờ nữa nó cũng ở vị trí giữa bầu trời (tất nhiên là
có thể chếch về phía nam nếu ta đang ở Việt nam). Nhưng trong thực tế không phải
như vậy. Các nhà thiên văn đã không thể xây dựng được múi giờ một cách chính xác
và nhất quán nếu dựa vào vị trí của mặt trời. Nói cụ thể hơn, nếu dựa vào vị trí mặt
trời của năm nay làm múi giờ cho các vùng trên trái đất thì năm sau thời gian đó
không còn thích hợp cho quỹ đạo của mặt trời nữa, mà có khác đi chút ít. Chính vì sự
"đỏng đảnh" của mặt trời như vậy nên các nhà thiên văn đã đưa ra khái niệm mặt trời
trung bình và thời gian trung bình. So với mặt trời trung bình và thời gian trung bình
thì hàng năm mặt trời thật đi lệch trong khoảng thời gian từ -14,3 đến +16,3 phút.
Tuy nhiên sở dĩ các sai số này không tích lũy từ năm này sang năm khác là vì các sai

11


Ph¬ng ph¸p sè - Ch¬ng 1. Sè xÊp xØ vµ sai sè

số giao động quanh vị trí trung bình và triệt tiêu lẫn nhau theo thời gian.
Nghĩa là, không chỉ mô hình của ta, mà ngay cả giới tự nhiên cũng có những sai số.
Tuy nhiên các sai số trong giới tự nhiên đều có quy luật và thường triệt tiêu lẫn nhau,
do đó không làm ảnh hưởng đến sự vận hành của các vật thể.


12


Chương 2
Các phương pháp số trong đại số tuyến tính
2.1. Mở đầu
Trong thực tế có nhiều bài toán cần đến các tính toán trên ma trận và giải hệ phương
trình đại số tuyến tính Ax=b. Trong chương này ta sẽ tìm hiểu các phương pháp số
trong đại số tuyến tính, bao gồm cách tính định thức, tìm ma trận nghịch đảo, các
phương pháp giải chính xác và giải gần đúng hệ phương trình đại số tuyến tính.

2.2. Ma trận và định thức
2.2.1. Ma trận
Ma trận chữ nhật A có kích thước m x n (hay cỡ mxn) là một bảng các số thực gồm
m dòng và n cột và được ký hiêụ nhuhư sau
 a 11
a
21
A= 
 .

a m1

a 12
a 22
.
a m2

... a 1n 

... a 2n 
... . 

... a mn 

(2.1)

Khi m = n ta có ma trận cỡ n x n và được gọi tắt là ma trận vuông cấp n.
Ma trận vuông cấp n mà mọi phần tử nằm ngoài đường chéo chính bằng 0, tức là
aij = aji = 0 với i ≠ j, được gọi là ma trận đường chéo . Nếu ma trận đường chéo có
aii = 1 thì ta gọi A là ma trận đơn vị và ta thường ký hiệu là E hoặc I.
1 0 ... 0
0 1 ... 0

E= 
. . . .


0 0 ... 1

Ma trận vuông A được gọi là ma trận tam giác trên, nếu A có dạng
a11
0
A= 
 .

0

a12
a 22

.
0

... a1n 
... a 2 n 
... . 

... a nn 

Tương tự, ma trận vuông A được gọi là ma trận tam giác dưới, nếu A có dạng


Ph¬ng ph¸p sè - Ch¬ng 2. C¸c ph¬ng ph¸p sè trong ®¹i sè tuyÕn tÝnh

 a 11
a
21
A= 
 .

a n1

0
a 22
.
a n2

... 0 
... 0 
... . 


... a nn 

Ma trận chữ nhật A T cỡ n x m được gọi là ma trận chuyển vị của ma trận A cỡ
nxm nếu:
 a 11
a
12
T
A =
 .

a 1n

a 21
a 22
.
a 2n

... a m1 
... a m2 
... . 

... a mn 

Chương trình nhập và sửa số liệu cho ma trận
Trong phần phụ lục chúng tôi giới thiệu 2 chương trình C++ nhập số liệu cho
ma trận chữ nhật và ma trận vuông để bạn đọc làm quen với các lệnh của C++ và
cách sử dụng chúng. Để khỏi phải viết đi viết lại các lệnh #include trong phần đầu
các chương trình, chúng tôi gộp các lệnh này trong tệp zheader.cpp. Trong phần đầu

chương trình thay vì viết các lệnh #include cụ thể ta chỉ cần dùng một lệnh
#include "zheader.cpp"
Các chương trình giới thiệu trong các phần sau sẽ thường xuyên dùng đến một
số thao tác như xem tệp văn bản, copy 2 tệp, vẽ đồ thị hàm số... Chúng tôi đã viết và
đưa các hàm này vào tệp zlibrary.cpp. Khi cần thiết tệp này cũng được chèn vào đầu
chương trình bằng lệnh #include.
Khi viết chương trình để sử dụng thực sự, bạn đọc cần xem xét cụ thể nên dùng
những lệnh #include nào và chỉ chọn đúng những lệnh cần thiết; trong tệp
zlibrary.cpp bạn cũng chỉ chọn những hàm cần thiết. Như vậy chương trình *.exe
tương ứng sẽ gọn hơn và chạy nhanh hơn.
Vì số liệu ma trận khá nhiều, do đó nếu mỗi lần chạy chương trình ta phải nhập
mới thì rất tốn công sức. Trong chương trình chúng tôi giới thiệu cách lưu trữ và đọc
số liệu từ tệp văn bản. Như vậy các bạn có thể nhập hoặc sửa số liệu trực tiếp từ bộ
nhớ hoặc mở tệp văn bản và thao tác trên đó. Trong trường hợp cần bảo mật số liệu
thì lưu trữ dưới dạng tệp nhị phân sẽ tốt hơn (chúng tôi danh phần này cho bạn đọc tự
tìm hiểu và thực hiện).
Nhập số liệu cho ma trận chữ nhật cấp m x n: xem chương trình
NHAPMTCN.CPP trong phần phụ lục.
Nhập số liệu cho ma trận vuông cấp n: xem chương trình NHAPMTV.CPP trong
phần phụ lục.

2.2.2. Định thức của ma trận vuông
Trước khi đưa ra định nghĩa định thức của ma trận, chúng tôi giới thiệu khái

14


Ph¬ng ph¸p sè - Ch¬ng 2. C¸c ph¬ng ph¸p sè trong ®¹i sè tuyÕn tÝnh

niệm hoán vị chẵn, hoán vị lẻ của một tập hợp n số nguyên {1, 2, ... , n}.

Cho α = (i1, i2,..., in) là một hoán vị của tập {1,2,...,n}. Ta xét tất cả các cặp (i k, ih),
trong đó k < h. Nếu ik > ih thì ta gọi cặp (ik, ih) là cặp ngược, tức là các giá trị i k, ih
được sắp xếp ngược với k,h. Nếu trong α số cặp ngược là chẵn thì ta gọi α là hoán
vị chẵn, ngược lại thì ta gọi α là hoán vị lẻ.
Với mỗi ma trận vuông A cấp n
 a 11
a
21
A= 
 .

a n1

... a 1n 
... a 2n 
... . 

... a nn 

a 12
a 22
.
a n2

(2.2)

tồn tại một số thực được gọi là định thức của ma trận A, ký hiệu là det A, được xác
định bởi công thức:
det A =
với



α

s(i1, i2,..., in) a1i a 2i ...a ni
1

2

n

(2.3a)

α = (i1, i2,..., in) chạy trong tập tất cả các hoán vị của tập {1,2,...,n}, và

s(i1, i2,..., in) =

1 nÕu α lµ ho¸n vÞ ch½n
-1 nÕu α lµ ho¸n vÞ lÎ

Như vậy định thức của ma trận là một tổng gồm n! số hạng. Mỗi số hạng là tích của
n phần tử của ma trận được chọn sao cho mỗi hàng và mỗi cột chỉ có một phần tử
được chọn. Nếu ta sắp các phần tử theo thứ tự tăng dần của chỉ số hàng thì ta có công
thức (2.3a), còn nếu ta sắp các phần tử theo thứ tự tăng dần của chỉ số cột thì ta có
công thức
det A =


α


s(i1, i2,..., in) a i 1 a i 2 ...a i n
1

2

n

(2.3b)

Định thức của ma trận còn được ký hiệu là
a 11
a 21
|A| =
.
a n1

a 12
a 22
.
a n2

... a 1n
... a 2n
... .
... a nn

Với mỗi ma trận chữ nhật A cấp m x n bất kỳ ta có thể tính định thức của tất cả các
ma trận con vuông cấp k, với k ≤ min ( m, n ). Nếu tồn tại một số r sao cho có một
ma trận con cấp r có định thức khác 0, còn mọi ma trận con vuông cấp lớn hơn r
đều bằng 0 thì ta nói rằng r là hạng của ma trận A.

Các phép biến đổi sơ cấp sau đây không làm biến đổi hạng của ma trận:
• Đổi chỗ 2 hàng hoặc 2 cột bất kỳ.
• Nhân một hàng hay một cột bất kỳ với một số khác không.

15


Ph¬ng ph¸p sè - Ch¬ng 2. C¸c ph¬ng ph¸p sè trong ®¹i sè tuyÕn tÝnh

• Cộng vào một hàng một tổ hợp tuyến tính của một số hàng khác.
Các phép biến đổi sơ cấp sẽ được sử dụng để tính định thức của ma trận và tìm
nghiệm của hệ phương trình tuyến tính.

2.2.3. Tính chất của định thức
Cho ma trận vuông A cấp n và ký hiệu detA là định thức của ma trận A. Sử
dụng định nghĩa của định thức, ta có thể chứng minh các tính chất sau:
• det AT = det A
• Nếu B cũng là ma trận vuông cấp n thì ta có
detAB = detA.detB
Hay định thức của tích 2 ma trận thì bằng tích của định thức các ma trận đó.
• Nếu ma trận A có một hàng toàn bằng 0 thì det A =0.
• Nếu A’ là ma trận nhận được từ ma trận A bằng cách đổi 2 dòng nào đó, thì ta có
det A’ = - det A, tức là định thức sẽ đổi dấu nếu ta đổi chỗ 2 hàng của ma trận.
• Nếu ma trận có hai hàng bằng nhau thì định thức bằng không (tính chất này là hệ
quả trực tiếp của tính chất trên).
• Nếu ta nhân một hàng của ma trận với số α thì định thức của ma trận mới sẽ là
định thức ma trận cũ nhân với α. Tức là nếu ta thay hàng (a r1, ar2,..., arn) bằng
(αar1, αar2,..., αarn) thì ta được ma trận mới A’ mà det A’ = αdetA.
• Nếu mỗi phần tử của một hàng thứ k nào đó của ma trận là tổng của hai phần tử b i
+ ci, i = 1,2,...,n, thì định thức của ma trận đó bằng tổng các định thức của hai ma

trận, trong đó mỗi ma trận chỉ khác ma trận ban đầu ở hàng thứ k: phần tử ở hàng
thứ k của mỗi ma trận tương ứng là bi và ci, i = 1,2,...n.
a11
.
b1 + c1
.
a n1

a12
.
b2 + c2
.
a n2

...
a1n
a 11
...
.
.
... b n + c n = b1
...
.
.
...
a nn
a n1

a 12
.

b2
.
a n2

... a 1n
a 11
... .
.
... b n + c1
... .
.
... a nn
a n1

a 12
.
c2
.
a n2

... a 1n
... .
... c n
... .
... a nn

• Nếu có một hàng là tổ hợp tuyến tính của một số hàng khác thì định thức bằng 0.


Như vậy định thức không thay đổi giá trị nếu ta cộng vào một hàng tổ hợp

tuyến tính của một số hàng khác.
Một trường hợp đặc biệt thường gặp là tổ hợp tuyến tính đó là tích của một số α
với một hàng:

16


Ph¬ng ph¸p sè - Ch¬ng 2. C¸c ph¬ng ph¸p sè trong ®¹i sè tuyÕn tÝnh

a 11
.
a i1 + αa h1
.
a n1

a 12
.
a i2 + αa h2
.
a n2

...
a 1n
a 11
...
.
.
... a in + αa hn = a i1
...
.

.
...
a nn
a n1

a 12
.
a i2
.
a n2

... a 1n
... .
... a in
... .
... a nn

Các tính chất trên đây vẫn đúng nếu ta thay hàng bằng cột.

2.2.4. Các phương pháp tính định thức
a. Tính định thức dựa trực tiếp vào định nghĩa
Ta có thể dùng (2.3) để tính định thức của một ma trận trên máy tính. Tuy
nhiên cách tính này đòi hỏi khoảng c*n! phép tính. Đây là con số khổng lồ với n
không lớn lắm. Ví dụ với máy tính hiện đại nhất hiện nay cũng cần hàng triệu năm để
tính định thức của ma trận cấp n = 25.
Chương trình DTHUCTT.CPP tính định thức theo công thức (2.3), bạn đọc có
thể thử với n tăng dần từ 8 đến 12. bạn sẽ thấy thời gian tính toán tăng rất nhanh,
và bạn không thể chờ đợi để thấy kết quả với n = 12 chẳng hạn.
b. Tính định thức dựa vào công thức khai triển theo hàng
Cho A là ma trận vuông cấp n và a ij là một phần tử bất kỳ của nó. Định thức

của ma trận con cấp n-1 sau khi “xóa” hàng thứ i và cột thứ j đi và không thay
đổi vị trí các thành phần còn lại, được gọi là minor của phần tử a ij , và được ký hiệu
là Mij . Giá trị A ij = (-1)i+j Mij được gọi là phần bù đại số của phần tử a ij . Ta có các
công thức sau để tính định thức ma trận vuông cấp n thông qua việc tính định thức
của các ma trận con cấp bé hơn:
Khai triển định thức theo hàng thứ i:
n

det A =



j=1

aij Aij

(2.4.a)

Khai triến định thức theo cột thứ j:
n

det A =



aij Aij

(2.4.b)

i= 1


áp dụng các công thức trên đây ta có thể dùng thuật toán đệ quy sau đây để tính định
thức của ma trận vuông cấp n :
Nếu n = 1 : A11 = 1; det A = a11 A11
n

n > 1: det A =



j=1

a1j A1j

Tuy nhiên, cũng như cách tính trực tiếp, cách tính này cần khoảng c*n! phép tính, và

17


Ph¬ng ph¸p sè - Ch¬ng 2. C¸c ph¬ng ph¸p sè trong ®¹i sè tuyÕn tÝnh

như vậy không thể thực hiện được trên máy tính hiện đại nhất hiện nay dù chỉ với n
không lớn lắm. Rõ ràng việc phân tính thuật toán giúp ta đánh giá được thời gian tính
toán trên máy tính và nếu thời gian đó là quá lớn thì ta khỏi phải tốn công vô ích viết
chương trình và chạy thử.
c. Tính định thức bằng cách chuyển ma trận về dạng tam giác trên
Ta có thể sử dụng các tính chất của định thức trên đây để tính định thức ma trận
với độ phức tạp tính toán thấp hơn nhiều.
Ta sẽ biến đổi để đưa ma trận A về dạng ma trận tam giác trên
b11

0
B= 
 .

0

b12
b 22
.
0

... b1n 
... b 2n 
... . 

... b nn 

(2.5)

áp dụng (2.4.a) ta có thể thấy rằng det B = b11 b22...bnn
Sau đây ta sẽ nghiên cứu thuật toán và chương trình cài đặt thuật toán này.
Thuật toán:
Thuật toán được thực hiện qua n-1 bước như sau:
(1)

Ta biến đổi để đưa ma trận A về dạng
a 11
0
A= 
 .


0

a 12
a 22
.
a n2

... a 1n 
... a 2n 
... . 

... a nn 

(2.6)

Để thực hiện điều này ta sẽ dùng hàng đầu tiên để khử phần tử a k1 trong các
hàng còn lại, k = 2,3,...Với hàng k ta sẽ nhân hàng đầu tiên với một số p k sau
đó trừ vào hàng k. Để phần tử đầu tiên a k1 của hàng thứ k bằng 0 sau khi trừ,
thì ta phải xác định pk sao cho
ak1 = pk a11
Như vậy đòi hỏi a11 ≠ 0, và khi đó pk = ak1 / a11
Điều kiện a 11 ≠ 0 không phải khi nào cũng thỏa mãn. Tuy nhiên để định thức
khác 0 thì điều kiện cần là trong các số a k1 , k = 1,2,..., n phải có ít nhất một
phần tử khác 0. Để giảm sai số làm tròn trong phép chia, ta sẽ chọn hàng có
phần tử đầu tiên có giá trị tuyệt đối lớn nhất để thay thế cho hàng thứ nhất. Tức
là ta chọn hàng r sao cho
| ar1 | = max {| ak1 | / k=1,2, ... ,n}
Sau đó ta đổi hàng r cho hàng 1 và định thức đổi dấu.


18


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×