TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
======***======
BÁO CÁO BTL THUỘC HỌC PHẦN:
TÍNH TỐN HIỆU NĂNG CAO
ĐÁNH GIÁ HIỆU NĂNG CAO GIẢI PHƯƠNG TRÌNH
TUYẾN TÍNH SỬ DỤNG MPI
Giảng viên hướng dẫn
: Ts Hà Mạnh Đào
Lớp
: 20231IT6069001
Khóa:
: K16
Nhóm thực hiện
: Nhóm 7
Thành Viên:
1. Ngơ Q Điệp – 2021602059
2. Nguyễn Mạnh Đức – 2021600454
3. Vũ Hoàng Dương – 2021600935
Hà Nội 2023
MỤC LỤC
CHƯƠNG I: MỞ ĐẦU...................................................................................4
1.1. Ý tưởng nghiên cứu.........................................................................4
1.2. Những kiến thức và kỹ năng cần có................................................4
1.3. Ý tưởng về sản phẩm.......................................................................4
1.4. Yêu cầu kết quả sản phẩm nghiên cứu............................................4
1.5. Công cụ được sử dụng để tạo sản phẩm..........................................4
CHƯƠNG II: KIẾN THỨC CƠ SỞ................................................................5
2.1. Giới thiệu về tính tốn song song.....................................................5
2.1.1. Tính tốn song song là gì?.....................................................5
2.1.2. Tài ngun............................................................................5
2.1.3. Các vấn đề tính tốn..............................................................6
2.1.4. Các giới hạn của tính tốn tuần tự.........................................6
2.1.5. Các kiến trúc bộ nhớ..............................................................7
2.1.6. Các mơ hình lập trình song song...........................................7
2.2. Tổng quan về lập trình song song với MPI......................................7
2.2.1. Giới thiệu...............................................................................7
2.2.2. Một số đặc điểm của MPI......................................................8
2.2.3. Mục tiêu thiết kế của MPI bao gồm:.....................................9
2.2.4. Năng lực tính tốn...............................................................11
2.2.5. Mơ hình lập trình.................................................................13
2.2.6. Lập trình MPI......................................................................13
2.2.7. Giao tiếp Point to Point.......................................................15
2.2.8. Tham số trong các hàm.......................................................15
CHƯƠNG III: GIẢI QÚT BÀI TỐN....................................................16
3.1. Phát biểu bài tốn...........................................................................16
2
3.2. Giới thiệu các phương pháp giải phương trình tuyến tính song song
...............................................................................................................17
3.2.1. Phương pháp Gauss.............................................................17
3.2.2. Phương pháp lặp đơn...........................................................20
3.2.3. Phương pháp Gauss-Seidel..................................................21
3.3. Giải quyết bài toán bằng thuật toán tuần tự và song song..............24
3.3.1. Tìm hiểu về khái niệm của thuật toán tuần tự và song song24
3.3.2. Cài đặt chương trình............................................................24
3.3.3.1. Tḥt tốn tuần tự.................................................................24
3.3.3.2. Tḥt tốn song song............................................................26
CHƯƠNG IV: KẾT LUẬN..........................................................................29
3
CHƯƠNG I: MỞ ĐẦU
1.1.
Ý tưởng nghiên cứu
Hiện nay, yêu cầu về khả năng tính tốn trong ngành khoa học cơng
nghệ ngày càng gia tăng và điều này đã trở thành một thách thức do phương
pháp xử lý tuần tự với một bộ xử lý không đủ để đáp ứng. Việc đó đã tạo ra
nhu cầu cấp bách để phát triển các hệ thống máy tính mạnh, đặt ra một nhiệm
vụ then chốt trong lĩnh vực tính tốn hiệu năng cao (High Performance
Computing). Các vấn đề phức tạp, đòi hỏi sự tính tốn lớn ln tồn tại và
khơng ngừng tăng để giải quyết những thử thách trong lĩnh vực khoa học và
cơng nghệ. Nhận thức được sự quan trọng này, nhóm của chúng em đã quyết
định lựa chọn đề tài "Đánh giá hiệu năng cao giải phương trình tuyến tính
sử dụng MPI" với hy vọng nghiên cứu, khám phá, và phát triển một chương
trình sử dụng tính tốn song song để giúp xử lý vấn đề một cách nhanh chóng
và thuận tiện hơn.
1.2.
Những kiến thức và kỹ năng cần có
Kiến thức cơ bản về tính tốn hiệu năng cao
Kiến thức cơ bản về phương trình tuyến tính
Kiến thức về MPI
Kỹ năng làm việc nhóm
1.3.
Ý tưởng về sản phẩm
Sản phẩm được tạo ra qua những nghiên cứu, phát triển và cài đặt, sử
dụng chương trình để giải phương trình tuyến tính sử dụng MPI.
1.4.
u cầu kết quả sản phẩm nghiên cứu
Giảm thiểu tối đa thời gian xử lý bài tốn
Thành cơng sử dụng chương trình để giải quyết bài tốn
1.5.
Cơng cụ được sử dụng để tạo sản phẩm
Visual Studio 2022 (Community)
4
CHƯƠNG II: KIẾN THỨC CƠ SỞ
2.1. Giới thiệu về tính tốn song song
2.1.1. Tính tốn song song là gì?
➢ Ý nghĩa đơn giản nhất của tính tốn song song trong lĩnh vực khoa học
máy tính là việc sử dụng đồng thời nhiều tài ngun máy tính để giải
quyết bài tốn về tính tốn.
● Để chạy trên nhiều CPU
● Một bài tốn được chia thành các phần riêng biệt mà có thể được
giải quyết đồng thời.
● Mỗi phần được chia nhỏ hơn dưới một dãy các câu lệnh
● Các câu lệnh của mỗi phần thực thi đồng thời trên các CPU khác
nhau
➔ Tính tốn song song là một phương pháp trong lĩnh vực khoa học
máy tính và tính tốn, trong đó các tác vụ được thực hiện đồng thời
(song song) trên nhiều tài ngun tính tốn độc lập. Mục tiêu của
tính toán song song là tận dụng hiệu suất và tốc độ xử lý của hệ
thống máy tính bằng cách phân chia cơng việc thành các tác vụ nhỏ
hơn, sau đó thực hiện chúng đồng thời trên nhiều bộ xử lý độc lập.
5
2.1.2. Tài ngun
➢ Các nguồn tài ngun tính tốn có thể bao gồm:
● Một máy tính đơn với nhiều bộ vi xử lý (CPU);
● Một máy tính đơn với một hoặc nhiều CPU và một số tài nguyên
chuyên dụng như GPU, FPGA …;
● Một số lượng tùy ý các máy tính được kết nối bởi một mạng máy
tính;
● Hoặc kết hợp của các loại trên.
2.1.3. Các vấn đề tính tốn
➢ Vấn đề tính tốn thường được thể hiện qua các đặc điểm như khả năng:
● Chia thành các phần riêng biệt các cơng việc để có thể giải quyết
cùng một lúc;
● Thực thi nhiều câu lệnh chương trình tại nhiều thời điểm;
● Giải quyết bài tốn trong thời gian ít hơn với nhiều tài ngun
tính tốn hơn là thực thi chỉ trên một tài ngun tính tốn duy
nhất.
2.1.4. Các giới hạn của tính tốn tuần tự
➢ Các giới hạn để tính tốn tuần tự - Cả hai lý do giới hạn về vật lý và
thực tiễn đặt ra những hạn chế đáng kể để xây dựng được ứng dụng
chạy nhanh hơn trên máy tính tuần tự.
➢ Hiệu suất giới hạn: Trong tính tốn tuần tự, các tác vụ được thực hiện
tuần tự một cách lần lượt. Điều này có nghĩa là chỉ có thể sử dụng một
nguồn tài ngun tính toán duy nhất để thực hiện các tác vụ. Do đó,
hiệu suất của hệ thống bị giới hạn bởi khả năng xử lý của nguồn tài
nguyên duy nhất đó.
➢ Thời gian xử lý kéo dài: Khi các tác vụ phải chờ đợi cho đến khi tác vụ
trước đó hồn thành, thời gian xử lý tổng thể có thể kéo dài. Điều này
6
đặc biệt đáng kể khi các tác vụ có thời gian xử lý lâu hoặc phải chờ đợi
dữ liệu từ tác vụ trước để tiếp tục.
➢ Giới hạn để thu nhỏ - công nghệ bộ vi xử lý ngày càng cho phép tăng
số transistor được đặt trên các con chip. Tuy nhiên, thậm chí ngay cả
các transistor có kích thước là phân tử hoặc mức ngun tử thì số lượng
tích hợp trên thiết bị cũng sẽ đạt tới giới hạn.
➢ Khó khăn trong mở rộng: Khi cần mở rộng hệ thống tính tốn, tính tốn
tuần tự gặp khó khăn. Việc thêm các bộ xử lý mới không thể tạo ra lợi
ích song song trực tiếp cho các tác vụ tuần tự.
➢ Hạn chế về kinh tế - Giá thành sẽ càng đắt khi tạo ra một bộ đơn vi xử
lý (VXL) chạy nhanh. Sẽ kinh tế hơn nếu sử dụng một số lượng bộ vi
xử lý nhanh vừa phải nhưng có thể đạt được hiệu suất như bộ VXL đơn
chạy nhanh (hoặc tốt hơn).
2.1.5. Các kiến trúc bộ nhớ
➢ Bộ nhớ chia sẻ - Shared Memory:
Uniform Memory Access (UMA): Truy cập bộ nhớ đồng nhất
Not Uniform Memory Access (NUMA): Truy cập bộ nhớ không
đồng nhất
➢ Bộ nhớ phân tán - Distributed Memory
➢ Lai bộ nhớ chia sẻ và phân tán - Hybrid Distributed Shared Memory
2.1.6. Các mơ hình lập trình song song
➢ Mơ hình chia sẻ bộ nhớ
➢ Mơ hình luồng (Thread)
➢ Mơ hình gửi thơng điệp (MPI)
➢ Mơ hình song song dữ liệu
➢ Các mơ hình khác
7
2.2. Tổng quan về lập trình song song với MPI
2.2.1. Giới thiệu
Message Passing Interface – MPI là một chuẩn mới được sử dụng rộng
rãi nhất. Nó khơng phải là một ngơn ngữ lập trình mới, thay vào đó nó là một
thư viện của chương trình con mà có thể được gọi từ chương trình C và
Fortran 77.
MPI được phát triển bởi một diễn đàn mở quốc tế, bao gồm các đại
diện từ ngành cơng nghiệp, các học viện và phịng thí nghiệm của chính phủ.
Nó đã nhanh chóng được chấp nhận rộng rãi bởi được thiết kế cẩn thận cho
phép hiệu suất tối đa trên một loạt các hệ thống, và nó dựa trên truyền thơng
điệp, một trong những mơ hình mạnh mẽ nhất và được sử dụng rộng rãi cho
lập trình các hệ thống song song. Những nỗ lực cho MPI bắt đầu vào mùa hè
năm 1991, khi một nhóm nhỏ các nhà nghiên cứu bắt đầu thảo luận tại một
nơi hẻo lánh trên núi ở Úc. Nội dung đó lại được thảo luận tại hội thảo “tiêu
chuẩn cho truyền thông điệp trong một môi trường bộ nhớ phân tán”
(Standards for Message Passing in a Distributed Memory environment) tổ
chức vào ngày 29 – 30 tháng 4 năm 1992 tại Williamsburg, Virginia. Tại hội
thảo này, các tính năng cơ bản cần thiết cho một MPI chuẩn đã được thảo
luận, mà một nhóm cộng tác đã được thành lập để tiếp tục q trình tiêu
chuẩn hố. Jack Dongarra, Rolf Hempel Hempel, Tony Hey và David W.
Walker đưa ra một bản dự thảo sơ bộ được biết đến như MPI-1 trong tháng 11
năm 1992. Bản dự thảo chuẩn MPI đã được trình bày tại hội nghị Siêu máy
tính năm 93 trong tháng 11 năm 1993.
Sau một thời gian nhận những ý kiến đóng góp từ cộng đồng, một số
kết quả được thay đổi trong MPI, phiên bản 1.0 của MPI được phát hành vào
tháng 6 năm 1994. Thông qua những cuộc gặp gỡ và thư điện tử, các nhà
nghiên cứu đã thảo luận với nhau thành lập diễn đàn MPI, trong đó tất cả các
thành viên của cộng đồng điện toán hiệu suất cao đều có thể đăng ký làm
thành viên của diễn đàn.
8
MPI đã thu hút sự tham gia khoảng 80 người từ 40 tổ chức, chủ yếu là
ở Mỹ và Châu Âu. Hầu hết các nhà cung cấp chính của máy tính đều được
tham gia vào MPI cùng với các nhà nghiên cứu từ các trường đại học, phịng
thí nghiệm của chính phủ và ngành cơng nghiệp.
2.2.2. Một số đặc điểm của MPI
MPI là một giao thức truyền thông độc lập với ngơn ngữ dùng để lập
trình máy tính song song. MPI hỗ trợ cả giao tiếp điểm – điểm và giao tiếp tập
thể. Mục tiêu của MPI là hiệu suất, khả năng mở rộng và khả năng di dộng
cao. MPI thường xuyên chạy trên các máy tính chia sẻ bộ nhớ. Mặc dù MPI
thuộc về lớp thứ 5 và lớp cao hơn của mơ hình OSI, nhưng những triển khai
có thể bao gồm hầu hết các lớp, với socket và TCP (Transmission Control
Protocol) được dùng trong tần vận chuyển. Hầu hết các triển khai MPI bao
gồm một thiết lập định tuyến riêng có thể được gọi trực tiếp từ C, C++,
Fortran hay bất kỳ ngơn ngữ nào có giao diện với các thư viện, bao gồm C#,
Java hoặc Python. Những ưu điểm của MPI vượt qua những thư viện truyền
thông điệp cũ là tính di động (MPI có thể được triển khai cho hầu hết các kiến
trúc bộ nhớ phân tán) và tốc độ (MPI thực hiện nguyên tắc tối ưu hố cho
phần cứ mà nó chạy).
MPI sử dụng LIS (Language Independent Specifications) để gọi và
ràng buộc ngôn ngữ. Phiên bản MPI-2.2 bao gồm những tính năng nới như là
I/O song song, quản lý tiến trình động và điều hành bộ nhớ từ xa. LIS của
MPI-2 thiết lập hơn 500 hàm và cung cấp ràng buộc ngôn ngữ cho ANSI C,
ANSI C++ và ANSI Fortran (Fortran 90). Khả năng tương tác đối tượng cũng
được thêm vào để cho phép lập trình truyền thơng điệp bằng ngơn ngữ hỗn
hợp dễ dàng hơn.
MPI cung cấp mơ hình liên kết ảo, đồng bộ hoá và chức năng liên lạc
giữa một tập hợp các tiến trình (đã được ánh xạ tới các nút/máy chủ/máy tính
cụ thể) trong một ngơn ngữ độc lập, với cú pháp ngôn ngữ đặc trưng (ràng
buộc), cùng với một vài tính năng ngơn ngữ đặc trưng. Những chức năng thư
9
viện MPI bao gồm (không giới hạn) những hoạt động nhận/gửi loại điểm –
điểm, lựa chọn giữa mơ hình xử lý logic Cartesian hoặc mơ hình xử lý logic
đồ thị tương đồng, trao đổi dữ liệu giữa những cặp tiến trình, kết hợp các kết
quả từng phần của tính tốn (thu thập và giảm các hoạt động), đồng bộ hoá
các nút cũng như thu thập thông tin liên quan đến mạng như số lượng của tiến
trình trong phiên tính tốn, nhận dạng bộ vi xử lý hiện tại mà bộ vi xử lý được
ánh xạ, những tiến trình lân cận truy cập trong một mơ hình liên kết logic.
2.2.3. Mục tiêu thiết kế của MPI bao gồm:
➢ Cung cấp một giao diện đơn giản và hiệu quả cho việc giao tiếp giữa
các q trình trong mơi trường phân tán.
➢ Cho phép truyền thông một cách hiệu quả: tránh việc sao chép dữ liệu
từ bộ nhớ sang bộ nhớ và cho phép gối chồng (overlap) giữa các tính
tốn và truyền thơng và offload để truyền thơng đồng xử lý khi có thể.
➢ Có thể được gắn kết dễ dàng vào trong các chương trình ngơn ngữ C và
Fortran. Cung cấp một giao thức truyền thông tin cậy: người dùng
không cần phải lo lắng tới thất bại trong truyền thông. Các thất bại này
được xử lý bởi các hệ thống truyền thông cơ sở phía sau.
➢ Định nghĩa một giao thức khơng quá khác biệt so với các môi trường
song song hiện tại như PVM (Parallel Virtual Machine), NX, Express...
và cung cấp các mở rộng cho phép độ linh hoạt cao hơn.
➢ Định nghĩa một giao thức có thể được thực thi trên các môi trường
(flatform) của nhiều nhà cung cấp mà không cần thay đổi nào đáng kể
trong truyền thông cơ sở và phần mềm hệ thống.
➢ Ngữ nghĩa của giao thức là độc lập với ngôn ngữ.
➢ Giao thức được thiết kế cho phép sử dụng luồng một cách an tồn.
* Các tính năng chủ yếu của MPI.
➢ Một lượng lớn các hàm truyền thông điểm – điểm (phong phú hơn rất
nhiều so với các mơi trường lập trình song song khác).
➢ Một lượng lớn các thủ tục truyền thông chọn lọc, được sử dụng để giao
10
tiếp giữa một nhóm các bộ xử lý trong hệ thống.
➢ Một ngữ cảnh truyền thông hỗ trợ cho việc thiết kế các thư viện phần
mềm song song.
➢ Có khả năng xác định các topology truyền thơng.
➢ Có khả năng định nghĩa các kiểu dữ liệu mới để mô tả các thông báo
dựa trên các dữ liệu không liên tục.
* Các tiến trình
➢ Một chương trình MPI bao gồm các bộ xử lý độc lập, thực thi các mã
lệnh riêng của chúng trong một mơ hình MIMD (Multiple Instruction
Multiple Data). Các tập lệnh được thực thi bởi các bộ xử lý không nhất
thiết phải giống nhau, việc truyền thông giữa các bộ xử lý được thực
hiện thông qua việc gọi các hàm truyền thông của MPI.
➢ MPI không định rõ kiểu thực thi cho mỗi bộ xử lý. Bộ xử lý A có thể
chạy tuần tự, hoặc có thể thực thi ở dạng đa luồng với các luồng được
kích hoạt đồng thời.
➢ Điều này thực hiện được do tính chất luồng an toàn (thread-safe) của
MPI bằng cách tránh sử dụng các trạng thái tuyệt đối.
* Ứng dụng MPI
Một ứng dụng MPI có thể được thực thi như là một tập các nhiệm vụ
truyền thơng đồng thời. Một chương trình bao gồm các đoạn mã của người
lập trình được liên kết với các hàm thư viện được cung cấp bởi phần mềm
MPI. Mỗi nhiệm vụ được chỉ định một thứ hạng (rank) duy nhất trong khoảng
1-> n-1 với các ứng dụng có n nhiệm vụ. Các hạng này được sử dụng để xác
định các nhiệm vụ MPI khác nhau trong việc gửi và nhận tin cũng như thực
hiện các thao tác truyền thơng nói chung. Nhiệm vụ MPI có thể chạy trên
cùng bộ xử lý hoặc các bộ xử lý khác nhau một cách đồng thời. Lợi ích của
các rank là làm cho thao tác phối hợp độc lập với vị trí vật lý của các thành
phần.
11
2.2.4. Năng lực tính tốn
Việc song song hóa một chương trình nhằm làm cho chương trình đó
chạy nhanh hơn, tuy nhiên chương trình đó sẽ chạy nhanh hơn bao
nhiêu lần? Định luật Amdahl’s [3] cho phép ta xác định điều này. Giả sử xét
về khía cạnh thời gian chạy chương trình, một phần p của
chương trình
có thể song song hóa và phần 1-p còn lại buộc phải chạy tuần tự. Trong
trường hợp lý tưởng, nếu thực thi chương trình sử dụng n bộ xử lý, thời gian
chạy chương trình sẽ là 1-p + p/n của thời gian chạy chương trình một cách
tuần tự. Đây là hệ quả trực tiếp của định
luật Amdahl áp dụng cho trường
hợp thực thi lý tưởng.
Ví dụ: nếu 80% chương trình có thể được song song hóa, và ta có 4 bộ
xử lý, thời gian chạy song song sẽ là: 1 - 0.8 + 0.8/4 = 0.4 tức là bằng 40%
thời gian chạy tuần tự.
Hình 2.1: khả năng tăng tốc độ tính tốn, trường hợp lý tưởng
Đối với chương trình trên, thời gian chạy song song sẽ không thể nào
nhỏ hơn 20% thời gian chạy tuần tự cho dù ta sử dụng số lượng vô cùng lớn
các bộ xử lý.
Trên thực tế, khi chạy một chương trình song song, thường xuất hiện
các chi phí truyền thơng và việc phân công công việc không cân bằng giữa
các bộ xử lý. Do đó thời gian chạy chương trình sẽ là:
12
Hinh 2.2: Khả năng tăng tốc độ tính tốn, trường hợp thực tế.
Do vậy để tăng tốc độ của chương trình ta cần:
● Tăng tỉ lệ (thành phần) được song song hóa của chương trình.
● Phân cơng cơng việc một cách công bằng cho các bộ xử lý.
● Giảm tới mức tối thiểu thời gian truyền thơng.
2.2.5. Mơ hình lập trình
MPI ra đời mục đích dành cho các hệ thống máy tính có bộ nhớ phân
tán. Tuy nhiên MPI cũng có thể triển khai được trên hệ thống máy tính có bộ
nhớ chia sẻ.
2.2.6. Lập trình MPI
➢ Header file:
● u cầu cho mọi chương trình được lập trình bởi MPI
● Định dạng các hàm trong MPI
13
#include “mpi.h”
rc = MPI_Xxxxx(parameter)
➢ Cấu trúc của chương trình MPI:
➢ Rank:
● Với mỗi Communicator, mỗi processes có một ID nhất định.
● Rank được bắt đầu từ 0
● Sử dụng rank trong các message để chỉ ra nguồn (source) và đích
(destination)
➢ Các hàm quản lý môi trường
● MPI_Comm_size: Xác định số lượng process trong nhóm ứng
với một Communicator (thường là MPI_COMM_WORLD)
int MPI_Comm_size(MPI_Comm comm,int *size )
● MPI_Comm_rank: Trả về id của Communicator hiện tại
int MPI_Comm_rank (comm,&rank)
● MPI_Abort: Hủy bỏ tất cả các MPI processes gắn với một
Communicator
int MPI_Abort(MPI_Comm comm,int errorcode)
● MPI_Finalize: Kết thúc mơi trường thực thi MPI
int MPI_Finalize()
➢ Ví dụ:
#include "mpi.h"
14
#include
int main(int argc, char *argv[]) {
int numtasks, rank, rc;
rc = MPI_Init(&argc,&argv);
if (rc != MPI_SUCCESS) {
printf ("Error starting MPI program.
Terminating.\n");
MPI_Abort(MPI_COMM_WORLD, rc);
}
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
printf ("Number of tasks= %d My rank= %d\n",
numtasks,rank);
/******* do some work *******/
MPI_Finalize();
}
2.2.7. Giao tiếp Point to Point
➢ MPI Point to Point là giao tiếp giữa hai và chỉ hai processes với nhau.
➢ Khi một Process thực hiện giao thức truyền tin (send) thì nhiệm vụ
khác phải có giao thức nhận tin (receive) tương ứng
➢ Các hàm trong Point-to-Point
15
2.2.8. Tham số trong các hàm
CHƯƠNG III: GIẢI QUYẾT BÀI TỐN
3.1. Phát biểu bài tốn
Hệ phương trình tuyến tính là tập hợp của hai hoặc nhiều phương
trình tuyến tính có cùng biến số giống nhau. Phương trình tuyến tính có thể có
một biến, hai biến hoặc ba biến. Dưới đây là dạng tổng quát của hệ với m
phương trình và n ẩn
Dạng tổng qt hệ phương trình tuyến tính:
Trong đó:
●
xi: được gọi là các ẩn của hệ
●
aij: được gọi là các hệ của ẩn
●
bi: được gọi là các hệ số tự do
Ký hiệu: Như chúng ta đã biết, hệ phương trình tuyến tính có thể viết
dưới dạng ma trận. Do đó, hệ phương trình tuyến tính n biến có thể được viết
dưới dạng:
16
3.2. Giới thiệu các phương pháp giải phương trình tuyến tính song song
3.2.1. Phương pháp Gauss
➢ Định lý Cronecker Capelly: Cho hệ phương trình tuyến tính tổng qt
a11 x1 a12 x2 ... a1n xn b1
a x a x ... a x b
21 1 22 2
2n n
2
(1)
...
am1 x1 am 2 x2 ... amn xn bm
A và A lần lượt là các ma trận hệ số và ma trận hệ số mở rộng. Khi
đó:
i) Nếu rankA rank A thì hệ (1) vơ nghiệm;
ii) Nếu rankA rank A r thì hệ (1) có nghiệm. Hơn nữa:
✔ Nếu r = n thì hệ (1) có nghiệm duy nhất.
✔ Nếu r < n thì hệ (1) có vơ số nghiệm phụ thuộc n – r tham số.
➢ Thuật toán sau để giải hệ phương trình tuyến tính (gọi là tḥt tốn
Gauss):
Lập ma trận các hệ số mở rộng A . Bằng các phép biến đổi sơ cấp
trên dòng đưa ma trận A về dạng bậc thang. Giả sử ma trận bậc thang cuối
cùng có dạng:
17
0
0
...
A C 0
0
...
0
... c1*i1
...
...
0
c2*i2
...
...
...
0
...
...
...
...
...
0
...
0
...
...
...
.... .... .... ... c1n d1
... ... ... ... c2 n d 2
... ... ... ... ... ...
... cri* r ... ... crn d r
0 ... 0 ... 0 d r 1
... ... ... ... ... ...
0 ... 0 ... 0 d m
Hệ phương trình tương ứng với ma trận C tương đương với hệ ban
đầu. Do đó:
● Nếu tồn tại ít nhất di với r 1 i m khác 0 thì hệ vơ nghiệm.
● Nếu d r 1 d r 2 ... dm 0 thì hệ có nghiệm. Khi đó các cột
i1 , i2 ,..., ir (là các cột được đánh dấu * ) được giữ lại bên trái và các
xi1 , xi2 ,..., xir
là các ẩn, cịn các cột cịn lại thì được chuyển sang
bên phải, các ẩn xk tương ứng với các cột này sẽ trở thành tham
số. Vậy ta sẽ có
c1i1
0
...
0
n – r tham số và hệ đã cho tương ứng với hệ
c1i2
c2i2
...
0
... c1ir d1 ( xk )
... ... d 2 ( xk )
... ... ...
... crir d r ( xk )
(3)
Trong đó di ( xk ) là các hàm tuyến tính của xk với k i1 , i2 ,..., ir . Hệ
phương trình (3) là hệ phương trình dạng tam giác ta có thể dễ dàng giải được
bằng cách thế dần từ dưới lên, tức là tính lần lượt
xir , xir 1 ,..., xi1
.
Chú ý: Nếu trong quá trình biến đổi xuất hiện 1 dòng mà bên trái bằng 0 còn
bên phải là số khác 0 thì ta có thể kết ḷn hệ phương trình vơ nghiệm và
khơng cần làm gì tiếp.
Nhận xét: Nếu ma trận thu được cuối cùng trong tḥt tốn Gauss có dạng
A’|B’ thì A’ được gọi là ma trận rút gọn theo dòng từng bậc hay đơn giản là
ma trận rút gọn, ký hiệu RA .
18
Khi đó hạng của ma trận A bằng hạng của RA .
Các ví dụ:
a) Giải hệ phương trình sau:
x1 2 x2 2 x3 0
2 x1 x2 2 x3 2 (*)
3 x x 4 x 2
3
1 2
Giải:
Vì | A || A1 || A2 || A3 |0 nên ta không thể dùng phương pháp Cramer
để giải
hệ phương trình này.
Ta sẽ áp dụng phương pháp Gauss để giải hệ phương trình trên.
Ta viết hệ dưới dạng ma trận hóa như sau:
1 2 2 0
d2 d2 2 d1
2 1 2 2 d
3 d 3 3 d1
3 1 4 2
1 2 2 0
d3 d3 d 2
0 5 2 2
0 5 2 2
1 2 2 0
0 5 2 2
0 0 0 0
1 2 2 0
0 1 2 / 5 2 / 5
0 0 0 0
1
d2 d2
5
Vậy hệ phương trình (*) có vơ số nghiệm phụ thuộc vào tham số x3 .
4 4
4 6
x1 2 x2 2 x3 5 5 x3 2 x3 5 5 x3
2 2
x2 x3
5 5
x3
Chú ý:
● Khi hệ phương trình có vơ số nghiệm thì dù giải bằng phương
pháp nào ta cũng có thể có nhiều cách chọn biến tự do.
● Khi giải hệ phương trình tuyến tính thuần nhất, ta có nhiều cách
chọn hệ nghiệm cơ bản.
x1 2 x2 5 x3 9
x1 x2 3x3 2
b) Giải hệ phương trình 3 x1 6 x2 x3 25
19
Giải:
Ta tiến hành giải bằng thuật toán Gauss như sau:
1 2 5 9 d d d
d32 d32 3d11
1 1 3 2
3 6 1 25
1 2
5 9
d 3 d3 4 d 2
0 3 2 11
0 12 16 52
1 2 5 9
0 3 2 11
0 0 8 8
Vậy hệ phương trình đầu tương đương với hệ:
x1 2 x2 5 x3 9
3 x2 2 x3 11
- 8 x3 8
Do đó nghiệm của hệ là ( x1 , x2 , x3 ) (2, 3, 1) .
3.2.2. Phương pháp lặp đơn
Trở lại bài tốn giải hệ phương trình tuyến tính
Ax =b
(1.1)
Ta đưa (2.4) về dạng
x = Cx + d
(1.2)
Trong đó ma trận C và vectơ d được xây dựng từ A và b.
Để thực hiện phép lặp ta chọn một vectơ ban đầu x(0), sau đó
i=1,2,... theo cơng thức lặp sau:
Véc tơ x(k) được gọi là vectơ lặp thứ k.
● Ta có định lý sau:
● Định lý. (Sự hội tụ của phương pháp)
20
tính các x(i),