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:
Thông qua n-1 bước hồi quy ta được A=L.U. Với L là ma trận tam giác dưới và U là ma trận tam giác trên.
Cài đặt chương trình:
#include <conio.h>
#include <iostream>
#define max 100
using namespace std;
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];
}
}
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(int 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];
}
}
int main(){
int n;
float A[max][max],L[max][max],U[max][max];
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();
return 0;
}
Kết quả chạy chương trình:
Tag: C, C++, ma trận, A=LU, A=L*U, phân rã ma trận
Related Post:
Big Data, Data Mining và Machine Learning: Bên trong những điều ẩn giấuTrong vài năm nay “Big Data” (dữ liệu lớn) và “Data Mining” (Khai thác dữ liệu) đã trở thành những từ ngữ thường được dùng trong nền công nghiệp kĩ thuật. Nó giải thích được tại sao Facebook biết được nên quảng cáo điều gì với bạn, iPhones biết điều chỉnh cách đánh chữ của bạn và rõ ràng hơn nữa là NSA (National Security Agency) biết được bạn có phải một kẻ khủng bố h… Read More
Unit Test Với AngulaJSThiết lập môi trường Unit TestingKarma - môi trường để chạy Unit Testing(Vai trò của Karma đối với việc Kiểm thử trong AngularJS cũng giống như nền móng và mặt bằng xung quanh của một ngôi nhà)Cài đặt Node.jsCác bạn có thể tham khảo hướng dẫn cài đặt Node.js tại trang hướng dẫn này.Cài đặt KarmaDưới đây tôi chỉ ghi chép lại các bước cài đặt mà tôi đã thực hiện tr… Read More
NoSQL, MongoDB là gì?1. NoSQL1.1. Khái niệmNoSQL là một khái niệm chỉ về một lớp các hệ cơ sở dữ liệu không sử dụng mô hình quan hệ. (RDBMS). RDBMS vốn tồn tại khá nhiều nhược điểm như có hiệu năng không tốt nếu kết nối dữ liệu nhiều bảng lại hay khi dữ liệu trong một bảng là rất lớn.NoSQL ra đời năm 1998 bởi Carlo Strozzi khi ông lập mới một hệ cơ sở dữ liệu quan hệ mã nguồn mở nhanh và … Read More
Hive là gì?1. Tổng quan về HiveApache Hive là 1 kho dữ liệu (data warehouse) hỗ trợ người sử dụng có thể dễ dàng hơn trong việc quản lý và truy vấn đối với các tập dữ liệu lớn được lưu trữ trên các hệ thống lưu trữ phân tán (distributed storage). Hive được xây dựng dựa trên cơ sở của Apache Hadoop, nó cung cấp các tính năng chinh sau:Công cụ cho phép dễ dàng thực hiện tác v… Read More
HBase là gì?IntroductionHBase là 1 hệ cơ sở dữ liệu mã nguồn mở được xây dựng dựa trên BigTable được mô tả trong nghiên cứu: “BigTable: A Distributed Storage Systemystem for Structure Data”. HBase cung cấp khả năng lưu trữ dữ liệu lớn lên tới hàng tỷ dòng, hàng triệu cột khác nhau cũng như hàng petabytes dung lượng. HBase là 1 NoSQL điển hình bởi vậy các tables của HBase khô… Read More
Java Reflection truy xuất biến, hàm private Reflection là kĩ thuật rất cần thiết để lấy các thông tin của một kiểu dữ liệu. Dựa vào đó ta có thể kích hoạt (như các phương thức) hoặc tạo thể hiện của kiểu dữ liệu đó. Một ứng dụng quan trọng của reflection mà bạn có thể biết là Java Bean. Nhờ đó, các IDE (như NetBeans) có thể lấy được các thông tin và thiết lập giá trị cho các đối tượng.Kiến trúc của Java Reflect… Read More
Klik untuk melihat kode: