高斯消元

高斯消元,其实初中老师就讲过

有加减消元和代入消元两种

这里用的是用加减消元把矩阵消成一个单位矩阵

矩阵

这里的矩阵就是把系数写成一个矩阵,并把常数项扔到等式右边的一个 n×n+1 的矩阵

如图中的第一行,他的式子就为 3x1+7x25x3=47

消元

步骤大致是这样的(可以对照上图看):

  1. 每列选一个数(这里选最大的并要求非 0),把他所在的行移到第 1 行去

  2. 等式两边同时除以这个数,使这个数变为 1

  3. 用这行去消其他行,把其他行的这一列的数全部变为 0

哪里没讲明白请在评论区留言

代码

#include <bits/stdc++.h>
using namespace std;
const int N=55;
int n;
long double a[N][N],eps=1e-7;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        int maxn=i;
        for(int j=i+1;j<=n;j++){
            if(fabs(a[j][i])>fabs(a[maxn][i]))maxn=j;
        }
        for(int j=1;j<=n+1;j++){
            swap(a[maxn][j],a[i][j]);
        }
        if(fabs(a[i][i])<eps){
            cout<<"No Solution";
            return 0;
        }
        for(int j=n+1;j>=1;j--){
            a[i][j]/=a[i][i];  
        }
        for(int j=1;j<=n;j++){
            if(j!=i){
                double temp=a[j][i];
                for(int k=1;k<=n+1;k++){
                    a[j][k]-=temp*a[i][k];
                }
            }
        }
    }
    for(int i=1;i<=n;i++)printf("%.2llf\n",a[i][n+1]);
    return 0;
}
posted @   小惰惰  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
/* 鼠标点击求赞文字特效 */
点击右上角即可分享
微信分享提示

目录导航