首页 > 编程语言 >不带行交换的Guass消去法,python实现

不带行交换的Guass消去法,python实现

时间:2022-09-26 19:24:44浏览次数:50  
标签:.__ return Guass python self AB np def 消去法

import numpy as np


# 合并A、b,增广矩阵AB


class gauss:

    def __init__(self, A: list, b_T: list):
        '''
        :param A: 矩阵A,n*n
        :param b_T: 常数项b的转置,n
        '''
        self.A = np.array(A)
        self.b_T = np.array(b_T)

        self.__n = len(self.b_T)

        # 用于保存返回值
        self.x = np.zeros(self.__n)

    def xiao_yuan(self):
        '''
        消去过程

        :return:
        '''
        b = self.b_T.reshape(-1, 1)
        # reshape(-1, 1) 转换成一列
        AB = np.column_stack((self.A, b))
        # 将A、b合并成增广矩阵AB
        for k in range(1, self.__n + 1):
            for i in range(k, self.__n):
                '''
                 这个循环内操作的矩阵,实际上被限制为原始矩阵截去前k行
                 外层循环:k=1 
                '''
                m = -AB[i][k - 1] / AB[k - 1][k - 1]
                AB[i] += AB[k - 1] * m
                # m乘方程式两边第一行加到第i行
            else:
                # print(f'第{k}次\n', AB)
                pass
        else:
            # 循环结束,重新对A、b_T进行赋值
            AB_T = AB.transpose()
            # 将AB 进行转置,用于重新拆分出A 和 b_T
            self.A = (AB_T[:len(AB_T) - 1]).transpose()
            self.b_T = AB_T[-1]

    def hui_dai(self):
        '''
        回代过程

        :return:
        '''

        def sum_ax(k: int):
            sum2 = 0.0
            for q in range(k + 1, self.__n):
                sum2 += (self.A[k][q] * self.x[q])
            return float(sum2)

        for j in range(self.__n - 1, -1, -1):
            if j == self.__n - 1:
                self.x[j] = self.b_T[j] / self.A[j][j]
            else:
                self.x[j] = (self.b_T[j] - sum_ax(k=j)) / self.A[j][j]

    def get_result(self):

        return self.x


A = [[0.2641, 0.1735, 0.8642],
     [0.9411, -0.0175, 0.1463],
     [-0.8641, -0.4243, 0.0711]]

b_T = [-0.7521, 0.6310, 0.2501]

G = gauss(A=A, b_T=b_T)

G.xiao_yuan()
G.hui_dai()

y = G.get_result()

因为起始坐标原因,函数传参部分细节需要注意

标签:.__,return,Guass,python,self,AB,np,def,消去法
From: https://www.cnblogs.com/boran/p/16732057.html

相关文章

  • Python数据类型+运算符
    Python基础数据类型上期练习讲解#练习一.想办法打印出jasonl1=[11,22,'kevin',['tony','jerry',[123,456,'jason']]]#解题思路,先看列表中有几个数......
  • Python采集《惊奇先生》, 下载你想看的高质量漫画
    前言大家早好、午好、晚好吖~知识点:爬虫基本流程保存海量漫画数据requests的使用base64解码开发环境:版本:python3.8编辑器:pycharmrequests:......
  • python进阶之路4
    内容回顾PEP8规范代码编写规范及美观python注释语法平时养成写注释的习惯 1.警号 2.三个单引号 3.三个双引号常量与变量1.变量语法结构 变量名......
  • python -day4
    python-day4目录python-day4python作业讲解基本数据类型布尔值bool基本数据类型元组tuple基本数据类型集合set用户交互格式化输出基本运算符常用赋值符逻辑运算符成员运......
  • python练习题
    1.输入账号密码,判断成功,程序退出。判断失败,继续登录输入。考察点:while和if语句的运用,及flage标志位。#coding=utf-8;flage=True;whileflage:user=raw_inpu......
  • 【转载】Python的深浅拷贝以及应用场景
    深浅拷贝的原理深浅拷贝用法来自copy模块。导入模块:importcopy浅拷贝:copy.copy深拷贝:copy.deepcopy字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据......
  • Python学习路程——Day04
    Python学习路程——Day041、基本数据类型之布尔值bool​ 布尔值(bool)是用来判断条件是否对错的数据类型,只有两个值(True、False)​ Python基本的数据都内置了一个bool值​......
  • 使用ANTLR用Python解析一些Java代码
    我想在Python中使用ANTLR构建一个Java解析器我从ANTLR存储库下载了语法:Lexer:https://github.com/antlr/grammars-v4/blob/master/java/java/JavaLexer.g4分析器:https:/......
  • 关于使用conda create -n offline_per python=3.7时报错的问题
    为使用多个服务器节点进行训练offline_per,因为需要安装Atari,Mujoco,d4rl以及dm-control等,准备在多个节点上安装cond环境。但遇到一些问题:  经过研究,发现可能是默认......
  • 女朋友让我深夜十二点催她睡觉,我有Python我就不干
    事情是这样的:今天晚上,女朋友让我十二点催她睡觉。 不过,可是我实在太困了,熬不下去……是吧?女朋友哪有睡觉重要?   但,女朋友的命令,我是不敢违抗的……   ......