Saltar al contenido principal
LibreTexts Español

8.2: Código para dos especies

  • Page ID
    52916
  • \( \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}}\)

    A continuación se muestra el código de computadora para la dinámica de dos especies, una expansión lógica del código para la dinámica de una especie que vio anteriormente. El código aquí produjo la gráfica en la Figura 8.1.2 y, con otros valores para N i, r i, s i, j, también produjo las gráficas de las Figuras 8.1.4 y 8.1.6.

    N1=.01; N2=.01;

    r1=0.5; r2=0.8;

    s11=-0.08; s12=-0.03; s21=-0.09; s22=-0.06;

    t=0; dt=.0001; tmax=75; paso=0;

    impresión (c (t, N1, N2));

    mientras que (t<tmax)

    {dN1 = (R1+S11*n1+S12*n2) *N1*dt;

    dN2 = (R2+S21*N1+S22*n2) *N2*dt;

    N1=N1+DN1; si (N1<0) N1=0;

    N2=N2+dN2; si (N2<0) N2=0;

    t=t+dt; paso=paso+1;

    if (paso==1000)

    {print (c (t, N1, N2)); paso=0;}

    Este código usa un paso de tiempo dt de 1/10,000 pero muestra solo cada paso de tiempo 1000, usando la variable llamada step. Esta es una forma confiable de mostrar la salida periódicamente, ya que el paso toma solo valores enteros 0, 1, 2... Observar la variable t para el mismo propósito puede no ser confiable; t tiene errores de redondeo en su porción fraccionaria, que normalmente es representada solo aproximadamente por la computadora.

    Por cierto, aquí hay un requisito crucial para codificar dinámicas de múltiples especies: debes actualizar todos los N i juntos. Podría tener la tentación de acortar el código escribiendo lo siguiente, deshaciéndose de las variables dN1 y dN2.

    N1=N1+ (R1+S11*N1+S12*n2) *N1*dt; si (N1<0) N1=0;

    N2=N2+ (R2+S21*N1+S22*n2) *N2*dt; si (N2<0) N2=0;

    Este código abreviado, sin embargo, contiene un error grave que podría ser difícil de detectar. (Un “error” es el término informático para cualquier error en el código de computadora, normalmente uno que pasa desapercibido). El cálculo de N2 en la segunda línea utiliza el nuevo valor de N1, no el valor presente. Esto generará resultados sutilmente incorrectos que podrían ser costoso—si, por ejemplo, estuvieras usando el código para proyectar el curso de una epidemia.

    Las revisiones cuidadosas del código con colegas experimentados son una forma de ayudar a evitar tales errores. Si el problema es lo suficientemente importante, tener el código escrito de manera independiente por dos o más personas que no se comuniquen entre sí, salvo aceptando las mismas especificaciones y comparando los resultados finales, es una forma de abordar la corrección. Esto es como una replicación independiente de experimentos científicos. Otros métodos para asegurar que el código sea correcto se abordan más adelante.


    This page titled 8.2: Código para dos especies is shared under a CC BY-NC 4.0 license and was authored, remixed, and/or curated by Clarence Lehman, Shelby Loberg, & Adam Clark (University of Minnesota Libraries Publishing) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.