пришлось изменить несколько строк, чтобы заставить его работать. Большая часть этого была правильна все же. Кстати, я предполагаю, что элементы массива имеют тип float для сохранения дробных значений коэффициентов. Кроме того, я пропустил объединение двух массивов в один. Хотя вы можете внести изменения, если это желательно. Логически это не имеет никакого значения.
- После обнаружения столбца max (weirsz в poli sh, я полагаю), вы не используете его позже, но используете k. Я изменил строки, чтобы использовать weirsz.
- Вы меняете каждую строку каждый раз, когда обнаруживается новый максимум. Я выдвинул это для l oop, чтобы поменять местами только один раз на столбец. (Я полагаю, что это l oop, на который намекает @DarryIG) И замена только в том случае, если строка уже не в нужном месте.
- Третий вложенный forl oop поменял местами индексы строк и столбцов, так исправил.
- Последний для l oop также имел проблему индекса. Кроме того, я не хотел изменять записи вычисленной матрицы, поэтому вместо этого использовал временную переменную.
Надеюсь, это поможет!
import numpy as np
def zad2(a,b):
print(a)
print(b)
print("Len:{0} Shape:{1}".format(len(a),a.shape))
print("Len:{0} Shape:{1}".format(len(b),b.shape))
n=len(b)
x=np.zeros(n, dtype='f')
for i in range(n):
maks=abs(a[i,i])
wiersz=i
print("maks: ",maks)
print("i: ",i)
for k in range(i+1,n):
print("Searching Max row value for the a column: row_i (k): {0}, a[k,i]: {1}".format(k, a[k,i]))
if abs(a[k,i])>maks:
maks=abs(a[k,i])
wiersz=k
if wiersz != i:
a[wiersz], a[i] = (a[i].copy(),a[wiersz].copy()) # Swapping entire row at once
b[i], b[wiersz] = (b[wiersz], b[i]) # Swapping entire row at one
for k in range(i+1,n): #tworzenie macierzy trojkatnej
print('k: {0}, a[k,i]: {1}, a[i,i]: {2}'.format(k, a[k,i], a[i,i]))
ws=a[k,i]/a[i,i] #wspolczynnik taki jak przy zwyklej metodzie Gaussa
for j in range(i,n): #dla kolejnego wiersza eliminacja, wzor z zadania 1
a[k,j]=a[k,j]- ws*a[i,j]
b[k]=b[k]-ws*b[i]
print("i: {0}, maks: {1}, wiersz: {2}".format(i,maks,wiersz))
print(a)
print(b)
input()
x[n-1] = b[n-1]/a[n-1,n-1]
for i in range(n-1,-1,-1): #substytucja od konca
temp = b[i]
for k in range(i+1,n):
temp -= a[i,k]*x[k]
x[i] = (tem)/a[i,i]
return x
a=np.array([[0,2,3],[4,6,7],[2,-3,6]], dtype='f')
b=np.array([8, -3, 6], dtype='f')
print(zad2(a,b))