У меня есть следующее матричное уравнение [L][z]=[b]
, где [L]
- матрица 3x3
, а z
(вектор решения) и b
(вектор правой стороны) - 3x1
векторы.
Я хочу найти вектор решения (т. Е. Значения z0,z1,z2
)
Значение для z
Я получаю следующий вектор z из прямой замены:
[ 106.8 177.2 -335.968]
ссылка - https://www.youtube.com/watch?v=5uNBrCw0M3g
import numpy as np
L=np.array([[1., 0., 0. ],
[2.56, 1., 0. ],
[5.76, 3.5, 1. ]],float)
print(L)
# Right hand side vector
b=np.array([106.8,177.2,279.2],float)
n =len(b)
z=np.zeros(n,float)
z[0]=b[0]/L[0,0] ## or z[0]=b[0] because L[0,0]=1
# print(z)
#Forward Substitution method
for i in range(1,n):
sum_Lz=0
for j in range(0,i-1):
sum_Lz+=L[i,j]*z[j]
# print(sum_Lz)
z[i]=(b[i]-sum_Lz)/L[i,i] ##L[i,i]=1
print("z vector from forward substitution: ")
print(z)
В основном я хочу сделать это в каждой строке (в каждой итерации я хочу вычислить ввод кода здесь z отдельно, z0, z1, z2)
Для первой итерации я уже отдельно определил z[0]=b[0]/L[0,0]
. Затем я запускаю для l oop, который начинается со второй строки L[1,0]*z0 + L[1,1]*z1 = b[1]
, что дает значение z1
, где я хочу использовать z0
, полученное из b[0]/L[0,0]
. В третьей строке аналогично, L[1,0]*z0 + L[1,1]*z1 = b[2]
, где я хочу использовать z1
, который я вычислил в предыдущей итерации. Вот так я получаю вектор решения z.