• 【模板】高斯消元法


    题目背景

    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​​

  • 相关阅读:
    并发编程之六:java并发工具包(java.util.concurrent)汇总介绍
    Interpreter(解释器)模式
    CSS样式
    一个相当好的自定义标签分页
    logback高级特性一
    Jenkins
    ifconfig命令
    持续集成工具hudson
    数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B树、B+树、B*树)
    Java中"Test(Object...args){}"方法声明的理解——J2SE5的“Vararg
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7646702.html
Copyright © 2020-2023  润新知