用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - python代码库

多元线性方程组求解(高斯消元法)

2022-05-25 作者: 云代码会员举报

[python]代码库

# -*- coding: utf-8 -*-
"""
Created on Wed May 25 10:49:19 2022

@author: 陶成
"""

import numpy as np
import time 

def gaussElimination(A,dispFlag):
    '''
    利用高斯消元法即直接消元法求解线性方程组的解
    :param A:增广矩阵,n行n列为系数矩阵,n+1列为常数项            
    :param dispFlag:值为1则显示中间结果,其他值不显示
    :return flag,x,dist:方程组的解及计算时间
    '''
    t1=time.time()      #开始时间
    nRow,nCol=A.shape   #获取数组的行数与列数
    if (nRow+1!=nCol):
        return 0,0,0
    else:   
        #从0列~nCol-3列,nCol-2为最后一列,nCol-1为常数列
        #第i列,用i行作为基准去消i+1~nRow行
        #第j行中,依次修改列i~nCol-1列
        i=0            
        while (i<nCol-2):               #0列~nCol-3列            
            j=i+1                       #用i行作为基准去消i+1~nRow行
            while (j<nRow):             #i+1行~nRow-1行
                tmp=A[j][i]/A[i][i]     #此值*i行+j行(j:i+1~nRow-1)                
                A[j][i]=0.0             #A[j][i]=0,即i列值为0 
                k=i+1        
                while (k<nCol):         #j行k列(k:i+1列~nCol-1列)修改其值
                    A[j][k]=A[j][k]-tmp*A[i][k]
                    k=k+1               #j的下一格即k=k+1
                j=j+1                   #再消下一行j=j+1
            i=i+1                       #下一列  i=i+1
            if (dispFlag==1):
                printMatrix(A)
        #到此得到上三角形,则逆向求方程的根
        x=np.zeros(nRow)                #生成nRow个0的一维数组
        i=nRow-1                        #xn-1,xn-2,....,x1,x0
        while (i>=0):                   #列数nCol=nRow+1 列数比行数多1
            j=i+1
            x[i]=A[i][nCol-1]           #右边的常量
            while (j<nCol-1):           #减去a[i][j]*x[j]
                x[i]=x[i]-A[i][j]*x[j]
                j=j+1                   #右边的常数-减已算出来的x与系数积       
            x[i]=x[i]/A[i][i]           #除以A[i][i]得到相应的根
            if (dispFlag==1):
                print("x[%d]=%0.9f"%(i,x[i]))
            i=i-1                       #向上求下一个根
        t2=time.time()
        t=t2-t1
        return t,x

def printMatrix(A):
    #显示一个数组的内容
    '''
    :param A:待显示的数组
    :return -没有返回修值
    '''
    nRow,nCol=A.shape
    for i in range(0,nRow):
        for j in range(0,nCol):
            print("%12.9f  "%A[i][j],end='')
        print("")

def getExamCof13():
    '''
    获取主元很小的矩阵
    :return-- 
    '''
    A=np.array([[-2.0,1.072,5.643,3.00],
            [-1.0,3.712,4.623,2.0],
            [0.001,2.0,3.0,1.0]])
    return A

A=np.array(getExamCof13(),dtype='float32')#转换为numpy数组
print("原始数据")
printMatrix(A)      #显示数组
nRow,nCol=A.shape  #行数列数
x=np.zeros(nRow)    #得到一个数组
BB=np.zeros((nRow,nRow))
#必须一次调一个算法,否则A的值好象有变化

t=0
#t,x=gaussElimination(A,0)       #普通的高斯加减消元法
t,x=gaussElimination(A,0)
print(x)       #普通的高斯加减消元法


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...