En muchas aplicaciones de geometría analítica y cálculo numérico, en especial en las secciones correspondientes a los métodos de factorización QR para hallar la solución de sistemas lineales numéricos, encontramos la definición de transformación de Householder y la matriz asociada a una transformación de Householder.
Existen comandos que nos ofrecen el resultante de una transformación de Householder sobre un vector ( householder() el cual me imagino que se podrá sobrecargar para operaciones matriciales).
Aquí ,sin ninguna pretensión, se define un pequeño pseudo código, muy sencillo y breve, para crear esta matriz usando un bucle if-then-else que excluya situaciones imposibles ( aquellas en los que los vectores a transformar no tengan la misma dimensión ) y la función eye(), que devuelve la matriz identidad de orden n y el comando definido en Scilab norm() que calcula la norma euclidea de un vector. Aplicando la definición de transformación de Householder( http://es.wikipedia.org/wiki/Transformaci%C3%B3n_de_Householder ) ya tenemos nuestra función.
El objetivo es obtener una visualización de la matriz de Householder y analizar sus coeficientes ( útil para la corrección de ejercicios, aplicación y descripción de métodos de factorización matricial QR, etc. ), mostrando las buenas capacidades algorítmicas y de cálculo que presenta Scilab. Para ello, como se ve en el siguiente bloque de código:
Función mathouse() que calcula, a partir de dos vectores, la matriz asociada a la transformación de Householder. Aquí se ha guardado en un archivo .sci con el fin de emplearse en otras ocasiones ( un trabajo para la materia del grado de Matemáticas Introducción al análisis numérico, matricial e interpolación ). Imagen capturada desde Scinotes y código elaborado por el autor.
se define una función de, cuyas variables son los vectores x ( a transformar) e y (vector en el que se transforma x). Ojo; aquí hay que introducir los vectores como matrices columnas:
x=[x_1; x_2; ... ;x_n]
y un pequeño código con algunas pruebas para demostrar su funcionamiento.
Código de Scilab en las que se muestra algunos casos de ejecución de la función mathouse() que se definió. Código e imagen por el autor.
-1->x1=[3;2;1]
x1 =
3.
2.
1.
-1->y1=[4;0.5;9]
y1 =
4.
0.5
9.
-1->d1=mathouse(x1,y1)
0.9702602 0.0446097 - 0.2379182
0.0446097 0.9330855 0.3568773
- 0.2379182 0.3568773 - 0.9033457
-2->x2=[1;3]
x2 =
1.
3.
-2->y2=[1;9;01;192;0.9991;10D+14]
y2 =
1.
9.
1.
192.
0.9991
1.000D+15
-2->d2=mathouse(x2,y2)
Vectores con dimensión distinta
Imposible factorización Householder