martes, 23 de abril de 2013

Maxima- Resolución de un sistema de ecuaciones algebraicas con los elementos de las paletas

Se puede resolver un sistema de ecuaciones algebraicas sin muchos problemas y obtener sus soluciones simbólicas usando un menú de wxMaxima denominado Resolver un sistema algebraico. Pinchando en la pestaña Álgebra de wxMaxima y seleccionando la opción Resolver sistema algebraico. Al hacerlo, aparece una ventana (de nombre Resolver sistema algebraico) que nos pide insertar el número de ecuaciones (que ha de rellenarse con un número entero; 2,3, 4, ...). Después otra ventana que nos solicita rellenar un número de campos igual al que introducimos anteriormente con las ecuaciones que componen nuestro sistema y una más en la que hemos de introducir las variables de nuestro sistema (que hemos de introducirlas una a una, separadas por comas). Al pulsar Aceptar, se genera el código de Maxima que permite su resolución, así como el valor, en forma de lista, de las soluciones del sistema.





Proceso gráfico que muestra cómo resolver un sistema algebraico usando los menús del comando Resolver sistema algebraico. Imágenes por el autor. 


Aquí se ha puesto en práctica para conseguir el mismo resultado expuesto en [1], página 29 y 30.Al finalizar el proceso, tenemos que se genera el siguiente fragmento de código, que es similar al que aparece en el texto. Las soluciones támbien coinciden con lo expuesto en [1].




Código de Maxima que se usa para resolver el sistema de ecuaciones algebraicas y las soluciones de este. Código tomado de [1] pero generado por algsys().

Referencias


[1]:Manual de uso de Maxima y wxMaxima en asignaturas de cálculo diferencial, José Antonio Vallejo Rodríguez. Facultad de Ciencias, Universidad Autónoma de San Luis Potosí (México). Texto de difusión libre.

miércoles, 3 de abril de 2013

Álgebra- Matriz de transformación de Householder

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


Álgebra- Normas matriciales subordinadas con Scilab

En contextos matemáticos como el cálculo numérico o la introducción a la topología , aparece el concepto de norma matricial subordinada a una norma vectorial (véase [1], páginas 16-17 y [2], páginas 23-24 .Nuestro interés es usar Scilab para calcularlas, luego omitiremos definirlas) 

En esta entrada se presenta una imagen de Scinotes mostrando algunos comandos que están predefinidos en Scilab, cuya estructura es siempre la misma:

d_i=norm(a,'info')

los cuales representan las normas más comunes en los planes de estudio ;la norma subordinada 1, la norma subordinada "infinito", las cuales consiste en sumar los valores absolutos de los elementos de una matriz por columnas ( respectivamente por filas ) y elegir el máximo; la norma subordinada euclidiana ( o norma subordinada 2, que se trata de elegir el autovalor de la matriz producto de A y su transpuesta de mayor tamaño; ojo, en la definición original, hemos de hallar además su raíz cuadrada) y la norma de Frobenius (se halla la matriz producto de una matriz A y su transpuesta y su traza, aquí sí se halla la raíz cuadrada de la traza).




Captura de la pantalla de Scinotes que contiene en las lineas de código los comandos que ilustran las normas matriciales subordinadas a las que nos referimos en el párrafo anterior. Código e imagen por el autor.

Para ilustrar su funcionamiento, si aplicamos estas normas a la matriz a que aparece arriba definida, obtenemos en la consola los siguientes resultados:

Ejecucion de inicio:
  cargando entorno inicial

-->a=[1 2 3;4 5 6;7 8 9]
 a  =

    1.    2.    3.  
    4.    5.    6.  
    7.    8.    9.  

-->n=norm(a,1)
 n  =

    18.  

-->n1=norm(a,'inf')
 n1  =

    24.  

-->n2=norm(a,2)
 n2  =

    16.848103  

-->n3=norm(a,'frob')
 n3  =

    16.881943 

Nada más recordar que como el contenido de este blog, no se ha tratado en toda su totatlidad este tema. Si nos vamos al menú de ayuda de Scilab ( el botón en forma de círculo azul de la consola) encontramos más información.

Referencias

[1]: Introducción al cálculo numérico, Carlos Moreno Gónzales, ed. UNED (2011)
[2]: Numerical Mathematics, A.Quarteroni, R. Sacco y F. Saleri, ed. Springer (2000)

martes, 26 de marzo de 2013

Scilab-Openeering

El uso de Scilab transciende cada vez más desde el campo de la educación al mundo empresarial e industrial. En el sitio web encontramos numerosos ejemplos de cómo se emplea Scilab en diversas ramas de la ingeniería. Además, contiene muchísima información sobre el uso de Scilab para enfrentarnos a problemas usuales en el campo de acción de dicha ciencia (realización de gráficas, análisis numérico,  interpolación de datos, elaboración de GUI's empleando Scilab, etc) en forma de pdf, video, texto, presentación...todo ello distribuido bajo licencia libre. 

Algunos contenidos de esta página son bastante interesantes para dominar algunos aspectos de Scilab que, desde el punto de vista matemático, son muy útiles.


Aspecto de la página principal de la web Openeering. Imagen del autor.

Se puede consultar desde el siguiente enlace:



Scilab-Uso de generador de gráficas

Una herramienta muy interesante en la nueva edición de Scilab, sobre todo para los que estudiamos matemáticas y, a la hora realizar una representación gráfica para comprobar un resultado, ilustrar  un trabajo o demostrar si nuestras elucubraciones sobre alguna función son ciertas, se nos olvida el comando concreto que nos permite obtener la gráfica de nuestros datos (cosa que me pasa con mucha frecuencia) es el generador de gráficas, un botón que se encuentra en el menú Editor de variable. 



Imagen de dónde se encuentra el generador de gráficas (señalado en rojo)  al abrir el editor de una variable concreta. Imagen del autor.

Para usarlo operamos así: una vez introducidos los datos, nos vamos al menú perteneciente en el Explorador de variables (siempre visible si nos hemos descargados la nueva versión de Scilab) y hacemos doble clic con el ratón en la variable en la que hemos introducido el conjunto (o conjuntos) de valores que queremos dibujar. Al hacer esto, se abre un menú nuevo, el Editor de variables, veremos en el borde superior de esta una serie de botones entre los que se encuentra, al final de todo, la aplicación comentada. Clic y a ver nuestro resultado, así de fácil.  
Eso sí, esta facilidad conlleva algunos problemas; hemos de definir correctamente los datos y no se incluyen todos los comandos para la representación.

No obstante, para una labor sencilla, es rápido y fácil. Aquí se muestra en imágenes el recorrido a hacer para usar este comando y las posibilidades que presentan. Personalmente, creo que es una idea genial.



Capturas de pantallas de los menús Explorador de variables (con las correspondientes ventanas de Scinotes a la izquierda de este y debajo el historial de comandos) y  Editor de variables. En esta última se muestran los posibles comandos del generador. Imagen del autor. 

Maxima-Introducir una matriz en wxMaxima usando menú Generar matriz

La elaboración de matrices a partir de la linea de código en Maxima es una labor un tanto pesada, ya que exige no cometer errores de sintaxis. La estructura:

nombre_matriz: matrix([e_1_1,e_1_2,...,e_1_n],...,[e_m_1,...,e_m_n]); 

para definir una matriz de dimensiones m y n, es la más usada, pero si estamos trabajando con el entorno wxMaxima podemos construir cualquier matriz usando en la pestaña de Álgebra de encima del escritorio la opción Introducir matriz (las otras opciones, Generar matriz y Generar matriz a partir de una expresión exigen definir previamente un array o una función en forma de lista; cosa que no hace el trabajo,generalmente, más fácil). Aquí se muestra gráficamente este proceso para elaborar una matriz A de  dimensiones 4x4 de ceros (usualmente se representa como O4).







Proceso de elaboración de una matriz anterior comentando los diferentes submenus que aparecen. Imágenes por el autor

Aquí tenemos el resultado que nos aparecería en la pantalla:





Matriz resultante. En azul tenemos los códigos que se generan (automáticamente) durante nuestro trabajo con los menús.