Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
Function: mathouseholder Section: linear_algebra C-Name: mathouseholder Prototype: GG Help: mathouseholder(Q,v): applies a sequence Q of Householder transforms to the vector or matrix v. Doc: \sidx{Householder transform}applies a sequence $Q$ of Householder transforms, as returned by \kbd{matqr}$(M,1)$ to the vector or matrix $v$. \bprog ? m = [2,1; 3,2]; \\ some random matrix ? [Q,R] = matqr(m); ? Q %3 = [-0.554... -0.832...] [-0.832... 0.554...] ? R %4 = [-3.605... -2.218...] [0 0.277...] ? v = [1, 2]~; \\ some random vector ? Q * v %6 = [-2.218..., 0.277...]~ ? [q,r] = matqr(m, 1); ? exponent(r - R) \\ r is the same as R %8 = -128 ? q \\ but q has a different structure %9 = [[0.0494..., [5.605..., 3]]]] ? mathouseholder(q, v) \\ applied to v %10 = [-2.218..., 0.277...]~ @eprog\noindent The point of the Householder structure is that it efficiently represents the linear operator $v \mapsto Q \* v$ in a more stable way than expanding the matrix $Q$: \bprog ? m = mathilbert(20); v = vectorv(20,i,i^2+1); ? [Q,R] = matqr(m); ? [q,r] = matqr(m, 1); ? \p100 ? [q2,r2] = matqr(m, 1); \\ recompute at higher accuracy ? exponent(R - r) %5 = -127 ? exponent(R - r2) %6 = -127 ? exponent(mathouseholder(q,v) - mathouseholder(q2,v)) %7 = -119 ? exponent(Q*v - mathouseholder(q2,v)) %8 = 9 @eprog\noindent We see that $R$ is OK with or without a flag to \kbd{matqr} but that multiplying by $Q$ is considerably less precise than applying the sequence of Householder transforms encoded by $q$.