首页 > 其他分享 >高斯消元解线性方程组

高斯消元解线性方程组

时间:2024-08-25 11:23:41浏览次数:12  
标签:1.00 fabs 输出 元解 线性方程组 int 2.00 高斯消

高斯消元解线性方程组

输入一个包含 n个方程 n个未知数的线性方程组。
方程组中的系数为实数。
求解这个方程组。
下图为一个包含 m个方程 n个未知数的线性方程组示例
在这里插入图片描述
输入格式
第一行包含整数 n。
接下来 n行,每行包含 n+1个实数,表示一个方程的 n个系数以及等号右侧的常数。
输出格式
如果给定线性方程组存在唯一解,则输出共 n行,其中第 i行输出第 i个未知数的解,结果保留两位小数。
如果给定线性方程组存在无数解,则输出 Infinite group solutions。
如果给定线性方程组无解,则输出 No solution。
输入样例:
3
1.00 2.00 -1.00 -6.00
2.00 1.00 -3.00 -9.00
-1.00 -1.00 2.00 7.00
输出样例:
1.00
-2.00
3.00

#include<iostream>
#include<algorithm>
#include<cmath>

using namespace std;

const int N = 110;
const double eps = 1e-6;

int n;
double a[N][N];

int gauss(){
    int c,r;//c: column列, r: row行
    for(c=0,r=0;c<n;c++){
        int t = r;
        for(int i=r;i<n;i++){//找到一行中绝对值最大的
            if(fabs(a[i][c])>fabs(a[t][c]))
               t=i;
        }
        if(fabs(a[t][c])<eps) continue;
        for(int i=c;i<=n;i++) swap(a[t][i],a[r][i]);//交换两行
        for(int i=n;i>=c;i--) a[r][i]/=a[r][c];//将该行元素的第一个数变成1
        for(int i=r+1;i<n;i++){
            if(fabs(a[i][c])>eps){
                for(int j=n;j>=c;j--) a[i][j]-=a[i][c]*a[r][j];//消元
            }
        }
        r++;
    }
    if(r<n){
        for(int i=r;i<n;i++){
            if(fabs(a[i][n])>eps){
                return 2;//无解
            }
        }
        return 1;//有无穷多组解
    }
    for(int i=n-1;i>=0;i--)
        for(int j=i+1;j<n;j++)
            a[i][n]-=a[i][j]*a[j][n];//消元
    return 0;//有唯一解
}

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n+1;j++){
            cin>>a[i][j];
        }
    }
    int t = gauss();
    if(t==0){
        for(int i=0;i<n;i++) printf("%.2lf\n",a[i][n]);
    }
    else if(t==1) puts("Infinite group solutions");
    else puts(" No solution");
    return 0;
}

标签:1.00,fabs,输出,元解,线性方程组,int,2.00,高斯消
From: https://blog.csdn.net/weixin_46006714/article/details/141526310

相关文章

  • 有关用MATLAB来实现高斯消去法
    题目:利用Gaussian消去法求解线性方程组Ax=b,其中:     实现流程程序代码实验结果......
  • Note - 高斯消元法(证明略)
    线性代数高斯消元法求解线性方程组高斯消元法是求解线性方程组的经典算法,还可以用于行列式计算、求矩阵的逆。部分代码From「SDOI2006」线性方程组doublea[N][N];//a[i][j]表示第i个方程中第j个元的系数,a[i][n+1]为等号右侧的常数项voidGauss(){for(inti=1;i<......
  • 详细揭秘:特殊图高斯消元
    树上高斯消元给你一颗树,某些点为终止结点,求从每个点开始随机游走走到某个终止节点的期望时间。从叶子开始将\(f(u)\)表示为\(k(u)f(\text{fa}(u))+b(u)\),带回\(f(\text{fa}(u))\)的方程中将\(f(u)\)消掉即可。DAG上高斯消元可重集/reset有一个可重集\(S\),每一......
  • 高斯消元 学习笔记
    用于求解方程组。给定\(n\)个关于\(m\)个变量的方程组,需要你判断该方程组是否无解、有无数解、有唯一解,并输出唯一的解。考虑使用消元法。我们枚举一个变量\(i\),从所有没有被操作过的方程式中选出一个,然后用它对其他没有被操作过的方程式进行消元,并将被选中的那个方程式视......
  • 高斯消元
    1.高斯消元的基础信息本质通过初等行变化,将线性方程组的增广矩阵转化为行阶梯矩阵,讲人话就是用加减消元来转化,代入消元来回带。应用用来求解线性方程组(m个一次方程,n个变量),矩阵的秩(校园后的主元数)以及求可逆方阵的逆矩阵。难度思维难度低,代码实现难度低复杂度时间:O(n^3)空间......
  • 【数值计算方法】线性方程组的迭代解法-数值实验
    fromformu_libimport*importnumpyasnpA=np.array([[-55,-5,12],[21,36,-13],[24,7,47]])b=np.array([41,52,12])w=lambdat:0.1*txs,ys,ts=[],[],[]foriinrange(1,20):_,err=SORIter(A,b,w(i))xs.append(list(......
  • 线性方程组迭代算法的Python实现
    更多精彩,关注博客园主页,不断学习!不断进步!我的主页csdn很少看私信,有事请b站私信博客园主页-发文字笔记-常用有限元鹰的主页内容:ABAQUS数值模拟相关Python科学计算开源框架,编程学习笔记哔哩哔哩主页-发视频-常用FE-有限元鹰的个人空间内容:模拟案例网格划分游戏视频,......
  • 【数值计算方法】线性方程组迭代算法的Python实现
    线性方程组迭代算法的Python实现jacobi迭代法defJacobiIter(A:np.ndarray,b:np.ndarray,tol:float=1e-5,maxIter:int=100)->Tuple[np.ndarray,np.ndarray]:"""使用Jacobi迭代法求解线性方程组Ax=binput:......
  • 【数值计算方法】线性方程组的迭代解法
    目录第6章线性方程组的迭代解法1.范数和条件数1.1向量和矩阵的范数1.2条件数和扰动分析2.基本迭代法2.1迭代法基本思路2.2雅可比迭代法2.3高斯–赛德尔迭代法2.4超松弛(SOR)迭代法第6章线性方程组的迭代解法graphLRA[迭代法]-->B[定常迭代法]A-->C[不定常迭......
  • 华南理工大学线性代数笔记整理4——线性方程组
    本人华工21级电信本科生,目前大四,前段时间收拾书本时发现了自己保存完整的线代笔记和一些整理,应该会对大一新生的期末考试起作用,故作分享。注:大一时本人都是用手写A4纸的方式做笔记做复习,所以这里上传的都是一些纸质笔记的扫描件,尽量可以保证清晰。以分章节的方式,本章为第4章......