Метод прямой замены - PullRequest
       0

Метод прямой замены

0 голосов
/ 03 февраля 2020

У меня есть следующее матричное уравнение [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.

1 Ответ

0 голосов
/ 03 февраля 2020

изменение индекса с i-1 на i в jl oop

 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):
            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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...