Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Uno de los puntos más relevantes en cuanto a análisis numérico se refiere, es visualizar los
resultados de un proceso, ya sean las coordenadas (x, f(x)) resultantes de una ecuación, una serie
de datos de campo, el resultado de datos de un proceso, etc. La mejor manera de lograr lo anterior
es mediante una gráfica.
GRAFICANDO FUNCIONES
El algoritmo básico para graficar una función matemática no cambia substancialmente de un tipo a
otro de funciones. Por ejemplo, para una función del tipo Y= F(X) se requiere conocer el dominio en
el que se evaluará la variable independiente (el límite inferior y superior de la variable X). Luego se
requiere conocer cómo se atravesará dicho dominio, que en otras palabras significa de conocer la
función transición o paso entre cada valor de x en el que se pretenda evaluar la función F(X).
Si una función implica más de una variable independiente, por ejemplo Z=F(X, Y), el proceso
involucrará conocer los dominios de las variables X e Y, así como las funciones de paso para
ambas variables. En este caso, es necesario predefinir el orden en el que se incrementen las
variables independientes. La evaluación de la función se realiza para cada valor del grupo de x e y
antes mencionado.
Observando lo anterior, el algoritmo de graficación básico para el caso de una función con una sola
variable independiente, sería de la siguiente manera:
El diagrama de flujo del proceso anterior quedaría de la manera que se muestra en la figura 1a.
Para graficar funciones que involucran dos variables independientes es análogo, solamente que en
este caso se tendrán dos ciclos anidados por cada variable independiente (figura 1b).
X := X + 1; o Y:= Y + 1;
Un albañil tiene que colocar 100 bloques para construir un segmento de muro. Cada que el albañil
coloca un bloque en el muro, se mide el tiempo en minutos (T) que tarda en colocarlo. Para este
ejemplo, supóngase que el tiempo que tarda el albañil en colocar un bloque está dado por la
siguiente expresión:
T:= 8/X + 0.02X + 2
X := Xinicial X := Xinicial
Y := Yinicial
Ciclo X := Xinicial
Y := Yinicial
(X, Y)
X >= Xfinal Ciclo Y
NO
SI Z := F(X, Y);
X := Transición (X);
X >= Xfinal
NO
(X, Y, Z)
SI
Fin de ciclo X
X := Transición (X);
Y >= Yfinal
NO
Fin de ciclo SI
Y := Transición (Y);
Fin de ciclo Y
Figura 1.- Algoritmo para graficar funciones de una (a) y dos variables independientes (b)
En este caso, el dominio de la variable independiente comprende desde 1 hasta 100. El algoritmo
de graficación de este problema quedaría de la siguiente manera utilizando seudocódigo:
Xinicial := 1;
Xfinal := 100;
X := Xinicial;
Mientras X sea menor o igual a Xfinal hágase
Inicio
T:= 8/X + 0.02*X + 2;
Graficar( X, T );
X:= X+1;
Fin;
El seudocódigo anterior hace uso de un ciclo controlado por una condición que se prueba al inicio
(similar al ciclo While), pero también se puede hacer uso de una instrucción cíclica con pasos fijos
(tal como el ciclo For) o una instrucción que compruebe la condición de término al final (Repeat).
Los siguientes casos ilustran las soluciones alternativas a este problema:
Caso 1: Usando ciclos con pasos fijos:
Repetir
T:= 8/X + 0.02*X + 2;
Graficar( X, T );
X:= X+1;
Hasta que X sea mayor o igual a Xfinal
Se tiene que tener especial cuidado en el caso 1, pues la variable que lleva la cuenta de los ciclos
tiene que ser de tipo ordinal. En este caso particular, el conteo coincide con el número de bloques
que el albañil tiene que colocar.
Nótese también la diferencia entre las condiciones de termino del ciclo para la solución inicial y la
del caso 2. Originalmente el ciclo se ejecuta mientras X sea menor o igual al valor final y para el
caso 2, el ciclo se ejecuta hasta que el valor X sea mayor o igual al valor final.
En cualquiera de los casos que se han expuesto hasta ahora, el paso de un valor de X a otro no
necesariamente se tendrá que realizar en incrementos enteros. Así mismo, por cuestiones de
sencillez, en esta sección se limitará el uso de las gráficas a dos dimensiones.
EL OBJETO TCHART©
Delphi posee un control específicamente orientado a desplegar gráficas de dos dimensiones, por lo
que el caso de graficar funciones de una variable independiente está cubierto por dicho control. Se
incluyen en el entorno de desarrollo los componentes Chart, en la pestaña Additional. Para Ilustrar
este proceso, selecciónese un proyecto en blanco y localice el control Chart de la barra
correspondiente.
Para incluir una gráfica tipo Chart en un formulario, se tiene que seleccionar el objeto Chart y
colocarlo en un formulario. Coloque dicho control sobre el formulario. Una vez hecho esto, el
formulario cuenta con un objeto gráfico en blanco (fig. 2). Seleccionando sobre él, con el botón
secundario del ratón (fig. 3), se puede acceder a Edit Chart (fig. 4), que va a ser la herramienta
principal de trabajo.
La base de todo lo que se realice va a partir de las Series, sobre ellas se crearán los atributos y
formas de visualización, serán quienes tomen los valores para componer la gráfica. Así pues, se
añadirá con el botón Add la primera de ellas. Una vez que se ha pulsado, aparecerá la Galería con
un aspecto similar al que se puede apreciar en la Figura 5. Por defecto, en la parte
inferior derecha está activa la marca para crear en 3D. Si no es esa la intención, solo se tiene que
utilizar el ratón para desactivarla, con lo que todas las series perderán el fondo. Cualquier opción
que se elija va a verse reflejada en el panel del gráfico, con unos valores en principio aleatorios.
Figura 2.- Objeto Gráfico en blanco.
Una vez elegida la serie que resulte conveniente, se puede apreciar que en el panel de edición
aparece ésta dibujada en miniatura en la parte izquierda, a continuación hay una marca que se
utiliza para activar o no la serie (fig. 6). Para este ejemplo, se suprimió la opción de tres
dimensiones (3D en la fig. 5). Si no se ve el formulario, se puede desplazar la ventana de edición.
En ésta ventana se ha creado el gráfico correspondiente a la serie seleccionada, con unos valores
arbitrarios, y que desactivando esta marca la figura desaparece. Además, en el módulo de código
correspondiente tenemos dos valores en la sección type, el TChart y el correspondiente a lo que
hemos elegido, por ejemplo TLineSeries, TBarSeries, etc.
Las restantes opciones en la pantalla de edición son el color, que veremos como modificarlo, y el
título. En los botones de la derecha veremos que el editor nos deja añadir cuantas series queramos
y del tipo que sean. Es lógico, puesto que en un mismo gráfico se puede combinar distintos valores
o representar los mismos de distintas formas superpuestas e incluso tenerlos creados, aunque
inactivos, hasta el momento de su uso.
El resto de las opciones son simples, borrar una serie, cambiar su título, duplicarla o sustituirla por
otra de la Galería. En este momento se ha creado el esqueleto del gráfico, con él que se podrá
empezar a trabajar.
Nota A cada uno de las gráficas a representar se le da el nombre de Serie, de manera que
: la creación de éstas es la base de, inicio para el manejo de este software. Esto es muy
similar a la manera de graficar de Microsoft Excel.
COLOCACIÓN DE BLOQUES
Recordando lo visto previamente, para graficar en dos dimensiones se necesitan conocer los
siguientes elementos:
Con el proyecto ya iniciado, se editará el objeto Chart y se agregará una serie tipo FastLine. En
este ejemplo, dicha serie tendrá el nombre de Series1.
Se tomará el seudocódigo del ejemplo del albañil como ejemplo para construir el procedimiento de
ejecución:
Xinicial := 1;
Xfinal := 100;
X := Xinicial;
Mientras X sea menor o igual a Xfinal hágase
Inicio
T:= 8/X + 0.02*X + 2;
Graficar( X, T );
X:= X+1;
Fin;
Nótese que la función “Graficar” fue sustituida por la aplicación del método AddXY del objeto
Series1, creado dentro del objeto Chart. En efecto, con la creación de cada serie de datos dentro
de una gráfica también se heredan métodos y propiedades para cada serie. En el caso de una
serie del tipo FastLine, para agregar un punto y trazar una línea entre el punto anterior y el
siguiente, este método es el más sencillo a seguir. Otros tipos de series (diagramas de pastel,
flechas, diagramas Gantt, etc.), tienen métodos específicamente diseñados para agregar
información respectivamente.
Es en este momento que ya se puede probar la aplicación y observar los resultados que se
obtendrán. La figura 8muestra el resultado visualizado en el objeto Chart al pulsar el botón de
ejecución del formulario:
MOVIMIENTO DE PARTÍCULAS
Para este ejemplo, se tiene que la posición de una partícula que se mueve en una trayectoria
rectilínea, está dada por la siguiente relación:
X = T3 – 6T2 + 15T – 40
Donde T es el tiempo que trascurre desde el instante Tinicial = 0 hasta Tfinal = 10 segundos, X es
la posición de la partícula en la recta en la que se desplaza. Trazar la gráfica que muestre cómo
varía la posición X sobre la trayectoria rectilínea, con respecto al tiempo de recorrido de la
partícula. Tómense intervalos de evaluación entre valores de T de 0.25 seg.
Nota En este caso, en lugar de usar un botón de ejecución normal, se utilizará un objeto
: Bitmap Button. La única diferencia entre estos tipos de botones es que el primero
puede desplegar una imagen en su cara. En su defecto, el lector puede usar un botón
normal.
Tomando el algoritmo para graficar previamente expuesto, se adaptará para este problema
específico:
Tinicial := 0;
Tfinal := 10;
T := Tinicial;
Mientras T sea menor o igual a Tfinal hágase
Inicio
T:= T*T*T – 6*sqr(T) + 15*T -40;
Graficar( X, T );
T:= T + 0.25;
Fin;
Figura 10.- Posición de la partícula sobre la trayectoria con respecto del tiempo.
En esta sección se verá cómo modificar el aspecto general de una gráfica. Tómese como ejemplo
la gráfica de la figura 10. Para ello será necesario acceder al editor mediante la selección del objeto
en el formulario y pulsando el botón secundario del ratón. Al seleccionar al editor se desplegará el
menú que se mostró en la figura 4.
Introduzca el título “Posición de la partícula” en el campo de edición del título (fig. 12)
Cámbiese al pie de la gráfica (fig. 13a) e introduzca el texto “Dinámica de Partículas” en el campo
de edición (fig. 13b).
(a) (b)
Para eliminar el cuadro de legendas que aparece en el lado derecho de la gráfica, selecciónese la
lengüeta Legend y desmárquese el cuadro Visible (fig. 14).
Una vez hecho lo anterior, la gráfica quedará tal como se muestra en la figura 15
Figura 15.- Visualización de diseño.
Si se requiere que el usuario proporcione los puntos de inicio y fin de la evaluación de la gráfica, se
tendrán que agregar las correspondientes cajas de edición (figura 16) de donde el procedimiento
del botón tomará los valores.
Figura 16.- Formulario con espacios para que el usuario proporcione los límites de
evaluación
Así mismo, se tienen que adaptar las líneas de código correspondientes en el procedimiento del
botón.
Tinicial := strtofloat(Edit1.Text);
Tfinal := strtofloat(Edit2.Text);
El funcionamiento de la aplicación anterior se puede visualizar en la figura 17
Figura 17.- Gráfica de la ecuación de movimiento de la partícula con respecto al tiempo, para
el intervalo T= -10 a 10 segundos
CAÍDA LIBRE DE UNA PARTÍCULA DESDE UNA ALTURA H
Supóngase que se deja caer una partícula desde la azotea de un edificio. Se pide elaborar una
gráfica tipo fastline de dos dimensiones, que muestre cómo varía la altura (en metros) de una
partícula sujeta a la caída libre, desde la altura especificada por el usuario, hasta el suelo, en un
tiempo t (en segundos). Pártase del formulario de la figura 18. Tómense incrementos en el tiempo
de 0.25 segundos. Hágase uso de las opciones de la lengüeta Axis del editor de la gráfica para
modificar tanto los títulos de los ejes, la lengüeta Titles para modificar el título del gráfico, así como
la lengüeta Legend para no hacer visibles las legendas de la gráfica.
La ecuación que rige la posición de una partícula en un movimiento uniformemente acelerado, con
una velocidad y posición iniciales iguales a cero, está dada por la expresión de la ecuación 1:
S( t ) at 2 Ec. 1
H( t ) gt 2 Ec. 2
Recordando que la altura que se calculará es igual a la diferencia entre la altura original
(proporcionada por el usuario), menos la obtenida por la expresión 2, se llega a la expresión de la
ecuación 3.
2
H( t ) H gt
0 Ec. 3
El siguiente listado es el código que el programador puede escribir en el botón para resolver este
problema en particular:
procedure TForm1.BitBtn1Click(Sender: TObject);
const
g = 9.81;
var
H0, HT, T : real;
begin
H0 := strtofloat(Edit1.Text);;
T := 0;
Repeat
HT:= H0 – g*sqr(t);
Series1.AddXY( T, HT );
T:= T + 0.25;
Until HT <= 0
end;
Por ejemplo:
Repeat
...
if HT < 0 then continue;
Series1.AddXY( T, HT );
...
Until HT <= 0
TRAZO DE POLÍGONOS
Supóngase que se necesita realizar un trazo de un polígono cerrado de dos dimensiones, a partir
de sus coordenadas. En este tipo de aplicación, el usuario ingresa en el sistema las coordenadas
(X ,Y) de cada punto. El trabajo del sistema será conectar cada pareja de puntos consecutivos (X1,
Y1) y (X2, Y2). Cuando se llega al último punto, el sistema deberá conectar a este con el primero
que el usuario halla asignado.
En este caso se utilizará un ejemplo en el que el usuario ingrese cuatro parejas de datos, para
trazar el polígono. Para ello será necesario poner ocho cajas de edición en un formulario en blanco,
sus correspondientes etiquetas, un botón de ejecución y un campo de gráficas.
Para este problema, se hará uso de una gráfica de flechas para representar las líneas del polígono
a dibujar. Para este ejemplo, se agregará una serie del tipo Arrow, (fig.21). para este caso se
desmarcará la opción 3D.
En la lengüeta Titles del formulario de edición se puede modificar el título de la gráfica. Se de-
seleccionar la visibilidad de las leyendas en la lengüeta Legend. En la lengüeta Axis se
seleccionará la opción de modificar el título del eje izquierdo (fig. 22a), de la misma manera se
modificará la del eje inferior (fig. 22b).
(a) (b)
Figura 22.- Títulos de los ejes.
Para graficar una flecha, es necesario establecer un punto de inicio (X1, Y1) y uno de terminación
(X2, Y2). En Delphi, esto se logra con el método AddArrow de la serie. Dicho método tiene la
sintaxis siguiente:
Donde X1, Y1, X2, Y2 son los puntos de inicio y fin de la flecha. ‘Texto’ es un texto que aparece
sobre la flecha a trazar en la gráfica. Por último, color puede tomar cualquiera de (aunque no está
limitado a) los siguientes valores: clAqua (Agua), clBlack (Negro), clBlue (Azul), clDkGray (Gris
Oscuro), clFuchsia (Fucsia), clGray (Gris), clGreen (Verde), clLime (Lima), clLtGray (Gris ligero),
clMaroon (Marrón), clNavy (Azul Marino), clOlive (Verde oliva), clPurple (Púrpura), clRed (Rojo),
clSilver (Plata), clTeal (Teal), clWhite (Blanco), clYellow (Amarillo).
El siguiente código en el botón, resuelve el problema de trazar las flechas entre los puntos que el
usuario introducirá en las cajas de edición:
Teniendo el código anterior en el botón de ejecución, se dispondrá a probar la aplicación, con los
valores de la tabla 1:
Tabla 1.- Coordenadas X, Y del problema
X Y
0 0
4 3
2 4
1 5
Es claro que esta aplicación será factible de ser utilizada para aquellos problemas en los que se
involucren cuatro parejas coordenadas. Sin embargo, la mayoría de los problemas que involucran
el trazo de polígonos (sobre todo en topografía), involucran una cantidad indefinida de puntos. El
problema involucra los siguientes puntos:
Inicio
X0, Y0
X1:= X0
Y1:=Y0
Not
EOF(Archivo)
X2, Y2
Trazar línea de
(X1, Y1) a
(X2, Y2)
X1:= X2
Y1:=Y2
Trazar línea de
(X2, Y2) a
(X0, Y0)
Fin
Figura 25.- Diagrama para graficar un polígono cerrado, a partir de una serie no definida de
datos.
1. Un campo memorando, que servirá para que el usuario ingrese la lista de puntos que se
graficarán. Nótese que se ha sustituido el contenido original del memorando (modificando
la propiedad Lines del campo) y se han agregado dos pareja datos, como valores iniciales.
Se tiene que hacer la aclaración de que el usuario ingresará parejas de datos numéricos.
Si el usuario ingresa letras o títulos en el memorando, se obtendrán mensajes de error.
2. Un objeto Chart, que servirá para trazar el polígono. Se utilizará uno con propiedades
similares al del ejemplo anterior.
3. Un botón de ejecución.
Una vez compilada, la aplicación coloca la información según se muestra en la figura 27:
Características
Tarea Duración
A 2
B 3
C 2
D 3
E 2
F 3
G 3
H 2
Para construir un diagrama de Gantt utilizando Delphi se han de seguir los siguientes pasos:
2. Utilizando el editor de Gráficos (Fig. 4), agréguese una serie nueva tipo Gantt (Fig. 29a)
3. Para este ejemplo, se cambiará el título por defecto de la serie (“Series1”, Fig. 29b), por
“Actividades” (Fig. 29c).
8. Seleccionando la paleta “Titles” del Editor de gráficas, cámbiese el título del gráfico por
“Cronograma” (Fig. 29h).
Hechos los pasos anteriores, se debe de contar con un formulario similar al de la Figura 30. La
información que se presenta en el objeto gráfico es completamente aleatoria. De hecho, si en este
momento se manda a ejecutar el formulario, el gráfico se muestra en blanco. Sin embargo, cuando
se envíe información al gráfico, se mostrará el nombre de la actividad y un dígito, que en este caso
representa el equivalente entero de la fecha de inicio.
(b)
(a)
(c)
(d) (e)
(f)
(g)
(h)
AddGantt es una función que agrega una barra a una serie Gantt. Su sintaxis es la siguiente:
SERIE_A_AGREGAR.AddGantt( Fecha_de_Inicio,
Fecha_de_Término,
Altura_en_el_eje_izquierdo,
Rótulo_de_la_Barra );
Tanto la fecha de inicio como la de término son números equivalentes en el sistema de fechas del
sistema operativo. Es por ello que en lugar de utilizar los referidos números, mejor se utiliza la
función de codificación de fechas EncodeDate. La Altura es un número entero que le dice al
objeto gráfico a qué nivel, a partir del eje horizontal se colocará la barra. Finalmente el rótulo de la
barra es el texto que aparecerá en el eje izquierdo.
Donde Año, Mes y Día son números válidos para fechas. El año, deberá estar comprendido entre
1 y 9999. El mes, entre 1 y 12. Para el día, se tiene que verificar su congruencia con el mes (1 a
28, 29, 30, o 31 dependiendo del mes).
Tomando como punto de partida el programa anterior, se procederá a hacer que la aplicación tome
los datos que el usuario le proporcione. Para ello será necesario agregar seis cajas de edición al
formulario para capturar las fechas de inicio y término, se agregará una caja para capturar el rótulo,
así como una más para la altura. Además de lo anterior, se agregará un botón para limpiar la
gráfica y uno para salir de la aplicación. Con esto el formulario quedará de la siguiente manera:
Figura 32.- Formulario con espacios para ingresar información
1.- Leer los valores proporcionados por el usuario y asignarlos a las variables correspondientes:
Actividad, de tipo string; tanto las fechas de inicio y terminación (día, mes y año), serán de
tipo entero; finalmente el nivel será de tipo entero.
2.- Una vez leídos, se envían al gráfico usando AddGantt.
El hecho de poder enviar al objeto gráfico la información que el usuario ingrese correspondiente a
cada actividad es un gran adelanto con respecto a la aplicación anterior. Pero igual que en el caso
de la aplicación de graficación de polinomios, la mayoría de los problemas que implican reportar
información temporal de actividades, involucran una cantidad indefinida de actividades. El
problema involucra los siguientes puntos:
El siguiente diagrama de flujo muestra cómo se llevaría a cabo el proceso descrito anteriormente.
Para esta aplicación, se hará que el usuario ingrese la información de las actividades en un
memorando, para luego grabarla en un archivo de texto (Véase la fig. 35). Observe que en el
formulario de trabajo se han separado la operación de grabar la información de la de
procesamiento, con el fin de simplificar el código que se programarán en los botones. También
obsérvese que el nombre de la actividad está en una línea aparte del de la información numérica
correspondiente a la misma, para evitar confundir al lector del sistema. El código correspondiente
para el dibujo del diagrama de Gantt se muestra a continuación:
Inicio
Nivel = 10
Not EOF(Archivo)
Actividad,
Inicio (día, mes, año)
Fin (día, mes, año)
Trazar Barra
Actividad,
Inicio, CódigoFecha(día, mes, año)
Fin, CódigoFecha(día, mes, año)
Nivel
Decrementa(Nivel)
Fin
Inicio
1 1 2003 2 1 2003
Limpieza
2 1 2003 3 1 2003
Nivelación
3 1 2003 5 1 2003
Trazo
5 1 2003 7 1 2003
Fin
7 1 2003 8 1 2003
Figura 35.- Formulario de trabajo
Nótese que a diferencia de aplicaciones como MS Project o Primavera® Project Planner®, las
barras no pueden manipularse de manera directa, y no se pueden establecer relaciones de
precedencia de manera dinámica, con solo manipular el botón del mouse. Sin embargo existen
controles más complejos que el TChart que sí permiten este tipo de manipulaciones. La
herramienta que se presenta en este trabajo sin embargo, facilita la elaboración de aplicaciones
capaces de reportar información con dimensiones temporales.
Con respecto a la lectura de los archivos de texto, estos no son precisamente eficientes a la hora
de leer y escribir información con tipos mixtos. Lo mejor en este caso es usar archivos con tipo o en
su defecto utilizar una aplicación que maneje bases de datos. Lo anterior produce mejores
resultados a la hora de leer información.
Se debe hacer notar también que un Memo no es precisamente la mejor manera de representar la
información para captura. El objeto más adecuado para ello es un control rejilla (Grid), similar al de
las hojas de cálculo, pero la implementación de dicha solución queda para un posterior desarrollo.