Массив Numpy не обновляется правильно в программе исключения ГауссаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Массив Numpy не обновляется правильно в программе исключения Гаусса

Сообщение Anonymous »

Я пытаюсь написать функцию gaussian_elim, которая принимает массив A n x n numpy и массив b n x 1 и выполняет исключение по Гауссу для расширенной матрицы [A|b]. Он должен возвращать матрицу размера n x (n+1) вида M = [U|c], где U — верхняя треугольная матрица размера n x n. Однако когда я тестирую свой код на простой матрице 2x2, кажется, что этап исключения не выполняется должным образом. Я вставил операторы печати, чтобы проиллюстрировать, что матрица не обновляется должным образом.

Код: Выделить всё

def gaussian_elim(A,b):

"""
A: n x n numpy array
b: n x 1 numpy array

Applies Gaussian Elimination to the system Ax = b.
Returns a matrix of the form M = [U|c], where U is upper triangular.
"""

n = len(b)
b = b.reshape(-1, 1)        # Ensure b is a column vector of shape (n, 1)
M = np.hstack((A,b))        #Form the n x (n+1) augmented matrix M := [A|b]

#For each pivot:
for j in range(n-1):  #j = 0,1,...,n-2

#For each row under the pivot:
for i in range(j+1,n):               #i = j + 1, j + 2,..., n-1

if (M[j,j] == 0):
print("Error! Zero pivot encountered!")
return

#The multiplier for the the i-th row
m = M[i,j] / M[j,j]

print("M[i,:] = ", M[i,:])
print("M[j,:] = ", M[j,:])
print("m = ", m)
print("M[i,:] - m*M[j,:] = ", M[i,:] - m*M[j,:])

#Eliminate entry M[i,j] (the first nonzero entry of the i-th row)
M[i,:] = M[i,:] - m*M[j,:]

print("M[i,:] = ", M[i,:])   #Make sure that i-th row of M is correct (it's not!)

return M
Тестирование с матрицей 2x2

Код: Выделить всё

A = np.array([[3,-2],[1,5]])
b = np.array([1,1])
gaussian_elim(A,b)
выдает следующий результат:

Код: Выделить всё

M[i,:] =  [1 5 1]
M[j,:] =  [ 3 -2  1]
m =  0.3333333333333333
M[i,:] - m*M[j,:] =  [0.         5.66666667 0.66666667]    

Подробнее здесь: [url]https://stackoverflow.com/questions/79123305/numpy-array-does-not-correctly-update-in-gaussian-elimination-program[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»