mt.h 
class mt
{
private:
int m,n;
float** p; /* Cap phat bo nho dong cho mang 2 chieu (con tro tro toi con tro)*/
public:
mt();
mt(int m1,int n1);
friend ostream& operator<< (ostream& os,const mt& x); /*Ham in ma tran*/
friend istream& operator>> (istream& is,mt &x); /*Ham nhap ma tan*/
friend mt operator+(const mt& x1,const mt& x2); /*Nap chong toan tu cong 
ma tran*/
friend mt operator-(const mt& x1,const mt& x2); /*Nap chong toan tu tru ma 
tran*/
friend mt operator*(const mt& x1,const mt& x2); /*Nap chong toan tu nhan 
ma tran*/
friend mt operator^(const mt& x,const int& n); /*Nap chong toan tu luy thua 
ma tran*/
friend int Rank(const mt& x); /*Ham tinh hang ma tran*/
friend mt kalman(const mt& a,const mt& b); /*Ham tao ma tran Kalman de 
khao sat tinh dieu khien duoc cua he thong*/
};
 
              
                                            
                                
            
 
            
                 9 trang
9 trang | 
Chia sẻ: oanh_nt | Lượt xem: 1792 | Lượt tải: 2 
              
            Nội dung tài liệu Bài tập lớn kỹ thuật lập trình, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
DIEN 9 – K53 – DHBKHN 
BÀI TẬP LỚN KỸ THUẬT LẬP TRÌNH 
Đề bài: 
Xây dựng một thư viện về ma trận bằng C++ cho phép cung cấp các chức năng để sử 
dụng viết chương trình sau: 
cin>>m; 
mkq=(m1+m2)*(m3-m4); //m1,m2..là các ma trận đối tượng 
cout<<mkq; 
Viết chương trình minh họa việc sử dụng thư viện ma trận để khảo sát tính điều khiển 
được với mô hình không gian trạng thái của đối tượng điều khiển. 
Bài làm: 
Xây dựng thư viện các thuật toán ma trận cần thiết: 
mt.h 
class mt 
{ 
private: 
 int m,n; 
 float** p; /* Cap phat bo nho dong cho mang 2 chieu (con tro tro toi con tro)*/ 
public: 
 mt(); 
 mt(int m1,int n1); 
 friend ostream& operator<< (ostream& os,const mt& x); /*Ham in ma tran*/ 
 friend istream& operator>> (istream& is,mt &x); /*Ham nhap ma tan*/ 
 friend mt operator+(const mt& x1,const mt& x2); /*Nap chong toan tu cong 
ma tran*/ 
 friend mt operator-(const mt& x1,const mt& x2); /*Nap chong toan tu tru ma 
tran*/ 
 friend mt operator*(const mt& x1,const mt& x2); /*Nap chong toan tu nhan 
ma tran*/ 
 friend mt operator^(const mt& x,const int& n); /*Nap chong toan tu luy thua 
ma tran*/ 
 friend int Rank(const mt& x); /*Ham tinh hang ma tran*/ 
 friend mt kalman(const mt& a,const mt& b); /*Ham tao ma tran Kalman de 
khao sat tinh dieu khien duoc cua he thong*/ 
}; 
mt.cpp (Định nghĩa các hàm) 
#include “mt.h” 
#include 
DIEN 9 – K53 – DHBKHN 
#include 
#include 
#include 
mt::mt() 
 { 
 this->m=0;this->n=0;this->p=NULL; 
 } 
/**********************************************************************/ 
mt::mt(int m1,int n1) 
 { 
 this->m=m1;this->n=n1; 
 this->p = new float* [m1+1]; 
 for(int i=1;i<=m1+1;i++) 
 { 
 this->p[i]= new float [n1+1]; 
 for(int j=1;j<n1+1;j++) 
 this->p[i][j]=0; 
 } 
 } 
/**********************************************************************/ 
ostream& operator<< (ostream& os,const mt& x) 
{ 
 for (int i=1 ; i<= x.m ; ++i) 
 { 
 os << "\n" ; 
 for (int j=1; j<=x.n; ++j) 
 os << setw(6) << x.p[i][j] ; 
 } 
 os << "\n" ; 
 return os; 
} 
/**********************************************************************/ 
istream& operator>> (istream& is, mt& x) 
{ 
 cout << "So Hang: " ; 
 is >> x.m; 
 cout << "So Cot: " ; 
 is >> x.n; 
 x.p = new float* [x.m+1]; 
 for (int i=1;i<x.m+1;i++) 
 { 
 x.p[i]= new float[x.n+1]; 
 for(int j=1;j<x.n+1;j++) 
 { 
 cout << "Phan Tu [" << i << "]" << "[" << j << "]" << " = " ; 
DIEN 9 – K53 – DHBKHN 
 is >> x.p[i][j]; 
 } 
 } 
 return is; 
} 
/**********************************************************************/ 
mt operator+(const mt& x1,const mt& x2) 
{ 
 if (x1.m != x2.m || x1.n !=x2.n) 
 { cout << "\n Khong thuc hien duoc do hai ma tran khong cung cap"; 
 getch(); 
 } 
 else 
 { 
 mt d(x1.m,x1.n); 
 for(int i=1; i<x1.m+1; i++) 
 for(int j=1; j<x1.n+1; j++) 
 d.p[i][j] = x1.p[i][j] + x2.p[i][j]; 
 return d; 
 } 
} 
/**********************************************************************/ 
mt operator-(const mt& x1,const mt& x2) 
{ 
 if (x1.m != x2.m || x1.n !=x2.n) 
 { cout << "\n Khong thuc hien duoc do hai ma tran khong cung cap"; 
 getch(); 
 } 
 else 
 { 
 mt d(x1.m,x1.n); 
 for(int i=1; i<x1.m+1; i++) 
 for(int j=1; j<x1.n+1; j++) 
 d.p[i][j] = x1.p[i][j] - x2.p[i][j]; 
 return d; 
 } 
} 
/**********************************************************************/ 
mt operator*(const mt& x1,const mt& x2) 
{ 
 if (x1.n != x2.m) 
 { cout << "\n Khong thuc hien duoc do hai ma tran khong cung cap"; 
 getch(); 
DIEN 9 – K53 – DHBKHN 
 } 
 else 
 { 
 mt d(x1.m,x2.n); 
 for (int i=1; i < x1.m+1; i++) 
 for (int j=1; j < x2.n+1; j++) 
 { 
 for (int k=1; k < x1.n+1; k++) 
 d.p[i][j] += x1.p[i][k] * x2.p[k][j]; 
 } 
 return d; 
 } 
} 
/**********************************************************************/ 
int Rank(const mt& x) 
{ 
 int rankmt,i,j,r,c; 
 rankmt=x.m; 
 for(i=1; i<=x.m; i++) 
 for(j=1; j<x.n; j++) 
 { 
 if(x.p[i][j]==0&&i==j) 
 { 
 for(r=i+1; r<=x.m; r++) 
 if(x.p[r][j]!=0) 
 { 
 for(c=1; c<=x.m; c++) 
 { 
 float temp= x.p[r][c]; 
 x.p[r][c]=x.p[i][c]; 
 x.p[i][c]=temp; 
 } 
 break; 
 } 
 } 
 else 
 break; 
 } 
 for(i=1; i<=x.m; i++) 
 for(j=1; j<=x.n; j++) 
 { 
 if(x.p[i][j]!=0&&i==j) 
 r=i+1; 
 while(r<=x.m) 
 { 
DIEN 9 – K53 – DHBKHN 
 float k=x.p[r][j]/x.p[i][j]; 
 for(c=1; c<=x.n; c++) 
 x.p[r][c]=x.p[r][c]-k*x.p[i][c]; 
 r++; 
 } 
 } 
 for(i=1; i<=x.m; i++) 
 { 
 for(j=1; j<=x.n; j++) 
 if(x.p[i][j]!=0) 
 break; 
 else 
 if(j==x.n) 
 rankmt--; 
 } 
 return rankmt; 
} 
/**********************************************************************/ 
mt operator^(const mt& x,const int& n) 
{ 
 mt d(x.m,x.n); 
 for (int i=1; i <x.m+1; i++) 
 for (int j=1;j<x.n+1;j++) 
 d.p[i][j]=x.p[i][j]; 
 for (int k=2; k <=n; k++) 
 d=d*d; 
 return d; 
} 
/**********************************************************************/ 
mt kalman(const mt& a,const mt& b) 
{ 
 mt d(b.m,b.m); 
 for (int i=1;i<b.m+1;i++) 
 d.p[i][1]=b.p[i][1]; 
 for (int j=2;j<b.m+1;j++) 
 for(int k=1;k<b.m+1;k++) 
 { 
 mt c=a^(j-1); 
 d.p[k][j]=(c*b).p[k][1]; 
 } 
 return d; 
} 
DIEN 9 – K53 – DHBKHN 
Chương trình sử dụng thư viện trên: 
Chương trình 1: 
cin>>m; 
mkq=(m1+m2)*(m3-m4); //m1,m2..là các ma trận đối tượng 
cout<<mkq; 
Main1.cpp 
#include “mt.h” 
#include 
#include 
#include 
#include 
void main() 
{ 
 mt m1,m2,m3,m4,mkq; 
 cout << "\n Nhap ma tran M1 " <<"\n"; 
 cin >> m1; 
 cout << "\n Nhap ma tran M2 " <<"\n"; 
 cin >> m2; 
 cout << "\n Nhap ma tran M3 " <<"\n"; 
 cin >> m3; 
 cout << "\n Nhap ma tran M4 " <<"\n"; 
 cin >> m4; 
 mkq=(m1+m2)*(m3-m4); 
 cout << "\n Ma tran ket qua MKQ=(M1+M2)*(M3-M4): " <<"\n"; 
 cout << mkq; 
} 
Sau khi chạy ta có kết quả sau: 
DIEN 9 – K53 – DHBKHN 
DIEN 9 – K53 – DHBKHN 
Chương trình 2: 
Viết chương trình minh họa việc sử dụng thư viện ma trận để khảo sát tính điều khiển 
được với mô hình không gian trạng thái của đối tượng điều khiển 
Main2.cpp 
#include “mt.h” 
#include 
#include 
#include 
#include 
void main() 
{ 
 mt a,b,p; 
 int n; 
 cout << "\n Nhap ma tran A " <<"\n"; 
 cin >> a; 
 cout << "\n Nhap ma tran B " <<"\n"; 
 cin >> b; 
 cout << "\n Nhap bac cua he " <<"\n"; 
 cin >> n; 
 p=kalman(a,b); 
 cout << "\n Ma tran Kalman: " <<"\n" <<p; 
 if (Rank(p)!=n) 
 cout << "\nHe Khong Dieu Khien Duoc" << "\n"; 
 else 
 cout << "\nHe Dieu Khien Duoc" << "\n"; 
} 
Sau khi chạy ta có kết quả sau: 
DIEN 9 – K53 – DHBKHN 
            Các file đính kèm theo tài liệu này:
 bai_tap_lon_ky_thuat_lap_trinh.pdf bai_tap_lon_ky_thuat_lap_trinh.pdf