Matrices.householderSimilarityTransformation(A,u);
This function computes the Housholder similarity transformation
As = S*A*S
with
S = I -2*u*u'/(u'*u).
This transformation is widely used for transforming non-symmetric matrices to a Hessenberg form.
// First step of Hessenberg decomposition
Real A[4,4] = [1,2,3,4;
               3,4,5,6;
               9,8,7,6;
               1,2,0,0];
Real Ar[4,4];
Real u[4]={0,0,0,0};
u[2:4] = Modelica_LinearSystems2.Math.Vectors.householderVector(A[2:4,1],{1,0,0});
// u= = {0, 0.8107, 0.5819, 0.0647}
Ar = householderSimilarityTransformation(A,u);
//  Ar = [1.0,     -3.8787,    -1.2193,    3.531;
        -9.5394, 11.3407,      6.4336,   -5.9243;
         0.0,     3.1307,      0.7525,   -3.3670;
         0.0,     0.8021,     -1.1656,   -1.0932]
function householderSimilarityTransformation extends Modelica.Icons.Function; import Modelica.Math.Vectors.length; input Real A[:, size(A, 1)] "Square matrix A"; input Real u[size(A, 1)] "Householder vector"; output Real SAS[size(A, 1), size(A, 1)]; end householderSimilarityTransformation;