Matrices.householderReflection(A,u);
This function computes the Housholder reflection (transformation)
Ar = Q*A
with
Q = I -2*u*u'/(u'*u)
where u*u is housholder vector, i.e. the normal vector of the reflection plane.
Householder reflection is widely used in numerical linear algebra, e.g. to perform QR decompositions.
// First step of QR decomposition Real A[3,3] = [1,2,3; 3,4,5; 2,1,4]; Real Ar[3,3]; Real u[:]; u = Modelica_LinearSystems2.Math.Vectors.householderVector(A[:,1],{1,0,0}); // u = {0.763, 0.646, 0} Ar = householderReflexion(A,u); // Ar = [-6.0828, -5.2608, -4.4388; // 0.0, -1.1508, -2.3016; // 0.0, 2.0, 0.0]
householderSimilarityTransformation
function householderReflexion extends Modelica.Icons.Function; import Modelica.Math.Vectors.length; input Real A[:, :] "Rectangular matrix"; input Real u[size(A, 1)] "Householder vector"; output Real RA[size(A, 1), size(A, 2)] "Reflexion of A"; end householderReflexion;