Recent Changes - Search:

Information

Installation

Documentation

 

Main.ModelEvents History

Hide minor edits - Show changes to output

April 05, 2011, at 09:18 PM by paco -
!!!Parameters for an Event

EJS
Changed lines 20-22:
!!!Parameters forSpecifying an Event

The event editor's fop row allows you to specify the type of event, the number of iterations you want to allow for finding the exact moment when the quantity equals zero (up to the precision specified by the tolerance), and the method for finding this point. The Bisection method may be safer, but slower than Secant. Just try to see which one works best.

The second row allows you to enter the tolerance with which you can find the crossing instant. Because this is a numerical process, the exact point of zero crossing can only be found up to a given tolerance. This is the value you need to enter. A default value of 1.0e-5 for states ranging in the vicinity of [0,1] is just fine.

The Zero Condition is a method that returns the quantity whose zero value signals the event. The method can be as simple or as complicated as required, and is your complete responsibility!

The Action editor is a Java method that applies the changes to the state that you want to apply when the event takes places. If the state is a State Event, make sure this brings the state to a point where it will evolve to make the Zero function positive. If a Zero crossing or Positive crossing event, make sure the state is such that it will separate from zero (more than the event tolerance) before crossing zero again.

The ''End step at event'' indicates EJS if you want the ODE step to end if an event is found or not. This may be necessary if you want to visualize the state at the event instant of time, for instance.

The Comment field is just a text field for documentation purposes.

The ''Zeno effect action'' button brings an editor where you can specify what to do if the Zeno effect appears. This effect happens when the system triggers an increasing number of events in a decreasing interval of time, thus bringing the system to an effective halt down. EJS can detect this situation and, if you write code for this case, allow you to avoid the simulation from hanging. In this same bottom row, you can instruct EJS to check for possible events at small steps in time, smaller that the ODE increment. This may be needed if your state evolves so rapidly that a zero crossing may be skipped because the Zero Condition quantity quickly becomes negative and positive again. Stating a small value for this event checking step will allow you to detect those situations.


EJS
April 05, 2011, at 09:06 PM by paco -
:'''State events''': A state event occurs when a quantity, which must be always positive or zero, goes negative.
To specify a state event, the Zero Condition function must return this positive quantity, and the action must make sure to apply the corresponding changes in the state, so that the quantity will evolve towards positive values. For instance, the bouncing ball example above is specified by a state event, because the ball vertical position, y, must always be positive, And the action when the ball hits the floor reverses the velocity so that the ball bounces back towards positive y values.
Changed lines 14-15:
:'''State events''': A state event occurs when a quantity, which must be always positive or zero, goes negative.
To
To specify a state event, the Zero Condition function must return this positive quantity, and the action must make sure to apply the corresponding changes in the state, so that the quantity will evolve towards positive values. For instance, the bouncing ball example above is specified by a state event, because the ball vertical position, y, must always be positive, And the action when the ball hits the floor reverses the velocity so that the ball bounces back towards positive y values.
April 05, 2011, at 09:05 PM by paco -
Deleted line 11:
:State events: A state event occurs when a quantity, which must be always positive or zero, goes negative.
Changed lines 13-14:
:
:'''
State events:''': A state event occurs when a quantity, which must be always positive or zero, goes negative.
:Zero crossing: This is an event that happens when a given quantity changes value. That is, it goes from positive to negative or viceversa. The action just applies the changes but the value can later evolve towards any direction.
:Positive crossing: This is similar to Zero crossing, but the event is only triggered if the quantity changes from positive to negative. If the crossing is in the other direction (i.e. from negative to positive), the action is not triggered.
Changed lines 16-17:
::'''Zero crossing:''': This is an event that happens when a given quantity changes value. That is, it goes from positive to negative or viceversa. The action just applies the changes but the value can later evolve towards any direction.
:

:'''
Positive crossing:''': This is similar to Zero crossing, but the event is only triggered if the quantity changes from positive to negative. If the crossing is in the other direction (i.e. from negative to positive), the action is not triggered.
April 05, 2011, at 09:03 PM by paco -
!Types of events supported by EJS
Changed lines 11-12:
!!!!Types of events supported by EJS

!Parameters for an Event
Changed line 21:
!!!!Parameters for an Event
April 05, 2011, at 09:01 PM by paco -
%center%Attach:Main/ModelEventsEn.png | [- The event editor -]
Changed lines 9-23:
%center%Attach:Main/ModelEventsEn.png | [- The event editor -]

!Types of events supported by EJS

EJS supports three types of events:
:State events: A state event occurs when a quantity, which must be always positive or zero, goes negative.
To specify a state event, the Zero Condition function must return this positive quantity, and the action must make sure to apply the corresponding changes in the state, so that the quantity will evolve towards positive values. For instance, the bouncing ball example above is specified by a state event, because the ball vertical position, y, must always be positive, And the action when the ball hits the floor reverses the velocity so that the ball bounces back towards positive y values.
:Zero crossing: This is an event that happens when a given quantity changes value. That is, it goes from positive to negative or viceversa. The action just applies the changes but the value can later evolve towards any direction.
:Positive crossing: This is similar to Zero crossing, but the event is only triggered if the quantity changes from positive to negative. If the crossing is in the other direction (i.e. from negative to positive), the action is not triggered.

From the three events, the first one, State event, is the more powerful (and perhaps a bit more elaborated to specify), because is the only one that allows for consecutive events, that is an event that triggers a second event, which in turn triggers a third event,... For the other two types of events EJS assumes that the events are separated conveniently. More precisely, after an event takes place, the system will always evolve so that the given quantity is bigger than the tolerance specified for event detection before any further crossing takes place.

!Parameters for an Event

EJS

February 09, 2010, at 12:03 AM by frank -
Deleted line 0:
%center%Attach:Main/ModelEventsEn.png | [- The event editor -]


(:if userlang es:)
Algunas veces, cuando estamos implementando la evolución de nuestra simulación mediante la resolución de un sistema de ecuaciones diferenciales, deseamos que el sistema detecte que cierta condición dependiente de las variables del mismo se ha producido y que nos permita realizar en ese punto algunas correcciones para ajustar nuestra simulación.

Por ejemplo, nos encontramos ante un evento cuando realizamos la simulación del movimiento de una pelota de baloncesto que al encontrarse con el suelo rebota. La solución numérica para estas ecuaciones no tendrá en cuenta, por sí misma, el hecho de que la solución calculada puede situar a la pelota en una posición bajo tierra, ésto es, {$y(t)<0$}. Como el método para la solución numérica avanza mediante saltos en el tiempo es muy difícil que el momento de la colisión de la pelota con el suelo coincida con una de las soluciones dadas, situando entonces a la pelota en un estado, digámoslo así, ''ilegal''. De hecho, podríamos preferir que el ordenador por si mismo hubiese detectado el problema y hubiese detenido momentáneamente la simulación en el momento preciso de la colisión aplicando entonces el código necesario para simular el rebote de la pelota contra el suelo y continuando después desde esas condiciones iniciales.

De forma más precisa, definimos un evento como un cambio de signo de una función real de las variables de estado (las variables que se derivan) y de la variable independiente de una EDO.(Los eventos causados sólo por la variable independiente se suelen llamar ''eventos temporales''.). Para facilitar nuestra explicación y ya que todas las variables dependen de la variable independiente, denotaremos por {$h(t)$} a la función que cambia de signo en el evento.

%width=500px rfloat%Attach:Main/ModelEventsEs1.jpg



Para ayudarle a programar este tipo de sucesos el editor de EDO de EJS dispone de un botón con el rótulo ''Eventos'' que le llevará a una nueva ventana con un nuevo editor. Junto al botón podemos observar un campo numérico que nos muestra el número de eventos incorporados a nuestra simulación. La creación y manejo de las páginas en esta ventana es igual al del resto de subpaneles del panel Modelo.
[[<<]]

%width=500px lfloat%Attach:Main/ModelEventsEs.jpg


En la nueva ventana encontrará dos secciones de edición diferenciadas a parte del campo de texto destinado a comentarios.
En la sección superior se indicará cómo se detecta el evento. Escribiremos aquí el código que calcula la función que va a cambiar de signo. Este código tiene que devolver un valor de tipo ''double'' por lo que ya incorpora por defecto el código '''return 1.0;''' el cual no causa ningún evento. En el campo situado en la esquina superior derecha de esta sección estableceremos el valor de la ''tolerancia'' que deseamos para localizar el evento.

Changed lines 9-32:
%center%Attach:Main/ModelEventsEn.png | [- The event editor -]


(:if userlang es:)
Algunas veces, cuando estamos implementando la evolución de nuestra simulación mediante la resolución de un sistema de ecuaciones diferenciales, deseamos que el sistema detecte que cierta condición dependiente de las variables del mismo se ha producido y que nos permita realizar en ese punto algunas correcciones para ajustar nuestra simulación.

Por ejemplo, nos encontramos ante un evento cuando realizamos la simulación del movimiento de una pelota de baloncesto que al encontrarse con el suelo rebota. La solución numérica para estas ecuaciones no tendrá en cuenta, por sí misma, el hecho de que la solución calculada puede situar a la pelota en una posición bajo tierra, ésto es, {$y(t)<0$}. Como el método para la solución numérica avanza mediante saltos en el tiempo es muy difícil que el momento de la colisión de la pelota con el suelo coincida con una de las soluciones dadas, situando entonces a la pelota en un estado, digámoslo así, ''ilegal''. De hecho, podríamos preferir que el ordenador por si mismo hubiese detectado el problema y hubiese detenido momentáneamente la simulación en el momento preciso de la colisión aplicando entonces el código necesario para simular el rebote de la pelota contra el suelo y continuando después desde esas condiciones iniciales.

De forma más precisa, definimos un evento como un cambio de signo de una función real de las variables de estado (las variables que se derivan) y de la variable independiente de una EDO.(Los eventos causados sólo por la variable independiente se suelen llamar ''eventos temporales''.). Para facilitar nuestra explicación y ya que todas las variables dependen de la variable independiente, denotaremos por {$h(t)$} a la función que cambia de signo en el evento.

%width=500px rfloat%Attach:Main/ModelEventsEs1.jpg



Para ayudarle a programar este tipo de sucesos el editor de EDO de EJS dispone de un botón con el rótulo ''Eventos'' que le llevará a una nueva ventana con un nuevo editor. Junto al botón podemos observar un campo numérico que nos muestra el número de eventos incorporados a nuestra simulación. La creación y manejo de las páginas en esta ventana es igual al del resto de subpaneles del panel Modelo.
[[<<]]

%width=500px lfloat%Attach:Main/ModelEventsEs.jpg


En la nueva ventana encontrará dos secciones de edición diferenciadas a parte del campo de texto destinado a comentarios.
En la sección superior se indicará cómo se detecta el evento. Escribiremos aquí el código que calcula la función que va a cambiar de signo. Este código tiene que devolver un valor de tipo ''double'' por lo que ya incorpora por defecto el código '''return 1.0;''' el cual no causa ningún evento. En el campo situado en la esquina superior derecha de esta sección estableceremos el valor de la ''tolerancia'' que deseamos para localizar el evento.


Edit - History - Print - Recent Changes - Search
Page last modified on April 05, 2011, at 09:18 PM