Skip to main content
Global

5.1: מבוא פרק

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

    \(\frac{1}{N}\,\frac{∆N}{∆t}\,=\,r\,+\,sN\)\(\leftarrow\,Difference\,equation\,model\)

    \(\frac{1}{N}\,\frac{dN}{dt}\,=\,r\,+\,sN\)\(\leftarrow\,Differential\,equation\,model\)

    נזכיר כי סימן הדלתא (∆) פירושו שינוי או ההבדל. השווה את משוואת ההבדל עם הצורה הדיפרנציאלית, המשתמשת במינוח \(dN\)ו\(dt\). אלה מייצגים שלבי זמן קטנים לאין ערוך, המתאימים לתפיסת השכל הישר שלנו לגבי הזמן כמתחלק יותר ויותר ללא הגבלה. במשוואות דיפרנציאליות אוכלוסיות משתנות בצורה חלקה ולא בשלבים סופיים - צמיחה המתקרבת לזו של אורגניזמים שיכולים להתרבות בכל עת, כגון אוכלוסיות חיידקים או אנושיות.

    מסתבר שמשוואות דיפרנציאליות קשות יותר למחשבים לפתור מאשר משוואות הבדל. מחשבים אינם יכולים לבצע שלבי זמן עדינים לאין שיעור, אך עליהם להתקרב באמצעות שלבי זמן קטנים מאוד במקום זאת. מצד שני, משוואות הבדלים יכולות להיות קשות יותר לפתרון מתמטי.

    r = 1; s = -0.001; N = 1; t = 0;

    dt = 1; הדפסה (N);

    בעוד (t <= 20)

    {dN =( ר+ס* נ) * N; N = נ+דנ; אם (נ<0) נ=0; t = t+dt; הדפס (N);}

    למעלה קוד מחשב למשוואת הפרש שהוצגה קודם לכן, שהתיישרה ב -1000, אך עם תוספת באדום. אם האוכלוסייה תהיה הרבה מעל כושר הנשיאה שלה, החישוב עשוי להראות ירידה כה חזקה עד שאוכלוסיית השנה הבאה תהיה שלילית - כלומר האוכלוסייה תמות לחלוטין. התוספת באדום רק נמנעת מהקרנת אוכלוסיות שליליות. להלן קוד דומה למשוואת הדיפרנציאל המתאימה, כאשר ההבדלים שוב באדום.

    r = 1; s = -0.001; N = 1; t = 0;

    dt = 1/(365* 24* 60* 60); להדפיס (N);

    בעוד (t <= 20 /dt)

    {dN =( ר+ס* נ) * N * dt; n = נ+דנ; אם (נ<0) נ=0; t = t+dt; הדפס (N);}

    זה מתכוון לדגמן צעדי זמן קטנים לאין שיעור. כמובן שזה לא יכול לעשות את זה בדיוק, אבל חייב להסתפק בצעדי זמן קטנים מאוד. במקום\(dt\,=\,1\), למשל, לייצג שנה אחת, היא מוגדרת כאן לשניה אחת, ומחלקת שנה אחת ב 365 יום וכל יום ב -24 שעות, 60 דקות ו -60 שניות. זה בקושי קטן לאין שיעור, אבל עבור אוכלוסיות של חיידקים ובני אדם זה קרוב מספיק למטרות מעשיות. ובכל זאת, חשוב לבדוק אוכלוסיות שליליות למקרה ששלב הזמן אינו קטן מספיק.

    איור\(\PageIndex{1}\). צמיחה לוגיסטית דיפרנציאלית (חום) בהשוואה לדיסקרטית (ירוקה). לא מופיעות נקודות בטופס הדיפרנציאלי, מכיוון שזה מייצג שלבי זמן אינפיניטסימליים, ואילו לצורת ההפרש יש נקודה בכל נקודה מחושבת.

    כמה קטן הוא קרוב מספיק כדי קטן לאין שיעור? זו השאלה. כדי לברר זאת, אתה יכול להגדיר את שלב הזמן למשהו קטן ולהפעיל את הקוד, שייצר קבוצה של ערכי אוכלוסייה לאורך זמן. לאחר מכן הגדר את הצעד הקטן יותר והפעל שוב את הקוד. זה יפעל לאט יותר מכיוון שהוא מחשב יותר צעדים, אך אם בעצם מופיעה אותה תשובה - אם התשובה "מתכנסת" - תוכל להגדיל את הצעד שוב ולהאיץ את החישוב. עם כמה ניסויים אתה יכול למצוא שלב זמן כי הוא קטן מספיק כדי לתת תשובות מדויקות אבל גדול מספיק כדי לאפשר את הקוד שלך לרוץ מהר למדי.

    איור \(\PageIndex{1}\) מציג את התוצאות של הפעלת גרסת המשוואה הדיפרנציאלית של התוכנית (השנייה למעלה, בצבע חום) לעומת גרסת משוואת ההבדל (הראשונה למעלה, בירוק). למשוואה הדיפרנציאלית יש אותם פרמטרים וצורה כללית, אך האוכלוסייה מתקרבת ליכולת הנשיאה שלה מהר יותר. מכיוון ששלבי הזמן הדיפרנציאליים מייצרים צאצאים מוקדם יותר - לא מחכים לסוף הצעד - צאצאים זמינים להתרבות מוקדם יותר וכן הלאה.

    שיטה מסוימת זו למשוואות דיפרנציאליות נקראת "שיטת אוילר" (מבוטאת "Oiler's"), גישה בסיסית שלא הייתה בשימוש לעתים קרובות במאה העשרים מכיוון שמחשבים לא מזמן היו איטיים פי מיליונים מכפי שהם כיום. היום שיטה זו היא לעתים קרובות מספיק מהר, והוא רצוי בגלל הפשטות היחסית שלה.

    (אגב, חישוב צמיחת החיידקים למשך חמישה ימים בשלבי זמן של שנייה יהיה מהיר מספיק בכל שפת תכנות. בזמן שאנחנו כותבים את זה (העשור השני של המאה העשרים ואחת), חישוב הגידול לאוכלוסייה אנושית, שנייה אחר שנייה במשך 20 שנה, עושה את אותו הדבר במשך 20 שנה שנייה לשנייה עבור בני אדם יהיה איטי מדי ב - R, נסבל ב- AWK, והרבה מהר ב- C, Java או בשפות מהירות אחרות.)