请帮我写一个高阶矩阵求逆程序,用c语言,使用高斯-约旦消元法来求解逆矩阵
时间: 2024-02-21 07:58:30 浏览: 104
好的,以下是一个基于高斯-约旦消元法的矩阵求逆的C语言程序。程序中使用了动态内存分配来存储矩阵,矩阵的行数和列数由用户输入。
```c
#include <stdio.h>
#include <stdlib.h>
// 高斯-约旦消元法求解逆矩阵
void invert(double **A, int n)
{
double **B = malloc(n * sizeof(double *)); // 用于存储单位矩阵
for (int i = 0; i < n; i++)
{
B[i] = malloc(n * sizeof(double));
for (int j = 0; j < n; j++)
{
B[i][j] = (i == j) ? 1.0 : 0.0; // 初始化为单位矩阵
}
}
// 逐列消元
for (int k = 0; k < n; k++)
{
double pivot = A[k][k];
for (int j = 0; j < n; j++)
{
A[k][j] /= pivot;
B[k][j] /= pivot;
}
for (int i = 0; i < n; i++)
{
if (i != k)
{
double factor = A[i][k];
for (int j = 0; j < n; j++)
{
A[i][j] -= factor * A[k][j];
B[i][j] -= factor * B[k][j];
}
}
}
}
// 输出结果
printf("逆矩阵为:\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%f ", B[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < n; i++)
{
free(B[i]);
}
free(B);
}
int main()
{
int n;
printf("请输入矩阵的行数和列数:");
scanf("%d", &n);
double **A = malloc(n * sizeof(double *));
printf("请输入矩阵的元素:\n");
for (int i = 0; i < n; i++)
{
A[i] = malloc(n * sizeof(double));
for (int j = 0; j < n; j++)
{
scanf("%lf", &A[i][j]);
}
}
invert(A, n);
// 释放内存
for (int i = 0; i < n; i++)
{
free(A[i]);
}
free(A);
return 0;
}
```
注意:由于本程序使用了动态内存分配,因此必须在程序结束时手动释放内存,否则会导致内存泄漏。
阅读全文
相关推荐


















