记录一下第一次独立写的代码
感觉自己写的很粗糙,慢慢来吧。
//===================
//三阶矩阵求逆矩阵
//===================
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include<string>
#include<iomanip>
using namespace std;
int i, j;
int main()
{
//**输入待求矩阵与单位矩阵**//
double A[3][3] = { { 1,2,3 },{ 1,2,2 },{ 3,4,6 } }; //在此输入待求矩阵
double E[3][3] = { { 1,0,0 },{ 0,1,0 },{ 0,0,1 } }; //单位矩阵
cout << "原矩阵为:" << endl;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
cout << A[i][j] << " ";
}
cout << endl;
}
cout << endl;
//**计算矩阵行列式,按第一行展开**//
double Matrix_determinant;
Matrix_determinant =
A[0][0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) -
A[0][1] * (A[1][0] * A[2][2] - A[1][2] * A[2][0]) +
A[0][2] * (A[1][0] * A[2][1] - A[1][1] * A[2][0]) ;
//**判断行列式是否为0**//
if (Matrix_determinant == 0)
{
cout << "该矩阵没有逆矩阵" << endl;
cout << endl;
system("pause");
}
else
{
//**将第一行第一个数变为1**//
double temp1 = A[0][0];
for (j = 0; j < 3; j++)
{
A[0][j] = A[0][j] / temp1;
E[0][j] = E[0][j] / temp1;
}
//行变换-将第二行第一个数变为零
double temp2 = A[1][0];
for (j = 0; j < 3; j++)
{
A[1][j] = A[1][j] - A[0][j] * temp2;
E[1][j] = E[1][j] - E[0][j] * temp2;
}
//将第三行第一个数变为零
double temp3 = A[2][0];
for (j = 0; j < 3; j++)
{
A[2][j] = A[2][j] - A[0][j] * temp3;
E[2][j] = E[2][j] - E[0][j] * temp3;
}
//判断第二行第个数是否为0,若为零则将第二行与第三行互换
double mid1[3] = { A[1][0], A[1][1], A[1][2] };
double mid2[3] = { E[1][0], E[1][1], E[1][2] };
if (A[1][1] == 0)
{
// 将第三行的数换到第二行
for (j = 0; j < 3; j++)
{
A[1][j] = A[2][j];
E[1][j] = E[2][j];
}
// 将第二行的数换到第三行
for (j = 0; j < 3; j++)
{
A[2][j] = mid1[j];
E[2][j] = mid2[j];
}
}
//将第二行第二个数化为1
double temp4 = A[1][1];
for (j = 0; j < 3; j++)
{
A[1][j] = A[1][j] / temp4;
E[1][j] = E[1][j] / temp4;
}
cout << endl;
//行变换---第三行减去A3_2 倍的第二行---将第三行第二列也变为零
double temp5 = A[2][1];
for (j = 0; j < 3; j++)
{
A[2][j] = A[2][j] - temp5 * A[1][j];
E[2][j] = E[2][j] - temp5 * E[1][j];
}
//让第三行最后一个数为1
double temp6 = A[2][2];
for (j = 0; j < 3; j++)
{
A[2][j] = A[2][j] / temp6;
E[2][j] = E[2][j] / temp6;
}
//将第一行第二个数、第三个数与第二行第三个数变为零**//
//将第二行第三个数变为0
double temp7 = A[1][2];
for (j = 0; j < 3; j++)
{
A[1][j] = A[1][j] - temp7 * A[2][j];
E[1][j] = E[1][j] - temp7 * E[2][j];
}
//将第一行第三个数变为0
double temp8 = A[0][2];
for (j = 0; j < 3; j++)
{
A[0][j] = A[0][j] - temp8 * A[2][j];
E[0][j] = E[0][j] - temp8 * E[2][j];
}
//将第一行第二个数变为0
double temp9 = A[0][1];
for (j = 0; j < 3; j++)
{
A[0][j] = A[0][j] - temp9 * A[1][j];
E[0][j] = E[0][j] - temp9 * E[1][j];
}
//判定--该判定主要解决输出为-0的问题**//
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (A[i][j] == 0)
{
A[i][j] = 0;
}
}
}
//**输出最后化简的矩阵**//
cout << "原矩阵最终化简为:" << endl;
cout << A[0][0] << " " << A[0][1] << " " << A[0][2] << " " << endl;
cout << A[1][0] << " " << A[1][1] << " " << A[1][2] << " " << endl;
cout << A[2][0] << " " << A[2][1] << " " << A[2][2] << " " << endl;
cout << endl;
cout << endl;
//判定--该判定主要解决输出为-0的问题**//
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (E[i][j] == 0)
{
E[i][j] = 0;
}
}
}
//**输出最后的逆矩阵**//
cout << "该矩阵的逆矩阵为:" << endl;
cout << endl;
cout << E[0][0] << " " << E[0][1] << " " << E[0][2] << " " << endl;
cout << E[1][0] << " " << E[1][1] << " " << E[1][2] << " " << endl;
cout << E[2][0] << " " << E[2][1] << " " << E[2][2] << " " << endl;
cout << endl;
system("pause");
return 0;
}
}