1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
|
@c english version 1.3
@menu
* Introducci@'on a plotdf::
* Definiciones para plotdf::
@end menu
@node Introducci@'on a plotdf, Definiciones para plotdf, plotdf, plotdf
@section Introducci@'on a plotdf
La funci@'on @code{plotdf} crea un gr@'afico del campo de direcciones para una
Ecuaci@'on Diferencial Ordinaria (EDO) de primer orden, o para un sistema de
dos EDO's aut@'onomas, de primer orden.
Para dibujar el campo de direcciones de una @'unica EDO, esa ecuci@'on deber@'a
escribirse en la forma siguiente:
@ifnottex
@example
dy
-- = F(x,y)
dx
@end example
@end ifnottex
@tex
$${{dy}\over{dx}} = F(x,y)$$
@end tex
y la funci@'on @var{F} ser@'a dada como argumento para el comando
@code{plotdf}. La variable independiente tiene que ser siempre @var{x} y la
variable dependiente @var{y}. A esas dos variables no podr@'a estar asociado
ning@'un valor num@'erico.
Para dibujar el campo de direcciones de un sistema aut@'onomo de dos EDO's,
Las dos ecuaciones deben ser escritas en la forma siguiente
@ifnottex
@example
dx dy
-- = G(x,y) -- = F(x,y)
dt dt
@end example
@end ifnottex
@tex
$${{dx}\over{dt}} = G(x,y) \qquad {{dy}\over{dt}} = F(x,y)$$
@end tex
y el argumento para el comando @code{plotdf} ser@'a una lista con dos
expresiones para las funciones @var{F} y @var{G}.
Cuando se trabaja con una @'unica ecuaci@'on, @code{plotdf} asume
impl@'{@dotless{i}}citamente que @code{x=t} y @code{G(x,y)=1}, transformando la
ecuaci@'on en un sistema aut@'onomo con dos ecuaciones.
@node Definiciones para plotdf, , Introducci@'on a plotdf, plotdf
@section Definiciones para plotdf
@deffn {Function} plotdf (@var{dydx},...opciones...)
@deffnx {Function} plotdf (@code{[}@var{dxdt},@var{dydt}@code{]},...opciones...)
Dibuja un campo de direcciones en dos dimensiones @var{x} and @var{y}.
@var{dydx}, @var{dxdt} y @var{dydt} son expresiones que dependen de @var{x} y
@var{y}. Adem@'as de esas dos variables, las dos expresiones pueden depender de
un conjunto de par@'ametros, con valores num@'ericos que son dados por medio
de la opci@'on @code{parameters} (la sintaxis de esa opci@'on se explica mas al
frente), o con un rango de posibles valores definidos con la opci@'on
@var{sliders}.
Varias otras opciones se pueden incluir dentro del comando, o en el men@'u que
aparece cuando se hace click en la esquina superior izquierda de la ventana del
gr@'afico. Haciendo click en un punto del gr@'afico se puede hacer que sea
dibujada la curva integral que pasa por ese punto; lo mismo puede ser hecho
dando las coordenadas del punto con la opci@'on @code{trajectory_at} dentro del
comando plotdf. La direcci@'on de integraci@'on se puede controlar con la
opci@'on @code{direction}, que acepta valores de "forward", "backward" o
"both". El n@'umero de pasos realizado en la integraci@'on num@'erica se
controla con la opci@'on @code{nsteps} y el incremento del tiempo en cada paso
con la opci@'on @code{tstep}. Se usa el m@'etodo de Adams Moulton para hacer la
integraci@'on num@'erica; tambi@'en es posible cambiar para el m@'etodo de
Runge-Kutta de cuarto orden con ajuste de pasos.
@b{Men@'u de la ventana del gr@'afico:}
El men@'u de la ventana gr@'afica dispone de las siguientes opciones: "Zoom",
que permite cambiar el comportamiento del rat@'on, de manera que har@'a
posible el hacer zoom en la regi@'on del gr@'afico haciendo clic con el
bot@'on izquierdo. Cada clic agranda la imagen manteniendo como centro de
la misma el punto sobre el cual se ha hecho clic. Manteniendo pulsada la
tecla SHIFT mientras se hace clic, retrocede al tama@~no anterior. Para
reanudar el c@'alculo de las trayectorias cuando se hace clic, selecci@'onese
la opci@'on "Integrate" del men@'u.
La opci@'on "Config" del men@'u se puede utilizar para cambiar la(s)
EDO(S) y algunos otros ajustes. Despu@'es de hacer los cambios, se debe
utilizar la opci@'on "Replot" para activar los nuevos ajustes.
Si en el campo "Trajectory at" del men@'u de di@'alogo de "Config" se
introducen un par de coordenadas y luego se pulsa la tecla "retorno",
se mostrar@'a una nueva curva integral, adem@'as de las ya dibujadas.
Si se selecciona la opci@'on "Replot", s@'olo se mostrar@'a la
@'ultima curva integral seleccionada.
Manteniendo pulsado el bot@'on derecho del rat@'on mientras se mueve
el cursor, se puede arrastrar el gr@'afico horizontal y verticalmente.
Otros par@'ametros, como pueden ser el n@'umero de pasos, el valor
inicial de @var{t}, las coordenadas del centro y el radio, pueden
cambiarse en el submen@'u de la opci@'on "Config".
Con la opci@'on "Save", se puede obtener una copia del gr@'afico en una
impresora Postscript o guardarlo en un fichero Postscript. Para
optar entre la impresi@'on o guardar en fichero, se debe seleccionar
"Print Options" en la ventana de di@'alogo de "Config". Una vez cubiertos
los campos de la ventana de di@'alogo de "Save", ser@'a necesario
seleccionar la opci@'on "Save" del primer men@'u para crear el fichero
o imprimir el gr@'afico.
@b{Opciones gr@'aficas:}
La funci@'on @code{plotdf} admite varias opciones, cada una de las cuales
es una lista de dos o m@'as elementos. El primer elemento es el nombre de
la opci@'on, y el resto est@'a formado por el valor o valores asignados
a dicha opci@'on.
La funci@'on @code{plotdf} reconoce las siguientes opciones:
@itemize @bullet
@item
Opci@'on: @code{tstep} establece la amplitud de los incrementos en la
variable independiente @var{t}, utilizados para calcular la curva
integral. Si se s@'olo se aporta una expresi@'on @var{dydx}, la
variable @var{x} ser@'a directamente proporcional a
@var{t}: @code{x - xinitial = t - tinitial}.
@example
[tstep,0.01]
@end example
El valor por defecto es 0.1.
@item
Opci@'on: @code{nsteps} establece el n@'umero de pasos de longitud
@code{tstep} que se utilizar@'an en la variable independiente para
calcular la curva integral.
@example
[nsteps,500]
@end example
El valor por defecto es 100.
@item
Opci@'on: @code{direction} establece la direcci@'on de la variable
independiente que ser@'a seguida para calcular una curva integral.
Valores posibles son: @code{forward}, para hacer que la variable
independiente aumente @code{nsteps} veces, con incrementos @code{tstep};
@code{backward}, para hacer que la variable independiente
disminuya; @code{both}, para extender la curva integral @code{nsteps}
pasos hacia adelante y @code{nsteps} pasos hacia atr@'as.
Las palabras @code{right} y @code{left} se pueden utilizar como
sin@'onimos de @code{forward} y @code{backward}.
@example
[direction,forward]
@end example
El valor por defecto es @code{both}.
@item
Opci@'on: @code{tinitial} establece el valor inicial de la variable
@var{t} utilizado para calcular curvas integrales. Puesto que las
ecuaciones diferenciales son aut@'onomas, esta opci@'on s@'olo
aparecer@'a en los gr@'aficos de las curvas como funciones de @var{t}.
@example
[tinitial,6.7]
@end example
El valor por defecto es 0.
@item
Opci@'on: @code{versus_t} se utiliza para crear una segunda ventana
gr@'afica, con el gr@'afico de una curva integral, como dos funciones
@var{x}, @var{y}, de variable independiente @var{t}. Si se le da a
@code{versus_t} cualquier valor diferente de 0, se mostrar@'a la
segunda ventana gr@'afica, la cual incluye otro men@'u, similar
al de la ventana principal.
@example
[versus_t,1]
@end example
El valor por defecto es 0.
@item
Opci@'on: @code{trajectory_at} establece las coordenadas @var{xinitial}
y @var{yinitial} para el extremo inicial de la curva integral.
@example
[trajectory_at,0.1,3.2]
@end example
No tiene asignado valor por defecto.
@item
Opci@'on: @code{parameters} establece una lista de par@'ametros,
junto con sus valores num@'ericos, que son utilizados en la
definici@'on de la ecuaci@'on diferencial. Los nombres de los
par@'ametros y sus valores deben escribirse en formato de cadena
de caracteres como una secuencia de pares @code{nombre=valor}
separados por comas.
@example
[parameters,"k=1.1,m=2.5"]
@end example
@item
Opci@'on: @code{sliders} establece una lista de par@'ametros que
se cambiar@'an interactivamente utilizando barras de deslizamiento,
as@'{@dotless{i}} como los rangos de variaci@'on de dichos par@'ametros.
Los nombres de los par@'ametros y sus rangos deben escribirse en formato
de cadena de caracteres como una secuencia de pares @code{nombre=min:max}
separados por comas.
@example
[sliders,"k=0:4,m=1:3"]
@end example
@item
Opci@'on: @code{xfun} establece una cadena de caracteres con funciones
de @var{x} separadas por puntos y comas para ser representadas por
encima del campo de direcciones. Estas funciones ser@'an interpretadas
por Tcl, no por Maxima.
@example
[xfun,"x^2;sin(x);exp(x)"]
@end example
@item
Opci@'on: @code{xradius} es la mitad de la longitud del rango de valores
a representar en la direcci@'on x.
@example
[xradius,12.5]
@end example
El valor por defecto es 10.
@item
Opci@'on: @code{yradius} es la mitad de la longitud del rango de valores
a representar en la direcci@'on y.
@example
[yradius,15]
@end example
El valor por defecto es 10.
@item
Opci@'on: @code{xcenter} es la coordenada x del punto situado en el centro
del gr@'afico.
@example
[xcenter,3.45]
@end example
El valor por defecto es 0.
@item
Opci@'on: @code{ycenter} es la coordenada y del punto situado en el centro
del gr@'afico.
@example
[ycenter,4.5]
@end example
El valor por defecto es 0.
@item
Opci@'on: @code{width} establece el ancho de la ventana gr@'afica en
p@'{@dotless{i}}xeles.
@example
[width,800]
@end example
El valor por defecto es 500.
@item
Opci@'on: @code{height} establece la altura de la ventana gr@'afica en
p@'{@dotless{i}}xeles.
@example
[width,600]
@end example
El valor por defecto es 500.
@end itemize
@b{Ejemplos:}
NOTA: debido a un fallo en @code{openmath}, todas las funciones,
incluida @code{plotdf}, deben terminar en punto y coma, no con
el s@'{@dotless{i}}mbolo de d@'olar, el cual puede ser v@'alido
en otros contextos gr@'aficos; para evitar problemas, se usar@'a
el punto y coma en los ejemplos.
@itemize @bullet
@item
Para mostrar el campo de direcciones de la ecuaci@'on diferencial
@math{y' = exp(-x) + y} y la soluci@'on que pasa por @math{(2, -0.1)}:
@example
(%i1) load("plotdf")$
(%i2) plotdf(exp(-x)+y,[trajectory_at,2,-0.1]);
@end example
@ifnotinfo
@image{../figures/plotdf1,8cm}
@end ifnotinfo
@item
Para mostrar el campo de direcciones de la ecuaci@'on
@math{diff(y,x) = x - y^2} y la soluci@'on de condici@'on
inicial @math{y(-1) = 3}, se puede utilizar la sentencia:
@example
(%i3) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
[trajectory_at,-1,3], [direction,forward],
[yradius,5],[xcenter,6]);
@end example
El gr@'afico tambi@'en muestra la funci@'on @math{y = sqrt(x)}.
@ifnotinfo
@image{../figures/plotdf2,8cm}
@end ifnotinfo
@item
El siguiente ejemplo muestra el campo de direcciones de un oscilador
arm@'onico, definido por las ecuaciones @math{dx/dt = y} y
@math{dy/dt = -k*x/m}, y la curva integral que pasa por
@math{(x,y) = (6,0)}, con una barra de deslizamiento que
permitir@'a cambiar el valor de @math{m} interactivamente
(@math{k} est@'a permanece fijo a 2):
@example
(%i4) plotdf([y,-k*x/m],[parameters,"m=2,k=2"],
[sliders,"m=1:5"], [trajectory_at,6,0]);
@end example
@ifnotinfo
@image{../figures/plotdf3,8cm}
@end ifnotinfo
@item
Para representar el campo de direcciones de la ecuaci@'on de
Duffing, @math{m*x''+c*x'+k*x+b*x^3 = 0}, se introduce la
variable @math{y=x'} y se hace:
@example
(%i5) plotdf([y,-(k*x + c*y + b*x^3)/m],
[parameters,"k=-1,m=1.0,c=0,b=1"],
[sliders,"k=-2:2,m=-1:1"],[tstep,0.1]);
@end example
@ifnotinfo
@image{../figures/plotdf4,8cm}
@end ifnotinfo
@item
El campo de direcciones de un p@'endulo amortiguado,
incluyendo la soluci@'on para condiciones iniciales dadas,
con una barra de deslizamiento que se puede utilizar para
cambiar el valor de la masa, @math{m}, y con el gr@'afico
de las dos variables de estado como funciones del tiempo:
@example
(%i6) plotdf([y,-g*sin(x)/l - b*y/m/l],
[parameters,"g=9.8,l=0.5,m=0.3,b=0.05"],
[trajectory_at,1.05,-9],[tstep,0.01],
[xradius,6],[yradius,14],
[xcenter,-4],[direction,forward],[nsteps,300],
[sliders,"m=0.1:1"], [versus_t,1]);
@end example
@ifnotinfo
@image{../figures/plotdf5,8cm}@image{../figures/plotdf6,8cm}
@end ifnotinfo
@end itemize
Para hacer uso de esta funci@'on, ejec@'utese primero @code{load("plotdf")}.
@end deffn
|