Saltar al contenido principal
LibreTexts Español

4.4: Simulación de modelos de tiempo discreto con múltiples variables

  • Page ID
    115694
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Ahora estamos dando un primer paso hacia la simulación de sistemas complejos. Aumentemos el número de variables de uno a dos. Considere las siguientes ecuaciones de diferencia:

    \[x_{t} =0.5_{t-1} +y_{t-1}\label{4.14)} \]

    \[y_{t}=-0.5x_{t-1} +y_{t-1}\label{(4.15)} \]

    con

    \[x_{0} =1, y_{0}=1\label{(4.16)} \]

    Estas ecuaciones también se pueden escribir usando vectores y una matriz de la siguiente manera:

    \[\binom{x}{y} =\binom{0.5 \ \ 1}{-0.5 \ \ 1} \binom{x}{y}_{t-1}\label{(4.17)} \]

    Intente implementar el código de simulación de la ecuación anterior. Esto puede parecer bastante sencillo, requiriendo solo cambios menores en lo que teníamos antes. Es decir, solo necesitas simular dos ecuaciones de diferencia simultáneamente. Su nuevo código puede verse así:

    Código 4.11.png

    Código 4.11 pt 2.png

    Lo que hice en este código es esencialmente repetir cosas tanto para x como para y. Al ejecutar dos comandos de trazado al final se producen dos curvas en un solo gráfico. Agregué las opciones 'b-' y 'g—' a las funciones de trazado para dibujar xresult en una curva sólida azul e y el resultado en una curva discontinua verde. Si ejecuta este código, produce un resultado decente (Fig. 4.4.1), por lo que las cosas podrían verse bien. No obstante, hay un error crítico que cometí en el código anterior. ¿Lo puedes detectar? Este es un tema bastante fundamental en la simulación de sistemas complejos en general, así que será mejor que lo notemos y lo arreglemos antes que tarde. Vuelve a leer el código cuidadosamente e intenta encontrar dónde y cómo lo hice mal.

    ¿Lo encontraste? La respuesta es que no hice un buen trabajo al actualizar x e y simultáneamente. Mira la siguiente parte del código:

    Código 4.12.png

    Tenga en cuenta que, tan pronto como se ejecuta la primera línea, el valor de x se sobrescribe por su nuevo valor. Cuando se ejecuta la segunda línea, el valor de x en su lado derecho ya está actualizado, pero aún así debería ser el valor original. Para simular correctamente la actualización simultánea de x e y, necesitarás hacer algo como esto:

    Fig. 4.2.PNG
    Figura\(\PageIndex{1}\): Salida visual del Código 4.11. Este resultado es realmente incorrecto.

    Código 4.13.png

    Aquí tenemos dos conjuntos de variables de estado, x, y y nextx, nexty. Primero calculamos los siguientes valores de estado y los almacenamos en nextx, nexty, y luego los copiamos a x, y, que se utilizará en la siguiente iteración. De esta manera, podemos evitar cualquier interferencia entre las variables de estado durante el proceso de actualización. Si aplicas este cambio al código, obtendrás un resultado de simulación correcto (Fig. 4.4.2).

    El tema de cómo implementar la actualización simultánea de múltiples variables es un tema técnico común que aparece en muchos modelos de simulación de sistemas complejos, ya que discutiremos más en capítulos posteriores. Como se ve en el ejemplo anterior, una solución simple es preparar dos conjuntos separados de las variables de estado, uno por ahora y otro para el futuro inmediato, y calcular los valores actualizados de las variables de estado sin modificarlos directamente durante la actualización. En las visualizaciones anteriores, simplemente trazamos las variables de estado a lo largo del tiempo, pero hay

    Fig. 4.3.PNG
    Figura\(\PageIndex{2}\): Salida visual del resultado de la simulación basada en un código implementado correctamente con Código 4.13.

    otra forma de visualizar resultados de simulación en un espacio de fase. Si tu modelo involucra solo dos variables de estado (o tres si conoces el trazado 3-D), deberías probar esta visualización para ver la estructura del espacio de fase. Todo lo que necesitas hacer es reemplazar la siguiente pieza

    Código 4.14.png
    con esto:

    Código 4.15.png

    Esto producirá una trayectoria del estado del sistema en un espacio de\(x-y\) fase, lo que muestra claramente que el sistema se encuentra en una oscilación ovalada y periódica (Fig. 4.4.3), que es una firma típica de un sistema lineal.

    Higo 4.4.PNG
    Figura\(\PageIndex{3}\): Visualización del resultado de simulación en un espacio de fase usando el Código 4.15.
    Ejercicio\(\PageIndex{1}\)

    Simule el sistema de dos variables anterior usando varios coeficientes diferentes en las ecuaciones y vea qué tipo de comportamientos pueden surgir.

    Ejercicio\(\PageIndex{2}\)

    Simular el comportamiento de la siguiente secuencia de Fibonacci. Primero necesita convertirla en una ecuación de diferencia de primer orden de dos variables y luego implementar un código de simulación para ello.

    \[x_{t} = x_{t-1} +x_{t-2}, x_{0} =1, x_{1}=1\label{(4.18)} \]

    Si juegas con este modelo de simulación para varios valores de coeficientes, pronto notarás que solo hay ciertos tipos de comportamientos posibles en este sistema. A veces las curvas muestran crecimiento o decaimiento exponencial, o a veces muestran comportamientos oscilatorios más suaves. Estos dos comportamientos a menudo se combinan para mostrar una oscilación exponencialmente creciente, etc. pero eso es todo. No se ve ningún comportamiento más complejo saliendo de este modelo. Esto se debe a que el sistema es lineal, es decir, la ecuación del modelo está compuesta por una simple suma lineal de términos de primer orden de variables de estado. Entonces aquí hay un dato importante que debes tener en cuenta:

    Los sistemas dinámicos lineales pueden mostrar solo crecimiento/decaimiento exponencial, oscilación periódica, estados estacionarios (sin cambio), o sus híbridos (por ejemplo, oscilación exponencialmente creciente) a.

    a A veces también pueden mostrar comportamientos que están representados por polinomios (o productos de polinomios y exponenciales) del tiempo. Esto ocurre cuando sus matrices de coeficientes no son diagonalizables.

    En otras palabras, estos comportamientos son firmas de sistemas lineales. Si observa dicho comportamiento en la naturaleza, es posible que pueda asumir que las reglas subyacentes que produjeron el comportamiento podrían ser lineales.


    This page titled 4.4: Simulación de modelos de tiempo discreto con múltiples variables is shared under a CC BY-NC-SA 3.0 license and was authored, remixed, and/or curated by Hiroki Sayama (OpenSUNY) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.