SlideShare ist ein Scribd-Unternehmen logo
1 von 122
Downloaden Sie, um offline zu lesen
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
             -------   -------




             BÀI GIẢNG


PHƯƠNG PHÁP SỐ
             Biên soạn : Ths. PHAN THỊ HÀ
                          Ts. PHAN ĐĂNG CẦU




              Lưu hành nội bộ




              HÀ NỘI - 2006
Giới thiệu môn học




                              GIỚI THIỆU MÔN HỌC

I. GIỚI THIỆU CHUNG
      Phương pháp số 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 các
bài toán (chủ yếu là gần đúng) 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ể.
      Ngày nay phần lớn các công việc tính toán đều được thực hiện trên máy tính. Tuy vậy thực
tế chứng tỏ rằng, việc áp dụng các thuật toán và phương pháp tính toán khác nhau có thể cho tốc
độ tính toán và độ chính xác rất khác nhau. Lấy ví dụ đơn giản như tính định thức của ma trận
chẳng hạn, nếu tính trực tiếp theo định nghĩa thì việc tính định thức của một ma trận vuông cấp 25
cũng mất hàng triệu năm (ngay cả với máy tính hiện đại nhất hiện nay); trong khi đó nếu sử dụng
phương pháp khử Gauss thì kết quả nhận được gần như tức thời.
      Như vậy, phương pháp số là công cụ không thể thiếu trong các công việc cần thực hiện
nhiều tính toán với tốc độ tính toán nhanh và độ chính xác cao như vật lý, điện tử viễn thông, ...
và dĩ nhiên là tất cả các ngành và mọt lĩnh vực đều cần đến là công nghệ thông tin.
      Phương pháp số được nghiên cứu từ rất lâu và cho đến nay những thành tựu đạt được là một
khối lượng kiến thức đồ sộ được in trong nhiều tài liệu sách, báo... Tuy nhiên, môn học "Phương
pháp số" chỉ nhằm cung cấp những kiến thức căn bản nhất về phương pháp số. Với lượng kiến
thức này sinh viên có thể áp dụng vào giải quyết những bài toán thông thường trong thực tế và có
khả năng tự tìm hiểu để nâng cao kiến thức cho mình khi gặp các vấn đề phức tạp hơn.

II. MỤC ĐÍCH
      Môn học phương pháp số cung cấp cho sinh viên kiến thức căn bản nhất về một số phương
pháp giải gần đúng trên dữ liệu số .
      Tạo cơ sở để học tốt và nghiên cứu các nghành khoa học kỹ thuật nói chung và Công nghệ
thông tin nói riêng.
      Góp phần rèn luyện phương pháp suy luận khoa học, tư duy logic, phương pháp nghiên cứu
thực nghiệm
      Góp phần xây dựng thế giới quan khoa học và tác phong khoa học cần thiết cho người kỹ sư
tương lai.

III. PHẠM VI NGHIÊN CỨU
       Nghiên cứu một số phương pháp cơ bản nhất của phương pháp số, được ứng dụng nhiều
trong thực tế như các phương pháp số trong đại số tuyến tính, bài toán nội suy, tìm nghiệm gần
đúng các phương trình phi tuyến, tính gần đúng đạo hàm và tích phân, giải gần đúng một số dạng
của phương trình vi phân...
      Tìm hiểu các lĩnh vực ứng dụng của các phương pháp trong thực tế.
      Nghiên cứu cách cài đặt các thuật toán trên máy tính.
                                                                                                3
Giới thiệu môn học

IV. PHƯƠNG PHÁP NGHIÊN CỨU:
       Để học tốt môn học này, sinh viên cần lưu ý những vấn đề sau:
1. Kiến thức cần trước:
       - Sinh viên phải có kiến thức cơ bản về toán học cao cấp.
       - Thành thạo ít nhất một ngôn ngữ lập trình. Đặc biệt trong cuốn sách này đã sử dụng ngôn
ngữ lập trình C để mô tả thuật toán, vì vậy sinh viên phải nắm được ngôn ngữ lập trình C.
2. Thu thập đầy đủ các tài liệu:
       Giáo trình Phương pháp số. Phan Đăng Cầu, Phan Thị Hà, Học viện Công nghệ BCVT, 2002.
         Nếu cần sinh viên nên tham khảo thêm:
            - Giải tích số. Phạm Kỳ Anh, nhà xuất bản đại học Quốc Gia Hà Nội, 1966.
            - Phương pháp tính. Tạ Văn Đỉnh, Nhà xuất bản Giáo dục - 1995.
            - Phương Pháp tính. Dương Thuỳ Vỹ, Nhà xuất bản Khoa học và Kỹ thuật, 2001.
3. Đặt ra mục tiêu, thời hạn cho bản thân:
         Đặt ra các mục tiêu tạm thời và thời hạn cho bản thân và cố gắng thực hiện chúng
         Xây dựng mục tiêu trong chương trình nghiên cứu.
4 Nghiên cứu và nắm những kiến thức cốt lõi:
       Sinh viên nên đọc qua sách hướng dẫn học tập trước khi nghiên cứu bài giảng môn học và
các tài liệu tham khảo khác.
5. Tham gia đầy đủ các buổi hướng dẫn học tập:
       Thông qua các buổi hướng dẫn học tập, giảng viên sẽ giúp sinh viên nắm được nội dung
tổng thể của môn học và giải đáp thắc mắc, đồng thời sinh viên cũng có thể trao đổi, thảo luận với
những sinh viên khác về nội dung bài học.
6. Chủ động liên hệ với bạn học và giảng viên:
       Cách đơn giản nhất là tham dự các diễn dàn học tập trên mạng Internet, qua đó có thể trao
đổi trực tiếp các vấn đề vướng mắc với giảng viên hoặc các bạn học khác đang online.
7. Tự ghi chép lại những ý chính:
       Việc ghi chép lại những ý chính là một hoạt động tái hiện kiến thức, kinh nghiệm cho thấy
nó giúp ích rất nhiều cho việc hình thành thói quen tự học và tư duy nghiên cứu.
8. Học đi đôi với hành
       Học lý thuyết đến đâu thực hành làm bài tập ngay đến đó để hiểu và nắm chắc lý thuyết.
Nói chung cuối mỗi chương, sinh viên cần tự trả lời các câu hỏi, bài tập. Hãy cố gắng vạch ra
những ý trả lời chính, từng bước phát triển thành câu trả lời hoàn thiện.
       Liên hệ với các môn học khác và các vấn đề thực tế có liên quan để hiểu sâu hơn ý nghĩa
của các phương pháp.
       Cài đặt các thuật toán bằng nhiều cách khác nhau, có sử dụng đồ họa để làm nổi bật các đặc
trưng và kết quả của các thuật toán. Dùng đồ thị so sánh các phương pháp khác nhau cùng giải
quyết một bài toán, phân tích những điểm yếu điểm mạnh của các thuật toán. Khi cài đặt thuật
toán nếu có gì vướng mắc thì sinh viên có thể tham khảo thêm phần code của toàn bộ chương
trình tương ứng đã được viết bằng ngôn ngữ lập trình C trong tài liệu: “Phương pháp số. Phan
Đăng Cầu, Phan Thị Hà, Học viện Công nghệ BCVT, 2002”.
4
Chương 1: Số xấp xỉ và sai số




                                             CHƯƠNG 1
                                  SỐ XẤP XỈ VÀ SAI SỐ



MỤC ĐÍCH, YÊU CẦU
          Sau khi nghiên cứu chương 1, yêu cầu sinh viên:
          1. Hiểu được Phương Pháp Số là gì, vai trò và tầm quan trọng của Phương pháp số.
          2. Hiểu được sai số tuyệt đối và sai số tương đối.
          3. Nắm được cách viết số xấp xỉ.
          4. Nắm được các qui tắc tính sai số.
          5. Hiểu và biết cách đánh giá sai số tính toán và sai số phương pháp .

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ố chúng 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.
1.1.2. Những dạng sai số thường gặp
      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
      •     Sai số phương pháp
      •     Sai số của số liệu
      •     Sai số 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.

                                                                                                       5
Chương 1: Số xấp xỉ và sai số

1.2. SAI SỐ TUYỆT ĐỐI VÀ SAI SỐ TƯƠNG ĐỐI
1.2.1. Sai số tuyệt đối
      Trong tính gần đúng ta làm việc với các giá trị gần đúng của các đại lượng. Cho nên vấn đề
đầu tiên cần nghiên cứu là vần đề sai số.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 Δ a = | a-A |                                             (1.1)
      đượ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ố Ea>0 sao cho
                | a - A | ≤ Ea                                                (1.2)
      Số dương Ea được gọi là sai số tuyệt đối giới hạn của a. Rõ ràng nếu Ea là sai số tuyệt
đối giới hạn của a thì mọi E > Ea đều là sai số tuyệt đối giới hạn của a. 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.
Trong những điều kiện cụ thể người ta cố gắng chọn Ea là số dương bé nhất có thể được thoã
mãn (1.1). Nếu Ea 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 ± Ea                                                    (1.3)
      với ý nghĩa của (1.1), tức là
                a - Ea ≤ A ≤ a + Ea                                           (1.4)
1.2.2. Sai số tương đối
      Gọi Δa là sai số tuyệt đối của a khi dùng a để xấp xỉ A, khi đó đại lượng
                       Δa
                δa =                                                          (1.5)
                       |a|
       đượ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
                       Ea
                εa =                                                          (1.6)
                       |a|
      là sai số tương đối giới hạn của a. Từ đây ta có
                Ea = | a| εa                                                  (1.7)
      Từ đây người ta thường viết
                A = a(1 ± εa)                                                 (1.8)
       Vì trong thực tế chúng 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 Ea 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, Ea = 0.05, khi đó ta có εa = 0.05/10 = 0.5 %.
1.2.3. Chú thích:
       Sai số tuyệt đối không nói lên đầy đủ "chất lượng" của một số xấp xỉ, “chất lượng” ấy còn
được phản ánh qua sai số tương đối.

6
Chương 1: Số xấp xỉ và sai số

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à Δa. Nếu Δa ≤ 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 Δa > 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 Δa = 0.004726. Ta có | Δa | ≤ 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 Δa = 0.005726. Ta có | Δa | ≤ 0.5 *10-1 (nhưng | Δa | > 0.5 *10-2 ) do đó các chữ 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 ± Ea
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 giới hạn không lớn hơn một nửa đơn vị ở hàng cuối cùng.
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ùng.
         Giả sử a là xấp xỉ của A với sai số tuyệt đối giới hạn là E . 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ó
               | a' - A| = | a' - a + a -A| ≤ | a' - a| + | a -A| ≤ θ + E
         Vậy có thể lấy θ +E làm sai số tuyệt đối giới hạn của a'. Như vậy việc quy tròn làm tăng
sai số tuyệt đối giới hạn.


                                                                                                       7
Chương 1: Số xấp xỉ và sai số

1.4. CÁC QUY TẮC TÍNH SAI SỐ
1.4.1. Mở đầu
      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ó:
                         ∂u      ∂u
                du =        dx +    dy
                         ∂x      ∂y
      Từ đây
                         ∂u      ∂u
                Δu ≈        Δx +    Δy
                         ∂x      ∂y
      Suy ra
                          ∂u         ∂u
                Δu = |       | Δx +|    | Δy                                      (1.9)
                          ∂x         ∂y

1.4.2. Sai số của tổng
      Cho u = x + y
      Ta có
                ∂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ó
                δu = Δ u/|u| = ( Δ x + Δ y)/ |x-y|
     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
8
Chương 1: Số xấp xỉ và sai số

     Ta có
               ∂u      ∂u
                  = y,    =x
               ∂x      ∂y
     Từ (1.9) suy ra
               Δ u = |y| Δ x + |x| Δ y
       Do đó δu = Δ u/|u| = Δ x/|x| + Δ y/|y| = δx + δ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ó
               δxn = n δx                                                           (1.12)
1.4.4. Sai số của thương
     Cho u = x/y
     Ta có
               ∂u 1 ∂u     x
                 = ,   = − 2
               ∂x y ∂y    y
     Từ (1.9) suy ra
                        1         x
               Δu = |     |Δx + | 2 |Δy
                        y        y
     Ta có
                                     y      y     1          x           1         1
               Δ u / |u| = Δ u . |     | = | | ( | | Δ x + | 2 | Δ y) = | | Δ x + | | Δ y =
                                     x      x     y         y            x         y
     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ó:
                      ∂u        ∂u               ∂u
               du =       dx1 +      dx2 + ... +      dxn
                      ∂x1       ∂x 2             ∂x n

                                                                                                     9
Chương 1: Số xấp xỉ và sai số

      Từ đây ta có
                       ∂u        ∂u               ∂u
                Δu ≈       Δx1 +      Δx2 + ... +      Δxn
                       ∂x1       ∂x 2             ∂x n
      Suy ra
                          ∂u                  ∂u                          ∂u
                Δu = |        | Δ   x1   +|        | Δ   x2   + ... + |        | Δ   xn   (1.14)
                          ∂x1                 ∂x 2                        ∂x n

      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/6)πd3
      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)
               δπ = 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ó
                         x    x2         xn
                ex = 1+    +     + ... +     +...
                        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
                                 x      x2          xn
tế ta chỉ tính được tổng Sn = 1+    +       + ... +    , nghĩa là chúng ta đã dùng phương pháp gần
                                 1!     2!          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.
10
Chương 1: Số xấp xỉ và sai số

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.

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ì chúng 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, chúng 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. Chúng 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 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 chúng 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ể.

BÀI TẬP
Bài 1. Khi đo 1 số góc ta được các giá trị sau:
                  a= 21o37’3”;           b=1o10’
         Hãy xác định sai số tương đối của các số xấp xỉ đó biết rằng sai số tuyệt đối trong phép đo
là 1”.

                                                                                                   11
Chương 1: Số xấp xỉ và sai số

Bài 2. Hãy xác định sai số tuyệt đối của các số xấp xỉ sau đây cho biết sai số tương đối của
     chúng:
                 a) a= 13267 ;                δa=0,1%
                 b) b=2,32;                   δb=0,7%
Bài 3. Hãy xác định số các chữ số đáng tin trong các số a,b với sai số như sau:
                 a) a= 0,3941;                 Δ a=0,25.10-2
                 b) b=38,2543;                 Δ a= 0,27.10-2
Bài 4. Hãy xác định số những chữ số đáng tin trong các số a với sai số tương đối như sau:
                 a) a=1,8921;                 δa=0,1.10-2
                 b) a=22,351;                 δa=0,1
Bài 5. Hãy qui tròn các số dưới đây( xem là đúng) với 3 chữ số có nghĩa đáng tin và xác định sai
     số tuyệt đối Δ và sai số tương đối δ của chúng:
                 a) a= 2,514; b) 0,16152
                 c) 0,01204; d) –0,0015281
Bài 6. Hãy xác định giá trị của các hàm số dưới đây cùng với sai số tuyệt đối và sai số tương đối
     ứng với những giá trị của các đối số cho với mọi chữ số có nghĩa đều đáng tin.
                 a) u=ln(x+y2); x=0,97; y=1,132
                 b) u=(x+y)2z; x=3,28; y=0,932; z=1,132




12
Chương 2: Các phương pháp số trong đại số tuyến tính




                                          CHƯƠNG 2
    CÁC PHƯƠNG PHÁP SỐ TRONG ĐẠI SỐ TUYẾN TÍNH



MỤC ĐÍCH, YÊU CẦU:
      Sau khi nghiên cứu chương 1, yêu cầu sinh viên:
       1. Hiểu và nắm được các phương pháp tìm nghiệm đúng, nghiệm xấp xỉ của hệ phương
trình tuyến tính.
      2. Biết cách ứng dụng các phương pháp trên vào việc tính định thức của ma trận, tìm ma
trận nghịch đảo, giải quyết các bài toán thực tế.
      3. Biết cách đánh giá sai số của từng phương pháp

2.1. MA TRẬN VÀ ĐỊNH THỨC
2.1.1. Ma trận
      Cho ma trận chữ nhật A cấp m x n:

                              a11   a12    ...   a1n
                              a21   a22    ...   a2n
                       A=     .     .      ...   .
                              am1   am2    ...   amn


     ở đây aij là các số thực. Ma trận này có m hàng và n cột. Khi m = n ta có ma trận cấp nxn
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.
      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   a12    ...   a1n
                              0     a22    ...   a2n
                       A=     .     .      ...   .
                              0     0      ...   ann

                                                                                                 13
Chương 2: Các phương pháp số trong đại số tuyến tính

      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:
                                   a11           0           ...          0
                                   a21           a22         ...          0
                            A=     .             .           ...          .
                                   an1           an2         ...          ann

      Ma trận chữ nhật AT cấp n x m được gọi là ma trận chuyển vị của ma trận A cấp m x n nếu:

                                           a11         a21         ...          am1
                                           a12         a22         ...          am2
                            AT =           .           .           ...          .
                                           a1n         a2n         ...          amn


2.1.2. Định thức của ma trận
      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 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 (ik, 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ị ik, 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:

                                       a11           a12            ...             a1n
                                       a21           a22            ...             a2n
                            A=         .             .              ...             .
                                       an1           an2            ...             ann


      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 =     ∑ s(i1, i2,..., in) a
                  α
                                       1i1     a 2i2 ...a nin                             (2.0)

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

                             1 nếu α là hoán vị chẵn
      s(i1, i2,..., in) =
                             -1 nếu α là hoán vị lẻ


14
Chương 2: Các phương pháp số trong đại số tuyến tính

      Định thức của ma trận còn được ký hiệu là
                                    a11       a12         ...       a1n
                                    a21       a22         ...       a2n
                       A=           .         .           ...       .
                                    an1       an2         ...       ann

      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.
        •   Cộng các thành phần tương ứng của 2 hàng hoặc hai cột bất kỳ.
     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.
      Ma trận E được gọi là ma trận đơn vị cấp n nếu E là ma trận vuông cấp n và E có dạng
                                1         0         ...         0
                                0         1         ...         0
                       E=       .         .         ...         .
                                0         0         ...         1

2.1.3. 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.0) để 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.
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à aij 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ử aij , và được ký hiệu là Mij. Giá trị Aij = (-1)i+j Mij được gọi là
phần bù đại số của phần tử aij. 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 =   ∑ aij Aij
                          j=1



                                                                                                      15
Chương 2: Các phương pháp số trong đại số tuyến tính

      Khai triển định thức theo cột thứ j:
                            n
                 det A =    ∑ aij Aij
                            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 =             ∑ a1j A1j
                                                      j=1

      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à 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 chúng 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ì chúng 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 sẽ biến đổi để đưa ma trận A về dạng ma trận tam giác trên
                                      b11       b12           ...         b1n
                                      0         b22           ...         B2n B




                         B=           .         .             ...         .
                                      0         0             ...         bmn
      Vậy det A=det B = b11 b22...bnn

2.1.4. Ma trận nghịch đảo
     Ma trận nghịch đảo của một ma trận vuông A cấp n là ma trận được ký hiệu là A-1, thoả
mãn điều kiện
                 A-1A = A A-1 = E
     Trong đó E là ma trận đơn vị. Có thể chứng minh rằng để thỏa mãn điều kiện trên thì bắt
buộc A-1 phải là ma trận vuông, và ma trận đảo nếu tồn tại là duy nhất.
      Điều kiện tồn tại của ma trận nghịch đảo: Ma trận vuông A cấp n có ma trận nghịch đảo
khi và chỉ khi det A ≠ 0.
      Cách tính ma trận nghịch đảo:
      Gọi Aij là phần bù đại số của phần tử aij , khi đó ta có:

                                A11       A21       ...             An1
                                A12       A22       ...             An2
                   1
         A-1 =
                 det A          .         .         ...             .
                                A1n       A2n       ...             Ann
16
Chương 2: Các phương pháp số trong đại số tuyến tính

      Tuy nhiên công thức này chỉ có ý nghĩa lý thuyết, không thể áp dụng để tính trực tiếp ma
trận đảo trên máy tính được vì số phép tính đòi hỏi quá lớn.
        Trong phần sau ta sẽ áp dụng phương pháp khử Gauss-Jordan để tính ma trận nghịch đảo
với số phép tính nhỏ hơn nhiều (khoảng n3)

2.2. HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
      Xét một hệ phương trình gồm n phương trình tuyến tính với n ẩn số x1, x2,...,xn như sau:
                           a11x1 + a12x2 + . . . + a1nxn = b1
                           a21x1 + a22x2 + . . . + a2nxn = b2
                           . . . . . . . . . . . . . . . .                              (2.1)
                           an1x1 + an2x2 + . . . + annxn = bn

      Hệ phương trình này có thể viết dưới dạng ma trận              Ax = b, trong đó
               ⎡ a11        a12    ... a1n ⎤        ⎛ x1 ⎞      ⎛ b1 ⎞
                                                    ⎜ ⎟         ⎜ ⎟
               ⎢a           a 22   ... a 2 n ⎥
                                             ⎥,x=   ⎜ x2 ⎟      ⎜ b2 ⎟
            A= ⎢
                  21

               ⎢ .           .     ... . ⎥          ⎜ . ⎟,b=    ⎜ . ⎟
               ⎢                             ⎥      ⎜ ⎟         ⎜ ⎟
                                                    ⎜x ⎟        ⎜b ⎟
               ⎣a n1        an2    ... a nn ⎦       ⎝ n⎠        ⎝ n⎠
      Nếu det A ≠ 0 thì nghiệm của hệ (2.1) có thể tính theo công thức x = A-1b. Áp dụng công thức
tính ma trận đảo ta có thể biến đổi và dẫn đến lời giải được diễn tả bằng định lý Cramer như sau:
      Định lý Cramer. Gọi Aj là ma trận nhận được từ ma trận A bằng cách thay cột thứ j bằng
cột b, khi đó hệ (2.1) có nghiệm duy nhất và xj được tính bởi công thức
                         det A j
                  xj =
                      det A
      Tuy nhiên trong thực hành người ta không dùng công thức này để tính nghiệm vì số phép
tính quá lớn. Người ta dùng những phương pháp hữu hiệu hơn mà chúng tôi sẽ giới thiệu sau đây.
2.2.1. Phương pháp trực tiếp giải hệ phương trình tuyến tính
   Giả sử ta giải hệ phương trình(2.1)
   a. Phương pháp khử Gauss
      Phương pháp khử Gauss dùng cách khử dần các ẩn để đưa hệ phương trình đã cho về một
dạng tam giác trên rồi giải hệ tam giác này từ giới lên trên, không phải tính một định thức nào
      Phương pháp này được thực hiện qua các bước sau:
      Quá trình xuôi:
      - Bước 0: Dùng phương trình đầu tiên để khử x1 trong n-1 phương trình còn lại. Giả sử a11≠0.
        (Để cho công thức đơn giản , trước khi khử ta có thể chia phương trình thứ nhất cho a11 ).
       Cụ thể để khử x1 ở hàng thứ k( k=2,3,…n) ta phải tính lại các hệ số akj ở hàng thứ k
       (j=1,2,..n+1) như sau: akj=akj-a1j*ak1/a11
            ...
                                                                                                  17
Chương 2: Các phương pháp số trong đại số tuyến tính

      - Bước 1: Dùng phương trình thứ 2 để khử x2 trong n-2 phương trình còn lại phía sau. Giả
        sử a22≠0. (Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ hai
        cho a22).
         Cụ thể để khử x2 ở hàng thứ k (k=3,4,…n) ta phải tính lại các hệ số akj ở hàng thứ k
         (j=2,..n+1) như sau: akj=akj-a2j*ak2/a22
            …….
      - Bước i: Dùng phương trình i để khử xi trong các phương trình thứ i+1,i+2, ..., n. Giả
        sử aii≠0. Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ i cho
        aii).
         Cụ thể để khử xi ở hàng thứ k (k=i+1,…n) ta phải tính lại các hệ số akj ở hàng thứ k
         (j=i,..n+1) như sau: akj=akj-aij*aki/aii
      - Bước n-1: Dùng phương trình thứ n-1 để khử xn-1 trong phương trình thứ n.Giả sử an-1 n-1≠0.
        (Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ n-1 cho an-1 n-1)
         Cụ thể để khử xn-1 ở hàng thứ n ta phải tính lại các hệ số anj ở hàng thứ n (j=n-1,n,n+1)
         như sau: anj=anj-an-1j*an-1i/an-1n-1

         Kết thúc quá trình khử.

Chú ý:
      Trong quá trình giải xuôi ta giả thiết a11≠0, a22≠0,a33≠0,...,an-1 n-1≠0. Nếu 1 trong các hệ số
đó bằng không thì quá trình không tiếp tục được. Lúc đó ta phải thay đổi cách tính.
       Giả sử khi khử x1 ta gặp a11=0 thì ta nhìn các hệ số a21, a31 ...an1 của x1 ở các phương trình
phía dưói, nếu có hệ số nào khác không ta có thể lấy nó thay cho vai trò của a11 bằng cách hoán vị
hai phương trình. Nếu tất cả các hệ số số a11, a21, a31 ...,an1 đều bằng không thì hệ đã cho suy biến.
Vậy tốt nhất là trước khi khử x1 ta chọn trong các hệ số a11, a21, a31 ...,an1 hệ số có giá trị tuyệt đối
lớn nhất làm trụ thứ nhất( gọi là trụ tối đại thứ nhất) rồi hoán vị hàng thứ nhất cho hàng có giá
trị tuyệt đối lớn 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.
      Tương tự trong các bước khử x2,... xn-1 , trước khi khử ta cũng tìm trụ tối đại:
             | ari | = max {| aki | / k=i,i+1, ... ,n} ( với i=2,3,…,n-1)
                Sau đó ta đổi hàng r cho hàng i.
      Sau khi thực hiện xong quá trình giải xuôi hệ phương trình (2.1) có dạng:
      Dạng1: Tại các bước (bước i) ta không chia cho hệ số aii
                a11x1 + a12x2 + . . . + a1nxn = b1
                        a22x2 + . . . + a2nxn = b2
                           . . . . . . . . . . .
                                       ann xn = bn

18
Chương 2: Các phương pháp số trong đại số tuyến tính

      hoặc: Dạng 2: Tại các bước (bước i) ta chia cho hệ số aii:
               x1 + a12x2 + . . . + a1nxn = b1
                         x2 + . . . + a2nxn = b2
                          . . . . . . . . . . .
                                                  xn = bn

       Xuất phát từ phương trình thứ n ta lần lượt tính được các giá trị xi bằng các công thức của
quá trình giải ngược sau:
      Quá trình giải ngược
               xn = bn/ann hoặc ( xn=bn)
                         ...

                                n                                     n
               xi = (bi -( ∑ aijxj) )/aii ) hoặc (bi -( ∑ aijxj) ), i =n-1, n-2, ..., 1
                              j=i+1                                  j=i+1

      Để việc viết chương trình được đơn giản, khi cài đặt trên máy tính ta dùng một mảng                     a
thay cho cả ma trận a và vec tơ b. Tức là
                ⎡ a11    a12          ... a1n        a1,( n +1) ⎤ ⎡ a11      a12    ... a1n     b1 ⎤
                ⎢a
                ⎢ 21     a 22         ... a 2 n      a 2,( n +1) ⎥ ⎢a 21
                                                                  ⎥= ⎢       a 22   ... a 2 n   b2 ⎥
                                                                                                   ⎥
                ⎢ .       .           ...   .              . ⎥ ⎢ .            .     ...   .      .⎥
                ⎢                                                 ⎥ ⎢                              ⎥
                ⎢ a n1
                ⎣        an2          ... a nn       a n ,( n +1) ⎥ ⎣ a n1
                                                                  ⎦          an2    ... a nn    bn ⎦
     Ta áp dụng các phép biến đổi sơ cấp như vừa trình bày để biến đổi ma trận chữ nhật cấp
nx(n+1) trên đây về dạng
                ⎡1 a'12         ... a'1n           a'1,( n +1) ⎤
                ⎢0 1            ... a' 2 n         a' 2,( n +1) ⎥
                ⎢                                                ⎥
                ⎢.  .           ...   .                  . ⎥
                ⎢                                                ⎥
                ⎢0 0
                ⎣               ... 1              a' n ,( n +1) ⎥
                                                                 ⎦


      Ví dụ:Giải hệ phương trình sau bằng phương pháp khử Gauss:
                         2x1 + 3x2 +x3 = 11
                         -x1 + 2x2 -x3 = 0
                         3x1 + 2x3                 =9
      Bước1: Hệ phương trình trên tương đương với:

                                        3x1 + 2x3             =9                                  h1=h3
                                        -x1 + 2x2 -x3 = 0                                         h2=h2
                                        2x1 + 3x2 +x3 = 11                                        h3=h1

                                                                                                             19
Chương 2: Các phương pháp số trong đại số tuyến tính


                                  3x1 + 0 + 2x3        =9                 h1=h1
                                          2x2 - x3/3 = 3                  h2=h2+h1/3
                                          3x2 - x3/3   =5                 h3=h3-2*h1/3
     Bước 2:

                                  3x1 + 0 +2x3         =9                 h1=h1
                                  3x2 -       x3/3     =5                 h2=h3
                                  2x2 -       x3/3     =3                 h3=h2



                                  3x1 + 0 + 2x3 = 9                       h1=h1
                                          x2 - x3 /3 = 5                  h2=h2
                                              -x3/9 = -1/3                h3=h3-2*h2/3

     Vậy
                                  x3=3
                                  x2=2
                                  x1=1

     Chương trình minh họa.
      Sau đây là đoạn chương trình chính thể hiện (mô tả) thuật toán khử Gauss.
     /*Giai he phuong trinh tuyen tinh dung khu Gauss, ma tran vuong n,
      cac phan tu cot thu n+1 la vecto b*/
     /*Dua ma tran a ve dang tam giac tren Giai he phuong trinh tuyen tinh.
      Tra ve gia tri true neu co nghiem */
     int khugauss(kmatran a,double *x,int n)
      {
       int i,j,k,h;double tmp,p;kmatran aa;
      int n1=n+1;
      for(i=1;i<=n;i++)
      for(j=1;j<=n1;j++) aa[i][j]=a[i][j];
      for(i=1;i<=n;i++) //Vong lap cac buoc khu
          {//Tim hang co phan tu dau lon nhat
          h=i;
          for(k=i+1;k<=n;k++)
           if(fabs(a[k][i])>fabs(a[h][i]) {h=k;}
          if(a[h][i])==0) {cout<<"Ma tran suy bien";delay(1000);return false;}

20
Chương 2: Các phương pháp số trong đại số tuyến tính

    if(h!=i) //Doi hang i va hang h vi a[h][i] > a[i][i]
        {int j;double tmp;
        for(j=i;j<=n1;j++)
            {tmp=a[i][j];a[i][j]=a[h][j];a[h][j]=tmp;}
        }
    //chuyen he so a[i][i] = 1
    tmp=a[i][i];
    for(j=i;j<=n1;j++) a[i][j] = a[i][j]/tmp;
    //Bat tinh lai cac hang
    for(k=i+1;k<=n;k++)
        {p=a[k][i];
        /*Vi ta biet a[k][i] =0 sau bien doi,
    chi tinh tu a[k][i+1]*/
        for(j=i+1;j<=n1;j++) a[k][j]=a[k][j] - p*a[i][j];
        }
    }
x[n]=a[n][n+1];
for(i=n-1;i>=1;i--)
    {double xx=0;
    for(j=i+1;j<=n;j++) xx=xx+a[i][j]*x[j];
    x[i]=a[i][n+1]-xx;//b[i]-xx
    }
//Dat cac gia tri phi duoi duong cheo chinh bang 0(phan nay khong can)
for(i=2;i<=n;i++)
for(j=1;j<i;j++) a[i][j]=0;


//Thu lai
kvecto bb;
for(i=1;i<=n;i++)
    {bb[i]=aa[i][1]*x[1];
    for(j=2;j<=n;j++) bb[i]+=aa[i][j]*x[j];
    }
//Dua ket qua vao tep ketqua
return true;
}

                                                                                             21
Chương 2: Các phương pháp số trong đại số tuyến tính

b. Phương pháp khử Gauss-Jordan
      Phương pháp khử Gauss-Jordan dùng cách khử dần các ẩn để đưa hệ phương trình đã cho
về một dạng ma trận đường chéo rồi giải hệ phương trình này, không phải tính một định thức nào
      Phương pháp này được thực hiện qua các bước sau:
      - Bước 1: Dùng phương trình đầu tiên để khử x1 trong n-1 phương trình còn lại, cách làm
        tương tự như phương pháp khử để tính định thức... (Để cho công thức đơn giản, trước khi
        khử ta có thể chia phương trình thứ nhất cho a11).
        Cụ thể để khử x1 ở hàng thứ k( k=2,3,…n) ta phải tính lại các hệ số akj ở hàng thứ k
        (j=1,2,..n+1) như sau: akj=akj-a1j*ak1/a11
            ...
      - Bước i: Dùng phương trình i để khử xi trong các phương trình thứ 1,2, i-1,i+1,i+2,...,n..
        (Để cho công thức đơn giản , trước khi khử ta có thể chia phương trình thứ i cho aii)
        Cụ thể để khử xi ở hàng thứ k (k=1,2, i-1,i+1,i+2,...,n.) ta phải tính lại các hệ số akj ở hàng
        thứ k (j=i,..n+1) như sau: akj=akj-aij*aki/aii
            ...
      - Bước n: Dùng phương trình thứ n để khử xn trong phương trình thứ 1,2, ..., n-1.. (Để cho
        công thức đơn giản, trước khi khử ta có thể chia phương trình thứ n cho ann)
        Cụ thể để khử xn ở hàng thứ k( k=1,2, ..,n-1.) ta phải tính lại các hệ số akj ở hàng thứ k
        (j=n,n+1) như sau: akj=akj-anj*akn/ann
       Tương tự phép khử Gauss tại mỗi bước, trước khi khử ta phải chọn trụ tối đại. Cụ thể tại
bước i ta luôn chọn hàng có phần tử ari có giá trị tuyệt đối lớn nhất rồi đổi cho hàng thứ i cho hàng
thứ r.
      Hệ phương trình sau khi khử có dạng:
                  a11 x1                             = b1
                           a22 x2                    = b2
                    . . . . . . . .. .
                                           ann xn = bn

      Hoặc (Nếu tại các bước (bước i) ta chia cho hệ số aii):

                  x1                           = b1
                           x2                 = b2
                                . . . . . . . .. .
                                            xn = bn


      Tức là ta đã có các nghiệm mà không cần phải tính toán thêm.
      Cũng như trong phương pháp khử Gauss, khi cài đặt trên máy tính ta dùng một mảng a
thay cho cả ma trận A và vec tơ b. Tức là
22
Chương 2: Các phương pháp số trong đại số tuyến tính

                ⎡ a11   a12    ... a1n     a1,( n +1) ⎤ ⎡ a11     a12    ... a1n      b1 ⎤
                ⎢a                         a 2,( n +1) ⎥ ⎢a 21
                ⎢ 21    a 22   ... a 2 n                ⎥ = ⎢     a 22   ... a 2 n    b2 ⎥
                                                                                         ⎥
                ⎢ .      .     ... .             . ⎥ ⎢ .           .     ... .         .⎥
                ⎢                                       ⎥ ⎢                              ⎥
                ⎢a n1
                ⎣       an2    ... a nn    a n ,( n +1) ⎥ ⎣a n1
                                                        ⎦         an2    ... a nn     bn ⎦
      Ta áp dụng các phép biến đổi sơ cấp như vừa trình bày để biến đổi ma trận chữ nhật cấp n
x (n+1) trên đây về dạng
                ⎡1 0 ... 0 a '1,( n +1) ⎤
                ⎢0 1 ... 0 a '             ⎥
                ⎢              2 , ( n +1) ⎥

                ⎢ . . ... .        . ⎥
                ⎢                          ⎥
                ⎢0 0 ... 1 a ' n ,( n +1) ⎥
                ⎣                          ⎦
       Vậy ta có xi = a'i,(n+1)


     Ví dụ:Giải hệ phương trình sau bằng phương pháp khử Gauss-Jordan:
                        2x1 + 3x2 +x3 = 11
                        -x1 + 2x2 -x3 = 0
                        3x1 + 2x3          =9
     Bước1: Hệ phương trình trên tương đương với:

                          3x1 + 2x3=9                                                h1=h3
                          -x1 + 2x2 -x3 = 0                                          h2=h2
                          2x1 + 3x2 +x3 = 11                                         h3=h1




     Bước 1:

                               3x1 + 0 +2x3         =9                       h1=h1
                               2x2 -x3/3            =3                       h2=h2+h1/3
                               3x2 -x3//3 = 5                                h3=h3-2*h1/3



     Bước 2:

                               3x1 + 0 +2x3         =9                      h1=h1
                                   3x2 - x3/3       =5                      h2=h3
                                   2x2 - x3/3       =3                      h3=h2


                                                                                                 23
Chương 2: Các phương pháp số trong đại số tuyến tính


                               3x1 + 0 + 2x3 = 9                 h1=h1
                                     3x2 - x3/3 = 5              h2=h2
                                         -x3/9 = -1/3            h3=h3-2*h2/3

     Bước 3:
                              3x1 + 0 +0        =3               h1=h1-2*h3/(-1/9)
                                     3x2 -0     =6               h2=h2-(1/3)*h3/(-1/9)
                                -x3/9 =-1/3                      h3=h3/(-1/9)


     Vậy
                              x1=1
                              x2=2
                              x3=3



     Chương trình minh họa.
      Sau đây là đoạn chương trình chính thể hiện (mô tả) thuật toán khử Gauss-Jordan.


     int gjordan(kmatran a,double *x,int n)
      {int i,j,k,h;double tmp,p;kmatran aa;
      int n1=n+1;
      for(i=1;i<=n;i++)
      for(j=1;j<=n1;j++) aa[i][j]=a[i][j];
      for(i=1;i<=n;i++) //Vong lap cac buoc khu
       {//Tim hang co phan tu dau lon nhat
        h=i;
        for(k=i+1;k<=n;k++)
        if(fabs(a[k][i])>fabs(a[h][i]) {h=k;}
        if(a[h][i]==0) {cout<<"Ma tran suy bien";delay(1000);return false;}
        if(h!=i) //Doi hang i va hang h vi a[h][i] > a[i][i]
        {int j;double tmp;
         for(j=i;j<=n1;j++)
            {tmp=a[i][j];a[i][j]=a[h][j];a[h][j]=tmp;}
        }
        //chuyen he so a[i][i] = 1

24
Chương 2: Các phương pháp số trong đại số tuyến tính

        tmp=a[i][i];
        for(j=i;j<=n1;j++) a[i][j] = a[i][j]/tmp;
        //Bat tinh lai cac hang
        for(k=1;k<=n;k++)
           {if(k==i) continue;
           p=a[k][i];
           /*Vi ta biet a[k][i] =0 sau bien doi,
       chi tinh tu a[k][i+1]*/
           for(j=i+1;j<=n1;j++) a[k][j]=a[k][j] - p*a[i][j];
           }
       }
       for(i=1;i<=n;i++) x[i]=a[i][n+1];


       /*Dat cac gia tri khong o tren duong cheo chinh bang 0
           (phan nay khong can)*/
       for(i=1;i<=n;i++)
       for(j=1;j<=n;j++) {if(i!=j) a[i][j]=0;}


      //Thu lai
      kvecto bb;
      for(i=1;i<=n;i++)
       {bb[i]=aa[i][1]*x[1];
        for(j=2;j<=n;j++) bb[i]+=aa[i][j]*x[j];
       }
      //Dua ket qua vao tep ketqua
      return true;


2.2.2. Áp dụng phương pháp khử Gauss-Jordan để tính ma trận nghịch đảo
      Để giải hệ n phương trình n ẩn Ax = b, trong phương pháp khử Gauss-Jordan ta đã dùng
các phép biến đổi sơ cấp để đưa phương trình này về dạng
       Ex = b'
     Vì Ex = x, do đó ta có x=b'. Nếu B là một ma trận chữ nhật cấp n x k tùy ý, ta có thể áp
dụng phương pháp khử Gauss-Jordan để giải đồng thời k hệ n phương trình n ẩn:
       AX = B                                                   (2.2)
     trong đó

                                                                                               25
Chương 2: Các phương pháp số trong đại số tuyến tính

          ⎡ x11      x12    ... x1k ⎤
          ⎢x         x 22   ... x 2 k ⎥
                                      ⎥
       X= ⎢
              21

          ⎢ .          .    ... . ⎥
          ⎢                           ⎥
          ⎣ x n1     xn2    ... x nk ⎦

          ⎡b11       b12    ... b1k ⎤
          ⎢b         b22    ... b2 k ⎥
                                     ⎥
       B= ⎢
             21

          ⎢ .         .     ... . ⎥
          ⎢                          ⎥
          ⎣bn1       bn 2   ... bnk ⎦
      Ta viết ma trận B bên phải ma trận A như sau:
            ⎡ a11    a12    ... a1n       b11      b12    ... b1k ⎤
            ⎢a
            ⎢ 21     a 21   ... a 2 n     b21      b22    ... b2 k ⎥
                                                                   ⎥
            ⎢ .        .    ... .          .         .    ... . ⎥
            ⎢                                                      ⎥
            ⎣a n1    an2    ... a nn      bn1      bn 2   ... bnk ⎦
      Nếu ma trận A không suy biến, ta có thể áp dụng các phép biến đổi sơ cấp để đưa ma trận
này về dạng:
            ⎡1 0 ... 0 b'11               b'12     ... b'1k ⎤
            ⎢0 1 ... 0 b'
            ⎢             21              b' 22    ... b' 2 k ⎥
                                                              ⎥
            ⎢ . . ... .  .                  .      ...   . ⎥
            ⎢                                                 ⎥
            ⎣0 0 ... 1 b' n1              b' n 2   ... b' nk ⎦

      Khi đó ta có
                ⎡ x11        x12    ... x1k ⎤ ⎡b'11               b'12     ... b'1k ⎤
                ⎢x           x 22   ... x 2 k ⎥ ⎢b' 21
                                              ⎥ = ⎢               b' 22    ... b' 2 k ⎥
                                                                                      ⎥;
             X= ⎢
                    21

                ⎢ .           .     ... . ⎥ ⎢ .                     .      ...   . ⎥
                ⎢                             ⎥ ⎢                                     ⎥
                ⎣ x n1       xn2    ... x nk ⎦ ⎣b' n1             b' n 2   ... b' nk ⎦

                      ⎡b'11         b'12        ... b'1k ⎤
                      ⎢b'           b' 22       ... b' 2 k ⎥
                                                           ⎥
             Đặt B’ = ⎢
                          21

                      ⎢ .             .         ...   . ⎥
                      ⎢                                    ⎥
                      ⎣b' n1        b' n 2      ... b' nk ⎦
      Xét trường hợp đặc biệt B = E, ta có ma trận B' chính là ma trận nghịch đảo của ma trận A.
Thật vậy, nếu X là nghiệm của (2.2) thì
      X = A-1B
      Nếu B = E thì X = A-1. Do đó việc tìm ma trận nghịch đảo của ma trận A tương đương
với việc giải phương trình
      AX = E
26
Chương 2: Các phương pháp số trong đại số tuyến tính

      Ta có thể tóm tắt các bước cần thực hiện để tính ma trận đảo như sau:
•   Viết thêm ma trận đơn vị E bên cạnh ma trận A
            ⎡ a11    a12      ... a1n        1 0 ... 0⎤
            ⎢a
            ⎢ 21     a 21     ... a 2 n      0 1 ... 0⎥⎥                (2.3)
            ⎢ .       .       ... .          . . ... . ⎥
            ⎢                                          ⎥
            ⎣a n1    an2      ... a nn       0 0 ... 1⎦
•   Áp dụng phép biến đổi sơ cấp lên các hàng của ma trận (2.3) cho đến khi ma trận có dạng
        ⎡1 0 ... 0 c11             c12       ... c1n ⎤
        ⎢0 1 ... 0 c
        ⎢            21            c 22      ... c 2 n ⎥
                                                       ⎥
        ⎢ . . ... .  .               .       ... . ⎥
        ⎢                                              ⎥
        ⎣0 0 ... 1 c n1            cn 2      ... c nn ⎦
      Khi đó ta có
           ⎡ c11       c12     ... c1n ⎤
           ⎢c          c 22    ... c 2 n ⎥
                                         ⎥
       A = ⎢
        -1    21

           ⎢ .            .    ... . ⎥
           ⎢                             ⎥
           ⎣c n1       cn2     ... c nn ⎦
       Chú ý. Trong quá trình biến đổi ta có thể đổi các hàng của ma trận. Điều này không ảnh
hưởng đến kết quả thu được: Ma trận C vẫn là ma trận nghịch đảo của ma trận A ban đầu. Lý do
là vì để tìm ma trận nghịch đảo ta chỉ cần xác định ma trận nghiệm. Ma trận nghiệm không bị thay
đổi nếu ta đổi chỗ các hàng.
      Chương trình minh họa.
      Sau đây là đoạn chương trình chính thể hiện ( mô tả) thuật toán tìm ma trận nghịch đảo
      int daomtran(kmatran a,kmatran &ad,int n)
       {int i,j,k,h;double tmp,p;
        int n2=n*2;
        kmatran aa;
        for(i=1;i<=n;i++)
         for(j=1;j<=n;j++) aa[i][j]=a[i][j];
        //Them phan sau cua ma tran a de co dang ma tran don vi
        for(i=1;i<=n;i++)
         for(j=1;j<=n;j++) a[i][n+j]=0;//Cho phan ma tran vuong phia sau bang 0
        for(i=1;i<=n;i++) a[i][n+i]=1; //Duong cheo chinh phan phia sau bang 1
        //Vong lap cac buoc khu
        for(i=1;i<=n;i++)
         {//Tim hang co phan tu dau lon nhat
          h=i;
                                                                                                       27
Chương 2: Các phương pháp số trong đại số tuyến tính

        for(k=i+1;k<=n;k++)
         if(fabs(a[k][i])> fabs(a[h][i])) h=k;
        if(a[h][i])==0) {cout<<"Ma tran suy bien";delay(1000);return false;}
        if(h!=i) //Doi hang i va hang h vi a[h][i] > a[i][i]
         {int j;double tmp;
          for(j=i;j<=n2;j++)
           {tmp=a[i][j];a[i][j]=a[h][j];a[h][j]=tmp;}
         }
        //chuyen he so a[i][i] = 1
        tmp=a[i][i];
        for(j=i;j<=n2;j++) a[i][j] = a[i][j]/tmp;
        //Bat tinh lai cac hang
        for(k=1;k<=n;k++)
         {if(k==i) continue;
          p=a[k][i];
          /*Vi ta biet a[k][i] =0 sau bien doi,
       chi tinh tu a[k][i+1]*/
          for(j=i+1;j<=n2;j++) a[k][j]=a[k][j] - p*a[i][j];
         }
       }
      /*Dat cac gia tri khong o tren duong cheo chinh bang 0
        (phan nay khong can)*/
      for(i=1;i<=n;i++)
       for(j=1;j<=n;j++) {if(i!=j) a[i][j]=0;}

      //Ma tran dao la phan phia sau cua mang a
      for(i=1;i<=n;i++)
       for(j=1;j<=n;j++) ad[i][j]=a[i][n+j];

        //Thu lai A x AD = C
       kmatran c;
       for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
         {c[i][j]=aa[i][1]*ad[1][j];
         for(k=2;k<=n;k++) c[i][j]+=aa[i][k]*ad[k][j];
         }
         return true;
      }

28
Chương 2: Các phương pháp số trong đại số tuyến tính

2.2.3. Sự không ổn định của hệ phương trình đại số tuyến tính
a. Chuẩn của ma trận và vec tơ
        Chuẩn của ma trận chữ nhật cấp m x n A = ( aij ) là một số thực không âm được ký hiệu
là ||A|| thỏa mãn các điều kiện sau
       (1)         ||A|| ≥ 0 (với ||A|| =0 ⇔ A = 0)
       (2)         || α A|| = |α| ||A||, α là số thực bất kỳ.
       (3)         ||A + B|| ≤ ||A|| + ||B||
       (4)         ||A.B|| = ||A||.||B||
     Người ta thường dùng ba chuẩn sau:
                                                               m
       Chuẩn cột:                    ||A||1 = max ∑ | aij |
                                                         j
                                                               i=1

                                       m       n
       Chuẩn Ơclit:          ||A||2 = ( ∑ ∑ aij 2)1/2
                                      i=1      j=1

                                                     n
       Chuẩn hàng:           ||A||∞ = max
                                           i
                                                   ∑ | aij |
                                                   j=1

     Ví dụ. Cho
                 ⎡5 − 2 1 ⎤
             A = ⎢1 4 3 ⎥
                 ⎢        ⎥
                 ⎢2 − 1 7 ⎥
                 ⎣        ⎦
     Ta tính được các chuẩn của A theo định nghĩa trên như sau:
       ||A||1 = max(5+1+2, 2+4+1, 1+3+7) = max(8, 7, 11) = 11
       ||A||2 = (52 + 22+ 1+ 1+ 42+ 32+ 22+ 1+ 72)1/2 = 1101/2 = 10.5
       ||A||∞ = max(5+2+1, 1+4+3, 2+1+7) = max (8, 8, 10) = 10
     Vec tơ là ma trận chỉ có một cột, do đó đối với vec tơ
          ⎛ x1 ⎞
          ⎜ ⎟
          ⎜ x2 ⎟
       x= ⎜ ⎟
             .
          ⎜ ⎟
          ⎜x ⎟
          ⎝ n⎠
     ta có 3 chuẩn sau
                  n
       ||x||1 =   ∑ | xi |
                  i=1

                        n
       ||x||2 = ( ∑ xi 2)1/2
                      i=1

       ||x||∞ = max | xi |
                        i

                                                                                                              29
Chương 2: Các phương pháp số trong đại số tuyến tính

      Ví dụ. Cho
          ⎛ 2 ⎞
          ⎜ ⎟
          ⎜ − 3⎟
       x= ⎜ 4 ⎟
          ⎜ ⎟
          ⎜ 1 ⎟
          ⎜ 4 ⎟
          ⎝ ⎠
      Ta có
       ||x||1 = 2 +3 +4 +1 +4 = 14
       ||x||2 = (2 2+ 3 2+ 4 2+ 1 +4 2)1/2 =   46
       ||x||∞ = max(2,3,4,1,4) = 4
       Trong các phần tiếp theo chúng ta sẽ ký hiệu đơn giản là ||A|| hoặc ||x|| để chỉ chuẩn
của ma trận và vec tơ. Nếu không có gì giải thích thêm thì cách ký hiệu này được hiểu là một
trong ba chuẩn trên đây.
b. Sự không ổn định của hệ phương trình đại số tuyến tính
       Trên đây ta đã tìm hiểu các phương pháp giải hệ phương trình đại số tuyến tính một cách trực
tiếp. Nếu như mọi tính toán của ta là chính xác thì các phương pháp trên cho kết quả hoàn toàn
chính xác. Tuy nhiên trong thực tế khi tính toán ta phải thường xuyên làm tròn các số, nghĩa là ta
thường chỉ tính toán trên các số gần đúng mà thôi. Liệu cách làm tròn trong tính toán có làm ảnh
hưởng nhiều đến kết quả cuối cùng không? Ví dụ sau đây cho thấy rằng có những hệ phương trình
đại số tuyến tính rất "nhạy cảm" với sai số, nghĩa là sai số nhỏ khi tính toán có thể ảnh hưởng
nghiêm trọng đến kết quả cuối cùng. Nói một cách hình tượng thì ta gặp tình huống "sai một li đi
một dặm". Những hệ thống phương trình kiểu này được gọi là hệ phương trình không ổn định.
      Ví dụ . Ta xét hệ phương trình sau:
                2x1 + x2 = 2
                2x1 + 1.01x2 = 2.01
      Hệ này có nghiệm x1 =0.5, x2 = 1.
      Tuy nhiên hệ phương trình sau đây nhận được với chút ít thay đổi hệ số trong hệ trên
                2x1 + x2 = 2
                2.01x1 + 1x2 = 2.05
      lại có nghiệm x1 =5, x2 = -8, khác xa so với nghiệm trên đây.
2.2.4. Phương pháp lặp giải hệ phương trình tuyến tính
       Các phương pháp trực tiếp giải hệ phương trình tuyến tính nói chung cần khoảng cn3 phép
tính, trong đó c là một hằng số và người ta ước lượng c ≈ 2/3. Phương pháp khử Gauss như chúng
ta vừa tìm hiểu chẳng hạn, là một phương pháp đúng, nghĩa là nếu các phép tính sơ cấp được thực
hiện đúng hoàn toàn thì cuối cùng ta được nghiệm đúng của hệ. Tuy nhiên trong thực tế ta phải
luôn luôn làm tròn khi thực hiện các phép tính, và như ta đã thấy ở trên, sai số tổng hợp đôi khi có
thể sẽ khá lớn. Và chúng ta gặp một nghịch lý: về lý thuyết phương pháp cho kết quả chính xác
30
Chương 2: Các phương pháp số trong đại số tuyến tính

100%, nhưng khi thực hiện để áp dụng thực tế thì đôi khi kết quả lại khác xa so với kết quả lý
thuyết. Vì những lý do trên đây, người ta đã tìm kiếm những phương pháp gần đúng để giải các
bài toán, tức là ngay từ đầu người ta chấp nhận kết quả xấp xỉ, hay sự xấp xỉ đã nằm ngay trong
mô hình. Khi thực hiện tính toán cụ thể chúng ta lại gặp sai số một lần nữa. Như vậy trong các
phương pháp gần đúng thì sai số sẽ là tổng hợp của sai số mô hình và sai số tính toán. Một điều
đáng ngạc nhiên là trong nhiều trường hợp phương pháp gần đúng lại cho kết quả tốt hơn phương
pháp đúng. Thực ra điều này cũng không có gì khó hiểu, vì trong thực tế chúng ta cũng rất hay
gặp những trường hợp một lần sai còn nặng nề trầm trọng hơn 2 lần hay thậm chí một số lần sai
cộng lại.
a. Các bước chung trong phương pháp lặp
       Giả sử ta cần giải phương trình F(x) = 0, trong đó F(x) là một hàm trên không gian định
chuẩn nào đó và 0 được hiểu là phần tử 0 của không gian này. Ví dụ nếu không gian định chuẩn
là Rn thì 0 là vectơ (0,0,...,0)T. Ta biến đổi phương trình này về dạng tương đương x = G(x). Ta có
thể phát biểu định lý sau:
      Định lý. Giả sử y = G(x) là một hàm liên tục trên không gian định chuẩn nào đó và phép
lặp xn=G(xn-1) n=1,2,... hội tụ tới x* với xuất phát ban đầu x0. Khi đó x* là nghiệm của phương
trình x = G(x), tức là ta có x* = G(x*).
      Chứng minh. Từ xn=G(xn-1), với lưu ý là hàm G(x) liên tục, ta có
        lim xn = lim G(xn-1) = G( lim xn-1) ⇒ x* = G(x*)
       n − > +∞         n − > +∞                n − > +∞

b. Phương pháp lặp đơn
      Trở lại bài toán giải hệ phương trình tuyến tính
                  Ax =b                                                                      (2.4)
      Ta đưa (2.4) về dạng
                  x = Cx + d                                                                 (2.5)
      Trong đó ma trận C và vec tơ d được xây dựng từ A và b.
      Để thực hiện phép lặp ta chọn một vec tơ ban đầu x(0), sau đó tính các x(i), i =1,2,... theo
công thức lặp sau:
                  x(1) = Cx(0) + d
                  x(2) = Cx(1) + d
                  ...                                                                        (2.6)
                      (k)          (k-1)
                  x         = Cx           +d
        ...
      Véc tơ x(k) được gọi là vec tơ lặp thứ k.
      Ta có định lý sau:
      Định lý. (Sự hội tụ của phương pháp)
      a. Nếu phép lặp (2.6) hội tụ, tức là tồn tại x* sao cho x* = lim x(k)
                                                                                  k − > +∞

        thì khi đó x* là nghiệm của (2.5) (và như vậy cũng là nghiệm của (2.4))
                                                                                                            31
Chương 2: Các phương pháp số trong đại số tuyến tính

      b. Nếu ||C|| < 1 với một chuẩn nào đó, thì (2.6) hội tụ và sai số giữa nghiệm gần đúng x(k)
      (nghiệm gần đúng tại bước lặp thứ k) và nghiệm đúng x* có thể đánh giá bằng các công
      thức sau:
                                           || C ||
                ||x(k) - x*|| ≤                      ||x(k) - x(k-1)||                     (2.7)
                                          1− || C ||
            hoặc
                                           || C || k
                ||x(k) - x*|| ≤                      ||x(1) - x(0)||                       (2.8)
                                          1− || C ||
       Nói chung theo phương pháp lặp đơn, điều kiện để phép lặp được hội tụ thì ||C|| < 1. Tuy
nhiên trong thực tế thì ta chỉ có ma trận A. Một câu hỏi đặt ra là ma trận A phải thỏa mãn điều
kiện gì để ta có thể đưa (2.4) về dạng (2.5) và áp dụng phương pháp lặp đơn?
       Để phương pháp lặp hội tụ thì thường ma trận A phải thỏa mãn tính chéo trội của ma trận vuông.
       Định nghĩa: (Tính chéo trội của một ma trận vuông): Ma trận A với các thành phần aij được
gọi là có tính chéo trội, nếu giá trị tuyệt đối của các phần tử nằm trên đường chéo chính lớn hơn
tổng các giá trị tuyệt đối của các phần còn lại nằm cùng hàng, tức là
                                n
                | aii | >    ∑
                            j −1, j ≠ i
                                          | aij |, i = 1, 2, . . ., n.                     (2.9)

       Sau đây sẽ giới thiệu 2 phương pháp lặp đơn Jacobi và Gaus-Seidel
c. Phương pháp lặp Jacobi
        Với giả thiết ma trận A có tính chéo trội, khi đó các hệ số aii ≠ 0, i = 1,2,...,n do đó ta có
thể chia phương trình thứ i của hệ (2.1) cho aii và nhận được hệ tương tương
                       a12     a              a        b
                x1 +       x2 + 13 x3 +. . . + 1n xn = 1
                       a11      a11            a11    a11
                a 21          a             a         b
                     x1 + x2 + 23 x3+. . . + 2 n xn = 2
                a 22          a 22          a 22     a 22
                ...
                ai1     a             a i ,i −1            a i ,i +1            a        b
                    x1 + i 2 x2 +...+           xi-1+ xi +           xi+1. . . + in xn = i
                aii      a ii          a ii                 aii                  a ii   a ii
                ...
                a n1     a             a n, n −1            b
                     x1 + n 2 x2 +...+           xn-1+ xn = n
                a nn     a nn           a nn               a nn
      Từ đây ta có
                                            a12     a              a          b
                x1 = - (0.x1 +                  x2 + 13 x3 +. . . + 1n xn ) + 1
                                            a11      a11            a11      a11
                             a 21            a             a           b
                x2 = - (          x1 + 0.x2 + 23 x3+. . . + 2 n xn ) + 2
                             a 22            a 22          a 22       a 22
                ...
32
Chương 2: Các phương pháp số trong đại số tuyến tính

                               ai1     a             a i ,i −1              a i ,i +1            a          b
                xi = - (           x1 + i 2 x2 +...+           xi-1+ 0.xi +           xi+1. . . + in xn ) + i
                               aii      a ii          a ii                   aii                  a ii     a ii
                ...
                               a n1     a             a n ,n −1                b
                xn = - (            x1 + n 2 x2 +...+           xn-1+ 0.xn ) + n
                               a nn     a nn           a nn                   a nn
      Khi đó ma trận C, vectơ d là:

                      ⎡                      a12           a1n ⎤              ⎛ b1    ⎞
                      ⎢ 0                              ...                    ⎜       ⎟
                                             a11           a11 ⎥              ⎜ a11   ⎟
                      ⎢                                         ⎥
                      ⎢ a 21                               a 2n ⎥             ⎜ b2    ⎟
                                              0        ...                    ⎜a      ⎟
                C = - ⎢a                                   a 22 ⎥ , d =
                      ⎢ .
                          22                                                  ⎜ 22    ⎟
                                              .        ...   . ⎥              ⎜ .     ⎟
                      ⎢a                                        ⎥
                      ⎢ n1
                                             an2
                                                       ... 0 ⎥                ⎜ bn    ⎟
                      ⎢ a nn                 a nn               ⎥             ⎜a      ⎟
                      ⎣                                         ⎦             ⎝ nn    ⎠
      (Đến đây ta đã đưa hệ (2.4) về dạng (2.5) và dễ thấy rằng ma trận C thỏa mãn điều kiện lặp
đơn, tức là ||C||∞ < 1.).
      Vậy đến đây ta tiếp tục áp dụng phương pháp lặp (2.6) để tính nghiệm ở các bước lặp như sau:
      Với vec tơ x(0) cho trước bất kỳ, ví dụ x(0) = θ (vec tơ 0) ta có thể tính các vec tơ x(k) tại
bước lặp k bằng công thức x(k) = C x(k-1) + d , k =1, 2, ...
      Cụ thể hơn, nếu x(k) = (x1(k), x2(k), . . ., xn(k)) thì ta có
                                   ⎡                  a12            a1n ⎤                  ⎛ b1 ⎞
                                   ⎢ 0                           ...       ⎥ ( k −1)        ⎜    ⎟
                 ⎛ x1( k ) ⎞       ⎢
                                                      a11            a11 ⎛ x1 ⎞ ⎜ a11 ⎟
                                                                           ⎥
                 ⎜ (k ) ⎟                                            a 2 n ⎥ ⎜ x ( k −1) ⎟ ⎜ b2 ⎟
                 ⎜ x2 ⎟            ⎢ a 21               0        ...         ⎜ 2 ⎟ ⎜
                 ⎜ . ⎟         = - ⎢a                                a 22 ⎥ ⎜              + a ⎟
                                   ⎢ .
                                       22
                                                                                   . ⎟ ⎜ 22 ⎟
                 ⎜         ⎟                           .         ...   . ⎥ ⎜ ( k −1) ⎟ ⎜ . ⎟
                 ⎜ x (k ) ⎟        ⎢a                 an2                  ⎥ ⎜x          ⎟    b
                 ⎝ n ⎠             ⎢ n1                          ... 0     ⎥⎝ n ⎠ ⎜ n ⎟
                                   ⎢ a nn             a nn                 ⎥                ⎜a ⎟
                                   ⎣                                       ⎦                ⎝ nn ⎠
      Với từng thành phần xi(k) ta có
                                   n          a ij               bi      1            n
                xi(k) = -       ∑
                               j −1, j ≠ i    a ii
                                                     xj(k-1) +
                                                                 a ii
                                                                      =
                                                                        a ii
                                                                             (bi - ∑ aij xj(k-1))
                                                                                  j −1, j ≠ i
                                                                                                       (2.10)

                 i = 1, 2, . . ., n, k = 1,2,...
      Điều kiện hội tụ, đánh gái sai số của phương pháp lặp Jacobi cũng giống với phương
pháp lặp đơn.
      Ví dụ. Dùng phương pháp lặp Jacobi tìm nghiệm gần đúng của hệ phương trình:
                4x1 + 0.24x2 - 0.08x3 = 8
                0.09x1 + 3x2 - 0.15x3 = 9
                0.04x1 - 0.08x2 + 4x3 = 20

                                                                                                                        33
Chương 2: Các phương pháp số trong đại số tuyến tính

       Giải. (1).Có thể thấy rằng ma trận các hệ số của hệ phương trình trên đây thỏa mãn tính
chéo trội, do đó ta có thể biến đổi hệ này để áp dụng phương pháp lặp Jacobi. Chia hai vế phương
trình đầu tiên cho 4, hai vế phương trình thứ hai cho 3 và hai vế của phương trình thứ ba cho 4
rồi biến đổi thích hợp ta nhận được:
                 x1 = 2 - 0.06x2 +0.02x3
                 x2 = 3 - 0.03x1 + 0.05x3
                 x3 = 5 - 0.01x1 + 0.02x2
      hay
                 ⎛ x1 ⎞ ⎡ 0        − 0.06 0.02⎤ ⎛ x1 ⎞ ⎛ 2 ⎞
                 ⎜ ⎟ ⎢                          ⎜ ⎟ ⎜ ⎟
                 ⎜ x 2 ⎟ = ⎢− 0.03   0    0.05⎥ ⎜ x 2 ⎟ + ⎜ 3 ⎟ = Cx + d
                                              ⎥
                 ⎜ x ⎟ ⎢ − 0.01 0.02        0 ⎥ ⎜ x3 ⎟ ⎜ 5 ⎟
                 ⎝ 3⎠ ⎣                       ⎦⎝ ⎠ ⎝ ⎠
        ||C||∞   = max(0 + 0.06 + 0.02, 0.03 + 0 + 0.05, 0.01 + 0.02 + 0) =
                 = max(0.08,0.08,0.03) = 0.08 <1
      (2) Chọn x(0) = (2,3,5)T, rồi tính x(1), x(2),... theo công thức (2.10) với lưu ý aii =1 ta được
bảng kết quả sau:
                           k        x1(k)          x2(k)             x3(k)
                           0        2              3                 5
                           1        1.92           3.19              5.04
                           2        1.9094         3.1944            5.0446
                           3        1.909228       3.194948          5.044794


      (3) Xem x(3) là nghiệm gần đúng cần tìm, ta có thể đánh giá sai x(3) với nghiệm đúng x*
                                      || C ||
theo (2.10) như sau: ||x(3) - x*|| ≤            ||x(3) - x(2)||
                                     1− || C ||
                 ||x(3) - x(2)||∞ = max |xi(3) - xi(2)| = max(0.000172, 0.000548, 0.000194) = 0.000548
                                        i

      Như vậy
                                      0.08
                 ||x(3) - x*||∞ ≤            0.000548 = 0.0000476 ≈ 0.00005
                                    1 − 0.08
d. Phương pháp lặp Gauss - Seidel
      Với giả thiết ma trận A có tính chéo trội. Từ công thức (2.10) ta thấy rằng phần tử thứ i
của vec tơ nghiệm tại bước k được tính qua các phần tử ở các vị trí khác i trong bước k-1.
Phương pháp Gauss-Seidel cải tiến phương pháp Jacobi bằng cách dùng ngay những kết quả vừa
tính được cho các thành phần của nghiệm tại bước k để tính các thành phần khác của bước k, chỉ
có những thành phần nào chưa được tính thì mới lấy ở bước k-1. Cụ thể hơn ta có tại các bước:
      (1)        Giá trị x1(1) được tính qua các giá trị x2(0), x3(0), ... xn(0)

34
Chương 2: Các phương pháp số trong đại số tuyến tính

                Giá trị x2(1) được tính qua các giá trị x1(1), x3(0), ... xn(0)
                Giá trị x3(1) được tính qua các giá trị x1(1), x2(1),x4(0), ... xn(0)
                ...
      (h)       Giá trị x1(h) được tính qua các giá trị x2(h-1), x3(h-1), ... xn(h-1)
                Giá trị x2(h) được tính qua các giá trị x1(h), x3(h-1), ... xn(h-1)
                Giá trị x3(h) được tính qua các giá trị x1(h), x2(h),x4(h-1), ... xn(h-1)
                ...
      Với vec tơ x(0) cho trước bất kỳ, ví dụ x(0) = θ (vec tơ 0) ta có thể tính các vec tơ x(k) tại
bước lặp k bằng công thức
                                         i−1
                              1                        n
                xi(k) =           (bi -( ∑ aijxj(k) + ∑aijxj(k-1)))         (2.11)
                             a ii        j −1         j−+
                                                        i1

                  i = 1, 2, . . ., n, k = 1,2,...
      Trong công thức (2.11) chúng ta có thể không dùng chỉ số trên để chỉ ra rằng chúng ta chỉ
dùng một mảng là vec tơ có n thành phần để lưu trữ nghiệm. Giá trị nào vừa được tính toán thì
được lưu trữ ngay vào vị trí cũ và được dùng ngay trong công thức tính các giá trị khác.
                                     n
                        1
                xi =        (bi - ∑ aij xj)
                       a ii      j −1, j ≠ i

                i = 1, 2, . . ., n, k = 1,2,...
      Sự hội tụ của phương pháp Gause-Seidel
      Điều kiện hội tụ của phương pháp lặp Gause- Seidel cũng giống với phương pháp lặp đơn.
Như ta sẽ thấy trong ví dụ trong phần sau, phương pháp Gause- Seidel nói chung hội tụ nhanh hơn
phương pháp lặp đơn.
      Ta có thể sử dụng các công thức sau để đánh giá sai số của phương pháp lặp Gause-Seidel:
      Gọi x* là nghiệm đúng của hệ phương trình và gọi
                       i−1               n
                                                                    qi
                pi =   ∑ |cij|, qi = ∑ |cij|
                       j=1               j=i
                                                   , μ = max
                                                              i   1 − pi
      Khi đó ta có
                                 μ
            ||x(k) - x*|| ≤           ||x(k) - x(k-1)||                              (2.12)
                               1− μ
            hoặc
                                    μk
                ||x(k) - x*|| ≤         ||x(1) - x(0)||                              (2.13)
                                   1− μ
      Ví dụ. Dùng phương pháp lặp Gause-Seidel tìm nghiệm gần đúng của hệ phương trình:
                4x1 + 0.24x2 - 0.08x3 = 8
                0.09x1 + 3x2 - 0.15x3 = 9
                0.04x1 - 0.08x2 + 4x3 = 20
                                                                                                           35
Chương 2: Các phương pháp số trong đại số tuyến tính

       Giải. (1).Có thể thấy rằng ma trận các hệ số của hệ phương trình trên đây thỏa mãn tính
chéo trội, do đó ta có thể biến đổi hệ này để áp dụng phương pháp lặp Jacobi. Chia hai vế phương
trình đầu tiên cho 4, hai vế phương trình thứ hai cho 3 và hai vế của phương trình thứ ba cho 4
rồi biến đổi thích hợp ta nhận được:
                  x1 = 2 - 0.06x2 +0.02x3
                  x2 = 3 - 0.03x1 + 0.05x3
                  x3 = 5 - 0.01x1 + 0.02x2
       hay
                  ⎛ x1 ⎞ ⎡ 0        − 0.06 0.02⎤ ⎛ x1 ⎞ ⎛ 2 ⎞
                  ⎜ ⎟ ⎢                          ⎜ ⎟ ⎜ ⎟
                  ⎜ x 2 ⎟ = ⎢− 0.03   0    0.05⎥ ⎜ x 2 ⎟ + ⎜ 3 ⎟ = Cx + d
                                               ⎥
                  ⎜ x ⎟ ⎢ − 0.01 0.02       0 ⎥ ⎜ x3 ⎟ ⎜ 5 ⎟
                  ⎝ 3⎠ ⎣                       ⎦⎝ ⎠ ⎝ ⎠
         ||C||∞    = max(0 + 0.06 + 0.02, 0.03 + 0 + 0.05, 0.01 + 0.02 + 0) =
                  = max(0.08,0.08,0.03) = 0.08 <1
      (2) Chọn x(0) = (2,3,5)T, rồi tính x(1), x(2),... theo công thức (2.11) với lưu ý aii =1 ta được
bảng kết quả sau:
                              k       x1(k)                x2(k)              x3(k)
                              0       2                    3                  5
                              1       1.92                 3.1924             5.044648
                              2       1.9093489            3.194952           5.0448056
                              3       1.909199             3.1949643          5.0448073

       Xem x(3) là nghiệm gần đúng cần tìm, ta có thể đánh giá sai số phạm phải của x(3)
                                  μ
theo(2.12): ||x(k) - x*|| ≤           ||x(k) - x(k-1)||
                              1− μ
       Trong đó:
                  ||x(3) - x(2)||∞ = max |xi(3) - xi(2)| = max(0.0001499,0.000123,0.0000017) =
                                                i

         0.0001499
                                 qi
                  μ = max             = max(0.08,0.0515463,0) = 0.08
                          i    1 − pi
       Như vậy
                                          μ                            0.08
                  ||x(3) - x*||∞ ≤             ||x(k) - x(k-1)|| ≤            0.00001499 ≈ 0.000013
                                      1− μ                           1 − 0.08

        Thuật toán Jacobi cũng tương tự như thuật toán Gauss-Seidel, nhưng thuật toán Gauss -
Seidel có tốc độ hội tụ nhanh hơn.

36
Chương 2: Các phương pháp số trong đại số tuyến tính

Chương trình minh họa.
Sau đây là đoạn chương trình chính thể hiện (mô tả) thuật toán lặp Gauss - Seidel
/*Giai he phuong trinh tuyen tinh dung lap Gauss-Seidel, ma tran vuong n,
 cac phan tu cot thu n+1 la vecto b*/
//===============================================
double kcach(double *x,double *y,int n)
{double tmp=0;
 for(int i=1;i<=n;i++) tmp=tmp+fabs(x[i]-y[i]);
 return tmp;
}
//===============================================
int cheotroi(kmatran a, int n)
{double tmp;int i,j;
 for(i=1;i<=n;i++)
    {tmp=0;
     for(j=1;j<=n;j++) {if(j!=i) tmp=tmp+fabs(a[i][j]);}
     if(fabs(a[i][i])<=tmp) return false;
    }
 return true;
}
//===============================================
/*Giai he phuong trinh tuyen tinh bang phep lap Gauss-Seidel.
 Tra ve true neu co nghiem */
int gseidel(kmatran aa,double *x,int n)
{int h,i,j,k;double tmp;kvecto z;kmatran a;
int n1=n+1;
for(i=1;i<=n;i++)
for(j=1;j<=n1;j++) a[i][j]=aa[i][j];
if(!cheotroi(a,n))
 {cout<<endl<<"Khong phai cheo troi";delay(1000);return false;}
for(i=1;i<=n;i++) //chuyen ve dang he so a[i][i] == 1
 {tmp=a[i][i];
    for(j=1;j<=n1;j++) a[i][j] = a[i][j]/tmp;
 }
//Vong lap cac buoc khu

                                                                                         37
Chương 2: Các phương pháp số trong đại số tuyến tính

       for(i=1;i<=n;i++) {x[i]=0;z[i]=0;}
       k=1;
       while(true)
           {for(i=1;i<=n;i++)
               {tmp=0;
               for(j=1;j<=n;j++) if(j!=i) tmp+=a[i][j]*x[j];
               x[i] = a[i][n+1]-tmp;
               }
               k++;
               if(kcach(x,z,n)<epsi) break;
               if(k>kmax)
               {cout<<endl<<"Phep lap chua hoi tu";delay(1000);return(false);}
               //Gan z = x va chuan bi sang vong lap tinh x
               for(i=1;i<=n;i++) z[i]=x[i];
           }
       //Thu lai
       kvecto bb;
       for(i=1;i<=n;i++)
           {bb[i]=aa[i][1]*x[1];
           for(j=2;j<=n;j++) bb[i]+=aa[i][j]*x[j];
           }
       //Dua ket qua vao tep ketqua
       return true;
       )

2.3.       BÀI TẬP

Bài 1. Tính và kiểm tra bằng chương trình định thức của ma trận
                       ⎡1 3 1 ⎤
                   A = ⎢2 4 6 ⎥
                       ⎢      ⎥
                       ⎢7 6 11⎥
                       ⎣      ⎦

Bài 2. Tìm và kiểm tra bằng chương trình nghịch đảo của ma trận
                       ⎡2 3 1⎤
                   A = ⎢− 1 2 − 1⎥
                       ⎢         ⎥
                       ⎢3 0 2⎥
                       ⎣         ⎦
38
Chương 2: Các phương pháp số trong đại số tuyến tính

Bài 3. Tìm nghiệm hệ phương trình
              2x1 + 3x2 +x3 = 11
              -x1 + 2x2 - x3 = 0
               3x1 +2x3 = 9
     Bằng phương pháp khử Gauss và Jordan. Kiểm tra bằng chương trình.


Bài 4. Giải bằng các phương pháp khử Gauss, khử Gauss-Jordan, phương lặp Jacobi và lặp
     Gauss-Seidel (nếu thỏa mãn điều kiện) hệ phương trình sau:
              ⎡17 65 − 13 50 ⎤          ⎛ x1 ⎞ ⎛ 84 ⎞
                                        ⎜ ⎟ ⎜ ⎟
              ⎢12 16 37
              ⎢           28 ⎥
                             ⎥          ⎜ x 2 ⎟ ⎜ 25 ⎟
           A=                           ⎜ x ⎟ = ⎜ 36 ⎟
              ⎢56 23 11 − 19.⎥
              ⎢              ⎥          ⎜ 3⎟ ⎜ ⎟
                                        ⎜ x ⎟ ⎜ 18 ⎟
              ⎣ 3 − 5 47  10 ⎦          ⎝ 4⎠ ⎝ ⎠

           Kiểm tra trên máy tính và thông báo về khả năng giải được hay không các phương
     pháp trên.


Bài 5. Giải bằng các phương pháp lặp hệ phương trình sau:
              10x1 + 2x2 + x3 =9
               2x1 + 20x2 - 2x3 = -44
              -2x1 + 3x2 + 10x3 =22




                                                                                         39
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]
Bài giảng phương pháp số   ths.phan thị hà[bookbooming.com]

Weitere ähnliche Inhalte

Was ist angesagt?

Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhThế Giới Tinh Hoa
 
Giao trinh phuong phap phan tu huu han
Giao trinh phuong phap phan tu huu hanGiao trinh phuong phap phan tu huu han
Giao trinh phuong phap phan tu huu hanCửa Hàng Vật Tư
 
Hướng dẫn viết báo cáo chuẩn - HUST
Hướng dẫn viết báo cáo chuẩn - HUSTHướng dẫn viết báo cáo chuẩn - HUST
Hướng dẫn viết báo cáo chuẩn - HUSTThe Nguyen Manh
 
Giai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplaceGiai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplaceKiếm Hùng
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinVõ Phúc
 
Tài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuậtTài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuậtPham Hoang
 
Tài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiển
Tài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiểnTài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiển
Tài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiểnnataliej4
 
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tínhTính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tínhChien Dang
 
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốPhương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốKhu Tiến
 
Sức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệu
Sức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệuSức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệu
Sức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệuCửa Hàng Vật Tư
 
Báo cáo tốt nghiệp
Báo cáo tốt nghiệpBáo cáo tốt nghiệp
Báo cáo tốt nghiệpMy Đá
 
Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)
Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)
Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)Phuc Pqp
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử líHong Phuoc Nguyen
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânHajunior9x
 
Bài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự độngBài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự độngNguyễn Nam Phóng
 
Bảng giá trị hàm Laplace
Bảng giá trị hàm LaplaceBảng giá trị hàm Laplace
Bảng giá trị hàm Laplacehiendoanht
 

Was ist angesagt? (20)

Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tính
 
Giao trinh phuong phap phan tu huu han
Giao trinh phuong phap phan tu huu hanGiao trinh phuong phap phan tu huu han
Giao trinh phuong phap phan tu huu han
 
Hướng dẫn viết báo cáo chuẩn - HUST
Hướng dẫn viết báo cáo chuẩn - HUSTHướng dẫn viết báo cáo chuẩn - HUST
Hướng dẫn viết báo cáo chuẩn - HUST
 
Chuong03
Chuong03Chuong03
Chuong03
 
Giai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplaceGiai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplace
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Tài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuậtTài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuật
 
Xác định nội lực và chuyển vị của dầm đơn chịu tải trọng tĩnh, HAY
Xác định nội lực và chuyển vị của dầm đơn chịu tải trọng tĩnh, HAYXác định nội lực và chuyển vị của dầm đơn chịu tải trọng tĩnh, HAY
Xác định nội lực và chuyển vị của dầm đơn chịu tải trọng tĩnh, HAY
 
Tài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiển
Tài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiểnTài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiển
Tài liệu học tậpmô hình hóa và mô phỏng hệ thống điều khiển
 
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tínhTính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
 
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốPhương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
 
Giải Cơ sở dữ liệu phân tán - PTIT
Giải Cơ sở dữ liệu phân tán - PTITGiải Cơ sở dữ liệu phân tán - PTIT
Giải Cơ sở dữ liệu phân tán - PTIT
 
Sức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệu
Sức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệuSức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệu
Sức bền vật liệu - ôn tập về lý thuyết và bài tập sức bền vật liệu
 
Báo cáo tốt nghiệp
Báo cáo tốt nghiệpBáo cáo tốt nghiệp
Báo cáo tốt nghiệp
 
Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)
Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)
Giáo trình Thiết Kế và Chế Tạo Khuôn Phun Ép Nhựa (SPKT)
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
 
Bài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự độngBài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự động
 
Bảng giá trị hàm Laplace
Bảng giá trị hàm LaplaceBảng giá trị hàm Laplace
Bảng giá trị hàm Laplace
 
Cac lenh trong matlab
Cac lenh trong matlabCac lenh trong matlab
Cac lenh trong matlab
 

Andere mochten auch

Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]bookbooming1
 
Lập trình hướng đối tượng với java
Lập trình hướng đối tượng với javaLập trình hướng đối tượng với java
Lập trình hướng đối tượng với javaNgô Đăng Tân
 
Lý thuyết tính toán - BKHN - 2
Lý thuyết tính toán - BKHN - 2Lý thuyết tính toán - BKHN - 2
Lý thuyết tính toán - BKHN - 2Minh Lê
 
Bai giang-ctdl
Bai giang-ctdlBai giang-ctdl
Bai giang-ctdlPhong Vân
 
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kếLập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kếNgo Trung
 
Core java 8
Core java 8Core java 8
Core java 8. .
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Trần Thiên Đại
 
Tài liệu lập trình PHP từ căn bản đến nâng cao
Tài liệu lập trình PHP từ căn bản đến nâng caoTài liệu lập trình PHP từ căn bản đến nâng cao
Tài liệu lập trình PHP từ căn bản đến nâng caoZendVN
 
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất NghệGiáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất NghệMasterCode.vn
 
Đồ án tìm hiểu java và một số bài tập ứng dụng
Đồ án tìm hiểu java và một số bài tập ứng dụngĐồ án tìm hiểu java và một số bài tập ứng dụng
Đồ án tìm hiểu java và một số bài tập ứng dụngLong Kingnam
 
Bai giang asp.net full
Bai giang asp.net fullBai giang asp.net full
Bai giang asp.net fullLy hai
 
56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANH
56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANH56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANH
56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANHAntoree.com
 
Bai giang mon mang may tinh
Bai giang mon mang may tinhBai giang mon mang may tinh
Bai giang mon mang may tinhJun Pham
 
Tiếng anh chuyên ngành cntt
Tiếng anh chuyên ngành cnttTiếng anh chuyên ngành cntt
Tiếng anh chuyên ngành cnttthientinh199
 
Tai lieu tieng anh chuyen nganh cong nghe thong tin
Tai lieu tieng anh chuyen nganh cong nghe thong tinTai lieu tieng anh chuyen nganh cong nghe thong tin
Tai lieu tieng anh chuyen nganh cong nghe thong tinAntoree.com
 
Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVCMasterCode.vn
 
Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Trần Thiên Đại
 
Ebook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng caoEbook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng caoTrung Thanh Nguyen
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
 

Andere mochten auch (20)

Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]
 
Lập trình hướng đối tượng với java
Lập trình hướng đối tượng với javaLập trình hướng đối tượng với java
Lập trình hướng đối tượng với java
 
Lý thuyết tính toán - BKHN - 2
Lý thuyết tính toán - BKHN - 2Lý thuyết tính toán - BKHN - 2
Lý thuyết tính toán - BKHN - 2
 
Bai giang-ctdl
Bai giang-ctdlBai giang-ctdl
Bai giang-ctdl
 
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kếLập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
 
Core java 8
Core java 8Core java 8
Core java 8
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)
 
Tài liệu lập trình PHP từ căn bản đến nâng cao
Tài liệu lập trình PHP từ căn bản đến nâng caoTài liệu lập trình PHP từ căn bản đến nâng cao
Tài liệu lập trình PHP từ căn bản đến nâng cao
 
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất NghệGiáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
 
Đồ án tìm hiểu java và một số bài tập ứng dụng
Đồ án tìm hiểu java và một số bài tập ứng dụngĐồ án tìm hiểu java và một số bài tập ứng dụng
Đồ án tìm hiểu java và một số bài tập ứng dụng
 
Bai giang asp.net full
Bai giang asp.net fullBai giang asp.net full
Bai giang asp.net full
 
Lập trình java
Lập trình javaLập trình java
Lập trình java
 
56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANH
56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANH56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANH
56 TÌNH HUỐNG GIAO TIẾP TIẾNG ANH
 
Bai giang mon mang may tinh
Bai giang mon mang may tinhBai giang mon mang may tinh
Bai giang mon mang may tinh
 
Tiếng anh chuyên ngành cntt
Tiếng anh chuyên ngành cnttTiếng anh chuyên ngành cntt
Tiếng anh chuyên ngành cntt
 
Tai lieu tieng anh chuyen nganh cong nghe thong tin
Tai lieu tieng anh chuyen nganh cong nghe thong tinTai lieu tieng anh chuyen nganh cong nghe thong tin
Tai lieu tieng anh chuyen nganh cong nghe thong tin
 
Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVC
 
Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++
 
Ebook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng caoEbook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng cao
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vn
 

Ähnlich wie Bài giảng phương pháp số ths.phan thị hà[bookbooming.com]

Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#Dương Tuấn
 
[Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10][Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10]MasterCode.vn
 
Giới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu học
Giới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu họcGiới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu học
Giới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu họcBùi Việt Hà
 
Luận văn thạc sĩ toán học
Luận văn thạc sĩ toán họcLuận văn thạc sĩ toán học
Luận văn thạc sĩ toán họcDang Van Ly
 
Songuyenlon
SonguyenlonSonguyenlon
SonguyenlonTan Pham
 
Toán 1 - VGT.pdf
Toán 1 - VGT.pdfToán 1 - VGT.pdf
Toán 1 - VGT.pdfTAnhBi5
 
Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18
Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18
Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18Vcoi Vit
 
Giải tích các hàm nhiều biến.pdf
Giải tích các hàm nhiều biến.pdfGiải tích các hàm nhiều biến.pdf
Giải tích các hàm nhiều biến.pdfMan_Ebook
 
ThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bản
ThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bảnThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bản
ThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bảnHau Pham
 
Bai tap dstt hv bcvt - bookbooming
Bai tap dstt   hv bcvt - bookboomingBai tap dstt   hv bcvt - bookbooming
Bai tap dstt hv bcvt - bookboomingbookbooming
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toanHữu Duy Duy
 

Ähnlich wie Bài giảng phương pháp số ths.phan thị hà[bookbooming.com] (20)

Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#
 
[Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10][Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10]
 
Giới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu học
Giới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu họcGiới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu học
Giới thiệu các phần mềm hỗ trợ Học và Dạy Toán Tiểu học
 
Luận văn: Giải gần đúng phương trình phi tuyến và phương trình vi phân trên m...
Luận văn: Giải gần đúng phương trình phi tuyến và phương trình vi phân trên m...Luận văn: Giải gần đúng phương trình phi tuyến và phương trình vi phân trên m...
Luận văn: Giải gần đúng phương trình phi tuyến và phương trình vi phân trên m...
 
Luận văn thạc sĩ toán học
Luận văn thạc sĩ toán họcLuận văn thạc sĩ toán học
Luận văn thạc sĩ toán học
 
Bài 6
Bài 6Bài 6
Bài 6
 
Songuyenlon
SonguyenlonSonguyenlon
Songuyenlon
 
Toan a2 bai tap
Toan a2   bai tapToan a2   bai tap
Toan a2 bai tap
 
Toán 1 - VGT.pdf
Toán 1 - VGT.pdfToán 1 - VGT.pdf
Toán 1 - VGT.pdf
 
Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18
Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18
Bai tap-toan-a2-hv-buu-chinh-vien-thong.diendandaihoc.vn 18
 
Giải tích các hàm nhiều biến.pdf
Giải tích các hàm nhiều biến.pdfGiải tích các hàm nhiều biến.pdf
Giải tích các hàm nhiều biến.pdf
 
Ứng dụng hình học để xác định một miền chứa điểm cho trước
Ứng dụng hình học để xác định một miền chứa điểm cho trướcỨng dụng hình học để xác định một miền chứa điểm cho trước
Ứng dụng hình học để xác định một miền chứa điểm cho trước
 
Ctdlgt
CtdlgtCtdlgt
Ctdlgt
 
Ctdlgt
CtdlgtCtdlgt
Ctdlgt
 
Bao ve kl hung
Bao ve kl hungBao ve kl hung
Bao ve kl hung
 
ThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bản
ThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bảnThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bản
ThongKe Y-Sinh Hoc_Bài 1 một số kiến thức toán cơ bản
 
Bai tap dstt hv bcvt - bookbooming
Bai tap dstt   hv bcvt - bookboomingBai tap dstt   hv bcvt - bookbooming
Bai tap dstt hv bcvt - bookbooming
 
Đề tài: Thiết kế và phân tích thuật toán, HAY
Đề tài: Thiết kế và phân tích thuật toán, HAYĐề tài: Thiết kế và phân tích thuật toán, HAY
Đề tài: Thiết kế và phân tích thuật toán, HAY
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toan
 
Giáo Án Tin 10 - Bài 6
Giáo Án Tin 10 - Bài 6Giáo Án Tin 10 - Bài 6
Giáo Án Tin 10 - Bài 6
 

Mehr von bookbooming1

Tập trung hay là chết
Tập trung hay là chếtTập trung hay là chết
Tập trung hay là chếtbookbooming1
 
Edison mà tôi biết
Edison mà tôi biếtEdison mà tôi biết
Edison mà tôi biếtbookbooming1
 
Chinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóaChinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóabookbooming1
 
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...bookbooming1
 
Những công ty đột phá
Những công ty đột pháNhững công ty đột phá
Những công ty đột phábookbooming1
 
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...bookbooming1
 
Tiểu sử steve jobs
Tiểu sử steve jobsTiểu sử steve jobs
Tiểu sử steve jobsbookbooming1
 
Thuật đắc nhân tâm.
Thuật đắc nhân tâm.Thuật đắc nhân tâm.
Thuật đắc nhân tâm.bookbooming1
 
Con đường steve jobs
Con đường steve jobsCon đường steve jobs
Con đường steve jobsbookbooming1
 
10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệp10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệpbookbooming1
 

Mehr von bookbooming1 (20)

Tập trung hay là chết
Tập trung hay là chếtTập trung hay là chết
Tập trung hay là chết
 
Edison mà tôi biết
Edison mà tôi biếtEdison mà tôi biết
Edison mà tôi biết
 
Chinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóaChinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóa
 
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...
 
Bản lĩnh putin
Bản lĩnh putinBản lĩnh putin
Bản lĩnh putin
 
Những công ty đột phá
Những công ty đột pháNhững công ty đột phá
Những công ty đột phá
 
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
 
Tiểu sử steve jobs
Tiểu sử steve jobsTiểu sử steve jobs
Tiểu sử steve jobs
 
Thuật đắc nhân tâm.
Thuật đắc nhân tâm.Thuật đắc nhân tâm.
Thuật đắc nhân tâm.
 
Con đường steve jobs
Con đường steve jobsCon đường steve jobs
Con đường steve jobs
 
10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệp10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệp
 
Chuong3
Chuong3Chuong3
Chuong3
 
Chuong mo dau
Chuong mo dauChuong mo dau
Chuong mo dau
 
Chuong 5
Chuong 5Chuong 5
Chuong 5
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Ch viii
Ch viiiCh viii
Ch viii
 
Ch­ vii
Ch­ viiCh­ vii
Ch­ vii
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Ch vi
Ch viCh vi
Ch vi
 

Bài giảng phương pháp số ths.phan thị hà[bookbooming.com]

  • 1. HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG ------- ------- BÀI GIẢNG PHƯƠNG PHÁP SỐ Biên soạn : Ths. PHAN THỊ HÀ Ts. PHAN ĐĂNG CẦU Lưu hành nội bộ HÀ NỘI - 2006
  • 2. Giới thiệu môn học GIỚI THIỆU MÔN HỌC I. GIỚI THIỆU CHUNG Phương pháp số 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 các bài toán (chủ yếu là gần đúng) 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ể. Ngày nay phần lớn các công việc tính toán đều được thực hiện trên máy tính. Tuy vậy thực tế chứng tỏ rằng, việc áp dụng các thuật toán và phương pháp tính toán khác nhau có thể cho tốc độ tính toán và độ chính xác rất khác nhau. Lấy ví dụ đơn giản như tính định thức của ma trận chẳng hạn, nếu tính trực tiếp theo định nghĩa thì việc tính định thức của một ma trận vuông cấp 25 cũng mất hàng triệu năm (ngay cả với máy tính hiện đại nhất hiện nay); trong khi đó nếu sử dụng phương pháp khử Gauss thì kết quả nhận được gần như tức thời. Như vậy, phương pháp số là công cụ không thể thiếu trong các công việc cần thực hiện nhiều tính toán với tốc độ tính toán nhanh và độ chính xác cao như vật lý, điện tử viễn thông, ... và dĩ nhiên là tất cả các ngành và mọt lĩnh vực đều cần đến là công nghệ thông tin. Phương pháp số được nghiên cứu từ rất lâu và cho đến nay những thành tựu đạt được là một khối lượng kiến thức đồ sộ được in trong nhiều tài liệu sách, báo... Tuy nhiên, môn học "Phương pháp số" chỉ nhằm cung cấp những kiến thức căn bản nhất về phương pháp số. Với lượng kiến thức này sinh viên có thể áp dụng vào giải quyết những bài toán thông thường trong thực tế và có khả năng tự tìm hiểu để nâng cao kiến thức cho mình khi gặp các vấn đề phức tạp hơn. II. MỤC ĐÍCH Môn học phương pháp số cung cấp cho sinh viên kiến thức căn bản nhất về một số phương pháp giải gần đúng trên dữ liệu số . Tạo cơ sở để học tốt và nghiên cứu các nghành khoa học kỹ thuật nói chung và Công nghệ thông tin nói riêng. Góp phần rèn luyện phương pháp suy luận khoa học, tư duy logic, phương pháp nghiên cứu thực nghiệm Góp phần xây dựng thế giới quan khoa học và tác phong khoa học cần thiết cho người kỹ sư tương lai. III. PHẠM VI NGHIÊN CỨU Nghiên cứu một số phương pháp cơ bản nhất của phương pháp số, được ứng dụng nhiều trong thực tế như các phương pháp số trong đại số tuyến tính, bài toán nội suy, tìm nghiệm gần đúng các phương trình phi tuyến, tính gần đúng đạo hàm và tích phân, giải gần đúng một số dạng của phương trình vi phân... Tìm hiểu các lĩnh vực ứng dụng của các phương pháp trong thực tế. Nghiên cứu cách cài đặt các thuật toán trên máy tính. 3
  • 3. Giới thiệu môn học IV. PHƯƠNG PHÁP NGHIÊN CỨU: Để học tốt môn học này, sinh viên cần lưu ý những vấn đề sau: 1. Kiến thức cần trước: - Sinh viên phải có kiến thức cơ bản về toán học cao cấp. - Thành thạo ít nhất một ngôn ngữ lập trình. Đặc biệt trong cuốn sách này đã sử dụng ngôn ngữ lập trình C để mô tả thuật toán, vì vậy sinh viên phải nắm được ngôn ngữ lập trình C. 2. Thu thập đầy đủ các tài liệu: Giáo trình Phương pháp số. Phan Đăng Cầu, Phan Thị Hà, Học viện Công nghệ BCVT, 2002. Nếu cần sinh viên nên tham khảo thêm: - Giải tích số. Phạm Kỳ Anh, nhà xuất bản đại học Quốc Gia Hà Nội, 1966. - Phương pháp tính. Tạ Văn Đỉnh, Nhà xuất bản Giáo dục - 1995. - Phương Pháp tính. Dương Thuỳ Vỹ, Nhà xuất bản Khoa học và Kỹ thuật, 2001. 3. Đặt ra mục tiêu, thời hạn cho bản thân: Đặt ra các mục tiêu tạm thời và thời hạn cho bản thân và cố gắng thực hiện chúng Xây dựng mục tiêu trong chương trình nghiên cứu. 4 Nghiên cứu và nắm những kiến thức cốt lõi: Sinh viên nên đọc qua sách hướng dẫn học tập trước khi nghiên cứu bài giảng môn học và các tài liệu tham khảo khác. 5. Tham gia đầy đủ các buổi hướng dẫn học tập: Thông qua các buổi hướng dẫn học tập, giảng viên sẽ giúp sinh viên nắm được nội dung tổng thể của môn học và giải đáp thắc mắc, đồng thời sinh viên cũng có thể trao đổi, thảo luận với những sinh viên khác về nội dung bài học. 6. Chủ động liên hệ với bạn học và giảng viên: Cách đơn giản nhất là tham dự các diễn dàn học tập trên mạng Internet, qua đó có thể trao đổi trực tiếp các vấn đề vướng mắc với giảng viên hoặc các bạn học khác đang online. 7. Tự ghi chép lại những ý chính: Việc ghi chép lại những ý chính là một hoạt động tái hiện kiến thức, kinh nghiệm cho thấy nó giúp ích rất nhiều cho việc hình thành thói quen tự học và tư duy nghiên cứu. 8. Học đi đôi với hành Học lý thuyết đến đâu thực hành làm bài tập ngay đến đó để hiểu và nắm chắc lý thuyết. Nói chung cuối mỗi chương, sinh viên cần tự trả lời các câu hỏi, bài tập. Hãy cố gắng vạch ra những ý trả lời chính, từng bước phát triển thành câu trả lời hoàn thiện. Liên hệ với các môn học khác và các vấn đề thực tế có liên quan để hiểu sâu hơn ý nghĩa của các phương pháp. Cài đặt các thuật toán bằng nhiều cách khác nhau, có sử dụng đồ họa để làm nổi bật các đặc trưng và kết quả của các thuật toán. Dùng đồ thị so sánh các phương pháp khác nhau cùng giải quyết một bài toán, phân tích những điểm yếu điểm mạnh của các thuật toán. Khi cài đặt thuật toán nếu có gì vướng mắc thì sinh viên có thể tham khảo thêm phần code của toàn bộ chương trình tương ứng đã được viết bằng ngôn ngữ lập trình C trong tài liệu: “Phương pháp số. Phan Đăng Cầu, Phan Thị Hà, Học viện Công nghệ BCVT, 2002”. 4
  • 4. Chương 1: Số xấp xỉ và sai số CHƯƠNG 1 SỐ XẤP XỈ VÀ SAI SỐ MỤC ĐÍCH, YÊU CẦU Sau khi nghiên cứu chương 1, yêu cầu sinh viên: 1. Hiểu được Phương Pháp Số là gì, vai trò và tầm quan trọng của Phương pháp số. 2. Hiểu được sai số tuyệt đối và sai số tương đối. 3. Nắm được cách viết số xấp xỉ. 4. Nắm được các qui tắc tính sai số. 5. Hiểu và biết cách đánh giá sai số tính toán và sai số phương pháp . 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ố chúng 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. 1.1.2. Những dạng sai số thường gặp 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 • Sai số phương pháp • Sai số của số liệu • Sai số 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. 5
  • 5. Chương 1: Số xấp xỉ và sai số 1.2. SAI SỐ TUYỆT ĐỐI VÀ SAI SỐ TƯƠNG ĐỐI 1.2.1. Sai số tuyệt đối Trong tính gần đúng ta làm việc với các giá trị gần đúng của các đại lượng. Cho nên vấn đề đầu tiên cần nghiên cứu là vần đề sai số.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 Δ a = | a-A | (1.1) đượ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ố Ea>0 sao cho | a - A | ≤ Ea (1.2) Số dương Ea được gọi là sai số tuyệt đối giới hạn của a. Rõ ràng nếu Ea là sai số tuyệt đối giới hạn của a thì mọi E > Ea đều là sai số tuyệt đối giới hạn của a. 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. Trong những điều kiện cụ thể người ta cố gắng chọn Ea là số dương bé nhất có thể được thoã mãn (1.1). Nếu Ea 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 ± Ea (1.3) với ý nghĩa của (1.1), tức là a - Ea ≤ A ≤ a + Ea (1.4) 1.2.2. Sai số tương đối Gọi Δa là sai số tuyệt đối của a khi dùng a để xấp xỉ A, khi đó đại lượng Δa δa = (1.5) |a| đượ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 Ea εa = (1.6) |a| là sai số tương đối giới hạn của a. Từ đây ta có Ea = | a| εa (1.7) Từ đây người ta thường viết A = a(1 ± εa) (1.8) Vì trong thực tế chúng 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 Ea 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, Ea = 0.05, khi đó ta có εa = 0.05/10 = 0.5 %. 1.2.3. Chú thích: Sai số tuyệt đối không nói lên đầy đủ "chất lượng" của một số xấp xỉ, “chất lượng” ấy còn được phản ánh qua sai số tương đối. 6
  • 6. Chương 1: Số xấp xỉ và sai số 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à Δa. Nếu Δa ≤ 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 Δa > 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 Δa = 0.004726. Ta có | Δa | ≤ 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 Δa = 0.005726. Ta có | Δa | ≤ 0.5 *10-1 (nhưng | Δa | > 0.5 *10-2 ) do đó các chữ 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 ± Ea 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 giới hạn không lớn hơn một nửa đơn vị ở hàng cuối cùng. 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ùng. Giả sử a là xấp xỉ của A với sai số tuyệt đối giới hạn là E . 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ó | a' - A| = | a' - a + a -A| ≤ | a' - a| + | a -A| ≤ θ + E Vậy có thể lấy θ +E làm sai số tuyệt đối giới hạn của a'. Như vậy việc quy tròn làm tăng sai số tuyệt đối giới hạn. 7
  • 7. Chương 1: Số xấp xỉ và sai số 1.4. CÁC QUY TẮC TÍNH SAI SỐ 1.4.1. Mở đầu 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ó: ∂u ∂u du = dx + dy ∂x ∂y Từ đây ∂u ∂u Δu ≈ Δx + Δy ∂x ∂y Suy ra ∂u ∂u Δu = | | Δx +| | Δy (1.9) ∂x ∂y 1.4.2. Sai số của tổng Cho u = x + y Ta có ∂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ó δu = Δ u/|u| = ( Δ x + Δ y)/ |x-y| 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 8
  • 8. Chương 1: Số xấp xỉ và sai số Ta có ∂u ∂u = y, =x ∂x ∂y Từ (1.9) suy ra Δ u = |y| Δ x + |x| Δ y Do đó δu = Δ u/|u| = Δ x/|x| + Δ y/|y| = δx + δ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ó δxn = n δx (1.12) 1.4.4. Sai số của thương Cho u = x/y Ta có ∂u 1 ∂u x = , = − 2 ∂x y ∂y y Từ (1.9) suy ra 1 x Δu = | |Δx + | 2 |Δy y y Ta có y y 1 x 1 1 Δ u / |u| = Δ u . | | = | | ( | | Δ x + | 2 | Δ y) = | | Δ x + | | Δ y = x x y y x y 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ó: ∂u ∂u ∂u du = dx1 + dx2 + ... + dxn ∂x1 ∂x 2 ∂x n 9
  • 9. Chương 1: Số xấp xỉ và sai số Từ đây ta có ∂u ∂u ∂u Δu ≈ Δx1 + Δx2 + ... + Δxn ∂x1 ∂x 2 ∂x n Suy ra ∂u ∂u ∂u Δu = | | Δ x1 +| | Δ x2 + ... + | | Δ xn (1.14) ∂x1 ∂x 2 ∂x n 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/6)πd3 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) δπ = 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ó x x2 xn ex = 1+ + + ... + +... 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 x x2 xn tế ta chỉ tính được tổng Sn = 1+ + + ... + , nghĩa là chúng ta đã dùng phương pháp gần 1! 2! 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. 10
  • 10. Chương 1: Số xấp xỉ và sai số 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. 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ì chúng 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, chúng 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. Chúng 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 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 chúng 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ể. BÀI TẬP Bài 1. Khi đo 1 số góc ta được các giá trị sau: a= 21o37’3”; b=1o10’ Hãy xác định sai số tương đối của các số xấp xỉ đó biết rằng sai số tuyệt đối trong phép đo là 1”. 11
  • 11. Chương 1: Số xấp xỉ và sai số Bài 2. Hãy xác định sai số tuyệt đối của các số xấp xỉ sau đây cho biết sai số tương đối của chúng: a) a= 13267 ; δa=0,1% b) b=2,32; δb=0,7% Bài 3. Hãy xác định số các chữ số đáng tin trong các số a,b với sai số như sau: a) a= 0,3941; Δ a=0,25.10-2 b) b=38,2543; Δ a= 0,27.10-2 Bài 4. Hãy xác định số những chữ số đáng tin trong các số a với sai số tương đối như sau: a) a=1,8921; δa=0,1.10-2 b) a=22,351; δa=0,1 Bài 5. Hãy qui tròn các số dưới đây( xem là đúng) với 3 chữ số có nghĩa đáng tin và xác định sai số tuyệt đối Δ và sai số tương đối δ của chúng: a) a= 2,514; b) 0,16152 c) 0,01204; d) –0,0015281 Bài 6. Hãy xác định giá trị của các hàm số dưới đây cùng với sai số tuyệt đối và sai số tương đối ứng với những giá trị của các đối số cho với mọi chữ số có nghĩa đều đáng tin. a) u=ln(x+y2); x=0,97; y=1,132 b) u=(x+y)2z; x=3,28; y=0,932; z=1,132 12
  • 12. Chương 2: Các phương pháp số trong đại số tuyến tính CHƯƠNG 2 CÁC PHƯƠNG PHÁP SỐ TRONG ĐẠI SỐ TUYẾN TÍNH MỤC ĐÍCH, YÊU CẦU: Sau khi nghiên cứu chương 1, yêu cầu sinh viên: 1. Hiểu và nắm được các phương pháp tìm nghiệm đúng, nghiệm xấp xỉ của hệ phương trình tuyến tính. 2. Biết cách ứng dụng các phương pháp trên vào việc tính định thức của ma trận, tìm ma trận nghịch đảo, giải quyết các bài toán thực tế. 3. Biết cách đánh giá sai số của từng phương pháp 2.1. MA TRẬN VÀ ĐỊNH THỨC 2.1.1. Ma trận Cho ma trận chữ nhật A cấp m x n: a11 a12 ... a1n a21 a22 ... a2n A= . . ... . am1 am2 ... amn ở đây aij là các số thực. Ma trận này có m hàng và n cột. Khi m = n ta có ma trận cấp nxn 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. 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 a12 ... a1n 0 a22 ... a2n A= . . ... . 0 0 ... ann 13
  • 13. Chương 2: Các phương pháp số trong đại số tuyến tính 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: a11 0 ... 0 a21 a22 ... 0 A= . . ... . an1 an2 ... ann Ma trận chữ nhật AT cấp n x m được gọi là ma trận chuyển vị của ma trận A cấp m x n nếu: a11 a21 ... am1 a12 a22 ... am2 AT = . . ... . a1n a2n ... amn 2.1.2. Định thức của ma trận 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 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 (ik, 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ị ik, 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: a11 a12 ... a1n a21 a22 ... a2n A= . . ... . an1 an2 ... ann 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 = ∑ s(i1, i2,..., in) a α 1i1 a 2i2 ...a nin (2.0) với α = (i1, i2,..., in) chạy trong tập tất cả các hoán vị của tập {1,2,...,n}, và 1 nếu α là hoán vị chẵn s(i1, i2,..., in) = -1 nếu α là hoán vị lẻ 14
  • 14. Chương 2: Các phương pháp số trong đại số tuyến tính Định thức của ma trận còn được ký hiệu là a11 a12 ... a1n a21 a22 ... a2n A= . . ... . an1 an2 ... ann 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. • Cộng các thành phần tương ứng của 2 hàng hoặc hai cột bất kỳ. 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. Ma trận E được gọi là ma trận đơn vị cấp n nếu E là ma trận vuông cấp n và E có dạng 1 0 ... 0 0 1 ... 0 E= . . ... . 0 0 ... 1 2.1.3. 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.0) để 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. 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à aij 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ử aij , và được ký hiệu là Mij. Giá trị Aij = (-1)i+j Mij được gọi là phần bù đại số của phần tử aij. 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 = ∑ aij Aij j=1 15
  • 15. Chương 2: Các phương pháp số trong đại số tuyến tính Khai triển định thức theo cột thứ j: n det A = ∑ aij Aij 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 = ∑ a1j A1j j=1 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à 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 chúng 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ì chúng 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 sẽ biến đổi để đưa ma trận A về dạng ma trận tam giác trên b11 b12 ... b1n 0 b22 ... B2n B B= . . ... . 0 0 ... bmn Vậy det A=det B = b11 b22...bnn 2.1.4. Ma trận nghịch đảo Ma trận nghịch đảo của một ma trận vuông A cấp n là ma trận được ký hiệu là A-1, thoả mãn điều kiện A-1A = A A-1 = E Trong đó E là ma trận đơn vị. Có thể chứng minh rằng để thỏa mãn điều kiện trên thì bắt buộc A-1 phải là ma trận vuông, và ma trận đảo nếu tồn tại là duy nhất. Điều kiện tồn tại của ma trận nghịch đảo: Ma trận vuông A cấp n có ma trận nghịch đảo khi và chỉ khi det A ≠ 0. Cách tính ma trận nghịch đảo: Gọi Aij là phần bù đại số của phần tử aij , khi đó ta có: A11 A21 ... An1 A12 A22 ... An2 1 A-1 = det A . . ... . A1n A2n ... Ann 16
  • 16. Chương 2: Các phương pháp số trong đại số tuyến tính Tuy nhiên công thức này chỉ có ý nghĩa lý thuyết, không thể áp dụng để tính trực tiếp ma trận đảo trên máy tính được vì số phép tính đòi hỏi quá lớn. Trong phần sau ta sẽ áp dụng phương pháp khử Gauss-Jordan để tính ma trận nghịch đảo với số phép tính nhỏ hơn nhiều (khoảng n3) 2.2. HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH Xét một hệ phương trình gồm n phương trình tuyến tính với n ẩn số x1, x2,...,xn như sau: a11x1 + a12x2 + . . . + a1nxn = b1 a21x1 + a22x2 + . . . + a2nxn = b2 . . . . . . . . . . . . . . . . (2.1) an1x1 + an2x2 + . . . + annxn = bn Hệ phương trình này có thể viết dưới dạng ma trận Ax = b, trong đó ⎡ a11 a12 ... a1n ⎤ ⎛ x1 ⎞ ⎛ b1 ⎞ ⎜ ⎟ ⎜ ⎟ ⎢a a 22 ... a 2 n ⎥ ⎥,x= ⎜ x2 ⎟ ⎜ b2 ⎟ A= ⎢ 21 ⎢ . . ... . ⎥ ⎜ . ⎟,b= ⎜ . ⎟ ⎢ ⎥ ⎜ ⎟ ⎜ ⎟ ⎜x ⎟ ⎜b ⎟ ⎣a n1 an2 ... a nn ⎦ ⎝ n⎠ ⎝ n⎠ Nếu det A ≠ 0 thì nghiệm của hệ (2.1) có thể tính theo công thức x = A-1b. Áp dụng công thức tính ma trận đảo ta có thể biến đổi và dẫn đến lời giải được diễn tả bằng định lý Cramer như sau: Định lý Cramer. Gọi Aj là ma trận nhận được từ ma trận A bằng cách thay cột thứ j bằng cột b, khi đó hệ (2.1) có nghiệm duy nhất và xj được tính bởi công thức det A j xj = det A Tuy nhiên trong thực hành người ta không dùng công thức này để tính nghiệm vì số phép tính quá lớn. Người ta dùng những phương pháp hữu hiệu hơn mà chúng tôi sẽ giới thiệu sau đây. 2.2.1. Phương pháp trực tiếp giải hệ phương trình tuyến tính Giả sử ta giải hệ phương trình(2.1) a. Phương pháp khử Gauss Phương pháp khử Gauss dùng cách khử dần các ẩn để đưa hệ phương trình đã cho về một dạng tam giác trên rồi giải hệ tam giác này từ giới lên trên, không phải tính một định thức nào Phương pháp này được thực hiện qua các bước sau: Quá trình xuôi: - Bước 0: Dùng phương trình đầu tiên để khử x1 trong n-1 phương trình còn lại. Giả sử a11≠0. (Để cho công thức đơn giản , trước khi khử ta có thể chia phương trình thứ nhất cho a11 ). Cụ thể để khử x1 ở hàng thứ k( k=2,3,…n) ta phải tính lại các hệ số akj ở hàng thứ k (j=1,2,..n+1) như sau: akj=akj-a1j*ak1/a11 ... 17
  • 17. Chương 2: Các phương pháp số trong đại số tuyến tính - Bước 1: Dùng phương trình thứ 2 để khử x2 trong n-2 phương trình còn lại phía sau. Giả sử a22≠0. (Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ hai cho a22). Cụ thể để khử x2 ở hàng thứ k (k=3,4,…n) ta phải tính lại các hệ số akj ở hàng thứ k (j=2,..n+1) như sau: akj=akj-a2j*ak2/a22 ……. - Bước i: Dùng phương trình i để khử xi trong các phương trình thứ i+1,i+2, ..., n. Giả sử aii≠0. Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ i cho aii). Cụ thể để khử xi ở hàng thứ k (k=i+1,…n) ta phải tính lại các hệ số akj ở hàng thứ k (j=i,..n+1) như sau: akj=akj-aij*aki/aii - Bước n-1: Dùng phương trình thứ n-1 để khử xn-1 trong phương trình thứ n.Giả sử an-1 n-1≠0. (Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ n-1 cho an-1 n-1) Cụ thể để khử xn-1 ở hàng thứ n ta phải tính lại các hệ số anj ở hàng thứ n (j=n-1,n,n+1) như sau: anj=anj-an-1j*an-1i/an-1n-1 Kết thúc quá trình khử. Chú ý: Trong quá trình giải xuôi ta giả thiết a11≠0, a22≠0,a33≠0,...,an-1 n-1≠0. Nếu 1 trong các hệ số đó bằng không thì quá trình không tiếp tục được. Lúc đó ta phải thay đổi cách tính. Giả sử khi khử x1 ta gặp a11=0 thì ta nhìn các hệ số a21, a31 ...an1 của x1 ở các phương trình phía dưói, nếu có hệ số nào khác không ta có thể lấy nó thay cho vai trò của a11 bằng cách hoán vị hai phương trình. Nếu tất cả các hệ số số a11, a21, a31 ...,an1 đều bằng không thì hệ đã cho suy biến. Vậy tốt nhất là trước khi khử x1 ta chọn trong các hệ số a11, a21, a31 ...,an1 hệ số có giá trị tuyệt đối lớn nhất làm trụ thứ nhất( gọi là trụ tối đại thứ nhất) rồi hoán vị hàng thứ nhất cho hàng có giá trị tuyệt đối lớn 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. Tương tự trong các bước khử x2,... xn-1 , trước khi khử ta cũng tìm trụ tối đại: | ari | = max {| aki | / k=i,i+1, ... ,n} ( với i=2,3,…,n-1) Sau đó ta đổi hàng r cho hàng i. Sau khi thực hiện xong quá trình giải xuôi hệ phương trình (2.1) có dạng: Dạng1: Tại các bước (bước i) ta không chia cho hệ số aii a11x1 + a12x2 + . . . + a1nxn = b1 a22x2 + . . . + a2nxn = b2 . . . . . . . . . . . ann xn = bn 18
  • 18. Chương 2: Các phương pháp số trong đại số tuyến tính hoặc: Dạng 2: Tại các bước (bước i) ta chia cho hệ số aii: x1 + a12x2 + . . . + a1nxn = b1 x2 + . . . + a2nxn = b2 . . . . . . . . . . . xn = bn Xuất phát từ phương trình thứ n ta lần lượt tính được các giá trị xi bằng các công thức của quá trình giải ngược sau: Quá trình giải ngược xn = bn/ann hoặc ( xn=bn) ... n n xi = (bi -( ∑ aijxj) )/aii ) hoặc (bi -( ∑ aijxj) ), i =n-1, n-2, ..., 1 j=i+1 j=i+1 Để việc viết chương trình được đơn giản, khi cài đặt trên máy tính ta dùng một mảng a thay cho cả ma trận a và vec tơ b. Tức là ⎡ a11 a12 ... a1n a1,( n +1) ⎤ ⎡ a11 a12 ... a1n b1 ⎤ ⎢a ⎢ 21 a 22 ... a 2 n a 2,( n +1) ⎥ ⎢a 21 ⎥= ⎢ a 22 ... a 2 n b2 ⎥ ⎥ ⎢ . . ... . . ⎥ ⎢ . . ... . .⎥ ⎢ ⎥ ⎢ ⎥ ⎢ a n1 ⎣ an2 ... a nn a n ,( n +1) ⎥ ⎣ a n1 ⎦ an2 ... a nn bn ⎦ Ta áp dụng các phép biến đổi sơ cấp như vừa trình bày để biến đổi ma trận chữ nhật cấp nx(n+1) trên đây về dạng ⎡1 a'12 ... a'1n a'1,( n +1) ⎤ ⎢0 1 ... a' 2 n a' 2,( n +1) ⎥ ⎢ ⎥ ⎢. . ... . . ⎥ ⎢ ⎥ ⎢0 0 ⎣ ... 1 a' n ,( n +1) ⎥ ⎦ Ví dụ:Giải hệ phương trình sau bằng phương pháp khử Gauss: 2x1 + 3x2 +x3 = 11 -x1 + 2x2 -x3 = 0 3x1 + 2x3 =9 Bước1: Hệ phương trình trên tương đương với: 3x1 + 2x3 =9 h1=h3 -x1 + 2x2 -x3 = 0 h2=h2 2x1 + 3x2 +x3 = 11 h3=h1 19
  • 19. Chương 2: Các phương pháp số trong đại số tuyến tính 3x1 + 0 + 2x3 =9 h1=h1 2x2 - x3/3 = 3 h2=h2+h1/3 3x2 - x3/3 =5 h3=h3-2*h1/3 Bước 2: 3x1 + 0 +2x3 =9 h1=h1 3x2 - x3/3 =5 h2=h3 2x2 - x3/3 =3 h3=h2 3x1 + 0 + 2x3 = 9 h1=h1 x2 - x3 /3 = 5 h2=h2 -x3/9 = -1/3 h3=h3-2*h2/3 Vậy x3=3 x2=2 x1=1 Chương trình minh họa. Sau đây là đoạn chương trình chính thể hiện (mô tả) thuật toán khử Gauss. /*Giai he phuong trinh tuyen tinh dung khu Gauss, ma tran vuong n, cac phan tu cot thu n+1 la vecto b*/ /*Dua ma tran a ve dang tam giac tren Giai he phuong trinh tuyen tinh. Tra ve gia tri true neu co nghiem */ int khugauss(kmatran a,double *x,int n) { int i,j,k,h;double tmp,p;kmatran aa; int n1=n+1; for(i=1;i<=n;i++) for(j=1;j<=n1;j++) aa[i][j]=a[i][j]; for(i=1;i<=n;i++) //Vong lap cac buoc khu {//Tim hang co phan tu dau lon nhat h=i; for(k=i+1;k<=n;k++) if(fabs(a[k][i])>fabs(a[h][i]) {h=k;} if(a[h][i])==0) {cout<<"Ma tran suy bien";delay(1000);return false;} 20
  • 20. Chương 2: Các phương pháp số trong đại số tuyến tính if(h!=i) //Doi hang i va hang h vi a[h][i] > a[i][i] {int j;double tmp; for(j=i;j<=n1;j++) {tmp=a[i][j];a[i][j]=a[h][j];a[h][j]=tmp;} } //chuyen he so a[i][i] = 1 tmp=a[i][i]; for(j=i;j<=n1;j++) a[i][j] = a[i][j]/tmp; //Bat tinh lai cac hang for(k=i+1;k<=n;k++) {p=a[k][i]; /*Vi ta biet a[k][i] =0 sau bien doi, chi tinh tu a[k][i+1]*/ for(j=i+1;j<=n1;j++) a[k][j]=a[k][j] - p*a[i][j]; } } x[n]=a[n][n+1]; for(i=n-1;i>=1;i--) {double xx=0; for(j=i+1;j<=n;j++) xx=xx+a[i][j]*x[j]; x[i]=a[i][n+1]-xx;//b[i]-xx } //Dat cac gia tri phi duoi duong cheo chinh bang 0(phan nay khong can) for(i=2;i<=n;i++) for(j=1;j<i;j++) a[i][j]=0; //Thu lai kvecto bb; for(i=1;i<=n;i++) {bb[i]=aa[i][1]*x[1]; for(j=2;j<=n;j++) bb[i]+=aa[i][j]*x[j]; } //Dua ket qua vao tep ketqua return true; } 21
  • 21. Chương 2: Các phương pháp số trong đại số tuyến tính b. Phương pháp khử Gauss-Jordan Phương pháp khử Gauss-Jordan dùng cách khử dần các ẩn để đưa hệ phương trình đã cho về một dạng ma trận đường chéo rồi giải hệ phương trình này, không phải tính một định thức nào Phương pháp này được thực hiện qua các bước sau: - Bước 1: Dùng phương trình đầu tiên để khử x1 trong n-1 phương trình còn lại, cách làm tương tự như phương pháp khử để tính định thức... (Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ nhất cho a11). Cụ thể để khử x1 ở hàng thứ k( k=2,3,…n) ta phải tính lại các hệ số akj ở hàng thứ k (j=1,2,..n+1) như sau: akj=akj-a1j*ak1/a11 ... - Bước i: Dùng phương trình i để khử xi trong các phương trình thứ 1,2, i-1,i+1,i+2,...,n.. (Để cho công thức đơn giản , trước khi khử ta có thể chia phương trình thứ i cho aii) Cụ thể để khử xi ở hàng thứ k (k=1,2, i-1,i+1,i+2,...,n.) ta phải tính lại các hệ số akj ở hàng thứ k (j=i,..n+1) như sau: akj=akj-aij*aki/aii ... - Bước n: Dùng phương trình thứ n để khử xn trong phương trình thứ 1,2, ..., n-1.. (Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ n cho ann) Cụ thể để khử xn ở hàng thứ k( k=1,2, ..,n-1.) ta phải tính lại các hệ số akj ở hàng thứ k (j=n,n+1) như sau: akj=akj-anj*akn/ann Tương tự phép khử Gauss tại mỗi bước, trước khi khử ta phải chọn trụ tối đại. Cụ thể tại bước i ta luôn chọn hàng có phần tử ari có giá trị tuyệt đối lớn nhất rồi đổi cho hàng thứ i cho hàng thứ r. Hệ phương trình sau khi khử có dạng: a11 x1 = b1 a22 x2 = b2 . . . . . . . .. . ann xn = bn Hoặc (Nếu tại các bước (bước i) ta chia cho hệ số aii): x1 = b1 x2 = b2 . . . . . . . .. . xn = bn Tức là ta đã có các nghiệm mà không cần phải tính toán thêm. Cũng như trong phương pháp khử Gauss, khi cài đặt trên máy tính ta dùng một mảng a thay cho cả ma trận A và vec tơ b. Tức là 22
  • 22. Chương 2: Các phương pháp số trong đại số tuyến tính ⎡ a11 a12 ... a1n a1,( n +1) ⎤ ⎡ a11 a12 ... a1n b1 ⎤ ⎢a a 2,( n +1) ⎥ ⎢a 21 ⎢ 21 a 22 ... a 2 n ⎥ = ⎢ a 22 ... a 2 n b2 ⎥ ⎥ ⎢ . . ... . . ⎥ ⎢ . . ... . .⎥ ⎢ ⎥ ⎢ ⎥ ⎢a n1 ⎣ an2 ... a nn a n ,( n +1) ⎥ ⎣a n1 ⎦ an2 ... a nn bn ⎦ Ta áp dụng các phép biến đổi sơ cấp như vừa trình bày để biến đổi ma trận chữ nhật cấp n x (n+1) trên đây về dạng ⎡1 0 ... 0 a '1,( n +1) ⎤ ⎢0 1 ... 0 a ' ⎥ ⎢ 2 , ( n +1) ⎥ ⎢ . . ... . . ⎥ ⎢ ⎥ ⎢0 0 ... 1 a ' n ,( n +1) ⎥ ⎣ ⎦ Vậy ta có xi = a'i,(n+1) Ví dụ:Giải hệ phương trình sau bằng phương pháp khử Gauss-Jordan: 2x1 + 3x2 +x3 = 11 -x1 + 2x2 -x3 = 0 3x1 + 2x3 =9 Bước1: Hệ phương trình trên tương đương với: 3x1 + 2x3=9 h1=h3 -x1 + 2x2 -x3 = 0 h2=h2 2x1 + 3x2 +x3 = 11 h3=h1 Bước 1: 3x1 + 0 +2x3 =9 h1=h1 2x2 -x3/3 =3 h2=h2+h1/3 3x2 -x3//3 = 5 h3=h3-2*h1/3 Bước 2: 3x1 + 0 +2x3 =9 h1=h1 3x2 - x3/3 =5 h2=h3 2x2 - x3/3 =3 h3=h2 23
  • 23. Chương 2: Các phương pháp số trong đại số tuyến tính 3x1 + 0 + 2x3 = 9 h1=h1 3x2 - x3/3 = 5 h2=h2 -x3/9 = -1/3 h3=h3-2*h2/3 Bước 3: 3x1 + 0 +0 =3 h1=h1-2*h3/(-1/9) 3x2 -0 =6 h2=h2-(1/3)*h3/(-1/9) -x3/9 =-1/3 h3=h3/(-1/9) Vậy x1=1 x2=2 x3=3 Chương trình minh họa. Sau đây là đoạn chương trình chính thể hiện (mô tả) thuật toán khử Gauss-Jordan. int gjordan(kmatran a,double *x,int n) {int i,j,k,h;double tmp,p;kmatran aa; int n1=n+1; for(i=1;i<=n;i++) for(j=1;j<=n1;j++) aa[i][j]=a[i][j]; for(i=1;i<=n;i++) //Vong lap cac buoc khu {//Tim hang co phan tu dau lon nhat h=i; for(k=i+1;k<=n;k++) if(fabs(a[k][i])>fabs(a[h][i]) {h=k;} if(a[h][i]==0) {cout<<"Ma tran suy bien";delay(1000);return false;} if(h!=i) //Doi hang i va hang h vi a[h][i] > a[i][i] {int j;double tmp; for(j=i;j<=n1;j++) {tmp=a[i][j];a[i][j]=a[h][j];a[h][j]=tmp;} } //chuyen he so a[i][i] = 1 24
  • 24. Chương 2: Các phương pháp số trong đại số tuyến tính tmp=a[i][i]; for(j=i;j<=n1;j++) a[i][j] = a[i][j]/tmp; //Bat tinh lai cac hang for(k=1;k<=n;k++) {if(k==i) continue; p=a[k][i]; /*Vi ta biet a[k][i] =0 sau bien doi, chi tinh tu a[k][i+1]*/ for(j=i+1;j<=n1;j++) a[k][j]=a[k][j] - p*a[i][j]; } } for(i=1;i<=n;i++) x[i]=a[i][n+1]; /*Dat cac gia tri khong o tren duong cheo chinh bang 0 (phan nay khong can)*/ for(i=1;i<=n;i++) for(j=1;j<=n;j++) {if(i!=j) a[i][j]=0;} //Thu lai kvecto bb; for(i=1;i<=n;i++) {bb[i]=aa[i][1]*x[1]; for(j=2;j<=n;j++) bb[i]+=aa[i][j]*x[j]; } //Dua ket qua vao tep ketqua return true; 2.2.2. Áp dụng phương pháp khử Gauss-Jordan để tính ma trận nghịch đảo Để giải hệ n phương trình n ẩn Ax = b, trong phương pháp khử Gauss-Jordan ta đã dùng các phép biến đổi sơ cấp để đưa phương trình này về dạng Ex = b' Vì Ex = x, do đó ta có x=b'. Nếu B là một ma trận chữ nhật cấp n x k tùy ý, ta có thể áp dụng phương pháp khử Gauss-Jordan để giải đồng thời k hệ n phương trình n ẩn: AX = B (2.2) trong đó 25
  • 25. Chương 2: Các phương pháp số trong đại số tuyến tính ⎡ x11 x12 ... x1k ⎤ ⎢x x 22 ... x 2 k ⎥ ⎥ X= ⎢ 21 ⎢ . . ... . ⎥ ⎢ ⎥ ⎣ x n1 xn2 ... x nk ⎦ ⎡b11 b12 ... b1k ⎤ ⎢b b22 ... b2 k ⎥ ⎥ B= ⎢ 21 ⎢ . . ... . ⎥ ⎢ ⎥ ⎣bn1 bn 2 ... bnk ⎦ Ta viết ma trận B bên phải ma trận A như sau: ⎡ a11 a12 ... a1n b11 b12 ... b1k ⎤ ⎢a ⎢ 21 a 21 ... a 2 n b21 b22 ... b2 k ⎥ ⎥ ⎢ . . ... . . . ... . ⎥ ⎢ ⎥ ⎣a n1 an2 ... a nn bn1 bn 2 ... bnk ⎦ Nếu ma trận A không suy biến, ta có thể áp dụng các phép biến đổi sơ cấp để đưa ma trận này về dạng: ⎡1 0 ... 0 b'11 b'12 ... b'1k ⎤ ⎢0 1 ... 0 b' ⎢ 21 b' 22 ... b' 2 k ⎥ ⎥ ⎢ . . ... . . . ... . ⎥ ⎢ ⎥ ⎣0 0 ... 1 b' n1 b' n 2 ... b' nk ⎦ Khi đó ta có ⎡ x11 x12 ... x1k ⎤ ⎡b'11 b'12 ... b'1k ⎤ ⎢x x 22 ... x 2 k ⎥ ⎢b' 21 ⎥ = ⎢ b' 22 ... b' 2 k ⎥ ⎥; X= ⎢ 21 ⎢ . . ... . ⎥ ⎢ . . ... . ⎥ ⎢ ⎥ ⎢ ⎥ ⎣ x n1 xn2 ... x nk ⎦ ⎣b' n1 b' n 2 ... b' nk ⎦ ⎡b'11 b'12 ... b'1k ⎤ ⎢b' b' 22 ... b' 2 k ⎥ ⎥ Đặt B’ = ⎢ 21 ⎢ . . ... . ⎥ ⎢ ⎥ ⎣b' n1 b' n 2 ... b' nk ⎦ Xét trường hợp đặc biệt B = E, ta có ma trận B' chính là ma trận nghịch đảo của ma trận A. Thật vậy, nếu X là nghiệm của (2.2) thì X = A-1B Nếu B = E thì X = A-1. Do đó việc tìm ma trận nghịch đảo của ma trận A tương đương với việc giải phương trình AX = E 26
  • 26. Chương 2: Các phương pháp số trong đại số tuyến tính Ta có thể tóm tắt các bước cần thực hiện để tính ma trận đảo như sau: • Viết thêm ma trận đơn vị E bên cạnh ma trận A ⎡ a11 a12 ... a1n 1 0 ... 0⎤ ⎢a ⎢ 21 a 21 ... a 2 n 0 1 ... 0⎥⎥ (2.3) ⎢ . . ... . . . ... . ⎥ ⎢ ⎥ ⎣a n1 an2 ... a nn 0 0 ... 1⎦ • Áp dụng phép biến đổi sơ cấp lên các hàng của ma trận (2.3) cho đến khi ma trận có dạng ⎡1 0 ... 0 c11 c12 ... c1n ⎤ ⎢0 1 ... 0 c ⎢ 21 c 22 ... c 2 n ⎥ ⎥ ⎢ . . ... . . . ... . ⎥ ⎢ ⎥ ⎣0 0 ... 1 c n1 cn 2 ... c nn ⎦ Khi đó ta có ⎡ c11 c12 ... c1n ⎤ ⎢c c 22 ... c 2 n ⎥ ⎥ A = ⎢ -1 21 ⎢ . . ... . ⎥ ⎢ ⎥ ⎣c n1 cn2 ... c nn ⎦ Chú ý. Trong quá trình biến đổi ta có thể đổi các hàng của ma trận. Điều này không ảnh hưởng đến kết quả thu được: Ma trận C vẫn là ma trận nghịch đảo của ma trận A ban đầu. Lý do là vì để tìm ma trận nghịch đảo ta chỉ cần xác định ma trận nghiệm. Ma trận nghiệm không bị thay đổi nếu ta đổi chỗ các hàng. Chương trình minh họa. Sau đây là đoạn chương trình chính thể hiện ( mô tả) thuật toán tìm ma trận nghịch đảo int daomtran(kmatran a,kmatran &ad,int n) {int i,j,k,h;double tmp,p; int n2=n*2; kmatran aa; for(i=1;i<=n;i++) for(j=1;j<=n;j++) aa[i][j]=a[i][j]; //Them phan sau cua ma tran a de co dang ma tran don vi for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][n+j]=0;//Cho phan ma tran vuong phia sau bang 0 for(i=1;i<=n;i++) a[i][n+i]=1; //Duong cheo chinh phan phia sau bang 1 //Vong lap cac buoc khu for(i=1;i<=n;i++) {//Tim hang co phan tu dau lon nhat h=i; 27
  • 27. Chương 2: Các phương pháp số trong đại số tuyến tính for(k=i+1;k<=n;k++) if(fabs(a[k][i])> fabs(a[h][i])) h=k; if(a[h][i])==0) {cout<<"Ma tran suy bien";delay(1000);return false;} if(h!=i) //Doi hang i va hang h vi a[h][i] > a[i][i] {int j;double tmp; for(j=i;j<=n2;j++) {tmp=a[i][j];a[i][j]=a[h][j];a[h][j]=tmp;} } //chuyen he so a[i][i] = 1 tmp=a[i][i]; for(j=i;j<=n2;j++) a[i][j] = a[i][j]/tmp; //Bat tinh lai cac hang for(k=1;k<=n;k++) {if(k==i) continue; p=a[k][i]; /*Vi ta biet a[k][i] =0 sau bien doi, chi tinh tu a[k][i+1]*/ for(j=i+1;j<=n2;j++) a[k][j]=a[k][j] - p*a[i][j]; } } /*Dat cac gia tri khong o tren duong cheo chinh bang 0 (phan nay khong can)*/ for(i=1;i<=n;i++) for(j=1;j<=n;j++) {if(i!=j) a[i][j]=0;} //Ma tran dao la phan phia sau cua mang a for(i=1;i<=n;i++) for(j=1;j<=n;j++) ad[i][j]=a[i][n+j]; //Thu lai A x AD = C kmatran c; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {c[i][j]=aa[i][1]*ad[1][j]; for(k=2;k<=n;k++) c[i][j]+=aa[i][k]*ad[k][j]; } return true; } 28
  • 28. Chương 2: Các phương pháp số trong đại số tuyến tính 2.2.3. Sự không ổn định của hệ phương trình đại số tuyến tính a. Chuẩn của ma trận và vec tơ Chuẩn của ma trận chữ nhật cấp m x n A = ( aij ) là một số thực không âm được ký hiệu là ||A|| thỏa mãn các điều kiện sau (1) ||A|| ≥ 0 (với ||A|| =0 ⇔ A = 0) (2) || α A|| = |α| ||A||, α là số thực bất kỳ. (3) ||A + B|| ≤ ||A|| + ||B|| (4) ||A.B|| = ||A||.||B|| Người ta thường dùng ba chuẩn sau: m Chuẩn cột: ||A||1 = max ∑ | aij | j i=1 m n Chuẩn Ơclit: ||A||2 = ( ∑ ∑ aij 2)1/2 i=1 j=1 n Chuẩn hàng: ||A||∞ = max i ∑ | aij | j=1 Ví dụ. Cho ⎡5 − 2 1 ⎤ A = ⎢1 4 3 ⎥ ⎢ ⎥ ⎢2 − 1 7 ⎥ ⎣ ⎦ Ta tính được các chuẩn của A theo định nghĩa trên như sau: ||A||1 = max(5+1+2, 2+4+1, 1+3+7) = max(8, 7, 11) = 11 ||A||2 = (52 + 22+ 1+ 1+ 42+ 32+ 22+ 1+ 72)1/2 = 1101/2 = 10.5 ||A||∞ = max(5+2+1, 1+4+3, 2+1+7) = max (8, 8, 10) = 10 Vec tơ là ma trận chỉ có một cột, do đó đối với vec tơ ⎛ x1 ⎞ ⎜ ⎟ ⎜ x2 ⎟ x= ⎜ ⎟ . ⎜ ⎟ ⎜x ⎟ ⎝ n⎠ ta có 3 chuẩn sau n ||x||1 = ∑ | xi | i=1 n ||x||2 = ( ∑ xi 2)1/2 i=1 ||x||∞ = max | xi | i 29
  • 29. Chương 2: Các phương pháp số trong đại số tuyến tính Ví dụ. Cho ⎛ 2 ⎞ ⎜ ⎟ ⎜ − 3⎟ x= ⎜ 4 ⎟ ⎜ ⎟ ⎜ 1 ⎟ ⎜ 4 ⎟ ⎝ ⎠ Ta có ||x||1 = 2 +3 +4 +1 +4 = 14 ||x||2 = (2 2+ 3 2+ 4 2+ 1 +4 2)1/2 = 46 ||x||∞ = max(2,3,4,1,4) = 4 Trong các phần tiếp theo chúng ta sẽ ký hiệu đơn giản là ||A|| hoặc ||x|| để chỉ chuẩn của ma trận và vec tơ. Nếu không có gì giải thích thêm thì cách ký hiệu này được hiểu là một trong ba chuẩn trên đây. b. Sự không ổn định của hệ phương trình đại số tuyến tính Trên đây ta đã tìm hiểu các phương pháp giải hệ phương trình đại số tuyến tính một cách trực tiếp. Nếu như mọi tính toán của ta là chính xác thì các phương pháp trên cho kết quả hoàn toàn chính xác. Tuy nhiên trong thực tế khi tính toán ta phải thường xuyên làm tròn các số, nghĩa là ta thường chỉ tính toán trên các số gần đúng mà thôi. Liệu cách làm tròn trong tính toán có làm ảnh hưởng nhiều đến kết quả cuối cùng không? Ví dụ sau đây cho thấy rằng có những hệ phương trình đại số tuyến tính rất "nhạy cảm" với sai số, nghĩa là sai số nhỏ khi tính toán có thể ảnh hưởng nghiêm trọng đến kết quả cuối cùng. Nói một cách hình tượng thì ta gặp tình huống "sai một li đi một dặm". Những hệ thống phương trình kiểu này được gọi là hệ phương trình không ổn định. Ví dụ . Ta xét hệ phương trình sau: 2x1 + x2 = 2 2x1 + 1.01x2 = 2.01 Hệ này có nghiệm x1 =0.5, x2 = 1. Tuy nhiên hệ phương trình sau đây nhận được với chút ít thay đổi hệ số trong hệ trên 2x1 + x2 = 2 2.01x1 + 1x2 = 2.05 lại có nghiệm x1 =5, x2 = -8, khác xa so với nghiệm trên đây. 2.2.4. Phương pháp lặp giải hệ phương trình tuyến tính Các phương pháp trực tiếp giải hệ phương trình tuyến tính nói chung cần khoảng cn3 phép tính, trong đó c là một hằng số và người ta ước lượng c ≈ 2/3. Phương pháp khử Gauss như chúng ta vừa tìm hiểu chẳng hạn, là một phương pháp đúng, nghĩa là nếu các phép tính sơ cấp được thực hiện đúng hoàn toàn thì cuối cùng ta được nghiệm đúng của hệ. Tuy nhiên trong thực tế ta phải luôn luôn làm tròn khi thực hiện các phép tính, và như ta đã thấy ở trên, sai số tổng hợp đôi khi có thể sẽ khá lớn. Và chúng ta gặp một nghịch lý: về lý thuyết phương pháp cho kết quả chính xác 30
  • 30. Chương 2: Các phương pháp số trong đại số tuyến tính 100%, nhưng khi thực hiện để áp dụng thực tế thì đôi khi kết quả lại khác xa so với kết quả lý thuyết. Vì những lý do trên đây, người ta đã tìm kiếm những phương pháp gần đúng để giải các bài toán, tức là ngay từ đầu người ta chấp nhận kết quả xấp xỉ, hay sự xấp xỉ đã nằm ngay trong mô hình. Khi thực hiện tính toán cụ thể chúng ta lại gặp sai số một lần nữa. Như vậy trong các phương pháp gần đúng thì sai số sẽ là tổng hợp của sai số mô hình và sai số tính toán. Một điều đáng ngạc nhiên là trong nhiều trường hợp phương pháp gần đúng lại cho kết quả tốt hơn phương pháp đúng. Thực ra điều này cũng không có gì khó hiểu, vì trong thực tế chúng ta cũng rất hay gặp những trường hợp một lần sai còn nặng nề trầm trọng hơn 2 lần hay thậm chí một số lần sai cộng lại. a. Các bước chung trong phương pháp lặp Giả sử ta cần giải phương trình F(x) = 0, trong đó F(x) là một hàm trên không gian định chuẩn nào đó và 0 được hiểu là phần tử 0 của không gian này. Ví dụ nếu không gian định chuẩn là Rn thì 0 là vectơ (0,0,...,0)T. Ta biến đổi phương trình này về dạng tương đương x = G(x). Ta có thể phát biểu định lý sau: Định lý. Giả sử y = G(x) là một hàm liên tục trên không gian định chuẩn nào đó và phép lặp xn=G(xn-1) n=1,2,... hội tụ tới x* với xuất phát ban đầu x0. Khi đó x* là nghiệm của phương trình x = G(x), tức là ta có x* = G(x*). Chứng minh. Từ xn=G(xn-1), với lưu ý là hàm G(x) liên tục, ta có lim xn = lim G(xn-1) = G( lim xn-1) ⇒ x* = G(x*) n − > +∞ n − > +∞ n − > +∞ b. Phương pháp lặp đơn Trở lại bài toán giải hệ phương trình tuyến tính Ax =b (2.4) Ta đưa (2.4) về dạng x = Cx + d (2.5) Trong đó ma trận C và vec tơ d được xây dựng từ A và b. Để thực hiện phép lặp ta chọn một vec tơ ban đầu x(0), sau đó tính các x(i), i =1,2,... theo công thức lặp sau: x(1) = Cx(0) + d x(2) = Cx(1) + d ... (2.6) (k) (k-1) x = Cx +d ... Véc tơ x(k) được gọi là vec tơ lặp thứ k. Ta có định lý sau: Định lý. (Sự hội tụ của phương pháp) a. Nếu phép lặp (2.6) hội tụ, tức là tồn tại x* sao cho x* = lim x(k) k − > +∞ thì khi đó x* là nghiệm của (2.5) (và như vậy cũng là nghiệm của (2.4)) 31
  • 31. Chương 2: Các phương pháp số trong đại số tuyến tính b. Nếu ||C|| < 1 với một chuẩn nào đó, thì (2.6) hội tụ và sai số giữa nghiệm gần đúng x(k) (nghiệm gần đúng tại bước lặp thứ k) và nghiệm đúng x* có thể đánh giá bằng các công thức sau: || C || ||x(k) - x*|| ≤ ||x(k) - x(k-1)|| (2.7) 1− || C || hoặc || C || k ||x(k) - x*|| ≤ ||x(1) - x(0)|| (2.8) 1− || C || Nói chung theo phương pháp lặp đơn, điều kiện để phép lặp được hội tụ thì ||C|| < 1. Tuy nhiên trong thực tế thì ta chỉ có ma trận A. Một câu hỏi đặt ra là ma trận A phải thỏa mãn điều kiện gì để ta có thể đưa (2.4) về dạng (2.5) và áp dụng phương pháp lặp đơn? Để phương pháp lặp hội tụ thì thường ma trận A phải thỏa mãn tính chéo trội của ma trận vuông. Định nghĩa: (Tính chéo trội của một ma trận vuông): Ma trận A với các thành phần aij được gọi là có tính chéo trội, nếu giá trị tuyệt đối của các phần tử nằm trên đường chéo chính lớn hơn tổng các giá trị tuyệt đối của các phần còn lại nằm cùng hàng, tức là n | aii | > ∑ j −1, j ≠ i | aij |, i = 1, 2, . . ., n. (2.9) Sau đây sẽ giới thiệu 2 phương pháp lặp đơn Jacobi và Gaus-Seidel c. Phương pháp lặp Jacobi Với giả thiết ma trận A có tính chéo trội, khi đó các hệ số aii ≠ 0, i = 1,2,...,n do đó ta có thể chia phương trình thứ i của hệ (2.1) cho aii và nhận được hệ tương tương a12 a a b x1 + x2 + 13 x3 +. . . + 1n xn = 1 a11 a11 a11 a11 a 21 a a b x1 + x2 + 23 x3+. . . + 2 n xn = 2 a 22 a 22 a 22 a 22 ... ai1 a a i ,i −1 a i ,i +1 a b x1 + i 2 x2 +...+ xi-1+ xi + xi+1. . . + in xn = i aii a ii a ii aii a ii a ii ... a n1 a a n, n −1 b x1 + n 2 x2 +...+ xn-1+ xn = n a nn a nn a nn a nn Từ đây ta có a12 a a b x1 = - (0.x1 + x2 + 13 x3 +. . . + 1n xn ) + 1 a11 a11 a11 a11 a 21 a a b x2 = - ( x1 + 0.x2 + 23 x3+. . . + 2 n xn ) + 2 a 22 a 22 a 22 a 22 ... 32
  • 32. Chương 2: Các phương pháp số trong đại số tuyến tính ai1 a a i ,i −1 a i ,i +1 a b xi = - ( x1 + i 2 x2 +...+ xi-1+ 0.xi + xi+1. . . + in xn ) + i aii a ii a ii aii a ii a ii ... a n1 a a n ,n −1 b xn = - ( x1 + n 2 x2 +...+ xn-1+ 0.xn ) + n a nn a nn a nn a nn Khi đó ma trận C, vectơ d là: ⎡ a12 a1n ⎤ ⎛ b1 ⎞ ⎢ 0 ... ⎜ ⎟ a11 a11 ⎥ ⎜ a11 ⎟ ⎢ ⎥ ⎢ a 21 a 2n ⎥ ⎜ b2 ⎟ 0 ... ⎜a ⎟ C = - ⎢a a 22 ⎥ , d = ⎢ . 22 ⎜ 22 ⎟ . ... . ⎥ ⎜ . ⎟ ⎢a ⎥ ⎢ n1 an2 ... 0 ⎥ ⎜ bn ⎟ ⎢ a nn a nn ⎥ ⎜a ⎟ ⎣ ⎦ ⎝ nn ⎠ (Đến đây ta đã đưa hệ (2.4) về dạng (2.5) và dễ thấy rằng ma trận C thỏa mãn điều kiện lặp đơn, tức là ||C||∞ < 1.). Vậy đến đây ta tiếp tục áp dụng phương pháp lặp (2.6) để tính nghiệm ở các bước lặp như sau: Với vec tơ x(0) cho trước bất kỳ, ví dụ x(0) = θ (vec tơ 0) ta có thể tính các vec tơ x(k) tại bước lặp k bằng công thức x(k) = C x(k-1) + d , k =1, 2, ... Cụ thể hơn, nếu x(k) = (x1(k), x2(k), . . ., xn(k)) thì ta có ⎡ a12 a1n ⎤ ⎛ b1 ⎞ ⎢ 0 ... ⎥ ( k −1) ⎜ ⎟ ⎛ x1( k ) ⎞ ⎢ a11 a11 ⎛ x1 ⎞ ⎜ a11 ⎟ ⎥ ⎜ (k ) ⎟ a 2 n ⎥ ⎜ x ( k −1) ⎟ ⎜ b2 ⎟ ⎜ x2 ⎟ ⎢ a 21 0 ... ⎜ 2 ⎟ ⎜ ⎜ . ⎟ = - ⎢a a 22 ⎥ ⎜ + a ⎟ ⎢ . 22 . ⎟ ⎜ 22 ⎟ ⎜ ⎟ . ... . ⎥ ⎜ ( k −1) ⎟ ⎜ . ⎟ ⎜ x (k ) ⎟ ⎢a an2 ⎥ ⎜x ⎟ b ⎝ n ⎠ ⎢ n1 ... 0 ⎥⎝ n ⎠ ⎜ n ⎟ ⎢ a nn a nn ⎥ ⎜a ⎟ ⎣ ⎦ ⎝ nn ⎠ Với từng thành phần xi(k) ta có n a ij bi 1 n xi(k) = - ∑ j −1, j ≠ i a ii xj(k-1) + a ii = a ii (bi - ∑ aij xj(k-1)) j −1, j ≠ i (2.10) i = 1, 2, . . ., n, k = 1,2,... Điều kiện hội tụ, đánh gái sai số của phương pháp lặp Jacobi cũng giống với phương pháp lặp đơn. Ví dụ. Dùng phương pháp lặp Jacobi tìm nghiệm gần đúng của hệ phương trình: 4x1 + 0.24x2 - 0.08x3 = 8 0.09x1 + 3x2 - 0.15x3 = 9 0.04x1 - 0.08x2 + 4x3 = 20 33
  • 33. Chương 2: Các phương pháp số trong đại số tuyến tính Giải. (1).Có thể thấy rằng ma trận các hệ số của hệ phương trình trên đây thỏa mãn tính chéo trội, do đó ta có thể biến đổi hệ này để áp dụng phương pháp lặp Jacobi. Chia hai vế phương trình đầu tiên cho 4, hai vế phương trình thứ hai cho 3 và hai vế của phương trình thứ ba cho 4 rồi biến đổi thích hợp ta nhận được: x1 = 2 - 0.06x2 +0.02x3 x2 = 3 - 0.03x1 + 0.05x3 x3 = 5 - 0.01x1 + 0.02x2 hay ⎛ x1 ⎞ ⎡ 0 − 0.06 0.02⎤ ⎛ x1 ⎞ ⎛ 2 ⎞ ⎜ ⎟ ⎢ ⎜ ⎟ ⎜ ⎟ ⎜ x 2 ⎟ = ⎢− 0.03 0 0.05⎥ ⎜ x 2 ⎟ + ⎜ 3 ⎟ = Cx + d ⎥ ⎜ x ⎟ ⎢ − 0.01 0.02 0 ⎥ ⎜ x3 ⎟ ⎜ 5 ⎟ ⎝ 3⎠ ⎣ ⎦⎝ ⎠ ⎝ ⎠ ||C||∞ = max(0 + 0.06 + 0.02, 0.03 + 0 + 0.05, 0.01 + 0.02 + 0) = = max(0.08,0.08,0.03) = 0.08 <1 (2) Chọn x(0) = (2,3,5)T, rồi tính x(1), x(2),... theo công thức (2.10) với lưu ý aii =1 ta được bảng kết quả sau: k x1(k) x2(k) x3(k) 0 2 3 5 1 1.92 3.19 5.04 2 1.9094 3.1944 5.0446 3 1.909228 3.194948 5.044794 (3) Xem x(3) là nghiệm gần đúng cần tìm, ta có thể đánh giá sai x(3) với nghiệm đúng x* || C || theo (2.10) như sau: ||x(3) - x*|| ≤ ||x(3) - x(2)|| 1− || C || ||x(3) - x(2)||∞ = max |xi(3) - xi(2)| = max(0.000172, 0.000548, 0.000194) = 0.000548 i Như vậy 0.08 ||x(3) - x*||∞ ≤ 0.000548 = 0.0000476 ≈ 0.00005 1 − 0.08 d. Phương pháp lặp Gauss - Seidel Với giả thiết ma trận A có tính chéo trội. Từ công thức (2.10) ta thấy rằng phần tử thứ i của vec tơ nghiệm tại bước k được tính qua các phần tử ở các vị trí khác i trong bước k-1. Phương pháp Gauss-Seidel cải tiến phương pháp Jacobi bằng cách dùng ngay những kết quả vừa tính được cho các thành phần của nghiệm tại bước k để tính các thành phần khác của bước k, chỉ có những thành phần nào chưa được tính thì mới lấy ở bước k-1. Cụ thể hơn ta có tại các bước: (1) Giá trị x1(1) được tính qua các giá trị x2(0), x3(0), ... xn(0) 34
  • 34. Chương 2: Các phương pháp số trong đại số tuyến tính Giá trị x2(1) được tính qua các giá trị x1(1), x3(0), ... xn(0) Giá trị x3(1) được tính qua các giá trị x1(1), x2(1),x4(0), ... xn(0) ... (h) Giá trị x1(h) được tính qua các giá trị x2(h-1), x3(h-1), ... xn(h-1) Giá trị x2(h) được tính qua các giá trị x1(h), x3(h-1), ... xn(h-1) Giá trị x3(h) được tính qua các giá trị x1(h), x2(h),x4(h-1), ... xn(h-1) ... Với vec tơ x(0) cho trước bất kỳ, ví dụ x(0) = θ (vec tơ 0) ta có thể tính các vec tơ x(k) tại bước lặp k bằng công thức i−1 1 n xi(k) = (bi -( ∑ aijxj(k) + ∑aijxj(k-1))) (2.11) a ii j −1 j−+ i1 i = 1, 2, . . ., n, k = 1,2,... Trong công thức (2.11) chúng ta có thể không dùng chỉ số trên để chỉ ra rằng chúng ta chỉ dùng một mảng là vec tơ có n thành phần để lưu trữ nghiệm. Giá trị nào vừa được tính toán thì được lưu trữ ngay vào vị trí cũ và được dùng ngay trong công thức tính các giá trị khác. n 1 xi = (bi - ∑ aij xj) a ii j −1, j ≠ i i = 1, 2, . . ., n, k = 1,2,... Sự hội tụ của phương pháp Gause-Seidel Điều kiện hội tụ của phương pháp lặp Gause- Seidel cũng giống với phương pháp lặp đơn. Như ta sẽ thấy trong ví dụ trong phần sau, phương pháp Gause- Seidel nói chung hội tụ nhanh hơn phương pháp lặp đơn. Ta có thể sử dụng các công thức sau để đánh giá sai số của phương pháp lặp Gause-Seidel: Gọi x* là nghiệm đúng của hệ phương trình và gọi i−1 n qi pi = ∑ |cij|, qi = ∑ |cij| j=1 j=i , μ = max i 1 − pi Khi đó ta có μ ||x(k) - x*|| ≤ ||x(k) - x(k-1)|| (2.12) 1− μ hoặc μk ||x(k) - x*|| ≤ ||x(1) - x(0)|| (2.13) 1− μ Ví dụ. Dùng phương pháp lặp Gause-Seidel tìm nghiệm gần đúng của hệ phương trình: 4x1 + 0.24x2 - 0.08x3 = 8 0.09x1 + 3x2 - 0.15x3 = 9 0.04x1 - 0.08x2 + 4x3 = 20 35
  • 35. Chương 2: Các phương pháp số trong đại số tuyến tính Giải. (1).Có thể thấy rằng ma trận các hệ số của hệ phương trình trên đây thỏa mãn tính chéo trội, do đó ta có thể biến đổi hệ này để áp dụng phương pháp lặp Jacobi. Chia hai vế phương trình đầu tiên cho 4, hai vế phương trình thứ hai cho 3 và hai vế của phương trình thứ ba cho 4 rồi biến đổi thích hợp ta nhận được: x1 = 2 - 0.06x2 +0.02x3 x2 = 3 - 0.03x1 + 0.05x3 x3 = 5 - 0.01x1 + 0.02x2 hay ⎛ x1 ⎞ ⎡ 0 − 0.06 0.02⎤ ⎛ x1 ⎞ ⎛ 2 ⎞ ⎜ ⎟ ⎢ ⎜ ⎟ ⎜ ⎟ ⎜ x 2 ⎟ = ⎢− 0.03 0 0.05⎥ ⎜ x 2 ⎟ + ⎜ 3 ⎟ = Cx + d ⎥ ⎜ x ⎟ ⎢ − 0.01 0.02 0 ⎥ ⎜ x3 ⎟ ⎜ 5 ⎟ ⎝ 3⎠ ⎣ ⎦⎝ ⎠ ⎝ ⎠ ||C||∞ = max(0 + 0.06 + 0.02, 0.03 + 0 + 0.05, 0.01 + 0.02 + 0) = = max(0.08,0.08,0.03) = 0.08 <1 (2) Chọn x(0) = (2,3,5)T, rồi tính x(1), x(2),... theo công thức (2.11) với lưu ý aii =1 ta được bảng kết quả sau: k x1(k) x2(k) x3(k) 0 2 3 5 1 1.92 3.1924 5.044648 2 1.9093489 3.194952 5.0448056 3 1.909199 3.1949643 5.0448073 Xem x(3) là nghiệm gần đúng cần tìm, ta có thể đánh giá sai số phạm phải của x(3) μ theo(2.12): ||x(k) - x*|| ≤ ||x(k) - x(k-1)|| 1− μ Trong đó: ||x(3) - x(2)||∞ = max |xi(3) - xi(2)| = max(0.0001499,0.000123,0.0000017) = i 0.0001499 qi μ = max = max(0.08,0.0515463,0) = 0.08 i 1 − pi Như vậy μ 0.08 ||x(3) - x*||∞ ≤ ||x(k) - x(k-1)|| ≤ 0.00001499 ≈ 0.000013 1− μ 1 − 0.08 Thuật toán Jacobi cũng tương tự như thuật toán Gauss-Seidel, nhưng thuật toán Gauss - Seidel có tốc độ hội tụ nhanh hơn. 36
  • 36. Chương 2: Các phương pháp số trong đại số tuyến tính Chương trình minh họa. Sau đây là đoạn chương trình chính thể hiện (mô tả) thuật toán lặp Gauss - Seidel /*Giai he phuong trinh tuyen tinh dung lap Gauss-Seidel, ma tran vuong n, cac phan tu cot thu n+1 la vecto b*/ //=============================================== double kcach(double *x,double *y,int n) {double tmp=0; for(int i=1;i<=n;i++) tmp=tmp+fabs(x[i]-y[i]); return tmp; } //=============================================== int cheotroi(kmatran a, int n) {double tmp;int i,j; for(i=1;i<=n;i++) {tmp=0; for(j=1;j<=n;j++) {if(j!=i) tmp=tmp+fabs(a[i][j]);} if(fabs(a[i][i])<=tmp) return false; } return true; } //=============================================== /*Giai he phuong trinh tuyen tinh bang phep lap Gauss-Seidel. Tra ve true neu co nghiem */ int gseidel(kmatran aa,double *x,int n) {int h,i,j,k;double tmp;kvecto z;kmatran a; int n1=n+1; for(i=1;i<=n;i++) for(j=1;j<=n1;j++) a[i][j]=aa[i][j]; if(!cheotroi(a,n)) {cout<<endl<<"Khong phai cheo troi";delay(1000);return false;} for(i=1;i<=n;i++) //chuyen ve dang he so a[i][i] == 1 {tmp=a[i][i]; for(j=1;j<=n1;j++) a[i][j] = a[i][j]/tmp; } //Vong lap cac buoc khu 37
  • 37. Chương 2: Các phương pháp số trong đại số tuyến tính for(i=1;i<=n;i++) {x[i]=0;z[i]=0;} k=1; while(true) {for(i=1;i<=n;i++) {tmp=0; for(j=1;j<=n;j++) if(j!=i) tmp+=a[i][j]*x[j]; x[i] = a[i][n+1]-tmp; } k++; if(kcach(x,z,n)<epsi) break; if(k>kmax) {cout<<endl<<"Phep lap chua hoi tu";delay(1000);return(false);} //Gan z = x va chuan bi sang vong lap tinh x for(i=1;i<=n;i++) z[i]=x[i]; } //Thu lai kvecto bb; for(i=1;i<=n;i++) {bb[i]=aa[i][1]*x[1]; for(j=2;j<=n;j++) bb[i]+=aa[i][j]*x[j]; } //Dua ket qua vao tep ketqua return true; ) 2.3. BÀI TẬP Bài 1. Tính và kiểm tra bằng chương trình định thức của ma trận ⎡1 3 1 ⎤ A = ⎢2 4 6 ⎥ ⎢ ⎥ ⎢7 6 11⎥ ⎣ ⎦ Bài 2. Tìm và kiểm tra bằng chương trình nghịch đảo của ma trận ⎡2 3 1⎤ A = ⎢− 1 2 − 1⎥ ⎢ ⎥ ⎢3 0 2⎥ ⎣ ⎦ 38
  • 38. Chương 2: Các phương pháp số trong đại số tuyến tính Bài 3. Tìm nghiệm hệ phương trình 2x1 + 3x2 +x3 = 11 -x1 + 2x2 - x3 = 0 3x1 +2x3 = 9 Bằng phương pháp khử Gauss và Jordan. Kiểm tra bằng chương trình. Bài 4. Giải bằng các phương pháp khử Gauss, khử Gauss-Jordan, phương lặp Jacobi và lặp Gauss-Seidel (nếu thỏa mãn điều kiện) hệ phương trình sau: ⎡17 65 − 13 50 ⎤ ⎛ x1 ⎞ ⎛ 84 ⎞ ⎜ ⎟ ⎜ ⎟ ⎢12 16 37 ⎢ 28 ⎥ ⎥ ⎜ x 2 ⎟ ⎜ 25 ⎟ A= ⎜ x ⎟ = ⎜ 36 ⎟ ⎢56 23 11 − 19.⎥ ⎢ ⎥ ⎜ 3⎟ ⎜ ⎟ ⎜ x ⎟ ⎜ 18 ⎟ ⎣ 3 − 5 47 10 ⎦ ⎝ 4⎠ ⎝ ⎠ Kiểm tra trên máy tính và thông báo về khả năng giải được hay không các phương pháp trên. Bài 5. Giải bằng các phương pháp lặp hệ phương trình sau: 10x1 + 2x2 + x3 =9 2x1 + 20x2 - 2x3 = -44 -2x1 + 3x2 + 10x3 =22 39