c语言编写高斯若当消元法求逆矩阵
时间: 2023-07-09 07:34:57 浏览: 36
好的,我可以为您提供一个基于C语言编写的高斯若当消元法求逆矩阵的程序。
首先,需要定义一个函数来进行矩阵的高斯若当消元,以下是该函数的代码:
```c
void gauss_jordan(int n, double a[][2*n], double inv[][n])
{
int i, j, k;
double t;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i==j)
{
inv[i][j] = 1;
}
else
{
inv[i][j] = 0;
}
}
}
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
t = a[j][i] / a[i][i];
for(k=0; k<2*n; k++)
{
a[j][k] -= t * a[i][k];
}
for(k=0; k<n; k++)
{
inv[j][k] -= t * inv[i][k];
}
}
}
for(i=n-1; i>=0; i--)
{
for(j=i-1; j>=0; j--)
{
t = a[j][i] / a[i][i];
for(k=0; k<2*n; k++)
{
a[j][k] -= t * a[i][k];
}
for(k=0; k<n; k++)
{
inv[j][k] -= t * inv[i][k];
}
}
}
for(i=0; i<n; i++)
{
t = a[i][i];
for(j=0; j<2*n; j++)
{
a[i][j] /= t;
}
for(j=0; j<n; j++)
{
inv[i][j] /= t;
}
}
}
```
然后,我们可以定义一个主函数来输入矩阵,调用高斯若当消元函数,输出逆矩阵,以下是该主函数的代码:
```c
int main()
{
int n, i, j;
double a[10][20], inv[10][10];
printf("Enter the order of matrix: ");
scanf("%d", &n);
printf("Enter the elements of matrix:\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%lf", &a[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=n; j<2*n; j++)
{
if(i==(j-n))
{
a[i][j] = 1;
}
else
{
a[i][j] = 0;
}
}
}
gauss_jordan(n, a, inv);
printf("Inverse matrix is:\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%lf ", inv[i][j]);
}
printf("\n");
}
return 0;
}
```
该程序可以通过输入矩阵的阶数和元素,输出矩阵的逆矩阵。请注意,该程序仅适用于可逆矩阵,不适用于奇异矩阵。