Phương pháp Gauss (Gaoxơ)

Một phần của tài liệu Xây dựng phần mềm hỗ trợ học phương pháp tính (Trang 42)

1.1.4 .Vai trò và ý nghĩa của vấn đề nghiên cứu

2.2. Một số phương pháp tìm nghiệm gần đúng của hệ phương trình đại số

2.2.1. Phương pháp Gauss (Gaoxơ)

Phương pháp Gauss dùng cách khử dần các ẩn để đưa hệ đã cho về một hệ có dạng tam giác trên, rồi giải hệ tam giác này từ dưới lên trên, không phải tính một định thức nào.

- Biến đổi Ma trận A về ma trận tam giác bằng cách khử dần các ẩn của hệ. a11 a12 ... a1n a1n + 1

A’ = 0 a’22 ... a’2n a’2n + 2 ... 0 0 ... a’nn a’nn + 1

Cách biến đổi A thành A’: thực hiện n -1 lần biến đổi Lần biến đổi thứ i làm cho aji=0, j = i +1  n bằng cách: Dòng j = dòng j + dòng i * m ( m = - aji / ai j )

- Tìm nghiệm theo quá trình ngược: xn xn -1 ... x1

Ví dụ: 2x1 + x2 = 1 4x1 + 6x2 = 3

Khử x1 phương trình thứ 2 ta được hệ sau: 2x1 + x2 = 1 4x2 = 1

Tìm được x1 = 0,25 ; x2 = 0,375 Cho hệ phương trình tuyến tính:

a11x1 + a12x2 + a13x3 = a14

a21x1 + a22x2 + a23x3 = a24 (2.15)

36

ĐẠI HỌC HÙNG VƯƠNG

Đưa về dạng tam giác

x1 + b12x2 + b13x3 = b14

x2 + b23x3 = b24 (2.16) x3 = b34

Quá trình đưa (2.15) về (2.16) gọi là quá trình xuôi, Quá trình giải hệ (2.16) gọi là quá trình ngược.

a, Quá trình xuôi

Bước 1: Khử x1, cho hệ phương trình (2.15) nêu trên, giả sử a11≠0 ta gọi nó là trụ thứ nhất và chia hai vế của phương trình thứ nhất cho a11 ta được:

x1 + a(1)

12x2 + a(13)x3 = a(1)

(14) (2.17)

Rút x1 từ phương trình trên ta được: x1 = a(1)

14 - a(1)

12x2 – a(1) 13x3

Thay x1vào hai phương trình còn lại của (2.15) ta có các phương trình chỉ chứa x1 và x2 là: a(1)22x2 – a(1) 23x3= a(1)24 (2.18) a(1) 22x2 – a(1) 23x3= a(1) 24 (2.19)

Bước 2: Khử x2, giả sử a22 ≠ 0 của phương trình (2.18), gọi nó là trụ thứ hai và chia (2.18) cho a22 ta được: x2 – a(2)

23x3 = a(2)24

rút x2 từ phương trình trên ta được: x2 = a(2)

24 - a(2) 23x3

Thay x2 vào phương trình(2.19) ta có, và biến đổi ta tìm được x3: x3 = a(3) 34

Từ các kết quả trên hệ phương trình (2.15) tương đương với hệ phương trình có dạng tam giác sau đây:

x1 + a(1)12x2 + a(13)x3 = a(1)14 x2 + a(2) 3x3 = a(2 ) 24 (2.20) x3 = a(3) 34 b, Quá trình ngược

Giải hệ tam giác (2.16) thay x3 vào phương trình thứ hai tìm được x2sau đó thay x2, x3vào phương trình thứ nhất ta tìm được x1:

x3 = a(3) 34 x2 = a(2 ) 24 - a(2) 3x3 (2.21) x1 = a(1) (14) - a(1) 12x2 - a(13)x3

Vậy là hệ (2.15) đã giải xong mà không cần tính một định thức nào.

Chọn trụ tối đại: Trong quá trình xuôi của phương pháp Gauss ta đã giả thiết a11 ≠ 0, a22 ≠ 0, a33 ≠ 0. Nếu một trong các hệ số trên bằng không thì quá trình

37

ĐẠI HỌC HÙNG VƯƠNG

tính không tiếp tục được. Ta phải xétcác hệ số a21 hoặca31 của x1 và tiến hành tương tự như vai trò của a11 để khử dần các ẩn. Nếu cả ba hệ số trên bằng không thì hệ đã ch suy biến. Mặt khác khi chia cho một số khác không sai số càng nhỏ khi giá trị tuyệt đối của số chia càng lớn. Do đó để hạn chế sai số ta chọn max của các giá trị tuyệt đối của các hệ số a11, a21, a31 và gọi là trụ tối dại thứ nhất để khử x1, khi khử x2, x3, cũng làm tương tự[4].

Khối lượng tính và công thức tính đối với hệ n ẩn: Theo phương pháp Gauss thì khi tìm nghiệm một hệ n phương trình n ẩn ta phải thực hiện số lượng phép tinh là: NG(n) = 3 2 4 9 7 6 nnn với n = 15 thì NG(15) = 2570 2.2.2. Phương pháp lặp đơn Chuyển hệ (2.15) về dạng x = Bx + g x = ( x1 ,... , xn ); B được suy ra từ A. g suy ra từ f = (a1n +1 , a2n +1 ,...., ann +1 ) x1 = ( a1n + 1- 1 n j  a1 j xj ) / a11 (j 1) ... xn = ( ann + 1- 1 n j  an j xj ) / ann (j n) Tổng quát: xi = ( ain + 1- ∑ai j xj ) / aii (j =1,....,n; j i) (2.22)

Cho xấp xỉ nghiệm ban đầu của hệ là x0 = ( x10 , x20... , xn0 )

Thay x0 vào (2.22) ta tính được x11 , x21... , xn1

x11 = ( a1n + 1- ∑a1 j xj ) / a11 (j =1,....,n; j 1)

...

xik+1 = ( ain + 1- ∑ai j xjk ) / aii (j =1,....,n; j k)

Quá trình lặp dừng khi thỏa mãn điều kiện hội tụ: |xik+1 – x ik| < với i =1, ..., n

Điều kiện hội tụ: Hệ phương trình hội tụ đến nghiệm với bất kì x0 tuỳ ý khi và chỉ khi thoả mãn điều kiện:

Hoặc r1 =Max∑bi j 1 ( max theo i, j =1,....,n ) Hoặc r2 =Max∑bi j 1 ( max theo j, i =1,....,n )

38 ĐẠI HỌC HÙNG VƯƠNG Hoặc r3 =Max∑∑bi j 1 ( j, i =1,....,n ) với sai số là: xm – ≤ rp * xm – x m -1/(1 - rp) Trong đó: p = 1 nếu r1  1 p = 2 nếu r2  1 p = 3 nếu r3  1

Ví dụ: Giải hệ phương trình tuyến tính: 4 x1 + 0,24 x2 - 0,08 x3 = 8 0,09 x1 + 3 x2 – 0,15 x3 = 9 (2.23) 0,04 x1 – 0,08 x2 + 4 x3 = 20 Đưa về hệ sau: x1 = - 0,06 x2 + 0,02 x3 + 2 x2 = - 0,03 x1 + 0,05 x3 + 3 x3 = - 0,01 x1 + 0,02 x2 + 5 0 - 0,06 0,02 B = - 0,03 0 0,05 - 0,01 0,02 0 g = (2,3,5) Max∑b1j= 0 + - 0,06 + 0,02 = 0,08 Max∑b2j= 0,03 + 0 + 0,05 = 0,08 Max∑b3j= 0,01 + 0,02 + 0 = 0,03 r1 =Max∑bi j=  0,08; 0,08; 0,03 = 0,08 < 1 Chọn x0 = (0,0,0) ta có kết quả cho bảng 2.4:

Bảng 2.4. Bảng kết quả tìm nghiệm theo phương pháp lặp đơn.

M 0 1 2 3 4

x1m 0 2 1,92 1,9094 1,90923

x2m 0 3 3,14 3,1944 3,19495

x3m 0 5 5,04 5,0446 5,04485

39 ĐẠI HỌC HÙNG VƯƠNG Chọn  x4 – x 3= max | xi4 – xi3= 0,00055  x4 – ≤ 0,08*0,00055 / (1 – 0,08)  0,00005 Vậy: 14 = 1,9092  0,00005 24 = 3,1949  0,00005 34 = 5,0448  0,00005

Một hệ đại số tuyến tính không ổn định: Khi giải tìm nghiệm gần đúng một hệ phương trình đại số tuyến tính ta cần chú ý hiện tượng sau. Xét hai hệ phương trình cụ thể: x1 + 2x2 = 2 (2.24) 2x1 + 3,9x2 = 2 x1 + 2x2 = 2 (2.25) 2x1 + 4,1x2 = 2 Nghiệm của hệ (2.24) là x1 = -38; x2 = 20 Nghiệm của hệ (2.25) là x1 = 42; x2 = -20

Nhìn vào hai hệ phương trình trên ở một hệ số chỉ khác nhau rất nhỏ

3,9 – 4,1 = 0,2 nhưng nghiệm của chúng lại sai lệch khá xa. Đây là hiện tượng không ổn định trong tính toán, do đó cần chú ý tránh nhầm lẫn[4].

40

ĐẠI HỌC HÙNG VƯƠNG

CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG PHẦN MỀM HỖ TRỢ HỌC PHƯƠNG PHÁP TÍNH

Khi bắt đầu mở phần mềm này, form giao diện chính sẽ hiển thị đầu tiên để chào mừng người dùng đến với những tiện ích phần mềm cũng như giới thiệu về nhóm lập trình. Nếu muốn biết tất cả các chức năng của phần mềm này, hãy đọc hướng dẫn sử dụng trong file PDF sau nhi click vào biểu tượng i trên thanh công cụ. Dưới đây là giao diện của toàn bộ phần mềm và đầu tiên là form chính.

Hình 3.1. Giao diện form chính.

Quy trình chung của một chương trình máy tính:

Hình 3.2. Quy trình chung của một chương trình máy tính.

Phần mềm hỗ trợ học Phương pháp tính sẽ được thiết kế và xây dựng theo sơ đồ chức năng như sau:

41

ĐẠI HỌC HÙNG VƯƠNG

Hình 3.3. Sơ đồ phân cấp chức năng của phần mềm.

Tùy thuộc vào từng phương pháp tính thì các dữ kiện trên sẽ được phân tích, lập trình với các giải thuật khác nhau và cụ thể sẽ được trình bày ở các phần dưới đây.

3.1. Tìm nghiệm gần đúng của phương trình

Để tìm nghiệm gần đúng của phương trình, ta cần có những thông số như sau:

 Đầu vào: Ta có thể nhập hệ số của phương trình đã cho từ các TextBox được cấp phát tự động khi ta nhấn vào nút thêm. Thông số đầu vào tiếp theo là nhập khoảng phân li nghiệm của phương trình, ta sẽ bắt đầu nhập vào từ TextBox cận dưới a và sau đó là TextBox cận trên b. Và sau đó, chúng ta phải nhập một trong hai thông số là: sai số 𝛆 hoặc lần chia n thì phần mềm sẽ có đủ các thông số đầu vào để bắt đầu đi vào quá trình xử lý.

 Quá trình xử lý: Để kiểm tra lại các hệ số của phương trình vừa nhập hay đơn giản là ta chỉ muốn hiển thị phương trình, chúng ta bấm vào nút hiển thị thì phương trình sẽ xuất hiện lên TextBox hàm số.

Phần mềm sẽ giải phương trình theo hai điều kiện khi đầu vào là: sai số

𝜺 hoặc lần chia n. Đối với điều kiện là n, nghiệm của phương trình sẽ tính đến lần chia thứ n rồi kết thúc. Còn khi điều kiện là 𝛆, nghiệm của

42

ĐẠI HỌC HÙNG VƯƠNG

phương trình sẽ dừng lại khi sai số Epsilon nhỏ hơn 𝛆 đầu vào. Quá trình xử lý bài toán sẽ hoàn thành sau khi chúng ta bấm vào nút giải. Nếu bạn muốn rèn luyện kỹ năng giải các bài toán hoặc bạn muốn các bài giải trong vở được trình bày một cách logic thì hãy click vào nút bài tập ví dụ, một file PDF sẽ được mở ra chỉ sau 1 giây để hỗ trợ bạn cách trình bày bài toán theo chuẩn giáo trình.

 Kết quả (đầu ra): Mặc dù trong quá trình xử lý, phần mềm giải phương trình theo hai điều kiện tuy nhiên nghiệm và sai số Epsilon của phương trình theo từng phương pháp tính chỉ có một đáp án đúng. Chúng ta có thể biết được đáp án trên TextBox kết quả hoặc muốn biết tất cả nghiệm, sai số Epsilon qua từng lần chia hãy bấm vào nút Bảng kết quả để xem chi tiết hơn. Số lượng các nghiệm, sai số của bài toán đối với điều kiện là n hoặc 𝛆 là khác nhau, điều này sẽ được thể hiện rõ ràng khi ta nhìn vào bảng DataGridview kết quả. Tùy vào từng phương pháp tìm nghiệm gần đúng của phương trình ta có thể thiết kế giao diện form và viết hàm code như hình bên dưới.

3.1.1. Form tìm nghiệm gần đúng theo phương pháp chia đôi

Áp dụng theo công thức của phương pháp chia đôi, ta cần khởi tạo các biến và các mảng lưu giá trị: an (cận dưới a), bn (cận trên b), c ( nghiệm của phương trình), lanlap (lần chia giới hạn đề bài cho), epsilon (sai số giới hạn),

a[] (mảng một chiều lưu giá trị của an sau các lần chia), b[] (mảng một chiều

lưu giá trị của bn sau các lần chia), c[] (mảng một chiều lưu giá trị của c sau các lần chia), fc[] (mảng một chiều lưu giá trị của f(c) sau từng lần chia), eps[] (mảng một chiều lưu giá trị của 𝜺 tính được sau từng lần chia). Trong phần mềm này, tìm nghiệm theo phương pháp chia đôi sẽ được thực hiện theo hai cách.

Trường hợp 1: Biết phương trình có khoảng phân li nghiệm và số lần lặp n

cho trước. Bảng DataGridview kết quả sẽ biểu diễn giá trị của các lần chia n, mảng a[n], mảng b[n], mảng c[n] và Epsilon. Dưới đây là giao diện form tìm nghiệm theo phương pháp chia đôi với n cho trước.

43

ĐẠI HỌC HÙNG VƯƠNG

Hình 3.4. Form phương pháp chia đôi biết trước lần lặp n.

Trường hợp 2: Biết phương trình có khoảng phân li nghiệm và sai số 𝜺 được ấn định trước. Hình ảnh dưới đây là giao diện form tìm nghiệm theo phương pháp chia đôi với sai số 𝜺 được ấn định trước.

44

ĐẠI HỌC HÙNG VƯƠNG

3.1.2. Form phương pháp lặp.

Từ công thức tìm nghiệm gần đúng của phương pháp lặp và thuật toán ta đã xây dựng ở chương 2 (mục 2.1.2), ta nhận thấy rằng: công việc tìm hàm lặp hội tụ g gây nhiều khó khăn khi ta tính toán và đạo hàm của các hàm lặp hội tụ g là riêng biệt đối với từng phương trình, không tuân theo nguyên tắc chung nào. Vì vậy, ở giao diện của phương pháp lặp ta sẽ chia thành ba phần để hỗ trợ người dùng theo kiểu: mô tả công thức, mô tả sơ đồ khối và phần bài tập ví dụ. Ta chỉ cần click chuột vào từng nút để chọn cách thức học cùng với phần bài tập minh họa điển hình và đa dạng.

45

ĐẠI HỌC HÙNG VƯƠNG

Hình 3.7. Form sơ đồ khối phương pháp lặp.

3.1.3. Form tìm nghiệm gần đúng theo phương pháp NewTon.

Áp dụng theo công thức của phương pháp NewTon, ta cần khởi tạo các biến và các mảng lưu giá trị: an (cận dưới a), bn (cận trên b), m (giá trị tuyệt đối của đạo hàm cấp một của an hoặc bn), lanlap (lần chia giới hạn đề bài

cho), epsilon (sai số giới hạn), x1[] (mảng một chiều lưu giá trị nghiệm của phương trình sau từng lần chia), fx[] (mảng một chiều lưu giá trị của f(x1) sau

từng lần chia), eps[] (mảng một chiều lưu giá trị của 𝛆 tính được sau từng lần chia). Cũng tương tự như phương pháp chia đôi, để tìm nghiệm gần đúng theo phương pháp NewTon, ta chia thành hai trường hợp tìm nghiệm với lần lặp n

cho trước hoặc được ấn định sai số cho phép 𝜺. Do đó, ở phương pháp này ta chỉ biểu diễn chương trình tìm nghiệm theo trường hợp tìm nghiệm khi biết trước lần lặp n. Bảng DataGridview kết quả sẽ biểu diễn giá trị của các lần chia n, mảng x1[n], mảng fx[] và Epsilon. Dưới đây là giao diện form tìm

46

ĐẠI HỌC HÙNG VƯƠNG

Hình 3.8. Giao diện form phương pháp NewTon.

3.1.4. Form tìm nghiệm gần đúng theo phương pháp dây cung.

Áp dụng theo công thức của phương pháp dây cung, ta cần khởi tạo các biến và các mảng lưu giá trị: an (cận dưới a), bn (cận trên b), m (giá trị tuyệt đối của đạo hàm cấp I của an hoặc bn), lanlap (lần chia giới hạn đề bài cho),

epsilon (sai số giới hạn), a[] (mảng một chiều lưu giá trị của an sau các lần

chia), b[] (mảng một chiều lưu giá trị của bn sau các lần chia), x1[] (mảng một chiều lưu giá trị nghiệm của phương trình sau từng lần chia), fx[] (mảng một chiều lưu giá trị của f(x1) sau từng lần chia), eps[] (mảng một chiều lưu giá trị

của 𝜺 tính được sau từng lần chia). Tương tự các phương pháp tìm nghiệm gần đúng được nêu ở trên, ở đây ta sẽ trình bày giao diện tìm nghiệm gần đúng của phương pháp dây cung khi biết trước lần lặp𝒏. Bảng DataGridview kết quả sẽ biểu diễn giá trị của các lần chia n, mảng x1[n], mảng fx[] và Epsilon. Dưới đây là giao diện form tìm nghiệm theo phương pháp dây cung.

47

ĐẠI HỌC HÙNG VƯƠNG

Hình 3.9. Giao diện form phương pháp dây cung.

3.2. Tìm nghiệm gần đúng của hệ phương trình

3.2.1. Form tìm nghiệm gần đúng theo phương pháp Gauss

Áp dụng theo công thức của phương pháp Gauss, ta cần khởi tạo các biến và các mảng lưu giá trị là: sohang (cấp của ma trận), a[,] (mảng hai chiều lưu giá trị số dòng, số cột của ma trận), x[] (mảng một chiều lưu giá trị tập

nghiệm của hệ). Ngoài ra còn có các biến khác: c, sum là các biến trung gian được sử dụng để tính giá trị tạm thời trong thuật toán.

 Đầu vào: Trước tiên ta phải nhập cấp của ma trận từ TextBox nhập cấp của ma trận. Tiếp theo ta nhập ma trận từ TextBox nhập ma trận. Chỉ với hai thao tác nhập đơn giản thì phần mềm sẽ có đủ các thông số đầu vào để bắt đầu đi vào quá trình xử lý cho bài toán tìm nghiệm gần đúng của hệ phương trình đại số tuyến tính theo phương pháp Gauss.

 Quá trình xử lý (Proccess): Để kiểm tra lại các hệ số của từng phương trình vừa nhập hay đơn giản là bạn chỉ muốn hiển thị hệ phương trình, chúng ta bấm vào nút hiển thị thì hệ phương trình sẽ xuất hiện lên TextBox hiển thị hệ. Phần mềm sẽ nhanh chóng đọc dữ liệu đưa vào trước đó và giải hệ phương trình theo công thức của phương pháp Gauss để tìm nghiệm gần đúng mà không tính sai số. Quá trình xử lý

48

ĐẠI HỌC HÙNG VƯƠNG

bài toán sẽ hoàn thành sau khi chúng ta bấm vào nút giải. Click chuột vào nút bài tập ví dụ, chúng ta sẽ được xem cách giải phương trình cụ thể, rõ ràng và logic.

 Kết quả bài toán (đầu ra): Nghiệm của hệ phương trình sẽ được thể hiện rõ ràng khi ta nhìn vào bảng DataGridview kết quả.

Dưới đây là form minh họa cho cách tìm nghiệm gần đúng của hệ phương trình theo phương pháp Gauss:

Hình 3.10. Giao diện form phương pháp Gauss.

3.2.2. Form tìm nghiệm gần đúng theo phương pháp lặp đơn

Áp dụng theo công thức của phương pháp lặp đơn, ta cần khởi tạo các biến và các mảng lưu giá trị là: sohang (cấp của ma trận), relerror ( biến sai số), itr ( biến lần lặp), a[,] (mảng hai chiều lưu giá trị số dòng, số cột của ma

Một phần của tài liệu Xây dựng phần mềm hỗ trợ học phương pháp tính (Trang 42)

Tải bản đầy đủ (PDF)

(72 trang)