שְׁאֵלָה:
קביעת מיקום מסלולית בנקודת זמן עתידית
Henrik
2015-04-26 12:54:45 UTC
view on stackexchange narkive permalink

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

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

שאלתי היא אפוא כיצד אני מחשב את מיקום כדור הארץ בזמן נתון $ t $:

משתנים ידועים:

  • מיקום כוכב הלכת בזמן 0
  • מהירות כדור הארץ בזמן 0
  • כיוון כדור הארץ בזמן 0

מה אני רוצה לדעת:

  • מיקום כוכב הלכת בזמן $ t $

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

https://en.wikipedia.org/wiki/N-body_problem#Many_bodies $\;$
אם אתה עושה את זה באחדות, אני יכול להמליץ ​​על הנכס של מנוע הכבידה, שעושה את כל זה בשבילך. אם לא, אתה יכול לשקול להסתכל על זה בכל מקרה, מכיוון שאתה מקבל את כל קוד המקור זה עשוי להיות שימושי אם אתה חושב שתוכל לקרוא את c # למרות החלקים הספציפיים לאחדות. המחבר גם מאוד מועיל (אני לא קשור, רק לקוח מאושר)
שְׁלוֹשָׁה תשובות:
#1
+44
2012rcampion
2015-04-26 20:20:25 UTC
view on stackexchange narkive permalink

הצהרת הבעיה

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

כפי שגילית, הדרך היחידה להפיץ את האלמנטים הקרטזיים קדימה בזמן היא על ידי אינטגרציה מספרית. זה עובד בסדר, אבל זה יכול להיות איטי אם אתה רוצה דיוק גבוה, ויש כמה בעיות מספריות (שגיאות שנגרמות על ידי עיגול [מצטברות לאט, ומשלבים רבים גורמים ל סחף אנרגיה). תוכלו לעקוף חלק מהבעיות הללו באמצעות אינטגרטור מסדר גבוה יותר ( Runge-Kutta הוא בעיה פופולרית) המאפשר לכם לנקוט בצעדים גדולים יותר לאותה רמת דיוק, או לקבל דיוק טוב יותר עבור באותו גודל צעד. עם זאת, זהו סוג של עודף יתר של סימולציה פשוטה.

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

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

הגדרת תנאים

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

  1. ציר חצי עיקרי, $ a $ : חצי מהקוטר המרבי של האליפיטית מסלול, (= רדיוס הציריק אם המסלול הוא מעגלי). האנרגיה ותקופת המסלול תלויים רק ב $ a $ . ה פי הטבעת למחצה למחצה $ \ ell $ , "רוחב" המסלול, יכול להיות טוב יותר בחירה למסלולים קרובים לפרבוליים (כמו לאסטרואידים) או שמשתנים מאליפטי להיפרבולי (כמו חללית בין-כוכבית). בין השניים קשורה $ \ ell = a (1-e ^ 2) $ .

  2. אקסצנטריות, $ e $ : ה"נקודה * של המסלול. נע בין $ e = 0 $ למסלול מעגלי לחלוטין, ל $ e = 1 $ למסלול פרבולי, ל $ e>1 $ למסלולים היפרבוליים. כספית הוא כוכב הלכת האקסצנטרי ביותר עם $ e \ כ 0.2 $ . בדרך כלל יש בחלליות המקפות כדור הארץ $ e<0.01 $ .

מלבד: מ $ e $ span> ו $ a $ אנו יכולים לקבוע את הנקודות הרחוקות ביותר והקרובות ביותר במסלול, את ו- periapsis (יחד אפסידים ): $$ r_a = a (1 + e) ​​\\ r_p = a (1-e ) $$ שמות הנקודות הללו מעט מצחיק: אפואפסיס ופריאפסיס הם המונחים הגנריים, אך למסלולים סביב גופים מסוימים יש מונחים ספציפיים: לחללית סביב כדור הארץ יש אפוגי ו פריגי , ואילו כדור הארץ (במסלול סביב השמש) יש אפיליון ו perihelion .

Ellipse data

Orbit data מספיקים שני הפרמטרים $ a $ ו- $ e $ כדי לקבוע את צורת המסלול. שלושת הפרמטרים הבאים מגדירים את כיוון המסלול ביחס למערכת קואורדינטות המורכבת ממישור התייחסות, וכיוון התייחסות (מקביל למישור).

כמעט לכל המסלולים במערכת השמש, הקואורדינטה המערכת המשמשת היא מערכת הקואורדינטות האקליפטיות . מישור הייחוס הוא מישור האקליפטי , מישור מסלול כדור הארץ סביב השמש. כיוון הייחוס הוא נקודת השוויון הארצית , הכיוון מכדור הארץ לשמש ברגע שוויון האביב. מכיוון ששתי ההפניות הללו נסחפות באטיות לאורך זמן, עלינו לציין זמן מסוים בו מוגדרים הפניות הללו, הנקרא תקופה . הנפוץ ביותר הוא J2000, בשעות הצהריים ב -1 בינואר 2000 (UTC).

Ecliptic coordinate system

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

הפרמטרים הבאים מאתרים את המסלול w.r.t. מסלול כדור הארץ:

  1. נטייה, $ i $ : הזווית בין מישור המסלול למישור הייחוס. הטיה בין 90 ל -180 מעלות מתייחסת למסלול מדרדר, שמקיף "אחורה" מהכיוון הרגיל.

  2. אורך הצומת העולה, $ \ Omega $ : הצומת העולה הוא המקום בו המסלול עובר מתחת למישור הייחוס ומעליו. (זה בצומת שבין מישור המסלול למישור הייחוס) $ \ Omega $ הוא הזווית שבין נקודה זו לכיוון הייחוס, נמדדת נגד כיוון השעון.

  3. טיעון של פריאפסיס, $ \ omega $ : הזווית בין הצומת העולה ל פריאפסיס (הנקודה הנמוכה ביותר במסלול). למסלולים בעלי נטייה נמוכה מאוד שבהם קשה לקבוע את מיקום הצומת העולה (מכיוון שמדובר בצומת בין שני מישורים כמעט מקבילים), במקום זאת אנו משתמשים ב אורך הפריאפסיס $ \ varpi = \ Omega + \ omega $ .

Orbit-to-ecplitic paramaeters

הפרמטר השישי מגדיר את מיקום האובייקט במסלולו. ישנן מספר אפשרויות שונות, אך הנפוצה ביותר היא:

הקצב שבו $ M $ שינויים נקראת התנועה הממוצעת , $ n $ , שווה ל $ 2 \ pi / T $ . בדרך כלל יש לך מדידה של $ M $ בעידן מסוים $ t_0 $ , המכונה (באופן לא מפתיע) פירושו חריגה בעידן , $ M_0 $ .

בדיוק כמו הטיעון של פריאפסיס, עבור מסלולים בעלי נטייה נמוכה אנו השתמש בערך קשור, אורך ממוצע , $ L = \ varpi + M $ .

הזווית האמיתית בין הגוף המקיף והפריאפסיס נקראים אנומליה אמיתית , $ \ nu $ . זו הזווית הדרושה לנו כדי לחשב את מיקום הגוף. למרבה הצער אין שום דרך לחשב ישירות $ \ nu $ מ- $ M $ . במקום זאת נפתור תחילה את ה אנומליה אקסצנטרית $ E $ :

$$ M = E - e \ sin E $$

זה נקרא משוואת קפלר , ולא ניתן לפתור אותו באופן אנליטי. ברגע שיש לנו $ E $ , יש ביטוי פשוט יחסית ל $ \ nu $ .

מיקום מחשוב מאלמנטים מסלוליים

נבצע חישוב זה בשלושה שלבים: ראשית נפתור את המשוואה של קפלר. שנית, נחשב את המיקום הדו-ממדי של הגוף במישור המסלול. לבסוף, נסובב את המיקום הדו-ממדי לקואורדינטות תלת-ממדיות. אני אתן קצת "פסאודוקוד" ב- Javascript לרוב המשימות הללו.

אני מניח שאתה משתמש בקבוצת אלמנטים כמו אלה מאתר האינטרנט של JPL. אלה משתמשים ב $ L $ וב $ \ varpi $ במקום $ M $ ו $ \ omega $ . הטבלה נותנת שני ערכים לכל אחד מהאלמנטים; השנייה היא נגזרת הזמן. אם אתה משתמש בערכים בטבלה זו עליך להשתמש גם בנגזרות.

חשב את הזמן $ t $ במאות שנים מ- J2000:

  // החודש הוא באפס אינדקס, ולכן 0 הוא ינוארvar tMillisFromJ2000 = Date.now () - Date.UTC (2000, 0, 1, 12, 0, 0); var tCenturiesFromJ2000 = tMillisFromJ2000 / (1000 * 60 * 60 * 24 * 365.25 * 100);  

כעת אנו מחשבים את הערכים הנוכחיים של כל אחד מהפרמטרים במסלול. לדוגמא, הציר החציוני ביותר של כדור הארץ, המשתמש בערכים מטבלה 1 (תקף בין השנים 1800-2500):

  // a0 = 1.00000261; adot = 0.00000562var a = a0 + adot * tCenturiesFromJ2000;  

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

טבלה 2 א נותנת אלמנטים מדויקים מ 3000 לפנה"ס עד 3000 לספירה; עם זאת, אם אתה משתמש באלמנטים מטבלה 2 א, אתה חייב להשלים אותם עם תיקונים ל $ L $ מטבלה 2b! לדוגמה, הנה חישוב האורך של שבתאי:

  // L0 = 34.33479152; Ldot = 3034.90371757 // b = -0.00012452 // c = 0.06064060 // s = -0.35635438 // f = 38.35125000var L = L0 + Ldot * tCenturiesFromJ2000 + b * Math.pow (tCenturiesFromJ2000, 2) + c * Math.cos (f * tCenturiesFromJ2000) + s * Math.sin (f * tCenturiesFromJ2000);  

איננו צריכים לחשב במפורש את התנועה הממוצעת ולהוסיף אותה ל $ L $ , מכיוון ששתי הטבלאות כוללות אותו ב $ \ dot L $ .

עכשיו אנחנו מוכנים מחשבים $ M $ ו- $ \ omega $ ( w ):

  var M = L - p \\ p הוא האורך של periapsisvar w = p - W \\ W הוא האורך של הצומת העולה  

עד שלב 2: עלינו לפתור את משוואת קפלר:

$$ M = E - e \ sin E $$

נוכל לפתור זאת באופן מספרי באמצעות שיטת ניוטון . פתרון משוואת קפלר שווה ערך למציאת השורשים של $ f (E) = E - e \ sin E - M $ . בהינתן $ E_i $ , אומדן של $ E $ , אנו יכולים להשתמש בשיטת ניוטון כדי למצוא אומדן טוב יותר :

$$ E_ {i + 1} = E_i - f (E_i) / f '(E_i) \\ f' (E) = 1 - e \ cos E $$

מכיוון שהחלק הלא ליניארי $ e \ sin E $ הוא קטן מאוד, נוכל להתחיל בהערכה $ E = M $ . הקוד שלנו נראה בערך כך:

  E = M; while (true) {var dE = (E - e * Math.sin (E) - M) / (1 - e * Math .cos (E)); E - = dE;
אם (Math.abs (dE) < 1e-6) הפסקה;}  

כעת ישנן שתי דרכים לחישוב המיקום מתוך האנומליה האקסצנטרית. ראשית נוכל לחשב את האנומליה והרדיוס האמיתיים (מיקום האובייקט בקואורדינטות קוטביות), ואז להמיר לקואורדינטות מלבניות; אולם אם אנו מיישמים מעט גיאומטריה נוכל לחשב את הקואורדינטות ישירות מ- $ E $ :

  var P = a * (Math.cos (E) - e); var Q = a * Math.sin (E) * Math.sqrt (1 - Math.pow (e, 2));  

( P ו- Q יוצרים מערכת קואורדינטות דו-מימדית במישור המסלול, כאשר + P מכוונים לכיוון פריאפסיס.)

  // לסובב לפי טיעון של periapsisvar x = Math.cos (w) * P - Math.sin (w) * Q; var y = Math.sin (w) * P + Math.cos (w) * Q; // סובב על ידי נטייהvar z = Math.sin (i) * y; y = Math.cos (i) * y; // סובב באורך של nodevar עולה xxtemp = x; x = Math.cos (W) * xxtemp - Math.sin (W) * y; y = Math.sin (W ) * xtemp + Math.cos (W) * y;  

( x , y , and z קוד> יהיה ביחידות AU.)

וסיימת!


כמה טיפים:

  • אם ברצונך לחשב את המהירות, תוכל לעשות זאת במקביל לחישוב $ P $ ו- $ Q $ ואז סובב אותו באותו אופן. $$ \ dot M = n = \ dot L \\ \ dot M = \ dot E - e (\ cos E) \ נקודה E \\ \ נקודה E = \ נקודה M / (1 - e \ cos E) \\ \ נקודה P = -a (\ sin E) \ נקודה E \ qquad \ נקודה Q = a (\ cos E) \ dot E \ sqrt {1 - e ^ 2} $$ הערה אני לא כולל אף נגזרת (למעט $ \ dot L $ span >) בחישוב זה, מכיוון שהם לא משפיעים הרבה על התוצאה. אתה יכול לקודד את זה כ:

      var vP = - a * Math.sin (E) * Ldot / (1 - e * Math.cos (E));
    var vQ = a * Math.cos (E) * Math.sqrt (1 - e * e) * Ldot / (1 - e * Math.cos (E));  

    הערה שהמהירויות יהיו ב- AU לכל מאה.

  • אם אתה מעדכן את המיקומים בתדירות גבוהה, תוכל להשתמש בערך הקודם של $ E $ כדי לזרוע את השיטה של ​​ניוטון, ולעשות מספר קבוע של חזרות (כנראה רק אחד יספיק). שים לב שעליך לשמור על ערך זה של $ E $ מקומי לכל אובייקט!

  • תוכל גם פשוט השתמש במספר קבוע של איטרציות לפיתרון הראשוני. גם עבור $ e = 0.2 $ , לאחר שלוש חזרות השגיאה ב $ E $ היא רק כ- $ 10 ^ {- 13} $ , ולאחר ארבע איטרציות השגיאה קטנה יותר משגיאת העיגול של IEEE כפול עד $ e = 0.42 $ .


אם אתה רוצה מידע נוסף תוכל לחפש באינטרנט, אך אם אתה באמת מעוניין, עליך לקרוא טקסט מבוא על מכניקת מסלול. אני אישית ממליץ על יסודות האסטרודינמיקה מאת בייט, מולר ולבן (pdf). אבי השתמש בספר הזה עוד כשהיה בקולג ', ומצאתי שהוא קריא יותר מספר הלימוד שלי בקולג'. היית מעוניין בפרק 4, מיקום ומהירות כפונקציה של זמן.

להלן [אלמנטים מסלולי הכוכבים] (http://ssd.jpl.nasa.gov/txt/aprx_pos_planets.pdf) כדי להתחיל בעבודה.
מן הסתם יש להזכיר שהמערכת לעיל מיועדת ל"תנועה דו-גוף ": כוכבי הלכת אינם משפיעים זה על זה. אם תוכנית הפוסטר המקורי כללה בעבר את האפקטים הללו, התוצאות יהיו שונות במקצת בגלל בעיה זו.
@Matt נקודה טובה, אוסיף את זה ב.
בבקשה, האם אתה יכול לבדוק את הקוד שלי / שלך? תרגמתי את זה ל- C # וזה לא עבד. מידע על הבעיה כאן: https://space.stackexchange.com/questions/21458/is-this-c-code-to-obtain-the-coordinates-of-the-planets-correct/ הקוד המעודכן המלא כאן: https://pastebin.com/ydse66XY
@vistaero עליך להמיר את הזוויות לרדיאנים לפני שתשתמש במשוואה של קפר; אחרת עליכם להוסיף גורם של $ 180 / \ pi $ למונח $ e \ sin E $ ונגזרתו.
@vistaero מלבד זאת, הקוד שלך נראה לי בסדר (בהנחה שהפונקציות הטריגונומטריות לוקחות ארגומנטים במעלות).
Mathd.Cos ו- Mathd.Sin לוקחים טיעונים ברדיאנים, אז רק אחרי שהכרזתי על i, L, p ו- W, האם אני צריך להכפיל אותם במתמט.Deg2Rad (Mathd.PI / 180.0)? בדרך זו, פלוטו מסתיים ב 9.8 AU תחת השמש. שאר כוכבי הלכת אינם רחוקים כל כך אך עדיין מסלולים שגויים (כדור הארץ, מרקורי ונוגה נמצאים כמעט באותו מרחק של השמש ...). הקוד נראה כך עכשיו: https://pastebin.com/NqTwa4QM
קו בדיקת @vista 35
אופס, זו הייתה טעות מאוד מטופשת! עכשיו מערכת השמש נראית די דומה לזו האמיתית! תודה רבה! אבל גיליון אחרון: הוספתי את הקוד למהירות. לדוגמא, כדור הארץ צריך להיות מהיר מסלול מסלול ממוצע של 30 קמ"ש, אך בסימולציה הוא נע במהירות של 1689 קמ"ש! יישמתי את המהירות בצורה כזו: https://pastebin.com/NzFPBGTJ האם עשיתי משהו לא בסדר?
@2012rcampion תודה רבה לך, תשובה זו הועילה מאוד!
@2012rcampion האם ניתן להשתמש בשיטה זו עבור לוויינים שבהם נתוני jpl מכונים "אלמנטים מסלוליים ממוצעים המופנים למישורי Laplace המקומיים"? אני מציין שב https://ssd.jpl.nasa.gov/?sat_elem הם לא מספקים נגזרות זמן כמו שהם עושים למסלולים הפלנטריים.
#2
+9
Mark Adler
2015-04-26 22:05:15 UTC
view on stackexchange narkive permalink

מכיוון שזה רק משחק, האם היית שמח עם מסלולים מעגליים ומסלולי כוכבי הלכת המושפעים רק מהגוף המרכזי? במקרה כזה, ההפצה היא די פשוטה. במישור המסלול עם הגוף המרכזי ב (0,0), המיקום כפונקציה של זמן הוא:

$$ x (t) = a \ cos \ שמאל ({2 \ pi \ שמאל (t-t_0 \ ימין) \ מעל T} \ ימין) $$

$$ y (t) = a \ sin \ left ({2 \ pi \ left (t-t_0 \ right) ) \ מעל T} \ right) $$

כאשר $ a $ הוא הציר העיקרי למחצה, או באמת רק רדיוס המסלול במקרה זה, $ T $ הוא תקופת המסלול ו- $ t_0 $ קובע את שלב המסלול, כאשר $ t = t_0 $, כוכב הלכת נמצא על ציר ה- x בצד החיובי.

כדי להפוך את מסלולי כוכבי הלכת השונים בקנה אחד עם השני, אתה פשוט צריך להגדיר את $ GM $ של הגוף המרכזי, אותו אנו מכנים $ \ mu $. ואז עבור כל רדיוס מסלול $ a $, תקופת המסלול קשורה ל- $ a $ על ידי:

$$ T = 2 \ pi \ sqrt {a ^ 3 \ over \ mu} $$

#3
+5
lamont
2018-10-18 01:22:34 UTC
view on stackexchange narkive permalink

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


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

הפתרונות הטובים ביותר לכך יהיו ככל הנראה השיטה של ​​גודייר:

W. גודייר, "פיתרון טופס סגור כללי לחלוטין עבור קואורדינטות ונגזרים חלקיים לבעיית שני הגופים", כתב העת האסטרונומי, כרך א '. 70, מס '3, 1965, עמ' 189–192 (או מסמך נאס"א NTRS TD על אותו חומר)

שיטתו של שפרד:

שפרד , SW מכניקה שמימית (1985) 35: 129. https://doi.org/10.1007/BF01227666

או Danby-Stumpff:

Danby, J.M.A. מכניקה שמימית (1987) 40: 303. https://doi.org/10.1007/BF01235847

יש כאן קוד MATLAB כאן שעשוי להיות שימושי (ונגיש הרבה יותר), אם כי קטעי קוד אקראיים ב- matlabcentral רחוקים מלהיות מובטחים ללא תקלות ונראה שקוד זה עלול לחסר נורמליזציה שימושית של התשומות שלו (בדרך כלל תרצה לנרמל את המידה שלך הבעיה כך שתעשה מתמטיקה ביחידות בהן r0-bar = 1.0 ו- mu-bar = 1.0 ואיפה v-bar = 1 הוא המהירות במסלול מעגלי ב- r0 או משהו כזה).

אם אתה מתכוון לבצע אינטגרציה של גוף N של תנועה פלנטרית אז אני חושב שתצטרך להשתמש באינטגרציה מספרית. Runge-Kutta יפר את החיסכון באנרגיה ולכן סביר להניח שתרצו להשתמש ב שילוב סימפלקטי. המשלב הסימפטי מסדר רביעי במאמר זה לא כל כך קשה לקודד - אם כי זה משאיר אתכם בקושי לנחש את הזמן הנכון (שוב, נורמליזציה עוזרת מכיוון שמסלול פלנטרי מעגלי ו- LEO מעגלי הם אותה בעיה רק ​​עם סולמות מרחק שונים. ) ועם אינטרפולציה של נקודות הפנים (ואתה צריך להיזהר מהתופעה של Runge, אבל לא נאבקתי בזה, אז לא יודע איזו גישה לנקוט שם).

אם אתה מתכוון להשתמש ב- Runge-Kutta אז Dormand-Prince עם צד מדרגות דינמי והאינטרפולנט של הסדר השלישי שלה יהיה נוח מאוד, וזה מה שמטלב משתמש בו בפותר ה- ode45 שלו.

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

זו תשובה נהדרת ומאוד מועילה לשאלה ישנה. תודה על המקורות המצוינים; אני הולך לחפש את אלה בימים הקרובים.
כן, עבדתי עם שיעור המסלול של KSP במשך שנים, ויודע שמשהו על פרינסיפיה בנוי. אני ממליץ בחום לכל מי שיוצא לבנות משחק, במיוחד אם אתה לא רק רוצה לשכפל את KSP אלא לנסות לבנות משהו טוב יותר, שהנושאים האלה יחשבו על כך בפירוט מעט יותר. נראה כאילו מיהרתי אתמול ופספסתי את "המסלולים [הפלנטריים] האלה הם סטטיים", כך שאולי כל הקשקושים שלי לגבי שיטות גוף N ו- Runge-Kutta היו מיותרים, אבל לאנשים אחרים שמוצאים את השאלה הזו אכפת להם. והפתרון של גודייר עדיין מכה על מחלקת האורביט של KSP במהירות.
(הפתרונות האחרים אחרי הפיתרון של גודייר עשויים להיות מהירים עוד יותר, פשוט אין לי ניסיון עם אלה)
אשמח לקרוא את אלה, אך הם נשכרים בתשלום. אבדוק אותם בפעם הבאה שאגיע לספרייה.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...