c语言编写高斯若当消元法求逆矩阵
时间: 2023-07-09 15:34:58 浏览: 122
高斯消元法求N阶矩阵的逆矩阵(c语言)
5星 · 资源好评率100%
下面是C语言代码实现高斯若当消元法求逆矩阵:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3 // 矩阵维度
// 打印矩阵
void print_matrix(double a[][N])
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%f\t", a[i][j]);
printf("\n");
}
printf("\n");
}
// 高斯-约旦消元法
void gauss_jordan(double a[][N], double b[][N])
{
int i, j, k;
double temp;
// 将增广矩阵化为上三角矩阵
for (i = 0; i < N; i++)
{
// 判断对角线元素是否为0,若为0则进行行交换
if (a[i][i] == 0)
{
for (j = i + 1; j < N; j++)
{
if (a[j][i] != 0)
{
// 行交换
for (k = 0; k < N; k++)
{
temp = a[i][k];
a[i][k] = a[j][k];
a[j][k] = temp;
temp = b[i][k];
b[i][k] = b[j][k];
b[j][k] = temp;
}
break;
}
}
}
// 将a[i][i]变为1
temp = a[i][i];
for (j = i; j < N; j++)
a[i][j] /= temp;
for (j = 0; j < N; j++)
b[i][j] /= temp;
// 将下面的元素变为0
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];
}
}
// 将增广矩阵化为对角矩阵
for (i = N - 1; i >= 0; i--)
{
for (j = i - 1; j >= 0; j--)
{
temp = a[j][i];
for (k = i; k < N; k++)
a[j][k] -= a[i][k] * temp;
for (k = 0; k < N; k++)
b[j][k] -= b[i][k] * temp;
}
}
}
int main()
{
double a[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 输入矩阵
double b[N][N] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; // 单位矩阵
int i, j;
printf("原矩阵:\n");
print_matrix(a);
gauss_jordan(a, b);
printf("逆矩阵:\n");
print_matrix(b);
return 0;
}
```
在这里,我们先定义了一个3*3的矩阵a和一个3*3的单位矩阵b,然后调用gauss_jordan函数实现高斯若当消元法求逆矩阵,最后输出结果。
阅读全文