首页 > 其他分享 >高斯消元

高斯消元

时间:2024-04-02 20:12:57浏览次数:22  
标签:max range abs print col 高斯消 row

image

epsilon = pow(10,-10)
g = []
for _ in range(int(input())):
    g.append([*map(float,input().split())])

n,m = len(g),len(g[0])
row = 0
for col in range(n):
    max_row = row
    # 找出剩下行最大列值所在的行
    for i in range(row,n):
        if abs(g[i][col]) > abs(g[max_row][col]):
            max_row = i
    # 如果等于0,省去下面的消元,直接跳过
    if abs(g[max_row][col]) < epsilon:
        continue

    # 将目标行与第row行进行交换
    g[max_row],g[row] = g[max_row],g[row]

    # 倒序枚举,将第row行同时除以g[row][col],使得g[row][col] = 1
    for j in range(m - 1,col - 1,-1):
        g[row][j] /= g[row][col]

    # row行以下的行的第col列全部变成0,构造目标三角0
    for i in range(row + 1,n):
        if abs(g[i][col]) > epsilon:
            for j in range(m - 1,col - 1,-1):
                g[i][j] -= g[row][j] * g[i][col]
    row += 1

# print(*g,sep='\n')

# n个方程组可以解有n个未知数的方程
# 如果有效方程组数小于未知数个数,那么可能有无数个解或无解
if row < n:
    for i in range(row,n):
        # 出 现 0 = !0 的 情 况 !
        if abs(g[i][m - 1]) > epsilon:
            print("No solution")
            exit()
    print("Infinite group solutions")
else:
    # 精髓:从最后一行往第一行推,将答案记在最后一列
    for i in range(n - 1,-1,-1):
        for j in range(i + 1,n):
            g[i][m - 1] -= g[j][m - 1] * g[i][j]

    for i in range(n):
        print("%.2f" % g[i][m - 1])


# print(*g,sep='\n')

标签:max,range,abs,print,col,高斯消,row
From: https://www.cnblogs.com/gebeng/p/18111399

相关文章

  • 高斯消元学习笔记
    注:此篇一直在讲高斯-约旦消元法。https://oi-wiki.org/math/numerical/gauss/相信大家都读过上面那个wiki。大家其实都看得挺懵的对吧。今天我就来教一下大家高斯消元。技术指导:milk,周百万,TB\(\LaTeX\)指导:不是你觉得这文章\(\LaTeX\)很好吗?所以没有指导。首先小学知识......
  • 高斯消元 学习笔记
    \[\Large\text{GaussianElimination}\]数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。——百度百科说实话,我不相信这是高斯发明的。感觉像是个小学生都学过的加减消元法。它的时间复杂度与方程个数、未知数个数有关,一般来讲,是\(O......
  • 高斯消元
    大暴力应用:求解线性方程前置知识:矩阵操作对于方程组\[\begin{cases}a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=m_1\\a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n=m_2\\\cdots\\a_{n1}x_1+a_{n2}x_2+\cdots+a_{nn}x_n=m_n\\\end{cases}\]我们将他的......
  • 高斯消元
    高斯消元板题[SDOI2006]线性方程组(别问我为什么不是【模板】高斯消元法,这个太**了)思路首先需要引入一个定义增广矩阵。所以一个\(n\)元线性方程组就可以抽象成一个矩阵,\(a\)为系数,\(b\)为方程的常数项:\(\begin{bmatrix}a_{11}&\cdots&a_{1n}&b_{1}\\\vdots&\ddots&\vd......
  • 高斯消元法
    高斯消元高斯消元是线性代数规划中的一个算法,可用来为线性方程组求解,高斯消元法可以用在电脑中来解决数千条等式及未知数。ps:若要解出\(n\)个未知数的话,则需要\(n\)个有意义的方程。例如有\(n\)个方程组,其中一个是\(0\timesx=0\timesy\)你会发现无论\(x\)和\(......
  • P3389 【模板】高斯消元法
    #include<bits/stdc++.h>usingnamespacestd;doublemax(doublea,doubleb){ if(a>=b)returna; if(a<b)returnb;}intn;doublea[1010][1010];doublea1[1010][1010];intmain(){ scanf("%d",&n); for(inti=1;i<=n;i++) { ......
  • 一次线性方程组 高斯消元笔记
    高斯消元原理高斯消元用来解如下形式的方程组:\[\begin{cases}a_{1,1}x_1+a_{1,2}x_2+\cdots+a_{1,n}x_n=b_1\\a_{2,1}x_1+a_{2,2}x_2+\cdots+a_{2,n}x_n=b_2\\\cdots\\a_{n,1}x_1+a_{n,2}x_2+\cdots+a_{n,n}x_n=b_n\end{cases......
  • 高斯消元
    高斯消元设有n个未知数m个方程的线性方程组\[\begin{cases}a_{11}x_{1}+a_{12}x_{2}+\dots+a_{1n}x{n}=b_{1}\\a_{21}x_{1}+a_{22}x_{2}+\dots+a_{2n}x{n}=b_2\\\dots\dots\\a_{m1}x_1+a_{m2}x_{2}+\dots+a_{mn}x_{n}=b_m\end{cases}\]其中\(a_{ij}\)是第i个方程的第......
  • 高斯消元
    作用解线性方程组,将其系数和常数放在矩阵中,利用加减消元,得到一个倒三角,反着代入计算即可。double型可以选最大的一行交换,减少误差。异或型可以bitset优化,加减变^,乘除变&。稀疏矩阵可以手动代入消元,减少计算量。Link......
  • 2023.11.8 高斯消元记录
    2021ICPC沈阳I题https://link.zhihu.com/?target=https%3A//ac.nowcoder.com/acm/contest/24346/I2020ICPC济南A题https://ac.nowcoder.com/acm/contest/10662/A高斯消元只要构造出增广矩阵,求解就很简单了.对本题来说,矩阵乘开后,新矩阵的列向量,就是B*C的列向量.......