1 @c English version: 2011-06-11
3 * Introducción a drawdf::
4 * Funciones y variables para drawdf::
7 @node Introducción a drawdf, Funciones y variables para drawdf, drawdf, drawdf
8 @section Introducción a drawdf
10 La función @code{drawdf} dibuja el campo de direcciones de una ecuación
11 diferencial ordinaria de primer orden (EDO) o de un sistema de dos ecuaciones
12 autónomas de primer orden.
14 Puesto que @code{drawdf} es un paquete adicional, es necesario cargarlo en
15 memoria ejecutando previamente la instrucción @code{load(drawdf)}.
16 @code{drawdf} utiliza el paquete @code{draw}, que necesita como
17 mínimo la versión 4.2 de Gnuplot.
19 Para dibujar el campo de direcciones de una EDO, ésta debe escribirse de la
29 $${{dy}\over{dx}} = F(x,y)$$
32 y ser la función @var{F} la que se pase a @code{drawdf} como argumento.
33 Si las variables independiente y dependiente no son @var{x} e @var{y},
34 como en la ecuación anterior, entonces deben nombrarse de forma
35 explícita en una lista que se pasará a @code{drawdf}
36 (ver ejemplos más abajo).
38 Para dibujar el campo de direcciones de un conjunto de dos EDOs autónomas,
39 deben escribirse de la forma
43 -- = G(x,y) -- = F(x,y)
48 $${{dx}\over{dt}} = G(x,y) \qquad {{dy}\over{dt}} = F(x,y)$$
51 y será una lista con las dos funciones @var{G} y @var{F} la que
52 se pase a @code{drawdf} como argumento. El orden de las funciones es
53 importante; la primera será la derivada de la abscisa respecto del tiempo
54 y la segunda la derivada de la ordenada respecto del tiempo.
55 Si las variables no son las @var{x} e @var{y} habituales, el segundo
56 argumento que se pase a la función @code{drawdf} será una lista
57 con los nombres de ambas variables, primero la correspondiente a las
58 abscisas, seguida de la asociada a las ordenadas.
60 Si sólo se trata de una EDO, @code{drawdf} admitirá por defecto
61 que @code{x=t} y @code{G(x,y)=1}, transformanado la ecuación no
62 autónoma en un sistema de dos ecuaciones autónomas.
67 @node Funciones y variables para drawdf, , Introducción a drawdf, drawdf
68 @section Funciones y variables para drawdf
72 @deffn {Función} drawdf (@var{dydx}, ...options and objects...)
73 @deffnx {Función} drawdf (@var{dvdu}, @code{[}@var{u},@var{v}@code{]}, ...opciones y objetos...)
74 @deffnx {Función} drawdf (@var{dvdu}, @code{[}@var{u},@var{umin},@var{umax}@code{]}, @code{[}@var{v},@var{vmin},@var{vmax}@code{]}, ...opciones y objetos...)
75 @deffnx {Función} drawdf (@code{[}@var{dxdt},@var{dydt}@code{]}, ...opciones y objetos...)
76 @deffnx {Función} drawdf (@code{[}@var{dudt},@var{dvdt}@code{]}, @code{[}@var{u},@var{v}@code{]}, ...opciones y objetos...)
77 @deffnx {Función} drawdf (@code{[}@var{dudt},@var{dvdt}@code{]}, @code{[}@var{u},@var{umin},@var{umax}@code{]}, @code{[}@var{v},@var{vmin},@var{vmax}@code{]}, ...opciones y objetos...)
79 La función @code{drawdf} dibuja un campo de direcciones 2D, incluyendo
80 opcionalmente curvas asociadas a soluciones particulares, así
81 como otros objeto gráficos del paquete @code{draw}.
83 El primer argumento especifica la(s) derivada(s), el cual debe estar
84 formado por una expresión o una lista de dos expresiones. @var{dydx}, @var{dxdt} y
85 @var{dydt} son expresiones que dependen de @var{x} y @var{y}.
86 @var{dvdu}, @var{dudt} y @var{dvdt} son expresiones que dependen de
89 Si las variables independiente y dependiente no son @var{x} e @var{y},
90 sus nombres deben especificarse a continuación de las derivadas,
91 bien como una lista de dos nombres,
92 @code{[}@var{u},@var{v}@code{]}, o como dos listas de la forma
93 @code{[}@var{u},@var{umin},@var{umax}@code{]} y
94 @code{[}@var{v},@var{vmin},@var{vmax}@code{]}.
96 El resto de argumentos son @i{opciones gráficas}, @i{objetos gráficos},
97 o listas conteniendo elementos de ambos tipos. El conjunto de opciones y
98 objetos gráficos soportados por @code{drawdf} incluye los soportados
99 por @code{draw2d} y @code{gr2d} del paquete @code{draw}.
101 Los argumentos se iterpretan secuencialmente: las @i{opciones gráficas}
102 afectan a todos los @i{objetos gráficos} que le siguen. Además,
103 los @i{objetos gráficos} se dibujan en el orden en el que se
104 especifican, pudiendo tapar otros gráficos dibujados con anterioridad.
105 Algunas @i{opciones gráficas} afectan al aspecto general de la escena.
107 Los nuevos @i{objetos gráficos} que se definen en @code{drawdf} son:
108 @code{solns_at}, @code{points_at}, @code{saddles_at}, @code{soln_at},
109 @code{point_at} y @code{saddle_at}.
111 Las nuevas @i{opciones gráficas} que se definen en @code{drawdf} son:
112 @code{field_degree}, @code{soln_arrows}, @code{field_arrows},
113 @code{field_grid}, @code{field_color}, @code{show_field},
114 @code{tstep}, @code{nsteps}, @code{duration}, @code{direction},
115 @code{field_tstep}, @code{field_nsteps} y @code{field_duration}.
117 @i{Objetos gráficos} que se heredan del paquete @code{draw} incluyen:
118 @code{explicit}, @code{implicit}, @code{parametric},
119 @code{polygon}, @code{points}, @code{vector}, @code{label} y cualesquiera
120 otros soportados por @code{draw2d} y @code{gr2d}.
122 @i{Opciones gráficas} que se heredan del paquete @code{draw} incluyen:
123 @code{points_joined}, @code{color},
124 @code{point_type}, @code{point_size}, @code{line_width},
125 @code{line_type}, @code{key}, @code{title}, @code{xlabel},
126 @code{ylabel}, @code{user_preamble}, @code{terminal},
127 @code{dimensions}, @code{file_name} y cualesquiera
128 otros soportados por @code{draw2d} y @code{gr2d}.
130 Véase también @code{draw2d}.
132 Los usuarios de wxMaxima y Imaxima pueden hacer uso también @code{wxdrawdf},
133 que es idéntica a @code{drawdf}, pero que inserta el gráfico en el
134 propio documento utilizando la función @code{wxdraw}.
136 Para hacer uso de esta función, ejecútese primero @code{load(drawdf)}.
142 (%i2) drawdf(exp(-x)+y)$ /* default vars: x,y */
143 (%i3) drawdf(exp(-t)+y, [t,y])$ /* default range: [-10,10] */
144 (%i4) drawdf([y,-9*sin(x)-y/5], [x,1,5], [y,-2,2])$
147 A efectos de compatibilidad, @code{drawdf} acepta la mayor
148 parte de parámetros soportados por @code{plotdf}.
151 (%i5) drawdf(2*cos(t)-1+y, [t,y], [t,-5,10], [y,-4,9],
152 [trajectory_at,0,0])$
155 @code{soln_at} y @code{solns_at} dibujan soluciones particulares
156 que pasen por los puntos especificados, utilizando el integrador
157 numérico de Runge Kutta de cuarto orden.
160 (%i6) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
161 solns_at([0,0.1],[0,-0.1]),
162 color=blue, soln_at(0,0))$
165 @code{field_degree=2} hace que el campo se componga de @i{splines}
166 cuadráticos basados en las derivadas de primer y segundo orden en
167 cada punto de la malla.
168 @code{field_grid=[}@var{COLS},@var{ROWS}@code{]}
169 especifica el número de columnas y filas a utilizar en la malla.
172 (%i7) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
173 field_degree=2, field_grid=[20,15],
174 solns_at([0,0.1],[0,-0.1]),
175 color=blue, soln_at(0,0))$
178 @code{soln_arrows=true} añade flechas a las soluciones particulares y,
179 por defecto, las borra. También cambia los colores por defecto para
180 destacar las curvas de las soluciones particulares.
183 (%i8) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
185 solns_at([0,0.1],[0,-0.1],[0,0]))$
188 @code{duration=40} especifica el intervalo temporal de la integración
189 numérica, cuyo valor por defecto es 10. La integración se detendrá
190 automáticamente si la solución se aparta mucho de la región a dibujar,
191 o si la derivada se vuelve compleja o infinita. Aquí también
192 hacemos @code{field_degree=2} para dibujar @i{splines} cuadráticos. Las
193 ecuaciones de este ejemplo modelizan un sistema depredador-presa.
196 (%i9) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
197 field_degree=2, duration=40,
198 soln_arrows=true, point_at(1/2,1/2),
199 solns_at([0.1,0.2], [0.2,0.1], [1,0.8], [0.8,1],
200 [0.1,0.1], [0.6,0.05], [0.05,0.4],
201 [1,0.01], [0.01,0.75]))$
204 @code{field_degree='solns} hace que el campo se componga de muchas
205 pequeñas soluciones calculadas a partir del Runge Kutta
209 (%i10) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
210 field_degree='solns, duration=40,
211 soln_arrows=true, point_at(1/2,1/2),
212 solns_at([0.1,0.2], [0.2,0.1], [1,0.8],
213 [0.8,1], [0.1,0.1], [0.6,0.05],
214 [0.05,0.4], [1,0.01], [0.01,0.75]))$
217 @code{saddles_at} trata de linearizar automáticamente la ecuación
218 en cada punto de silla y dibujar la solución numérica correspondiente
219 a cada vector propio, incluyendo las separatrices. @code{tstep=0.05} establece
220 el salto temporal máximo para el integrador numérico, cuyo valor por
221 defecto es 0.1. Las siguientes ecuaciones modelizan un péndulo amortiguado.
224 (%i11) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
225 soln_arrows=true, point_size=0.5,
226 points_at([0,0], [2*%pi,0], [-2*%pi,0]),
228 saddles_at([%pi,0], [-%pi,0]))$
231 @code{show_field=false} elimina el campo completamente.
234 (%i12) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
235 show_field=false, soln_arrows=true,
237 points_at([0,0], [2*%pi,0], [-2*%pi,0]),
238 saddles_at([3*%pi,0], [-3*%pi,0],
242 @code{drawdf} pasa todos los parámetros que no reconoce a @code{draw2d}
243 o @code{gr2d}, permitiendo combinar la potencia del paquete @code{draw}
247 (%i13) drawdf(x^2+y^2, [x,-2,2], [y,-2,2], field_color=gray,
248 key="soln 1", color=black, soln_at(0,0),
249 key="soln 2", color=red, soln_at(0,1),
250 key="isocline", color=green, line_width=2,
251 nticks=100, parametric(cos(t),sin(t),t,0,2*%pi))$
254 @code{drawdf} acepta listas anidadas de opciones y objetos gráficos,
255 permitiendo el uso de @code{makelist} y otras funciones de forma más
256 flexible para generar gráficos.
259 (%i14) colors : ['red,'blue,'purple,'orange,'green]$
260 (%i15) drawdf([x-x*y/2, (x*y - 3*y)/4],
261 [x,2.5,3.5], [y,1.5,2.5],
263 makelist([ key = concat("soln",k),
265 soln_at(3, 2 + k/20) ],