用C语言实现列主元解线性方程组,输出精度为10^(-4)
时间: 2023-06-03 12:02:48 浏览: 97
好的,我明白了。以下是用C语言实现列主元解线性方程组的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 100 /* 最大方程组数 */
#define max(a, b) ((a) > (b) ? (a) : (b)) /* 宏定义取最大值 */
double a[MAXN][MAXN], b[MAXN]; /* 系数矩阵和常量矩阵 */
int n; /* 矩阵维数 */
void gauss() /* 高斯消元列主元法 */
{
int i, j, k, r;
double max, t;
for (k = 1; k < n; k++)
{
max = fabs(a[k][k]);
r = k;
for (i = k + 1; i <= n; i++)
{
if (fabs(a[i][k]) > max)
{
max = fabs(a[i][k]);
r = i;
}
}
if (r != k)
{
for (j = k; j <= n; j++)
{
t = a[k][j];
a[k][j] = a[r][j];
a[r][j] = t;
}
t = b[k];
b[k] = b[r];
b[r] = t;
}
if (fabs(a[k][k]) < 1e-4)
{
printf("算法异常\n");
return;
}
for (i = k + 1; i <= n; i++)
{
t = a[i][k] / a[k][k];
b[i] -= t * b[k];
for (j = k + 1; j <= n; j++)
{
a[i][j] -= t * a[k][j];
}
}
}
if (fabs(a[n][n]) < 1e-4)
{
printf("算法异常\n");
return;
}
b[n] /= a[n][n];
for (i = n - 1; i >= 1; i--)
{
t = b[i];
for (j = i + 1; j <= n; j++)
{
t -= a[i][j] * b[j];
}
b[i] = t / a[i][i];
}
printf("解为:\n");
for (i = 1; i <= n; i++)
{
printf("%.4f\n", b[i]);
}
}
int main()
{
int i, j;
printf("请输入矩阵的阶数:\n");
scanf("%d", &n);
printf("请输入矩阵的各元素及常量矩阵:\n");
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
scanf("%lf", &a[i][j]);
}
scanf("%lf", &b[i]);
}
gauss(); /* 解线性方程组 */
return 0;
}
```
注意这个程序中涉及到了数值精度的问题,把小于1e-4的数认为是0。
阅读全文