峥途 发表于 2024-4-15 21:35:04

已知系数,解三元一次线性方程组的代码?

c语言:已知系数,解三元一次线性方程组的代码?

FishC 发表于 2024-4-15 21:35:30

可以使用高斯消元法来解决三元一次线性方程组。下面是一个使用C语言编写的示例代码:

#include <stdio.h>

#define N 3 // 方程组的未知数个数

void gaussElimination(float matrix, float result)
{
    int i, j, k;
   
    // 前向消元
    for (i = 0; i < N-1; i++) {
      // 如果对角线元素为0,交换行
      if (matrix == 0) {
            for (j = i+1; j < N; j++) {
                if (matrix != 0) {
                  float tmp;
                  for (k = 0; k <= N; k++) {
                        tmp = matrix;
                        matrix = matrix;
                        matrix = tmp;
                  }
                  break;
                }
            }
      }
      
      // 消元运算
      for (j = i+1; j < N; j++) {
            float ratio = matrix / matrix;
            for (k = i; k <= N; k++) {
                matrix -= ratio * matrix;
            }
      }
    }
   
    // 回代求解
    for (i = N-1; i >= 0; i--) {
      result = matrix;
      for (j = i+1; j < N; j++) {
            result -= matrix * result;
      }
      result /= matrix;
    }
}

int main()
{
    float matrix = {{2, -1, 1, 8},
                            {-3, 2, -4, 18},
                            {1, 1, 1, 10}};
    float result;
   
    gaussElimination(matrix, result);
   
    printf("解为:x = %.2f, y = %.2f, z = %.2f\n", result, result, result);
   
    return 0;
}

在这个示例中,我们使用了一个`float`类型的二维数组`matrix`来表示方程组的系数矩阵,其中最后一列存储了等式右边的常数。`result`数组用于存储解的结果。

通过调用`gaussElimination`函数,我们会得到解的结果,并将其打印输出。在主函数中给出了一个具体的方程组作为示例。你可以根据自己的需要修改系数矩阵来求解不同的方程组。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2024-4-15 21:41:52

#include <stdio.h>

#define N 3// 方程数和未知数的数量

// 函数声明
void gaussian_elimination(float a);

int main() {
    // 系数矩阵,最后一列是常数项
    float a = {
      {2, 1, -1, 8},
      {-3, -1, 2, -11},
      {-2, 1, 2, -3}
    };

    gaussian_elimination(a);

    return 0;
}

void gaussian_elimination(float a) {
    int i, j, k;
    float factor;
   
    // 转化为上三角形
    for (k = 0; k < N; k++) {
      for (i = k+1; i < N; i++) {
            factor = a / a;
            for (j = k; j < N+1; j++) {
                a -= factor * a;
            }
      }
    }

    // 后代入法求解
    float x;// 存放结果的数组
    for (i = N-1; i >= 0; i--) {
      x = a;
      for (j = i+1; j < N; j++) {
            x -= a * x;
      }
      x = x / a;
    }

    // 输出结果
    printf("Solution of the system:\n");
    for (i = 0; i < N; i++) {
      printf("x[%d] = %f\n", i, x);
    }
}

峥途 发表于 2024-4-15 23:12:22

sfqxx 发表于 2024-4-15 21:41


#include <stdio.h>
#define N 6
//声明高斯消元函数
void gaussian_elimination(float a);

int main(){
        //设定矩阵系数与常数项
        float a={
                {0,0,0,0,0,1,1},
                {0,0,0,0,1,0,1},
                {0,0,0,1,0,0,1},
                {1,1,1,1,1,1,6},
                {5,4,3,2,1,0,15},
                {20,12,6,2,0,0,40},
        };
        gaussian_elimination(a);
        //代入高斯消元函数
        return 0;
       
}

void gaussian_elimination(float a){
        int i,j,k;
        float factor;
       
        for(k=0;k<N;k++){
                for(i=k+1;i<N;i++){
                        factor = a/a;
                        for(j=k;j<N+1;j++){
                                a -= factor*a;
                        }
                }
        }
        float x;//存放结果的数组
        for(i = N - 1;i>=0;i--){
                x=a;
                for(j = i+1;j<N;j++){
                        x -= a*x;
                }
                x/=a;
        }
        printf("结果为:\n");
        for(i=0;i<N;i++){
                printf("x[%d] = %f\n",i,x);
        }
}


大佬,我抄的你的代码为什么寄掉了,是哪里没改对吗?

sfqxx 发表于 2024-4-16 18:29:44

峥途 发表于 2024-4-15 23:12
#include
#define N 6
//声明高斯消元函数


N 3;6

峥途 发表于 2024-4-22 16:31:20

sfqxx 发表于 2024-4-16 18:29
N 3;6

我是想解六元的
页: [1]
查看完整版本: 已知系数,解三元一次线性方程组的代码?