我目前正在尝试为矩形矩阵实现基于 Householder 的 QR 分解,如http://eprints.ma.man.ac.uk/1192/1/qrupdating_12nov08.pdf(第 3、4、5 页)中所述。
显然我弄错了一些伪代码,因为(1)我的结果不同于numpy.qr.linalg()(2)R我的例程产生的矩阵不是上三角矩阵。
我的代码(也可在https://pyfiddle.io/fiddle/afcc2e0e-0857-4cb2-adb5-06ff9b80c9d3/?i=true下找到)
import math
import argparse
import numpy as np
from typing import Union
def householder(alpha: float, x: np.ndarray) -> Union[np.ndarray, int]:
"""
Computes Householder vector for alpha and x.
:param alpha:
:param x:
:return:
"""
s = math.pow(np.linalg.norm(x, ord=2), 2)
v = x
if s == 0:
tau = 0
else:
t = math.sqrt(alpha * alpha + s)
v_one = alpha - t if …Run Code Online (Sandbox Code Playgroud) python numpy linear-algebra numerical-methods qr-decomposition