栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

高斯消去法python(源码)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

高斯消去法python(源码)

import numpy as np


def gauss(a, b):
    m, n = a.shape  # 获取矩阵的行数和列数
    c = np.zeros(n)  # 根据矩阵的行数构建一个一维0数组
    for i in range(n):
        # 限制条件
        if (a[i][i] == 0):  # 用高斯消去法解线性方程组时对角线元素不能为0
            print("no answer")

    # k表示第一层循环,(0,n-1)行
    # i表示第二层循环,(k+1,n)行,计算该行消元的系数
    # j表示列

    for k in range(n - 1):
        for i in range(k + 1, n):
            c[i] = a[i][k] / a[k][k]  # 计算出系数

            for j in range(k,m):  # 从K开始,减少不必要的计算
                a[i][j] = a[i][j] - c[i] * a[k][j]  # 对矩阵进行高斯消去
            b[i] = b[i] - c[i] * b[k]

        print(a)
        #print(b)
    x = np.zeros(n)

    x[n - 1] = b[n - 1] / a[n - 1][n - 1]  # 解出x[n-1],为回代作准备

    # 回代求出方程解
    for i in range(n-2, -1, -1):
        sum= 0.0
        for j in range(n-1, -1, -1):
            sum= sum + a[i][j] * x[j]
        x[i] = (b[i]-sum) / a[i][i]
        #print(sum)

    for i in range(n):
        print("x" + str(i + 1) + " = ","%.2f" % x[i])  # 输出结果


if __name__ == '__main__':
    a = np.array([[2.0, -1.0, 3.0, 2.0], [3.0, -3.0, 3.0, 2.0], [3.0, -1.0, -1.0, 2.0], [3.0, -1.0, 3.0, -1.0]])
    b = np.array([6.0, 5.0, 3.0, 4.0])
    gauss(a, b)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号