zoukankan      html  css  js  c++  java
  • 【模板】高斯消元法

    题目背景

    Gauss消元

    题目描述

    给定一个线性方程组,对其求解

    输入输出格式

    输入格式:

    第一行,一个正整数 nnn

    第二至 n+1n+1n+1行,每行 n+1n+1n+1 个整数,为a1,a2⋯an a_1, a_2 cdots a_na1​​,a2​​an​​ 和 bbb,代表一组方程。

    输出格式:

    共n行,每行一个数,第 iii行为 xix_ixi​​ (保留2位小数)

    如果不存在唯一解,在第一行输出"No Solution".

    输入输出样例

    输入样例#1:
    3
    1 3 4 5
    1 4 7 3
    9 3 2 2
    输出样例#1:
    -0.97
    5.18
    -2.39

    说明

    1≤n≤100,∣ai∣≤104,∣b∣≤104i

    主要步骤如下(构成上三角):

    1.选定未被选择过的、xi项系数绝对值最大的一行(这样更加容易判断是否有解),将整个式子除以xi的系数(xi系数化为1)。同时将其交换至第i行(方便求解)

    2.将未被选择过的行中的该项全部按照系数相应的减去选定的那行的系数(剩下的其他行xi系数化为0)

    当所有行都选定过时,已经构成了上三角

    3.倒序求解,每次将常数减去已经求出的所有项的解,此时可以求出当前项的解(将已知解带入求未知解)

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 double a[102][102];
     8 int n;
     9 int main()
    10 {int i,j,now,k;
    11   cin>>n;
    12   for (i=1;i<=n;i++)
    13       for (j=1;j<=n+1;j++)
    14       scanf("%lf",&a[i][j]);
    15   for (i=1;i<=n;i++)
    16     {
    17       now=i;
    18       for (j=i+1;j<=n;j++)
    19     if (fabs(a[now][i])<fabs(a[j][i]))
    20       now=j;
    21       for (j=i;j<=n+1;j++)
    22     swap(a[now][j],a[i][j]);
    23       if (a[i][i]==0)
    24     {
    25       cout<<"No Solution"<<endl;
    26       return 0;
    27     }
    28       for (j=i+1;j<=n+1;j++)
    29     a[i][j]/=a[i][i];
    30       a[i][i]=1;
    31       for (j=i+1;j<=n;j++)
    32     {
    33       for (k=i+1;k<=n+1;k++)
    34         a[j][k]-=a[i][k]*a[j][i];
    35       a[j][i]=0;
    36     }
    37     }
    38   for (i=n;i>=1;i--)
    39     {
    40       for (j=i+1;j<=n;j++)
    41     {
    42       a[i][n+1]-=a[i][j]*a[j][n+1];
    43              a[i][j]=0;
    44     }
    45       a[i][n+1]/=a[i][i];
    46       a[i][i]=1;
    47     }
    48   for (i=1;i<=n;i++)
    49     printf("%.2lf
    ",a[i][n+1]);
    50 }

    104​​,b104​​

  • 相关阅读:
    WinEdt && LaTex(三)—— 宏包
    矩阵分析相关证明(一) —— 正交与投影
    矩阵分析相关证明(一) —— 正交与投影
    windows 的使用 —— 注册表(软件的安装和卸载)
    windows 的使用 —— 注册表(软件的安装和卸载)
    中英文对照 —— 生化(生物化学)、生理(生物物理)
    中英文对照 —— 生化(生物化学)、生理(生物物理)
    三言二拍
    三言二拍
    一题多解(八)—— 矩阵上三角(下三角)的访问
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7646702.html
Copyright © 2011-2022 走看看