Вопрос: для этой задачи вам дан список матриц As, и ваша задача — найти QR-факторизацию для каждой из них.
Реализовать qr_by_gram_schmidt: эта функция принимает в качестве входных данных матрицу A и вычисляет разложение QR, возвращая две переменные, Q и R, где A=QR, с ортогональным Q и нулем R ниже диагонали.
A представляет собой матрицу размера n × m, где n ≥ m (т.е. строк больше, чем столбцов).
Вы должны реализовать эту функцию, используя модифицированную процедуру Грама-Шмидта.
ВХОД:
Как: Список массивов
ВЫХОД:
Qs: Список матриц Q, выведенных qr_by_gram_schmidt, в том же порядке, что и As. Для матрицы A формы n×m Q должна иметь форму n×m.
Rs: Список матриц R, выведенных qr_by_gram_schmidt, в том же порядке, что и As. Для матрицы A формы n×m R должен иметь форму m×m
Я написал код для факторизации QR, который я считаю правильным:
import numpy as np
def qr_by_gram_schmidt(A):
m = np.shape(A)[0]
n = np.shape(A)[1]
Q = np.zeros((m, m))
R = np.zeros((n, n))
for j in xrange(n):
v = A[:,j]
for i in xrange(j):
R[i,j] = Q[:,i].T * A[:,j]
v = v.squeeze() - (R[i,j] * Q[:,i])
R[j,j] = np.linalg.norm(v)
Q[:,j] = (v / R[j,j]).squeeze()
return Q, R
Как мне написать цикл для вычисления QR-факторизации каждой из матриц в As и сохранения их в этом порядке?
edit: в коде тоже есть ошибка. Буду признателен, если вы поможете мне в его отладке.
Спасибо