Make your own free website on Tripod.com

Graficador GDF - versión 2.0

 

 

Que es GDF

 

GDF es un programa gratis que permite graficar cualquier función matemática en una variable, haces y conicas, sobre un sistema de coordenadas cartesiano con el propósito de verificar resultados de ejercicios como derivadas, signos, extremos relativos, límites, etc...

Para obtener mas información sobre el mismo consulte sus características en esta página.

 

 

Como conseguir este programa

 

Descargue gratuitamente el instalador para Windows (aproximadamente 2Mb) desde mi página de descargas.

 

Graficando haces de funciones, circunferencias, elipse, hiperbolas...

 

 

Características

 


 Como usar GDF

Este programa es muy facil e intuitivo de usar para quienes estan habituados a la sintaxis y notacion de la geometria analítica. En caso de querer graficar una función, bastará con escribir la ecuación en la pantalla inicial del programa y presionar el boton 'graficar'. Si desea dibujar varias funciones y/o conicas en el mismo grafico: presione 'agregar' y elija el tipo de curva a crear haciendo click en la pestaña correspondiente (en la parte superior de la ventana) y a continuación complete los campos que aparecen en la ficha. Presione 'aceptar' y repita el proceso hasta agregar todas las curvas. Finalmente presione 'graficar lista'. 

Agregando un gráfico a la lista

 

 

Como utilizar el menú insertar

 

Para colocar los paréntesis automáticamente: seleccione la parte de la ecuación a la que se le va a aplicar la función y haga click en el nombre de la función a insertar en el menú.

Por ejemplo si ha escrito x^2+x+1 y quiere obtener x^2+log (x+1): debe seleccionar "x+1" de la primer ecuación y hacer click en "logaritmo base 10" del menú insertar para que aparezca la segunda ecuación. 

 

 

 

Operadores

 

Listado de operadores por orden de ejecución

 

!

    Factorial

^

    Potencia

abs, atn, cos, exp, gamma, inv, ln, lngamma, log, raiz2, raiz3, sen, sig, tan

    Funciones predefinidas

*

    Producto

/

    División

\

    División entera (trunca el resultado)

-

    Substracción

+

    Adición

 

 

 

Funciones predefinidas

 

Todas las funciones trigonométricas trabajan con grados.

 

abs Valor absoluto
atn Arcotangente
cos Coseno
exp El número "e" elevado a una potencia
gamma Función Gamma
inv Inverso
ln Logaritmo neperiano
lngamma Logatormo neperiano de gamma
log Logaritmo base 10
raiz2 Raiz cuadrada
raiz3 Raíz triple
sen Seno
sig Signo
tan Tangente

 

 

Notas del autor

Acerca de mi

Soy licenciado en análisis de sistemas, tengo 32 años y naci en Uruguay. Emigre a España hace mas de un año. Al ser de ascendencia italiana, me es posible trabajar legalmente en paises de la Unión Europea. En principio trabajé en Madrid y actualmente resido en Barcelona.

Comencé a programar con lenguaje Logo a la edad de 8 años utilizando un Commodore 64 de mi escuela. A los 12 años tuve mi primer ordenador, un Spectrum+ de 48K de memoria, con el cual hice mis primeros programas en Basic. Posteriormente pase al Spectrum+ 128K y al Adam Coleco 144K, con otra version de Basic. Finalmente empece a programar QBasic y Visual Basic en un PC con procesador 80486 durante la década de los '90. Siempre recuerdo la epoca de los ordenadores de 8 bits, las calculadoras programables y la enorme variedad de marcas y plataformas de los '80 (Spectrum, Commodore, Amstrad, Sharp, TK, Mac, etc...).

Actualmente publico codigo y participo en foros de programadores regularmente. Me interesa sobretodo la resolución de problemas mediantes algoritmos, aunque profesionalmente me ocupa mas la programación de BBDD, Internet, etc...

Como funciona GDF


Mi programa no utiliza bibliotecas ni codigo de otros autores y esta totalmente desarrollado en Basic. Sin embargo, como habrán podido comprobar, la velocidad de ejecución es similar a la muchos graficadores de C y Java. Los programadores con los que intercambio ideas, frecuentemente me comentan que es bastante rapido para estar en Basic. La verdad es que el motor de evaluación (la parte de código que calcula el valor de una ecuación para unos valores concretos de las variables) es mas lento que uno hecho en C o Java, pero la velocidad al graficar es muy buena, porque esta especialmente desarrollado para ese trabajo. De este modo, se puede combinar la facilidad de desarrollar en un lenguaje simple y el obtener buenos resultados de rendimiento a la hora de ejecutar el codigo. Ahora les explicacré este punto en detalle. Para evaluar una función se hace un arbol en memoria con los terminos de la misma y se resuleve en forma recursiva (la funcion se llama a si misma).

Por ejemplo, para evaluar: 1 + ( 2 * 2 ) - 3, el programa lo interpreta de la siguiente forma.

arbol de evaluación

Internamente se hacen los siguientes "razonamientos"
1 + ( 2 * 2 ) - 3 1 operado con desconocido "(2 * 2) -3" => Resolver  "( 2 * 2 ) - 3" y operar luego
( 2 * 2 ) - 3 ( 2 * 2 ) desconocido, operado con 3 => Resolver "(2 * 2)" y operar luego
2 * 2 2 operado con 2 => Resolver = 4
4 - 3 4 operado con 3 => Resolver = 1
1 + 1 1 operado con 1 => Resolver = 2 (esto es el "operar luego" de la primera linea de la tabla)

En definitva, lo unico que el programa sabe hacer son operaciones basicas, como 2+2, 4*3, etc... y esto es sencillo haciendo un "case" y convirtiendo los valores de texto a numeros. Estas operaciones se buscan de izquierda a derecha en la ecuación y con un orden de prioridad: por ejemplo, primero los signos de + y - separan terminos, luego *, /, etc...
Para utilizar funciones como log, sen, cos, etc... no se como lo hancen otros programas, porque en su momento no encontré ideas en Internet para resolver este punto. En mi caso, lo que hice fue transformar esos nombres de funciones en operadores para reusar el codigo que ya tenia. Es decir, ademas de tener +,-,*,/, invente un operador @, de modo que lo que esta antes del operador es un valor de entrada y lo que esta despues es la función a ejecutar. Para aclarar este concepto vamos a un ejemplo: el usuario escribe "log 10" y el programa reemplaza una sola vez "log" por "1@", entonces queda "1@10". Cuando en la evaluacion encuentro la operacion @, busco de que funcion se trata. En este caso es la función "1", que es log (por ejemplo, la función exp podria ser 2, raiz cuadrada la 3, etc.... ,es decir que tengo una estructura de tipo Case). A continuación busco el valor de entrada, que es el segundo operando, en este caso 10 y ejecuto la funcion log de Basic para ese valor.

Sin embargo, cuando estamos graficando, resolvemos la misma ecuación cientos de veces. Entonces, ¿porque no guardar el arbol de evaluación, en lugar de hacer uno diferente cada vez? Esto implica hacer una funcion de evaluación específica para graficar, que no es lo que esta en los libros. Lo que ocurre es que generalmente el programador usa codigo de evaluacion bajado de internet y le pone una interfaz grafica para obtener "su" graficador de funciones. Como no sabe o no le interesa como funciona la evaluación en si, se limita a invocar el codigo de evaluacion para cada punto del grafico, lo cual es menos eficiente.
En mi caso he realizado una especie de cache de terminos, operaciones y arbol de evaluación, que depende siempre de las variables x, p, etc... Sus valores no se sustuyen hasta el ultimo momento, de modo que se pueda reusar esos datos cuando cambian los valores de las variables.

El motor de evaluación lo hice en el año 2003 como entretenimiento.

Busqué en biblioteca de mi universidad un libro de algoritmos que hablara sobre la evaluación de funciones. Lo que pude encontrar fue uno muy antiguo, con codigo de ejemplo en Pascal. Dicho codigo no era nada claro y el autor habia organizado una compleja maraña en torno a una idea, que en principio era sencilla: hacer un arbol y evaluar la ecuación en forma recursiva. Es decir una función que se llama a si misma, una y otra vez, hasta completar el trabajo. En principio habia intentado resolver el problema por mi cuenta y la solución que tenía en seudocodigo era similar, pero sin el uso de recursividad. Modifique mi codigo para aplicar la recursividad y la solución gano en claridad y eficiencia, porque todo lo que se almacena en memoria (los totales de los terminos de la ecuación), se usa en la evaluación. Si la función tiene 10 variables declaradas en el codigo y se llama a si misma 6 veces, entonces, en algun momento tendremos 60 variables. Eso no es otra cosa que una estructura de datos, pero todo lo que se guarda en ella, se va a usar luego, al ser los totales de los terminos ya procesados y el ultimo que se esta procesando. De modo que se aprovecha la memoria, en lugar del desperdicio que se suele hacer muchas veces con la recursividad.


Decidi entonces hacer un prototipo en Basic para demostrar que el problema podia resolverse en forma clara con unas pocas lineas de codigo. Posteriormente pense en la posibilidad de hacer una interfaz grafica, lo cual me permitiria publicar mi programa en Internet..

Para la versión  2.0 he realizado importantes modificaciones sobre el motor de evaluación de ecuaciones. Practicamente volvi a escribir el corazon del programa, logrando acelerar enormemente los cálculos.

 

 

Estado de la licencia

 

PERMISO VIGENTE

 

El permiso para la utilización de este producto se actualiza la primer semana de cada mes.

Por mas información consulte la licencia del producto.

 


Mis páginas Web

Si tienes una calculadora Casio: visita mi página web en la que publico programas gratis para resolver problemas de funciones, geometría analítica, consejos y juegos.


Daniel Manta Barbieri

Barcelona, España

d_manta@hotmail.com

http://gdf2004.tripod.com

  Webstats4U - Free web site statistics