YOMEDIA
ADSENSE
Phương pháp tính với C++ - Chương 4
1.024
lượt xem 72
download
lượt xem 72
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
GIẢI HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH §1. PHƯƠNG PHÁP GAUSS Có nhiều phương pháp để giải một hệ phương trình tuyến tính dạng AX = B.
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Phương pháp tính với C++ - Chương 4
- CHƯƠNG 4 : GIẢI HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH §1. PHƯƠNG PHÁP GAUSS Có nhiều phương pháp để giải một hệ phương trình tuyến tính dạng AX = B. Phương pháp giải sẽ đơn giản hơn nếu ma trận A có dạng tam giác nghĩa là có dạng : ⎛ a11 0 0⎞ ⎛ a11 a 12 a 13 ⎞ ⎜ ⎟ ⎜ ⎟ ⎜ a 21 a 22 0 ⎟ hay ⎜ 0 a 22 a 23 ⎟ ⎜a ⎟ ⎜0 0 a 33 ⎟ ⎝ 31 a 32 a 33 ⎠ ⎝ ⎠ Trong trường hợp đầu tiên, ma trận được gọi là ma trận tam giác dưới và trường hợp thứ hai ma trận được gọi là ma trận tam giác trên. Phương trình tương ứng với ma trận tam giác dưới có dạng tường minh là : ⎧a 11 x 1 + 0 x 2 + 0 x 3 = b 1 ⎪ ⎨a 21 x 1 + a 22 x 2 + 0 x 3 = b 2 ⎪a x + a x +a x = b ⎩ 31 1 32 2 33 3 3 Với phương trình dạng này chúng ta sẽ giải phương trình từ trên xuống. Chương trình giải phương trình ma trận tam giác dưới là : Chương trình 4‐1 #include #include #include #include #include #define max 10 void main() { float a[max][max]; float b[max],x[max]; int i,j,k,n,t; float s,c; char tl; clrscr(); 83
- printf(ʺCho so phuong trinh n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺCho cac phan tu cua ma tran a\nʺ); for (i=1;i
- printf(ʺ\nʺ); for (i=1;i
- printf(ʺ\nʺ); for (i=1;i
- Chương trình 4‐2 #include #include #include #include #include #define max 10 void main() { float a[max][max]; float b[max],x[max]; int i,j,k,n,t; float s,c; char tl; clrscr(); printf(ʺCho so phuong trinh n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺCho cac phan tu cua ma tran a :\nʺ); for (i=1;i
- t=1; flushall(); while (t) { printf(ʺCo sua ma tran a khong(c/k)?ʺ); scanf(ʺ%cʺ,&tl); if (toupper(tl)==ʹCʹ) { printf(ʺCho chi so hang can sua : ʺ); scanf(ʺ%dʺ,&i); printf(ʺCho chi so cot can sua : ʺ); scanf(ʺ%dʺ,&j); printf(ʺa[%d][%d] = ʺ,i,j); scanf(ʺ%fʺ,&a[i][j]); } if (toupper(tl)==ʹKʹ) t=0; } printf(ʺMa tran a ban dauʺ); printf(ʺ\nʺ); for (i=1;i
- printf(ʺ\nʺ); flushall(); t=1; while (t) { printf(ʺCo sua ma tran b khong(c/k)?ʺ); scanf(ʺ%cʺ,&tl); if (toupper(tl)==ʹCʹ) { printf(ʺCho chi so hang can sua : ʺ); scanf(ʺ%dʺ,&i); printf(ʺb[%d] = ʺ,i); scanf(ʺ%fʺ,&b[i]); } if (toupper(tl)==ʹKʹ) t=0; } printf(ʺ\nʺ); printf(ʺMa tran b ban dau\nʺ); printf(ʺ\nʺ); for (i=1;i=1;i‐‐) { s=0; for (k=i+1;k
- s=s+a[i][k]*x[k]; x[i]=(b[i]‐s)/a[i][i]; } printf(ʺ\nʺ); printf(ʺNghiem cua he da cho la\nʺ); printf(ʺ\nʺ); for (i=1;i
- a 31 a a a′33 = a 33 − b′2 = b 2 − 21 b 1 b′3 = b 3 − 31 b 1 a 13 a 11 a 11 a 11 Ta loại trừ số hạng chứa x3 trong dòng thứ 3 bằng cách tương tự.Ta nhân hàng thứ 2 trong hệ AʹX = Bʹ với a,32/a,22 và đem trừ đi hàng thứ 3 trong hệ mới. Như vậy số hạng chứa x3 biến mất và ta nhận được ma trận tam giác trên. ⎛ a′′ a′′ a ′′ ⎞ ⎛ x 1 ⎞ ⎛ b′′ ⎞ ⎟ ⎜ ⎟ ⎜ 1⎟ ⎜ 11 12 13 ⎜ 0 a′22 a ′23 ⎟ × ⎜ x 2 ⎟ = ⎜ b′2 ⎟ ′ ′ ′ 0 a ′33 ⎟ ⎜ x 3 ⎟ ⎜ b′3 ⎟ ⎜0 ′ ⎠ ⎝ ⎠ ⎝ ′⎠ ⎝ với a ′′ = a′ a ′′ = a ′ a ′′ = a′ b′′ = b′ a ′22 = a′22 a ′23 = a′23 ′ ′ 11 11 12 12 13 13 1 1 a′ a′ b′2 = b′2 a ′33 = a′33 − 32 a ′23 b′3 = b′3 − 33 b 2 ′ ′ ′ ′ a′22 a′22 Các phép tính này chỉ thực hiện được khi a11 ≠ 0 và a,11 ≠ 0. Với một hệ có n phương trình, thuật tính hoàn toàn tương tự. Sau đây là chương trình giải hệ phương trình n ẩn số bằng phương pháp loại trừ Gauss. Chương trình 4‐3 #include #include #include #include #include #define max 10 void main() { float b[max],x[max]; float a[max][max]; int i,j,k,n,t; float c,s,d; char tl; clrscr(); printf(ʺCho so phuong trinh n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺCho cac phan tu cua ma tran a :\nʺ); 91
- for (i=1;i
- for (j=1;j
- for (k=1;k
- Xét hệ phương trình AX=B. Khi giải hệ bằng phương pháp Gauss ta đưa nó về dạng ma trận tam giác sau một loạt biến đổi. Phương pháp khử Gauss‐Jordan cải tiến khử Gauss bằng cách đưa hệ về dạng : EX = B* và khi đó nghiệm của hệ chính là B*. Trong phương pháp Gauss‐Jordan mỗi bước tính phải tính nhiều hơn phương pháp Gauss nhưng lại không phải tính nghiệm. Để đưa ma trận A về dạng ma trận E tại bước thứ i ta phải có aii = 1 và aij = 0. Như vậy tại lần khử thứ i ta biến đổi : 1.aij = aij/aii (j = i + 1, i + 2,..., n) 2.k = 1, 2,..., n akj = akj ‐ aijaki (j = i + 1, i + 2,..., n) bk = bk ‐ biaki Ví dụ : Cho hệ ⎛8 4 2 0 ⎞ ⎛ x1 ⎞ ⎛ 24 ⎞ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜ 4 10 5 4 ⎟ ⎜ x 2 ⎟ ⎜ 32 ⎟ ⎜ 2 5 6.5 4 ⎟ × ⎜ x ⎟ = ⎜ 26 ⎟ ⎜ ⎟ ⎜ 3⎟ ⎜ ⎟ ⎜0 4 4 9 ⎟ ⎜ x 4 ⎟ ⎜ 21 ⎟ ⎝ ⎠⎝ ⎠⎝ ⎠ Biến đổi lần 1: ta chia hàng 1 cho a11 = 8; nhân hàng 1 vừa nhận được với 4 và lấy hàng 2 trừ đi; nhân hàng 1 vừa nhận được với 2 và lấy hàng 3 trừ đi; giữ nguyên hàng 4 vì phần tử đầu tiên đã bằng 0 ta có ⎛ 1 0.5 0.25 0 ⎞ ⎛ x1 ⎞ ⎛ 3 ⎞ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜ 4 ⎟ ⎜ x 2 ⎟ ⎜ 20 ⎟ 08 4 × = ⎜0 4 4 ⎟ ⎜ x 3 ⎟ ⎜ 20 ⎟ 6 ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜0 4 9 ⎟ ⎜ x 4 ⎟ ⎜ 21 ⎟ 4 ⎝ ⎠⎝ ⎠⎝ ⎠ Biến đổi lần 2 : ta chia hàng 2 cho a22 = 8; nhân hàng 2 vừa nhận được với 0.5 và lấy hàng 1 trừ đi; nhân hàng 2 vừa nhận được với 4 và lấy hàng 3 trừ đi; nhân hàng 2 vừa nhận được với 4 và lấy hàng 4 trừ đi ta có : ⎛ 1 0 0 − 0.25 ⎞ ⎛ x1 ⎞ ⎛ 1.75 ⎞ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜ 0 1 0.5 0.5 ⎟ ⎜ x 2 ⎟ ⎜ 2.5 ⎟ × = ⎜0 0 4 2 ⎟ ⎜ x 3 ⎟ ⎜ 10 ⎟ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜0 0 2 7 ⎟ ⎜ x 4 ⎟ ⎜ 11 ⎟ ⎝ ⎠⎝ ⎠⎝ ⎠ Biến đổi lần 3: Ta chia hàng 3 cho a33 = 4; giữ nguyên hàng 1; nhân hàng 3 vừa nhận được với 0.5 và lấy hàng 2 trừ đi; nhân hàng 3 vừa nhận được với 2 và lấy hàng 4 trừ đi ta có : 95
- ⎛ 1 0 0 − 0.25 ⎞ ⎛ x1 ⎞ ⎛ 1.75 ⎞ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜ 0 1 0 0.25 ⎟ ⎜ x 2 ⎟ ⎜ 1.25 ⎟ × = ⎜0 0 1 0.5 ⎟ ⎜ x 3 ⎟ ⎜ 2.5 ⎟ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜0 0 0 6 ⎟ ⎜ x4 ⎟ ⎜ 6 ⎟ ⎝ ⎠⎝ ⎠⎝ ⎠ Biến đổi lần 4: Ta chia hàng 4 cho a44 = 6; nhân hàng 4 vừa nhận được với ‐ 0.25 và lấy hàng 1 trừ đi; nhân hàng 4 vừa nhận được với 0.25 và lấy hàng 2 trừ đi; nhân hàng 4 vừa nhận được với 0.5 và lấy hàng 3 trừ đi ta có : ⎛ 1 0 0 0 ⎞ ⎛ x1 ⎞ ⎛ 2 ⎞ ⎜ ⎟⎜ ⎟ ⎜⎟ ⎜ 0 1 0 0 ⎟ ⎜ x2 ⎟ ⎜ 1 ⎟ ⎜0 0 1 0⎟ × ⎜x ⎟ = ⎜2⎟ ⎜ ⎜0 0 0 1⎟ ⎜ x ⎟ ⎜ 1⎟ 3 ⎟⎜ ⎟ ⎜⎟ ⎝ ⎠ ⎝ 4⎠ ⎝ ⎠ và ta có ngay vec tơ nghiệm. Chương trình 4‐4 #include #include #include #include #include #define spt 10 void main() { float a[spt][2*spt]; float b[spt]; int i,j,k,n,m,t; float max,c; char tl; clrscr(); printf(ʺCho so phuong trinh n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺCho cac phan tu cua ma tran a :\nʺ); for (i=1;i
- { printf(ʺa[%d][%d] = ʺ,i,j); scanf(ʺ%fʺ,&a[i][j]); } printf(ʺ\nʺ); printf(ʺMa tran a ma ban da nhapʺ); printf(ʺ\nʺ); for (i=1;i
- printf(ʺ\nʺ); } printf(ʺ\nʺ); printf(ʺCho cac phan tu cua ma tran b : \nʺ); for (i=1;i
- flushall(); i=1; while (t) { if (a[i][i]==0) { max=0; m=i; for (k=i+1;k
- for (k=1;k
- void main() { float a[max][max],r[max][max]; float b[max],x[max],y[max]; int i,j,k,l,n,t; float s; char tl; clrscr(); printf(ʺCho so phuong trinh n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺCho cac phan tu cua ma tran a : \nʺ); for (i=1;i
- scanf(ʺ%dʺ,&i); printf(ʺCho chi so cot can sua : ʺ); scanf(ʺ%dʺ,&j); printf(ʺa[ʺ,i,ʺ,ʺ,j,ʺ] = ʺ); scanf(ʺ%fʺ,&a[i][j]); } if (toupper(tl)==ʹKʹ) t=0; } printf(ʺMa tran a\nʺ); printf(ʺ\nʺ); for (i=1;i
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn