]> git.llucax.com Git - z.facultad/75.42/euler.git/blob - documentacion.h
Se agregan ignores.
[z.facultad/75.42/euler.git] / documentacion.h
1 /* vim: set et ts=4 sw=4 fdm=indent tw=80 fdl=1 fdn=1 fo+=t:
2  *
3  * Taller de Programación (75.42).
4  *
5  * Trabajo Práctico Número 1:
6  * Graficador de la solución de una ecuación diferencial por el método
7  * de Euler (explícito).
8  *
9  * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
10  * Puede copiar, modificar y distribuir este programa bajo los términos de
11  * la licencia GPL (http://www.gnu.org/).
12  *
13  * Creado: dom ago 24 03:12:43 ART 2003
14  *
15  * $Id$
16  */
17
18 /** \mainpage Trabajo Práctico I
19
20 \htmlonly
21 También puede ver <a href="../latex/refman.pdf">este documento en formato
22 PDF</a>.
23 \endhtmlonly
24
25 \latexonly
26 También puede ver este documento en formato HTML en html/index.html.
27 \endlatexonly
28
29 \section objetivo Objetivo.
30     Desarrollar un \ref tp1.c "programa" que resuelva, utilizando un
31     \ref metodo "método iterativo", una \ref funcion "función diferencial"
32     en un intervalo de tiempo dado.
33     \note Utilizar sólo funciones ANSI C.
34
35 \section desarrollo Desarrollo.
36     \subsection parte1 Parte 1.
37         Dada una \ref funcion "función diferencial" \f$df_{(t)}\f$,
38         desarrolle un \ref tp1.c "programa" que calcule la integral de la
39         misma utilizando el método iterativo (\ref metodo "Euler explícito"),
40         tal como se explica a continuación. Almacene estos resultados en un
41         \ref Resultados "vector".
42
43         \subsubsection funcion Función diferencial.
44             \f[
45                 df_{(t)} = \frac{500 - f_{(t)}}{30}
46             \f]
47
48         \subsubsection variables Variables.
49             - \f$t_i\f$: Tiempo inicial de la iteración = 0.
50
51             Solicitar al usuario el ingreso de las restantes variables por
52             línea de comandos:
53             - \f$f_{(t)}\f$: Estado inicial del sistema.
54             - \f$t_f\f$:     Tiempo final de la iteración (segundos).
55             - \f$step\f$:    Paso (en segundos).
56
57         \subsubsection metodo Método de iteración (Euler explícito).
58             \f[
59                 f_{(t + step)} = f_{(t)} + df_{(t)} \cdot step
60             \f]
61
62     \subsection parte2 Parte 2.
63         Grafique los primeros 70 pasos (si los hay) de la
64         \ref funcion "función" en formato texto, entre los valores máximos y
65         mínimos que tome en este intervalo, utilizando 20 líneas horizontales.
66
67         Por ejemplo:
68         \verbatim
69
70             t0 =  0
71             tf = 10
72             step = 0.5
73             400        ***
74             390 *    **   ****
75             380  *  *         ******
76             370   **
77
78         \endverbatim
79
80 \section resolucion Resolución.
81     El \ref tp1.c "programa principal" se divide en 3 tareas principales,
82     cada una realizada por una función particular.
83
84     \subsection obtencion Obtención y validación de parámetros del usuario.
85         Antes de comenzar a hacer cálculos es necesario obtener los valores de
86         las \ref variables "variables" de la entrada del usuario (en este caso
87         a través de parámetros de línea de comandos). Esta tarea es realizada
88         por la función cargar_datos(). En el archivo carga.c y carga.h puede
89         encontrarse esta función y otras funciones relacionadas a esta tarea.
90
91     \subsection integracion Integración de la ecuación diferencial.
92         Reemplazando la \ref funcion "ecuación diferencial" \f$ df_{(t)} \f$
93         en la solución por el \ref metodo "método de Euler", obtenemos
94         la siguiente función:
95         \f[
96             f_{(t + step)} = f_{(t)} + \frac{500 - f_{(t)}}{30} \cdot step
97         \f]
98         Resultando, en realidad, una función númerica de dos variables
99         (\f$ step \f$ y \f$ f_t \f$):
100         \f[
101             f_{t + step} = f_{(step, f_t)} = f_t + \frac{500 - f_t}{30} \cdot step
102         \f]
103         Este paso es realizado por el macro FUNCION() para que sea más
104         veloz.
105
106         Todo lo que resta es iterar, paso a paso, calculando los valores de la
107         función y almacenándolos en el \ref Resultados "vector de resultados",
108         tarea realizada por la función resultados_calcular(). En el archivo
109         calculo.c y calculo.h puede encontrarse esta función y otras funciones
110         relacionadas a esta tarea.
111
112     \subsection impresion Impresión del gráfico por pantalla.
113         Finalmente todo lo que queda es graficar por pantalla el resultado de la
114         función. Para esto se va imprimiendo línea por línea, chequeando qué
115         punto de la función cae en cada rango de valores representados por una
116         línea. Esta tarea es realizada por la función resultados_graficar().
117         En el archivo grafico.c y grafico.h puede encontrarse esta función y
118         otras funciones relacionadas a esta tarea.
119
120     \subsection corridas Corridas de ejemplo.
121         A continuación se presentan corridas del programa junto a los parámetros
122         con los cuales ha sido llamado.
123
124         <tt>\$ ./tp1 2</tt>
125         \verbinclude corrida_2.txt
126         <tt>\$ ./tp1 2 -200 -150</tt>
127         \verbinclude corrida_2__200__150.txt
128         <tt>\$ ./tp1 2 20a0 -150</tt>
129         \verbinclude corrida_2_20a0__150.txt
130         <tt>\$ ./tp1 2 200 -150</tt>
131         \verbinclude corrida_2_200__150.txt
132         \anchor inestable <tt>\$ ./tp1 50 5000</tt>
133         \verbinclude corrida_50_5000.txt
134
135 \section requerimientos Requerimientos y modo de uso.
136     \subsection plataforma Plataforma y compilador.
137         Este trabajo práctico fue realizado y probado bajo la plataforma Debian
138         GNU/Linux sid. El compilador utilizado fue GNU GCC versión 3.3.1.
139         El ejecutable entregado corre bajo esta esta plataforma y u uso se
140         describe en la \ref uso "sección siguiente".
141
142         De todas formas, al estar programado sólo utilizando funciones ANSI C,
143         debería poder compilarse bajo cualquier plataforma y compilador que
144         soporte este estándar.
145
146     \subsection uso Modo de uso.
147         El programa debe ser llamado desde un intérprete de comandos. Acepta
148         parámetros opcionales pasados como argumento:
149         \verbatim ./tp1 [paso [tf [f0]]] \endverbatim
150         Donde:
151             - \c paso es el paso a utilizar. Si no se especifica se usa un
152                 \ref DEFAULT_PASO "valor por omisión".
153             - \c tf es el tiempo final en el cual se intentará evaluar la
154                 función (no siempre será posible porque si el paso es muy
155                 pequeño uede no llegarse a este tiempo final). Si no se
156                 especifica se usa un \ref DEFAULT_TF "valor por omisión".
157             - \c f0 es el valor inicial (en \ref DEFAULT_T0 "el tiempo inicial")
158                 de la función. Si no se especifica se usa un
159                 \ref DEFAULT_F0 "valor por omisión".
160
161 \section conclusiones Conclusiones.
162     Realmente no se me presentaron muchos problemas para resolver el TP. El
163     único problema que tuve fue realizando el \ref impresion "gráfico", en
164     ciertas circunstancias (por problemas de redondeo) el valor máximo de la
165     función no era graficado. Esto se solucionó incluyendo una línea más al
166     gráfico, con el rango que va desde el máximo de la función (en realidad
167     desde el mínimo más 20 pasos verticales) hasta el máximo más un paso
168     vertical. Es por esto que en realidad se grafican 21 pasos. Podría haber
169     graficado 20 pasos pero el código quedaría menos claro (o tendría que
170     poner la constante \ref ALTO en 19 en vez de 20).
171
172     El programa también fue pensado para aceptar como parámetros el caracter
173     utilizado para dibujar un \ref DEFAULT_PUNTO "punto" de la función y un
174     espacio en \ref DEFAULT_BLANCO "blanco", así como el
175     \ref DEFAULT_T0 "tiempo inicial". Por problemas de tiempo, no pude
176     terminar de implementar estas características extra.
177
178     Otro detalle que cabe ser mencionado es que para valores altos del
179     \ref variables "step" (mayores a 30), la solución se vuelve
180     \ref inestable "inestable".
181
182 */
183