鱼C论坛

 找回密码
 立即注册
查看: 129|回复: 5

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

[复制链接]
发表于 2024-4-15 21:35:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
c语言:已知系数,解三元一次线性方程组的代码?
最佳答案
2024-4-15 21:41:52
  1. #include <stdio.h>

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

  3. // 函数声明
  4. void gaussian_elimination(float a[N][N+1]);

  5. int main() {
  6.     // 系数矩阵,最后一列是常数项
  7.     float a[N][N+1] = {
  8.         {2, 1, -1, 8},
  9.         {-3, -1, 2, -11},
  10.         {-2, 1, 2, -3}
  11.     };

  12.     gaussian_elimination(a);

  13.     return 0;
  14. }

  15. void gaussian_elimination(float a[N][N+1]) {
  16.     int i, j, k;
  17.     float factor;
  18.    
  19.     // 转化为上三角形
  20.     for (k = 0; k < N; k++) {
  21.         for (i = k+1; i < N; i++) {
  22.             factor = a[i][k] / a[k][k];
  23.             for (j = k; j < N+1; j++) {
  24.                 a[i][j] -= factor * a[k][j];
  25.             }
  26.         }
  27.     }

  28.     // 后代入法求解
  29.     float x[N];  // 存放结果的数组
  30.     for (i = N-1; i >= 0; i--) {
  31.         x[i] = a[i][N];
  32.         for (j = i+1; j < N; j++) {
  33.             x[i] -= a[i][j] * x[j];
  34.         }
  35.         x[i] = x[i] / a[i][i];
  36.     }

  37.     // 输出结果
  38.     printf("Solution of the system:\n");
  39.     for (i = 0; i < N; i++) {
  40.         printf("x[%d] = %f\n", i, x[i]);
  41.     }
  42. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-15 21:35:30 | 显示全部楼层
可以使用高斯消元法来解决三元一次线性方程组。下面是一个使用C语言编写的示例代码:

  1. #include <stdio.h>

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

  3. void gaussElimination(float matrix[N][N+1], float result[N])
  4. {
  5.     int i, j, k;
  6.    
  7.     // 前向消元
  8.     for (i = 0; i < N-1; i++) {
  9.         // 如果对角线元素为0,交换行
  10.         if (matrix[i][i] == 0) {
  11.             for (j = i+1; j < N; j++) {
  12.                 if (matrix[j][i] != 0) {
  13.                     float tmp;
  14.                     for (k = 0; k <= N; k++) {
  15.                         tmp = matrix[i][k];
  16.                         matrix[i][k] = matrix[j][k];
  17.                         matrix[j][k] = tmp;
  18.                     }
  19.                     break;
  20.                 }
  21.             }
  22.         }
  23.         
  24.         // 消元运算
  25.         for (j = i+1; j < N; j++) {
  26.             float ratio = matrix[j][i] / matrix[i][i];
  27.             for (k = i; k <= N; k++) {
  28.                 matrix[j][k] -= ratio * matrix[i][k];
  29.             }
  30.         }
  31.     }
  32.    
  33.     // 回代求解
  34.     for (i = N-1; i >= 0; i--) {
  35.         result[i] = matrix[i][N];
  36.         for (j = i+1; j < N; j++) {
  37.             result[i] -= matrix[i][j] * result[j];
  38.         }
  39.         result[i] /= matrix[i][i];
  40.     }
  41. }

  42. int main()
  43. {
  44.     float matrix[N][N+1] = {{2, -1, 1, 8},
  45.                             {-3, 2, -4, 18},
  46.                             {1, 1, 1, 10}};
  47.     float result[N];
  48.    
  49.     gaussElimination(matrix, result);
  50.    
  51.     printf("解为:x = %.2f, y = %.2f, z = %.2f\n", result[0], result[1], result[2]);
  52.    
  53.     return 0;
  54. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-15 21:41:52 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>

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

  3. // 函数声明
  4. void gaussian_elimination(float a[N][N+1]);

  5. int main() {
  6.     // 系数矩阵,最后一列是常数项
  7.     float a[N][N+1] = {
  8.         {2, 1, -1, 8},
  9.         {-3, -1, 2, -11},
  10.         {-2, 1, 2, -3}
  11.     };

  12.     gaussian_elimination(a);

  13.     return 0;
  14. }

  15. void gaussian_elimination(float a[N][N+1]) {
  16.     int i, j, k;
  17.     float factor;
  18.    
  19.     // 转化为上三角形
  20.     for (k = 0; k < N; k++) {
  21.         for (i = k+1; i < N; i++) {
  22.             factor = a[i][k] / a[k][k];
  23.             for (j = k; j < N+1; j++) {
  24.                 a[i][j] -= factor * a[k][j];
  25.             }
  26.         }
  27.     }

  28.     // 后代入法求解
  29.     float x[N];  // 存放结果的数组
  30.     for (i = N-1; i >= 0; i--) {
  31.         x[i] = a[i][N];
  32.         for (j = i+1; j < N; j++) {
  33.             x[i] -= a[i][j] * x[j];
  34.         }
  35.         x[i] = x[i] / a[i][i];
  36.     }

  37.     // 输出结果
  38.     printf("Solution of the system:\n");
  39.     for (i = 0; i < N; i++) {
  40.         printf("x[%d] = %f\n", i, x[i]);
  41.     }
  42. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-4-15 23:12:22 | 显示全部楼层

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

int main(){
        //设定矩阵系数与常数项
        float a[N][N+1]={
                {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[N][N+1]){
        int i,j,k;
        float factor;
       
        for(k=0;k<N;k++){
                for(i=k+1;i<N;i++){
                        factor = a[k]/a[k][k];
                        for(j=k;j<N+1;j++){
                                a[j] -= factor*a[k][j];
                        }
                }
        }
        float x[N];//存放结果的数组
        for(i = N - 1;i>=0;i--){
                x=a[N];
                for(j = i+1;j<N;j++){
                        x -= a[j]*x[j];
                }
                x/=a;
        }
        printf("结果为:\n");
        for(i=0;i<N;i++){
                printf("x[%d] = %f\n",i,x);
        }
}


大佬,我抄的你的代码为什么寄掉了,是哪里没改对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 18:29:44 | 显示全部楼层
峥途 发表于 2024-4-15 23:12
#include
#define N 6
//声明高斯消元函数

N 3;6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-22 16:31:20 From FishC Mobile | 显示全部楼层
sfqxx 发表于 2024-4-16 18:29
N 3;6

我是想解六元的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表