Vectors.Utilities.householderVector(a,b);
The function call "householderVector(a, b)
" returns
the normalized Householder vector u for
Householder reflection of input vector a onto
vector b, i.e., Householder vector
u is the normal vector of the reflection plane.
Algebraically, the reflection is performed by transformation matrix
Q
i.e., vector a is mapped toQ = I - 2*u*u',
with scalar c, |c| = ||a|| / ||b||. Q*a is the reflection of a about the hyperplane orthogonal to u. Q is an orthogonal matrix, i.e.a -> Q*a=c*b
Q = inv(Q) = Q'
a = {2, -4, -2, -1}; b = {1, 0, 0, 0}; u = householderVector(a,b); // {0.837, -0.478, -0.239, -0.119} // Computation (identity(4) - 2*matrix(u)*transpose(matrix(u)))*a results in // {-5, 0, 0, 0} = -5*b
function householderVector extends Modelica.Icons.Function; import Modelica.Math.Vectors.norm; input Real a[:] "Real vector to be reflected"; input Real b[size(a, 1)] "Real vector b vector a is mapped onto"; output Real u[size(a, 1)] "Householder vector to map a onto b"; end householderVector;