#include
int main()
{
int i,j,k,n, sign = 1;
double det = 1; double temp;
double a[10][10],b[10][10];
// Nhap cap cua ma tran:
printf("\nCap cua ma tran vuon, n = "); scanf("%d",&n);
// Nhap ma tran a:
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("a[%d][%d] = ", i, j);
scanf("%lf",&a[i][j]);
}
// Tinh dinh thuc cua a
for (i = 0; i < n-1; i++)
{
if (a[i][i] == 0) // N?u g?p ph?n t? trên du?ng chéo chính b?ng 0 thì tìm hàng khác d? d?i
{
k = i+1;
while (k < n && a[k][i] == 0) k++;
if (k==n) { printf("\ndet(a) = 0"); break;} // Không timg th?y, t?c det(a) = 0
for (j = i; j < n; j++)// Ð?i hàng i v?i hàng k
{
temp = a[i][j];
a[i][j] = a[k][j];
a[k][j] = temp;
}
sign = -sign; // Ð?nh th?c d?i d?u dó
}
for (j = i+1; j < n; j++)// Bi?n d?i d? các ph?n t? cùng c?t ? hàng du?i b?ng 0 dó
{
temp = -a[j][i]/a[i][i];
for (k = i+1; k < n; k++) a[j][k] += temp*a[i][k]; // Nhân hàng i v?i (-a[j][i]/a[i][i]) r?i c?ng vào hàng j
}
det *= a[i][i]; // Tính d?n det(a)
}
det *= a[n-1][n-1]; // Nhân v?i ph?n t? cu?i chéo chính n?a là xong
printf("\ndet(a) = %lf\n",det);
//Tinh ma tran nguoc
if (det != 0)
{
for (i = 0; i < n; i++) // T?o ra b là ma tr?n don v? dó
for (j = 0; j < n; j++)
if (i==j) b[i][j] = 1; else b[i][j] = 0;
for (i = 0; i < n; i++) // X? lý t? hàng d?u d?n hàng cu?i
{
if (a[i][i] == 0) // N?u g?p ph?n t? trên du?ng chéo chính b?ng 0 thì d?i hàng
{
k = i+1;
while (k < n && a[k][i] == 0) k++;
for (j = 0; j < n; j++) // Ð?i hàng dó c?a a dó, c? v?i ma tr?n b n?a
{
temp = a[i][j];
a[i][j] = a[k][j];
a[k][j] = temp;
temp = b[i][j];
b[i][j] = b[k][j];
b[k][j] = temp;
}
}
temp = a[i][i];
for (j = i; j < n; j++) a[i][j] /= temp;
for (j = 0; j < n; j++) b[i][j] /= temp;
for (j = i+1; j < n; j++)
{
temp = -a[j][i];
for (k = i; k < n; k++) a[j][k] += temp*a[i][k];
for (k = 0; k < n; k++) b[j][k] += temp*b[i][k];
}
}// K?t thúc quá trình Gauss
for (i = n-1; i > 0; i--) // B?t d?u quá trình Jordan
for (j = i-1; j >=0; j--)
{
temp = -a[j][i];
for (k = n-1; k >= i; k--) a[j][k] += temp*a[i][k];
for (k = 0; k < n; k++) b[j][k] += temp*b[i][k];
}
for (i = 0; i < n; i++)// In ra ma tr?n b, bây gi? là ma tr?n nghich d?o c?a a
{
for (j = 0; j < n; j++) printf("%8.3lf\t", b[i][j]);
printf("\n");
}
}
else printf("\nKhong co ma tran nghich dao\n");
getch();
}
0 nhận xét:
Đăng nhận xét