编写一个c语言程序用列主元素法求解方程组
时间: 2023-06-03 08:06:18 浏览: 93
非常感谢您的提问。以下是使用列主元素法求解一般方程组的C代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 3
void swap(double *a, double *b) {
double temp = *a;
*a = *b;
*b = temp;
}
int main() {
double A[N][N+1], x[N]; // 增广矩阵和解向量
int i, j, k, max_idx; // max_idx 表示最大主元素的下标
// 输入增广矩阵
printf("请输入增广矩阵:\n");
for (i = 0; i < N; i++) {
for (j = 0; j <= N; j++) {
scanf("%lf", &A[i][j]);
}
}
// 高斯消元
for (i = 0; i < N; i++) {
// 选主元
max_idx = i; // 先假设第i个元素最大
for (j = i+1; j < N; j++) {
if (fabs(A[j][i]) > fabs(A[max_idx][i])) {
max_idx = j;
}
}
// 交换第i行和第max_idx行
for (k = i; k <= N; k++) {
swap(&A[i][k], &A[max_idx][k]);
}
// 消元
for (j = i+1; j < N; j++) {
double tmp = A[j][i] / A[i][i];
for (k = i; k <= N; k++) {
A[j][k] -= tmp * A[i][k];
}
}
}
// 回带求解
for (i = N-1; i >= 0; i--) {
x[i] = A[i][N] / A[i][i];
for (j = i-1; j >= 0; j--) {
A[j][N] -= A[j][i] * x[i];
}
}
// 输出解向量
printf("方程的解为:\n");
for (i = 0; i < N; i++) {
printf("x[%d] = %f\n", i, x[i]);
}
return 0;
}
希望这个程序能够帮助到您。