#include<stdio.h>//c
#include<iostream>//c++
#include<time.h>//time() head
#include<iomanip>//setw() head
#include<stdlib.h>//rand() and srand() head
using namespace std;//cout and cin before
double Ahang();
void Abansui();
double Ahang(double a[3][3])
{
double c[3][3], n = 0;
int i, j;
for (i = 0; i < 3; i++)//求伴随矩阵
{
for (j = 0; j < 3; j++)
{
if (i != 1 && j != 1)
{
c[j][i] = pow(-1, i + j) * (a[(i + 1) % 3][(j + 1) % 3] * a[(i + 2) % 3][(j + 2) % 3] - a[(i + 2) % 3][(j + 1) % 3] * a[(i + 1) % 3][(j + 2) % 3]);
}
else if (i == 1 && j == 1)
{
c[j][i] = pow(-1, i + j) * (a[(i + 1) % 3][(j + 1) % 3] * a[(i + 2) % 3][(j + 2) % 3] - a[(i + 2) % 3][(j + 1) % 3] * a[(i + 1) % 3][(j + 2) % 3]);
}
else
{
c[j][i] = pow(-1, i + j + 1) * (a[(i + 1) % 3][(j + 1) % 3] * a[(i + 2) % 3][(j + 2) % 3] - a[(i + 2) % 3][(j + 1) % 3] * a[(i + 1) % 3][(j + 2) % 3]);
}
}
}
for (i = 0; i < 3; i++)
{
n = n + a[0][i] * c[i][0];//计算矩阵行列式
}
return n;
}
void Abansui(double a[4][4], double c[4][4])
{
double d[3][3], n;
int i, j, k, m;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 3; k++)
{
for (m = 0; m < 3; m++)
{
d[k][m] = a[(k + i+1) % 4][(m + j+1) % 4];//分离出子式
}
}
n = Ahang(d);
c[j][i] = pow(-1, i + j) * n;
}
}
}
int main()
{
double a[4][4], b[4][4], c[4][4];
int n, i, j;
double A = 0;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
cin >> a[i][j];
}
}
Abansui(a, c);
for (n = 0; n < 4; n++)
{
A = A + a[0][n] * c[n][0];
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
b[i][j] = c[i][j] / A;
}
}
cout << "A的逆矩阵为:" << endl;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
cout << setw(6) << b[i][j];
}
cout << "" << endl;
}
return 0;
}
【代码】求4*4矩阵的逆矩阵
最新推荐文章于 2024-09-12 18:27:04 发布