Chuyển đến nội dung chính

[C\C++] Thuật toán phân rã ma trận A = LU [Xử lý ma trận - mảng 2 chiều]

Bài toán: Quá trình chuyển hoá ma trận A ban đầu thành tích hai ma trận tam giác L.U dựa vào phép khử Gauss được thực hiện bằng các phép nhân ma trận. Thuật toán này được gọi là thuật toán Crout. Quá trình Crout bao gồm nhiều bước hồi quy. Nếu ma trận A có cấp n x n ta cần n -1 bước. Thuật toán được thể hiện cụ thể như sau:


[Code Turbo C++]

#include "iostream.h"
#define max 100

// ham nhap ma tran
void Nhap(float A[max][max],int n) {
 for(int i = 0; i<n; i++)
  for(int j = 0; j<n; j++) {
   cout<<"a["<<i<<"]["<<j<<"] = ";
   cin>>A[i][j];
  }
}

// ham xuat ma tran
void XuatMaTran(float A[max][max], int n) {
 cout<<"\n";
 for(int i=0 ; i<n; i++){
   cout<<endl;
   for(int j=0 ; j<n; j++)
     cout<<A[i][j]<<"\t";
  }
}

/*Phan ra A = LU*/
void PhanRaLU(float A[max][max], float L[max][max], float U[max][max], int n) {
 for(int k =0; k<n; k++) {
  U[k][k] = A[k][k];
  L[k][k] = 1;
  for(int i=k+1; i<n; i++) {
   L[i][k] = A[i][k]/U[k][k];
  U[k][i] = A[k][i];
  U[i][k] = 0;
  L[k][i] = 0;
 }
for(i = k+1; i<n; i++)
 for(int j = k+1; j<n; j++)
  A[i][j] = A[i][j]-L[i][k]*U[k][j];
  }
}

// ham chinh
void main() {
 int n;
 float A[max][max],L[max][max],U[max][max];
 clrscr();
 cout<<"Nhap n = ";
 cin>>n;
 cout<<"Nhap ma tran A\n"; 
 Nhap(A,n);
 cout<<"Ma tran A vua nhap";
 XuatMaTran(A,n);
 PhanRaLU(A,L,U,n);
 cout<<"\nMa tran L";
 XuatMaTran(L,n);
 cout<<"\nMa tran U";
 XuatMaTran(U,n);
 getch();

}

[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

BÀI ĐỌC NHIỀU

[Java] Hướng dẫn lập trình Java với NetBean [Clip hướng dẫn]

[Đồ họa trong C\C++] Sử dụng các hàm đồ họa thông dụng trong C\C++ [C\C++]

[ C++ ] Tính đa hình, phương thức ảo, lớp trừu tượng trong C++ [Lập trình hướng đối tượng với C++]

[ Sort ] Thuật toán Heap-Sort [Code C++]

[Algorithm] Thuật toán Đệ quy và một số bài toán Đệ quy cơ bản

[Assembly] Tính tổng 2 số nguyên nhỏ hơn 10 [Lập trình hợp ngữ]

[Assembly] Hướng dẫn sử dụng Emu8086 [Lập trình hợp ngữ]

Bài tập +đáp án Lý thuyết đồ họa máy tính

[Thuật toán đồ thị / code C++] Thuật toán Dijkstra tìm đường đi ngắn nhất trên đồ thị G

[ C++ ] Kế thừa trong C++ [Lập trình hướng đối tượng với C++]