Una familia muy interesantes de funciones son aquellas que se denominan esferas irregulares (véase [1], página 900) cuyo uso abarca desde la modelización e tumores o bien la representación de partículas de polen Desde el punto de vista matemático, son un buen ejemplo de cómo hacer uso de las transformaciones de coordenadas dado un sistema a otro. En este caso de coordenadas cartesianas a esféricas. El siguiente código de Maxima:
/* Representación de una esfera irregular con Maxima*/
/* Tomando las expresiones de J. Stewart Cálculo: conceptos y contextos */
n:5$
m:6$
/*Definimos la superificie esférica usando las coordenadas esféricas*/
rho:1+0.2*sin(m*theta)*sin(n*phi)$
load(draw)$
/* Definimos el dominio y el tipo de coordenadas para su gráfica */
irr_sphere: spherical(rho,theta,0,2*%pi,phi,0,%pi)$
/* Dibujamos la superfice sin colorear*/
draw3d(surface_hide=true,
color=blue,
irr_sphere,
nticks=400,
title="Esfera irregular. m=6,n=5")$
/* Dibujamos la superficie con una paleta de tonos grises*/
draw3d(surface_hide=false,
enhanced3d = [1+0.2*sin(m*theta)*sin(n*phi),theta,phi],
nticks=400,irr_sphere,
palette=gray,
title="Esfera irregular. m=6,n=5")$
Código de Maxima a usar en esta entrada. Código por el autor.
Nuestro objetivo es representar una esfera irregular usando la expresión que aparece en la referencia a la obra de Stewart anterior, en la que nos hemos hecho uso del paquete draw y de la definición de una función a partir de su definición: explicita (explicit) implícita (implicit), en coordenadas polares (polar), cilíndricas (cylindrical) o esféricas (spherical), siendo una cómoda forma de trabajar, pudiéndonos centra en el estudio teórico y por lo tanto apasionante de las matemáticas, muy en especial del cálculo.
Volviendo a lo que nos atañe, utilizando la expresión en coordenadas esféricas ( spherical(condiciones) ) definimos la expresión de la esfera y su dominio. Después, con el paquete draw3d la podemos dibujar, usando el programa Gnuplot, para los casos en los que n=5 y m=6, que son las condiciones que aparecen en la obra (para ello se ha tenido en cuenta [2], páginas 16-34). después, hacemos uso de enhaced3d=expresion, para obtener una superficie coloreada en tonos grises. Ambos resultados se exponen a continuación.
Imágenes obtenidas tras ejecutar el código. Imagen y código por el autor.
Tener en cuenta que se ha modificado la pantalla gráfica para evitar el achatamiento de la figura. Podemos ver el resultado original si las graficamos directamente desde la interfaz WxMaxima, adjuntado a continuación.
Código ejecutado en WxMaxima y resultados. Imagen y código por el autor.
Referencias
[1] Stewart, James, Cálculo: conceptos y contextos, 1999. Editorial Thompson.
[2]: Haager, Wilhem, Graphics with Maxima (Version 5.23 and above), 2011. HTL St. Pölten, ET Elektrotechnik
viernes, 5 de julio de 2013
viernes, 21 de junio de 2013
Scilab- Comando colormap(), mesh y meshgrid para gráficas de dos variables.
Un atractivo de Scilab es la posibilidad de hacer gráficos de funciones de dos variables y poder usar una paleta de colores predeterminadas, haciendo muy atractiva su salida por pantalla. Para ello se puede usar una simple combinación de las funciones meshgrid, que creea una matriz con los datos de dos variables previamente definidas, mesh, que realiza una gráfica de la función con Z=f(X,Y), con X e Y variables definidas por la función meshgrid, y con la función xset("colormap",mapa_elegido(n)), siendo n un número, correspondiéndose con el número de colores de la paleta, y mapa_elegido() una función de Scilab que permite usar una selección determinada de colores (asignándose estos en función de la posición de cada proporción de superficie dada por mesh()). Algunas de estos mapas son coppercolormap(), oceancolormap(), bonecolormap(), springcolormap(), etc. Estos pueden consultarse en el Navegador de ayuda. Se ha usado las referencias de [1] sobre este tema en las páginas
// pruebacolormap().sce
// Prueba de gráficos con colormap()
// Definimos la función a usar f:R^2 -->R
// [sin(x.*y)] y el dominio de esta (x,y)
x=-3:.1:3;
y=-3:.1:3;
//empleamos el comando
//meshgrid(x,y), para crear dos matrices con todos
//los valores necesarios para dibujarla
[X,Y]=meshgrid(x,y);
// y dibujamos la función (sin colores)
Z=sin(X.*Y);
mesh(X,Y,Z);
// Empleamos xset("colormap",mapa_de_colores(n))
// y el comando surf para dibujar la gráfica de la función f con colores.
n=34 //numeros de colores a usar
// Usamos oceancolormap()
// y obtenemos la superficie de la función en tonos azules.
scf(1)
clf(1)
xset("colormap",oceancolormap(n))
surf(X,Y,Z)
// Usamos coppercolormap()
// y obtenemos la superficie en tonos marrones
scf(2)
xset("colormap",coppercolormap(n))
surf(X,Y,Z)
Código de Scilab descrito anteriormente. Código por el autor.
Así pues, si ejecutamos el programa anterior en Scilab, obtenemos las siguientes imágenes.
Resultados del programa anterior. Códigos e imágenes por el autor.
Referencias
[1]: Venturin, Manolo. Plotting with Scilab, Openeering Totorials. Openeering.
// pruebacolormap().sce
// Prueba de gráficos con colormap()
// Definimos la función a usar f:R^2 -->R
// [sin(x.*y)] y el dominio de esta (x,y)
x=-3:.1:3;
y=-3:.1:3;
//empleamos el comando
//meshgrid(x,y), para crear dos matrices con todos
//los valores necesarios para dibujarla
[X,Y]=meshgrid(x,y);
// y dibujamos la función (sin colores)
Z=sin(X.*Y);
mesh(X,Y,Z);
// Empleamos xset("colormap",mapa_de_colores(n))
// y el comando surf para dibujar la gráfica de la función f con colores.
n=34 //numeros de colores a usar
// Usamos oceancolormap()
// y obtenemos la superficie de la función en tonos azules.
scf(1)
clf(1)
xset("colormap",oceancolormap(n))
surf(X,Y,Z)
// Usamos coppercolormap()
// y obtenemos la superficie en tonos marrones
scf(2)
xset("colormap",coppercolormap(n))
surf(X,Y,Z)
Código de Scilab descrito anteriormente. Código por el autor.
Así pues, si ejecutamos el programa anterior en Scilab, obtenemos las siguientes imágenes.
Resultados del programa anterior. Códigos e imágenes por el autor.
Referencias
[1]: Venturin, Manolo. Plotting with Scilab, Openeering Totorials. Openeering.
R- Ejecutar un script redactado con Notepad++
La potencia de R lo hace un programa muy atractivo. Uno de sus inconvenientes, provocado por su implantación de tipo lenguaje interpretado o interpretación pura, que, como JavaScript o PHP, no requiere de un compilador para crear su ejecutable, sino que cada comando es evaluado, y si es correcto, ejecutado. Sino, lanza un mensaje de error y se interrumpe el programa
Esto resulta especialmente molesto en caso de tener un programa de tamaño elevado (por ejemplo, con más de 60 lineas de código. Una experiencia personal, bastante funesta, fue el redactar un trabajo de clase para la materia Estadística Básica en la que nos introducían al uso de R con 70 lineas de código R para resolver seis problemas relacionados con métodos estadísticos, cuya depuración se hizo instrucción a instrucción,volviendo a repetir cada comando en caso de error). Si bien es cierto que la memoria del programa permite repetir tantas veces una función o volver a editarla pulsando repetidamente la flecha “arriba” de teclado, en ocasiones se vuelve tedioso. Un forma agradable de trabajar es usar Notepad++.
Este programa es en principio similar al Bloc de notas de Windows; es un generador de texto plano, pero permite la posibilidad de redactar un archivo con código fuente de un lenguaje de programación determinado, marcando las funciones especiales, las palabras reservadas, las cifras y valores numéricos y las sangrías. En [1] se puede obtener información sobre Notepad++ y su enlace para descargarlo.
Podemos redactar el programa con Notepad++. Una vez abierto, se selecciona en la opción de Lenguajes la etiqueta R. Redactamos un pequeño programa, que se basará en la definición de asociación de un valor a una variable, y posteriormente obtenerlo por pantalla. Vemos cómo aparecen señaladas en colores, si están bien redactadas, las palabras reservadas del lenguaje. Después lo modificaremos para obtener otro string con la función sub(cadena_original, cadena_nueva, string).
Programa a usar desde Notepad++. Código e imagen por el autor.
Una vez hecho, lo guardamos con extensión .r y lo ejecutamos en la GUI de R. Una vez abierto R, en la barra de herramientas, pinchamos en la pestaña Archivo y hacemos clic en Abrir script... (para los usuarios de habla hispana, File y Open script en las versiones originales, donde las etiquetas estaban en inglés) Se abre un cómodo buscador que nos permitirá localizar el código fuente recientemente hecho y al seleccionarlo, se mostrará este en el programa R desde su editor, cómodamente ejecutable.
El programa en el editor de R GUI. Imagen y código por el autor.
Así pues, si se sigue estos pasos con el ejemplo propuesto, un programa que saca por consola el mensaje Hola mundo desde R GUI! Lo modifica y saca este por pantalla (las funciones usadas y el tratamiento de los strings han sido elaborados a través de las conclusiones expuestas en [2]), obtenemos en la consola el siguiente resultado:
R version 3.0.0 (2013-04-03) -- "Masked Marvel"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
R es un software libre y viene sin GARANTIA ALGUNA.
Usted puede redistribuirlo bajo ciertas circunstancias.
Escriba 'license()' o 'licence()' para detalles de distribucion.
R es un proyecto colaborativo con muchos contribuyentes.
Escriba 'contributors()' para obtener más información y
'citation()' para saber cómo citar R o paquetes de R en publicaciones.
Escriba 'demo()' para demostraciones, 'help()' para el sistema on-line de ayuda,
o 'help.start()' para abrir el sistema de ayuda HTML con su navegador.
Escriba 'q()' para salir de R.
[Previously saved workspace restored]
> #--------------------------------------------------
> # Programa HolamundoR
> # Entrada (Teclado): Un string con la frase
> # "Holamundo desde R!"
> # Salida (Pantalla): el string y uno obtenido con
> # sub(), que modifica el primero
> #---------------------------------------------------
> first <-"Hola mundo desde R GUI!"
> first
[1] "Hola mundo desde R GUI!"
> class(first)
[1] "character"
> second <-sub("R GUI","R con Notepad++",first)
> second
[1] "Hola mundo desde R con Notepad++!"
Aspecto de la consola tras las ejecución del programa usado (en azul las instrucciones).
Referencias
[1]: Notepad++, disponible (con información) desde http://notepad-plus-plus.org/
[2]: R para Principiantes, Emmanuel Paradis. Traducción por Jorge A. Ahumada. Texto de difusión libre, extraído de http://cran.r-project.org/doc/contrib/rdebuts_es.pdf
Esto resulta especialmente molesto en caso de tener un programa de tamaño elevado (por ejemplo, con más de 60 lineas de código. Una experiencia personal, bastante funesta, fue el redactar un trabajo de clase para la materia Estadística Básica en la que nos introducían al uso de R con 70 lineas de código R para resolver seis problemas relacionados con métodos estadísticos, cuya depuración se hizo instrucción a instrucción,volviendo a repetir cada comando en caso de error). Si bien es cierto que la memoria del programa permite repetir tantas veces una función o volver a editarla pulsando repetidamente la flecha “arriba” de teclado, en ocasiones se vuelve tedioso. Un forma agradable de trabajar es usar Notepad++.
Este programa es en principio similar al Bloc de notas de Windows; es un generador de texto plano, pero permite la posibilidad de redactar un archivo con código fuente de un lenguaje de programación determinado, marcando las funciones especiales, las palabras reservadas, las cifras y valores numéricos y las sangrías. En [1] se puede obtener información sobre Notepad++ y su enlace para descargarlo.
Podemos redactar el programa con Notepad++. Una vez abierto, se selecciona en la opción de Lenguajes la etiqueta R. Redactamos un pequeño programa, que se basará en la definición de asociación de un valor a una variable, y posteriormente obtenerlo por pantalla. Vemos cómo aparecen señaladas en colores, si están bien redactadas, las palabras reservadas del lenguaje. Después lo modificaremos para obtener otro string con la función sub(cadena_original, cadena_nueva, string).
Programa a usar desde Notepad++. Código e imagen por el autor.
Una vez hecho, lo guardamos con extensión .r y lo ejecutamos en la GUI de R. Una vez abierto R, en la barra de herramientas, pinchamos en la pestaña Archivo y hacemos clic en Abrir script... (para los usuarios de habla hispana, File y Open script en las versiones originales, donde las etiquetas estaban en inglés) Se abre un cómodo buscador que nos permitirá localizar el código fuente recientemente hecho y al seleccionarlo, se mostrará este en el programa R desde su editor, cómodamente ejecutable.
El programa en el editor de R GUI. Imagen y código por el autor.
Así pues, si se sigue estos pasos con el ejemplo propuesto, un programa que saca por consola el mensaje Hola mundo desde R GUI! Lo modifica y saca este por pantalla (las funciones usadas y el tratamiento de los strings han sido elaborados a través de las conclusiones expuestas en [2]), obtenemos en la consola el siguiente resultado:
R version 3.0.0 (2013-04-03) -- "Masked Marvel"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
R es un software libre y viene sin GARANTIA ALGUNA.
Usted puede redistribuirlo bajo ciertas circunstancias.
Escriba 'license()' o 'licence()' para detalles de distribucion.
R es un proyecto colaborativo con muchos contribuyentes.
Escriba 'contributors()' para obtener más información y
'citation()' para saber cómo citar R o paquetes de R en publicaciones.
Escriba 'demo()' para demostraciones, 'help()' para el sistema on-line de ayuda,
o 'help.start()' para abrir el sistema de ayuda HTML con su navegador.
Escriba 'q()' para salir de R.
[Previously saved workspace restored]
> #--------------------------------------------------
> # Programa HolamundoR
> # Entrada (Teclado): Un string con la frase
> # "Holamundo desde R!"
> # Salida (Pantalla): el string y uno obtenido con
> # sub(), que modifica el primero
> #---------------------------------------------------
> first <-"Hola mundo desde R GUI!"
> first
[1] "Hola mundo desde R GUI!"
> class(first)
[1] "character"
> second <-sub("R GUI","R con Notepad++",first)
> second
[1] "Hola mundo desde R con Notepad++!"
Aspecto de la consola tras las ejecución del programa usado (en azul las instrucciones).
Referencias
[1]: Notepad++, disponible (con información) desde http://notepad-plus-plus.org/
[2]: R para Principiantes, Emmanuel Paradis. Traducción por Jorge A. Ahumada. Texto de difusión libre, extraído de http://cran.r-project.org/doc/contrib/rdebuts_es.pdf
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.
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
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.
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)
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.
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.
lunes, 25 de marzo de 2013
Scilab- Scilab, versión 5.4.0
Interesante versión de Scilab. Se pueden ver sus novedades y mejoras en el informe del siguiente enlace en:
http://www.scilab.org/community/news/20121001/Release-Notes
http://www.scilab.org/community/news/20121001/Release-Notes
lunes, 20 de agosto de 2012
Cálculo-Comparación de funciones trigonométricas
Cree esta imagen para dar clases. Se trata de una representación de las funciones seno y coseno en un intervalo de 2 a 3. Para este caso, he empleado la expresión de valores en forma de intervalo a : (razón de crecimiento) : b. Los resultados gráficos con Scilab son muy interesantes:
Discretas-Grafo de un cuboctaedro
La teoría de grafos es visualmente muy atractiva. En este caso, me plantee la representación de un grafo que representase un cuboctaedro, un sólido de arquímedes muy interesante.
Para mi sorpresa, existe un comando en WxMaxima, paquete graphs, que permite copnstruir un grafo isomorfo a él. Yo he hecho dos, como ejemplo de isomorfismo entre grafos ( dos grafos son isomorfos sí y solo sí existe una aplicación biyectiva que transforma todo vértice de un grafo en uno del otro y toda arista está en el otro). Introduciendo los siguientes comandos, obtenemos el resultado:
![]() |
| (http://es.wikipedia.org/wiki/S%C3%B3lidos_arquimedianos) |
Para mi sorpresa, existe un comando en WxMaxima, paquete graphs, que permite copnstruir un grafo isomorfo a él. Yo he hecho dos, como ejemplo de isomorfismo entre grafos ( dos grafos son isomorfos sí y solo sí existe una aplicación biyectiva que transforma todo vértice de un grafo en uno del otro y toda arista está en el otro). Introduciendo los siguientes comandos, obtenemos el resultado:
Álgebra lineal- representación de una curva cicloide en tres dimensiones
El creador de gráficos de Scilab es una herramienta muy poderosa que cuenta de varias opciones. Aquí me aprovecharé de él para conseguir una representación visual de la curva cicloide ( http://es.wikipedia.org/wiki/Cicloide y http://mathworld.wolfram.com/Cycloid.html ) utilizando la función param3d y param 3d1 que grafican curvas paramétricas en el espacio. Introduciendo los siguientes comandos:
Se denominan curvas minimalistas por su similitud con el trabajo en hilo del artista americano Fred Sandback (http://fredsandbackarchive.org/). en último lugar, pero no menos importante, decir que las ecuaciones de la cicloide se han derivado de la obra de Eugenio Hernandez Álgebra y geometría, de la editorial Addison-Wesley, unos de mis textos favoritos sobre las relaciones entre la geometría analítica y el álgebra lineal.
martes, 31 de julio de 2012
Discreta- Grafo de un icosadodecaedro
Uno de los sólidos arquimedianos más famosos es el icosadodecaedro. Se basa en un poliedro cuasiregular formado por doce caras pentagonales y veinte caras triangulares, como aparece en la imagen.
Podemos realizar una construcción muy hermosa con WxMaxima utilizando el paquete graphs; lo que hacemos es construir el grafo isomorfo a este cuerpo, produciendo un grafo de 30 vértices y 60 aristas. Para ello introducimos los siguientes comandos.
Para más información, puede verse la siguiente entrada de Wikipedia:
http://es.wikipedia.org/wiki/S%C3%B3lido_de_Arqu%C3%ADmedes
![]() |
| Icosadodecaedro, imagen tomada de http://commons.wikimedia.org/wiki/File:Icosidodecahedron.jpg?uselang=es |
Podemos realizar una construcción muy hermosa con WxMaxima utilizando el paquete graphs; lo que hacemos es construir el grafo isomorfo a este cuerpo, produciendo un grafo de 30 vértices y 60 aristas. Para ello introducimos los siguientes comandos.
Para más información, puede verse la siguiente entrada de Wikipedia:
http://es.wikipedia.org/wiki/S%C3%B3lido_de_Arqu%C3%ADmedes
miércoles, 25 de julio de 2012
Discreta-Uso de Scilab para el estudio de matrices de adyacencia
Se presenta aquí un ejemplo de como estudiar la posibilidad de existencia de caminos en un grafo haciendo uso de sus matrices de adyacencia. Al elevar a n la matriz de adyacencia buscamos caminos de longitud n en el grafo. La suma de estas matrices nos devuelve los caminos posibles en el grafo de un vértice otro. Veremos un ejemplo de esta posible representación de grafos usando matrices empleando el podertde computo de Scilab.
Desarrollamos el ejercicio usando los siguientes comandos desde SciNotes, un editor con las funciones propias de Scilab que nos permite guardar el trabajo hecho con extesiones .sci o .sce.
Con M la matriz de adyacencia del grafo definido.Y como resultados obtenemos en la consola de Scilab:
Ejecución de inicio:
cargando entorno inicial
-->M=[0,1,1,0,0;
-->zeros(1,2),1,zeros(1,2);
-->zeros(2,3),eye(2,2);
-->1,0,1,zeros(1,2)]
M =
0. 1. 1. 0. 0.
0. 0. 1. 0. 0.
0. 0. 0. 1. 0.
0. 0. 0. 0. 1.
1. 0. 1. 0. 0.
-->M^2
ans =
0. 0. 1. 1. 0.
0. 0. 0. 1. 0.
0. 0. 0. 0. 1.
1. 0. 1. 0. 0.
0. 1. 1. 1. 0.
-->M^3
ans =
0. 0. 0. 1. 1.
0. 0. 0. 0. 1.
1. 0. 1. 0. 0.
0. 1. 1. 1. 0.
0. 0. 1. 1. 1.
-->M^4
ans =
1. 0. 1. 0. 1.
1. 0. 1. 0. 0.
0. 1. 1. 1. 0.
0. 0. 1. 1. 1.
1. 0. 1. 1. 1.
-->L=M+M^2+M^3+M^4
L =
1. 1. 3. 2. 2.
1. 0. 2. 1. 1.
1. 1. 2. 2. 1.
1. 1. 3. 2. 2.
2. 1. 4. 3. 2.
cargando entorno inicial
-->M=[0,1,1,0,0;
-->zeros(1,2),1,zeros(1,2);
-->zeros(2,3),eye(2,2);
-->1,0,1,zeros(1,2)]
M =
0. 1. 1. 0. 0.
0. 0. 1. 0. 0.
0. 0. 0. 1. 0.
0. 0. 0. 0. 1.
1. 0. 1. 0. 0.
-->M^2
ans =
0. 0. 1. 1. 0.
0. 0. 0. 1. 0.
0. 0. 0. 0. 1.
1. 0. 1. 0. 0.
0. 1. 1. 1. 0.
-->M^3
ans =
0. 0. 0. 1. 1.
0. 0. 0. 0. 1.
1. 0. 1. 0. 0.
0. 1. 1. 1. 0.
0. 0. 1. 1. 1.
-->M^4
ans =
1. 0. 1. 0. 1.
1. 0. 1. 0. 0.
0. 1. 1. 1. 0.
0. 0. 1. 1. 1.
1. 0. 1. 1. 1.
-->L=M+M^2+M^3+M^4
L =
1. 1. 3. 2. 2.
1. 0. 2. 1. 1.
1. 1. 2. 2. 1.
1. 1. 3. 2. 2.
2. 1. 4. 3. 2.
Toda la teoría empleada proviene del texto Elementos de Matemática Discretas, V.V.A.A, Editorial Sanz y Torres.
lunes, 23 de julio de 2012
Cálculo-Estudio de maximos/mínimos con contour
Se presenta aquí un problema clásico en varios cursos de cálculo vectorial; la determinación de maximos y mínimos usando conjuntos de nivel (ya sean curvas o superficies). En nuestra caso, vamos a estudiar una función compuesta de una cuadrática con una exponencial. Esta la vemos en el libro Cálculo vectorial, de Tromba y Marsden, ya citado con anterioridad. Nosotros corroboraremos haciendo uso de las curvas de nivel con el comando contour=map, que nos dibujará una proyección en el plano xy n curvas de nivel, con n un número entero positivo, y contour=surface, realizando una aproximación de estas en la imagen de la función, que, exactamente, todos los puntos de máximo locales se encuentran en el dominio representado por la circunferencia de radio 1 y centro en (0,0) (verde oscuro, en la pantalla). Para estos dibujos hemos usado el paquete draw de Maxima y se ha trabajado directamente desde Wxmaxima. Para más información sobre el tema se puede visitar:
lunes, 16 de julio de 2012
Graph-Cubo en 4 dimensiones
Se presenta aquí un grafo que representa un hipercubo (un cubo en cutro dimensiones) usando, en el paquete graph, el comando cube_graph(4).
Cálculo-estudio de función exponencial
Se presenta aquí el estudio de una función exponencial de tipo e elevado a la inversa de (x-y). Vemos como es discontinua para todos aquellos puntos que cumplen la condición de que x=y. Para observarla mejor, hacemos uso de la interfaz gráfica gnuplot, del que se presenta dos vistas.
Cálculo- Superficies paramétricas con draw
Se dibuja aquí una superficie paramétrica versionando una que aparece en el texto de Riotorto Primeros pasos en Maxima, y haciendo uso del paquete draw. Aparece como transparente (surface_hide=false) como opaca (surface_hide=true).
Cálculo-Prueba del hessiano
Aquí aparece el resultado producido por Wxmaxima de un ejercicio propuesto en el texto de J. Marsden y A.Tromba Cálculo vectorial (editorial Pearson-Addison Wesley), en el tema 3, sección 3.3, sobre el uso del test del hessiano para definir si un punto crítico es un máximo o un mínimo. Aquí vemos como definida la función, vamos obteniendo de ella los resultados que queremos; el punto crítico (entrada %i18), las diferenciales de la función (%i21) una gráfica de la función y su hessiano. Lástima que, en este caso, no podemos decir nada más sobre el punto crítico (0,0) pues el determinante de este es 0 (salida %o27) y tendríamos que realizar un estudio completo de este. Hemos hecho uso del apostrofe ' con el fin de obtener las celdas %o19,%o21 con una expresión literal de la diferencial.
Suscribirse a:
Entradas (Atom)
















































