Jump to content

QR decomposition: Difference between revisions

Changed householder: Vector(R)->Matrix(R)
m (Changed signValue function)
(Changed householder: Vector(R)->Matrix(R))
Line 209:
TestPackage(R:Join(Field,RadicalCategory)): with
unitVector: NonNegativeInteger -> Vector(R)
sum"/": Matrix(Vector(R),R) -> Vector(R)
"/": (R,Matrix(R)) -> Matrix(R)
"^": (Vector(R),NonNegativeInteger) -> Vector(R)
solveUpperTriangular: (Matrix(R),Vector(R)) -> Vector(R)
signValue: R -> R
householder: MatrixVector(R) -> Matrix(R)
qr: Matrix(R) -> Record(q:Matrix(R),r:Matrix(R))
lsqr: (Matrix(R),Vector(R)) -> Vector(R)
Line 223 ⟶ 222:
out(1) := 1@R
out
sum(mv:MatrixVector(R)) / a:R == reducemap("+",[reduce("+",column(m,i)vi:R):R for+-> ivi/a, in 1..ncols m]v)$Vector(R)
a:R / m:Matrix(R) == map((mij:R):R +-> a/mij, m)$Matrix(R)
v:Vector(R) ^ n:NonNegativeInteger == map((vi:R):R +-> vi^n, v)$Vector(R)
solveUpperTriangular(r,b) ==
Line 238 ⟶ 236:
if sqrt(r*r) = r then 1 else -1
householder(a) ==
m := nrows #a
s := signValue(a(1,1))
e := coerce(unitVector(m))$Matrix(R)
u := a + length(column(a,1))*s*e
v := u/u(1,1)
beta := (1+1)/((transposedot(v)*,v)(1,1))
scalarMatrix(m,1) - beta*v*transpose(outerProduct(v,v))
qr(a) ==
(m,n) := (nrows a, ncols a)
n := ncols a
qm := scalarMatrix(m,1)
rm : Matrix(R) := copy a
for i in 1..(if m=n then n-1 else n) repeat
bx := column(subMatrix(rm,i,m,i,n),1)
x := coerce(column(b,1))$Matrix(R)
h := scalarMatrix(m,1)
setsubMatrix!(h,i,i,householder x)
136

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.