]> git.llucax.com Git - z.facultad/75.42/euler.git/blob - documentacion.h
Se organiza mejor, separando el TP en varios archivos.
[z.facultad/75.42/euler.git] / documentacion.h
1 /* vim: set et ts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t:
2  *
3  * Taller de Programación (75.42).
4  *
5  * Ejercicio 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 Taller de Programación I (75.42)
19
20 \section objetivo Objetivo.
21     Desarrollar un \ref main "programa" que resuelva, utilizando un
22     \ref metodo "método iterativo", una \ref funcion "función diferencial"
23     en un intervalo de tiempo dado.
24     \note Utilizar sólo funciones ANSI C.
25
26 \section desarrollo Desarrollo.
27     \subsection parte1 Parte 1.
28         Dada una \ref funcion "función diferencial" \f$df_{(t)}\f$,
29         desarrolle un \ref main "programa" que calcule la integral de la
30         misma utilizando el método iterativo (\ref metodo "Euler explícito"),
31         tal como se explica a continuación. Almacene estos resultados en un
32         \ref Resultados "vector".
33
34         \subsubsection funcion Función diferencial.
35             \f[
36                 df_{(t)} = \frac{500 - f_{(t)}}{30}
37             \f]
38
39         \subsubsection variables Variables.
40             - \f$t_i\f$:     \ref T0 "Tiempo inicial de la iteración" = 0.
41
42             Solicitar al usuario el ingreso de las restantes variables por
43             línea de comandos:
44             - \f$f_{(t)}\f$: Estado inicial del sistema.
45             - \f$t_f\f$:     Tiempo final de la iteración (segundos).
46             - \f$step\f$:    Paso (en segundos).
47
48         \subsubsection metodo Método de iteración (Euler explícito).
49             \f[
50                 f_{(t + step)} = f_{(t)} + df_{(t)} \cdot step
51             \f]
52
53     \subsection parte2 Parte 2.
54         Grafique los primeros 70 pasos (si los hay) de la
55         \ref funcion "función" en formato texto, entre los valores máximos y
56         mínimos que tome en este intervalo, utilizando 20 líneas horizontales.
57
58         Por ejemplo:
59         \verbatim
60
61             t0 =  0
62             tf = 10
63             step = 0.5
64             400        ***
65             390 *    **   ****
66             380  *  *         ******
67             370   **
68
69         \endverbatim
70
71 \section resolucion Resolución.
72     El \ref main "programa principal" se divide en 3 tareas principales,
73     cada una realizada por una función particular.
74
75     \subsection obtencion Obtención y validación de parámetros del usuario.
76         Antes de comenzar a hacer cálculos es necesario obtener los valores de
77         las \ref variables "variables" de la entrada del usuario (en este caso
78         a través de parámetros de línea de comandos). Esta tarea es realizada
79         por la función cargar_datos().
80
81     \subsection integracion Integración de la ecuación diferencial.
82         Reemplazando la \ref funcion "ecuación diferencial" \f$ df_{(t)} \f$
83         en la solución por el \ref metodo "método de Euler", obtenemos
84         la siguiente función:
85         \f[
86             f_{(t + step)} = f_{(t)} + \frac{500 - f_{(t)}}{30} \cdot step
87         \f]
88         Resultando, en realidad, una función númerica de dos variables
89         (\f$ step \f$ y \f$ f_t \f$):
90         \f[
91             f_{t + step} = f_{(step, f_t)} = f_t + \frac{500 - f_t}{30} \cdot step
92         \f]
93         Este paso es realizado por el macro FUNCION() para que sea más
94         veloz.
95
96         Todo lo que resta es iterar, paso a paso, calculando los valores de la
97         función y almacenándolos en el \ref Resultados "vector de resultados",
98         tarea realizada por la función calcular().
99
100     \subsection impresion Impresión del gráfico por pantalla.
101         Finalmente todo lo que queda es graficar por pantalla el resultado de la
102         función. Para esto se va imprimiendo línea por línea, chequeando qué
103         punto de la función cae en cada rango de valores representados por una
104         línea. Esta tarea es realizada por la función resultados_graficar().
105
106 \section conclusiones Conclusiones.
107     Realmente no se me presentaron muchos problemas para resolver el TP. El
108     único problema que tuve fue realizando el \ref impresion "gráfico", en
109     ciertas circunstancias (por problemas de redondeo) el valor máximo de la
110     función no era graficado. Esto se solucionó incluyendo una línea más al
111     gráico, con el rango que va desde el máximo de la función (en realidad desde
112     el mínimo más 20 pasos verticales) hasta el máximo más un paso vertical.
113     Es por esto que en realidad se grafican 21 pasos. Podría haber graficado 20
114     pasos pero el código quedaría menos claro (o tendría que poner la constante
115     \ref ALTO en 19 en vez de 20).
116
117     Otro detalle que cabe ser mencionado es que para valores altos del
118     \ref variables "step" (mayores a 30), la solución se vuelve inestable.
119
120 */
121