在python中旋转的高斯消除

问题描述

这是我使用高斯算法的代码,它似乎在“def MEG”中工作,但是在“def MEGPivoting”中,当我尝试使用旋转的高斯算法交换我的行并打印新矩阵时,它打印了似乎矩阵如原。为什么? for cicle 有问题还是其他问题?为什么新矩阵是第一个的副本?

import numpy as np
import time

#Eliminazione di Gausss senza pivoting
def MEG(A,b):
    #calcolo dimensione vettore
    n = len(A)
    #ciclo fino alla penultima colonna (dove non eliminiamo nulla)
    for j in range(n-1):
        #ciclo per le righe (partendo dalla seconda)
            for i in range(j+1,n):
                #calcolo del coeff m
                m = A[i][j]/A[j][j]
                A[i][j] = 0
                for k in range(j+1,n):
                    #formula Gauss
                    A[i][k] = A[i][k] - m*A[j][k]
                    #anche per i termini b
                b[i] = b[i] - m*b[j]
    return A
 
#Costruisco l' algoritmo
def MEGPivoting(A,b):
    n = len(A)
    for j in range(1,n-1):
        #individuo l' elemento pivot
        amax = abs(A[j][j])
        imax = j
        for i in range (j+1,n):
            if abs(A[i][j]>amax):
                amax = abs(A[i][j])
                imax = i
        #eventuale scambio di riga
        if imax > j:
            for k in range (j,n):
            #scambio
                A[j][k],A[imax][k] = A[imax][k],A[j][k]
                b[j],b[imax]=b[imax],b[j]

        print('matrice con riga scambiate')
        print(A)
        
        #metodo di eliminazione di Gauss
        MEG(A,b)
        return  A 
    
#Creo la matrice
n = 5
M = 10
A = np.random.rand(n,n)*2*M - M 
print('Matrice = ')
print(A)
xsol = np.ones(n) #vettore incognite tutti 1
inizio = time.time()
b = np.dot(A,xsol) #vero vettore incognite ricavato da A*xsol
x = MEGPivoting(A,b)
fine = time.time()
#tempo totale
tempo = fine-inizio
print('\n\nSoluzione con pivoting = ')
print(x)
print('\n\nTempo impiegato: %f'%tempo)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)