Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / es / drawdf.texi
blob02bd4645f6515e3481a5150efa624079ae37a932
1 @c English version: 2011-06-11
2 @menu
3 * Introducción a drawdf::
4 * Funciones y variables para drawdf::
5 @end menu
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
20 forma
21 @ifnottex
22 @example
23        dy
24        -- = F(x,y)
25        dx
26 @end example
27 @end ifnottex
28 @tex
29 $${{dy}\over{dx}} = F(x,y)$$
30 @end tex
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
40 @ifnottex
41 @example
42        dx             dy
43        -- = G(x,y)    -- = F(x,y) 
44        dt             dt
45 @end example
46 @end ifnottex
47 @tex
48 $${{dx}\over{dt}} = G(x,y) \qquad {{dy}\over{dt}} = F(x,y)$$
49 @end tex
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
70 @subsection Funciones
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
87 @var{u} y @var{v}.
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)}.
138 Ejemplos:
140 @example
141 (%i1) 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])$
145 @end example
147 A efectos de compatibilidad, @code{drawdf} acepta la mayor
148 parte de parámetros soportados por @code{plotdf}.
150 @example
151 (%i5) drawdf(2*cos(t)-1+y, [t,y], [t,-5,10], [y,-4,9],
152              [trajectory_at,0,0])$
153 @end example
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.
159 @example
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))$
163 @end example
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.
171 @example
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))$
176 @end example
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.
182 @example
183 (%i8) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
184              soln_arrows=true,
185              solns_at([0,0.1],[0,-0.1],[0,0]))$
186 @end example
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.
195 @example
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]))$
202 @end example
204 @code{field_degree='solns} hace que el campo se componga de muchas
205 pequeñas soluciones calculadas a partir del Runge Kutta
206 de cuarto orden.
208 @example
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]))$
215 @end example
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.
223 @example
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]),
227               field_degree='solns,
228               saddles_at([%pi,0], [-%pi,0]))$
229 @end example
231 @code{show_field=false} elimina el campo completamente.
233 @example
234 (%i12) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
235               show_field=false, soln_arrows=true,
236               point_size=0.5,
237               points_at([0,0], [2*%pi,0], [-2*%pi,0]),
238               saddles_at([3*%pi,0], [-3*%pi,0],
239                          [%pi,0], [-%pi,0]))$
240 @end example
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}
244 con @code{drawdf}.
246 @example
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))$
252 @end example
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.
258 @example
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],
262               field_color = gray,
263               makelist([ key   = concat("soln",k),
264                          color = colors[k],
265                          soln_at(3, 2 + k/20) ],
266                        k,1,5))$
267 @end example
269 @end deffn