30/09/2018, 16:06
Tìm nghịch đảo của ma trận
E làm như này nhưng chạy bị sai, e sửa mãi mà ko đc. các a chỉ giúp e với ạ.
void inMaTran(float **p, int x, int y)
{
for(int i=0; i<x; i++)
{
cout<<"
";
for(int j=0; j<y; j++) cout<<setw(5)<<p[i][j]<<" ";
}
cout<<endl;
float dinhThuc(float **a,int m, int n)
{
if(m==n)
{
float det=1.0;
//Tao ma tran B lay gia tri cua ma tran A
float **b=new float*[m];
for(int i=0; i<m; i++) b[i]=new float[n];
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
b[i][j]=a[i][j];
//Dua ma tran ve ma tran tam giac tren
int i=0;
for(i=0; i<m-1; i++)
{
if(b[i][i]==0)
for(int k=i+1; k<m; k++)
{
bool c=0;
if(b[k][i]!=0)
{
for(int j=0; j<n; j++)
{
float t=b[i][j];
b[i][j]=b[k][j];
b[k][j]=t;
}
c=1;
break;
}
if(c) break;
}
for(int k=i+1; k<m; k++)
{
float tl=b[k][i]/b[i][i];
for(int j=0; j<n; j++)
b[k][j]-=b[i][j]*tl;
}
}
//Tinh dinh thuc bang tich cac phan tu tren duong cheo chinh
for(int i=0; i<n; i++) det*=b[i][i];
for(int i=0; i<n; i++) delete[] b[i];
delete[] b;
return det;
}
else return 0;
}
//Tinh tung phan tu cua ma tran phu hop
float phuHop(float **b, float det, int x, int y)
{
float **p=new float*[m-1];
for(int i=0; i<m-1; i++) p[i]=new float[n-1];
for(int i=0; i<x-1; i++)
{
for(int j=0; j<y-1; j++)
p[i][j]=b[i][j];
for(int j=y; j<n-1; j++)
p[i][j]=b[i+1][j];
}
for(int i=x; i<m-1; i++)
{
for(int j=0; j<y-1; j++)
p[i][j]=b[i][j+1];
for(int j=y; j<n-1; j++)
p[i][j]=b[i+1][j+1];
}
float pTu=(pow(-1,x+y)*dinhThuc(p,m-1,n-1))/det;
for(int i=0; i<m-1; i++) delete[] p[i];
delete[] p;
return pTu;
}
void nghichDao()
{
if(dinhThuc(a,m,n)==0) cout<<" Ma Tran A khong kha nghich
";
else
{
float **b=new float*[m];
for(int i=0; i<m; i++) b[i]=new float[n];
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
b[i][j]=phuHop(a,dinhThuc(a,m,n),i,j);
cout<<"Ma tran nghich dao cua ma tran A la:";
inMaTran(b,m,n);
for(int i=0; i<m; i++) delete[] b[i];
delete[] b;
}
}
}
Bài liên quan
Ma trận học từ năm 2 tới giờ 6 năm rồi. Thua
hụ hụ, e làm mãi mà vẫn ra kết quả sai.
Bỏ qua phần code, em nói phần em muốn làm là gì, và lỗi cụ thể đi, chứ nếu em hỏi tìm nghịch đảo ma trận thì cũng giống như giờ anh hỏi em cách tính thuế thu nhập cá nhân vậy.
ở đây có các bước a ơi:
Không thấy ai vào giúp bạn. Bạn thử debug từng dòng code của bạn xem sao? Máy mình không code đc nên cũng thua =))
để e thử. hì
e vẫn chưa biết cách vận dụng debug lắm.
Bạn dùng công cụ nào. Chỉ cần lên youtube hay google gõ cách debug c++ trong + tên công cụ. Nếu không thấy bạn có thể search bằng từ khóa tiếng anh. How to debug c++ in …
cách debug thì e biết rồi, nhưng e ko biết bước làm đúng hay sai thôi ạ