高斯消元法求解一元多次方程 C/C++实现



#include <stdio.h>
#include <stdlib.h>

#define MAXN 100  //最大变量数量
int arr[MAXN][MAXN]; //保存增广矩阵
int result[MAXN]; //保存方程的解
int unuse_result[MAXN];//判断是否是不确定的变元
int unuse_num;
void swap(int *a,int *b) //交换两数
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
}
int gcd(int a,int b) //返回最大公约数
{
    int t;
    while(b!= 0)
    {
        t=b;
        b=a%b;
        a=t;
    }
    return a;
}
int lcm(int a,int b) //返回最小公倍数
{
    return a*b/gcd(a,b);
}
void debug(int equ,int var)
{
     int i,j;
     for(i=0;i<equ;i++)
     {
         for(j=0;j<var+1;j++)
            printf("%d ",arr[i][j]);
         printf("\n");
     }
     printf("\n");
}
int Gauss(int equ,int var)
{
    int i,j,k,col;
    int max_r,ta,tb,lcm1;
    int temp,unuse_x_num,unuse_index;
    col=0; //设当前处理列的值为0,表示从第1列开始处理
    for(k=0;k<equ && 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是使用C++实现高斯消元法求解非齐次线性方程组的代码: ```cpp #include <iostream> #include <cmath> using namespace std; const int MAXN = 100; const double eps = 1e-6; int n; // 矩阵的行数 double a[MAXN][MAXN + 1]; // 矩阵增广矩阵 void gauss() { for (int i = 1; i <= n; i++) { int r = i; for (int j = i + 1; j <= n; j++) if (fabs(a[j][i]) > fabs(a[r][i])) r = j; if (fabs(a[r][i]) < eps) continue; if (r != i) swap(a[r], a[i]); for (int j = i + 1; j <= n + 1; j++) a[i][j] /= a[i][i]; a[i][i] = 1; for (int j = i + 1; j <= n; j++) for (int k = i + 1; k <= n + 1; k++) a[j][k] -= a[j][i] * a[i][k]; } for (int i = n; i >= 1; i--) for (int j = i + 1; j <= n; j++) a[i][n + 1] -= a[i][j] * a[j][n + 1]; } int main() { cin >> n; for (int i = 1; i <= n; i++) for (int j = 1; j <= n + 1; j++) cin >> a[i][j]; gauss(); for (int i = 1; i <= n; i++) printf("%.2f\n", a[i][n + 1]); return 0; } ``` 其中,输入的第一行为矩阵的行数n,接下来的n行每行有n+1个数,代表矩阵的增广矩阵。输出为方程组的。 具体的操作流程是: 1. 对于每一列,选取该列中绝对值最大的元素所在的行,将其与当前行交换位置。 2. 将该行的第一个元素变为1,同时将该行的其他元素除以该行的第一个元素。 3. 将该列下面的所有行都减去该行的倍数,使得该列的所有元素都变为0。 4. 重复以上操作,直到所有的列都处理完毕。 5. 倒序回带求解方程组的。 需要注意的是,高斯消元法可能会出现无或者有多组的情况。这时需要根据具体的问题进行判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值