levmar

צילום מסך תוכנה:
levmar
פרטי תוכנה:
גרסה: 2.6
טען תאריך: 15 Apr 15
מפתחים: Manolis Lourakis
רשיון: ללא תשלום
פופולריות: 18

Rating: 5.0/5 (Total Votes: 1)

levmar הוא יישום קוי לבנברג-Marquardt אלגוריתמי ריבועים לפחות בC / C ++.

שגרת lmder מMinpack, מיושמת בתחילת שנתי ה -80 'במעבדה הלאומית האמריקנית הארגון, הוא אולי שימוש נרחב ביותר יישום חופשי של אלגוריתם LM. lmder כתוב בFORTRAN77 ובמשך השנים הוכיחה את עצמו פיסת התוכנה אמינה. בהתחשב בכך שניתן לקרוא רוטינות FORTRAN מC / C ++, אפשר לתהות על המוטיבציה לכתיבת גרסה של LM בג ובכן, הבעיה היא שכאשר FORTRAN נקרא מC, המתכנת צריך להיות מודע (ולהתאים ל ) כמה כללים לגבי השם mangling, חולף טיעון, פריסת מערך זיכרון רב-ממדית, אמנות הצמדה, וכו ', שהם לא טבעיים בהשוואה לכללי C רגילים. סיבה שנייה היא שגישה זו לוקחת כמובן מאליו שמהדר FORTRAN לתכנות בסביבת היעד נגיש, אשר עלול להיות לא בהכרח המקרה. סיבה נוספת קשורה לכישלון להבין את המנגנון הפנימי של יישום FORTRAN: מדי פעם, כאשר יש צורך להבין בדיוק מה קוד FORTRAN עושה, חלקים מסוימים שלו אולי נראים מובן למתכנתים ללא כל ידע של FORTRAN. FORTRAN האוטומטי למתרגמי C (למשל f2c) אינו פותר את הבעיה שכן קוד C מיוצר הוא די בלתי קריא לבני אדם "הדיוט". יתר על כן, תיעוד המתאר את המתמטיקה שעל היישום מבוסס עשויים להיות מעורפל או שאינו נגיש. ואחרון חביב, יישום LM המועמד בC צריך להיות חופשי וטכנית צליל. לדוגמא, גרסת C של אלגוריתם LM שהוצגה בספר "מתכונים מספריים" (כלומר mrqmin), לא תמיד בחירת קיימא: מלבד היותו מוגן בזכויות יוצרים שלו, הוא נחשב לחוסר חוסן

. מהסיבות הנ"ל, פיתחתי חבילת levmar הכוללת יישומי C של טעמי LM כי הם שמישים גם עם C ++. levmar כולל הטמעות כפולות ויחיד LM הדיוק, שניהם עם הבדל אנליטית וסופי מקורב Jacobians. הוא מסופק ללא תשלום, על פי תנאי הרישיון הציבורי הכללי של גנים. התאוריה המתמטית מאחורי levmar בלתי מוגבל מתוארת בפירוט בסיכומי הרצאות שיטות זכאיות לאינה ליניארי ריבועים פחותים בעיות, על ידי ק 'מדסן, HB נילסן וO. Tingleff, אוניברסיטה הטכנית של דנמרק; מימושי Matlab של האלגוריתמים שהוצגו בהרצאת ההערות זמינים גם. שים לב, עם זאת, ניסוחה של הבעיה המזעור אימצה כאן הוא מעט שונה מזה שתואר בסיכומי הרצאות השימוש של פונקצית

:.

Levmar מציע מספר פונקציות למשתמש callable מצייתות הבא יום אמנה: האות הראשונה (ד או ים) מציין דיוק כפול או בודד וסיומת (_der או _dif) מציין יעקוביאן אנליטית או מקורב. אם הווה, הבקר, bc ורכיבי blec לרמוז משוואה ליניארית, תיבה והתיבה בו זמנית ואילוצי משוואה ליניארית, בהתאמה. באופן ספציפי יותר, levmar כולל את הפונקציות הבאות:

אופטימיזציה מאולצת

dlevmar_der (): דיוק כפול, יעקוביאן אנליטית
dlevmar_dif (): דיוק כפול, הפרש סופי מקורב slevmar_der יעקוביאן
(): דיוק יחיד, slevmar_dif
יעקוביאן אנליטית (): דיוק יחיד, הפרש סופי מקורב יעקוביאן

אופטימיזציה מוגבלת

dlevmar_lec_der () : דיוק כפול, אילוצי משוואה ליניארית, יעקוביאן אנליטית
dlevmar_lec_dif (): דיוק כפול, אילוצי משוואה ליניארית, הפרש סופי מקורב slevmar_lec_der
יעקוביאן (): דיוק יחיד, אילוצי משוואה ליניארית
יעקוביאן אנליטית, slevmar_lec_dif (): דיוק יחיד, אילוצי משוואה ליניארית, הפרש סופי מקורב יעקוביאן

dlevmar_bc_der (): דיוק כפול, אילוצי תיבה, יעקוביאן אנליטית
dlevmar_bc_dif (): דיוק כפול, אילוצי תיבה, סופי הבדל מקורב slevmar_bc_der
יעקוביאן (): דיוק יחיד, אילוצי תיבה, slevmar_bc_dif
יעקוביאן אנליטית (): דיוק יחיד, אילוצי תיבה, הפרש סופי מקורב יעקוביאן

dlevmar_blec_der (): כפול דיוק, תיבה ואילוצי משוואה ליניארית, dlevmar_blec_dif אנליטית יעקוביאן
(): דיוק כפול, תיבה ואילוצי משוואה ליניארית, הפרש סופי מקורבים slevmar_blec_der
יעקוביאן (): דיוק יחיד, אילוצי תיבה ומשוואה ליניארית, יעקוביאן אנליטית
slevmar_blec_dif (): אילוצי דיוק יחיד, תיבה ומשוואה ליניארית, הפרש סופי מקורב יעקוביאן

שים לב ששימוש בהבדלים סופיים משוערות תוצאות יעקוביאן בהערכות חוזרות ונשנות של הפונקציה כדי להיות מצוידים. במטרה לצמצם את המספר הכולל של הערכות אלה, פונקציות xxxxxxx_dif ליישם קירובים חותכים ליעקוביאן באמצעות עדכוני הדרגה אחת של Broyden. כל הפונקציות לפתור את אותה בעיה, כלומר הם מבקשים p וקטור פרמטר שמתאר הטובים ביותר (במונחים של נורמת L2) x וקטור מדידות. לייתר דיוק, נתן פונקצית f וקטור: R ^ מ '-> R ^ n עם n> = מ', הם לחשב ap כך שf (p) ~ = x, כלומר הנורמה בריבוע דואר || || ^ 2 = | | XF (p) || ^ 2 ממוזער. כמו כן, אילוצי תיבה של lb הטופס [i]

מה חדש בהודעה זו:

  • גרסה זו מוסיפה תמיכה ל דרוג אלכסוני לxlevmar_bc_der (), אשר יכול לשפר את ההתכנסות בו נקודת המוצא היא רחוקה מminimizer האמיתי.
  • .
  • פותר מערכות ליניאריות תמיכה פירוק Cholesky מקביל עם פלזמה, ספריית האלגברה לינארית למעבדים מרובות ליבות
  • פותרי Linear תוקנו, כך שהם פועלים על משולשים התחתונים של מטריצות סימטריות, וכתוצאה מכך ביצועים טובים יותר מטמון.
  • קבצי תצורת CMake לבניית הפרויקט עודכנו.
  • כמה שינויים קלים אחרים נעשו.

מה חדש בגרסת 2.5:

  • זהירות עבור משתמשי גרסות הקודם: לעקביות ולהימנעות מטובות יותר קונפליקטים, את שמו של קובץ הכותרת של levmar שונה מlm.h לlevmar.h; אנא עדכן את קבצי המקור שלך בהתאם.
  • תמיכה נוסף למזעור תחת תיבה בו זמנית, אילוצי משוואה ואי-שוויון ליניארי (ראה xlevmar_bleic_der פונקציות () וxlevmar_bleic_dif ()).
  • עטיפות נוחות מיושם לxlevmar_bleic_der () וxlevmar_bleic_dif () העוסק במקרים פשוטים יותר מוגבלים, למשל xlevmar_blic_der () וxlevmar_blic_dif () מזעור תמיכה תחת תיבה ואילוצים אי שוויון ליניארי בלבד.
  • נוסף פותר מערכות ליניאריות מבוסס על פירוק UDUt (כלומר, ללא sqrt Cholesky).
  • הוסר חלק העתקת זיכרון מיותר מרוב הפותרים ליניארי.
  • נוסף בעיה הולמת נתונים חדש מבחן (אוסבורן).
  • עשה כמה שינויים קלים אחרים.

מה חדש בגרסת 2.4:

  • זהירות עבור משתמשי גרסות הקודם: גודלו של ויכוח המידע (כלומר, LM_INFO_SZ) הוגדל על ידי אחד כדי להכיל שדה החזר חדש (כלומר, מידע [9]) שמתאים למספר הכולל של מערכות ליניאריות פתרה במהלך המזעור. המדדים של שדות חזרו בעבר במערך המידע יישארו ללא שינוי.
  • מיושם תכנית מטמון יעיל יותר לחישוב J הסיאן המשוער ^ T * J and J ^ T * e לבעיות מזעור קטנות בגודל.
  • הבטיח כי כל זיכרון עבודה נשמרים בין התפילות של פותרי יניארי הוא שוחרר עם סיום שגרת levmar.
  • הבטיח כי פותרי יניארי להעסיק את הסכום הנדרש המינימאלי של זיכרון עזר, הימנעות מזדמנת-על הקצאות.
  • מיושם תכנית נפרשת לולאה לזירוז חישוב e = x-HX.
  • קבועים כמה בעיות עם יישור זיכרון על 64 מערכות קצת.
  • הוספת פונקציות לחישוב מקדם של נחישות.
  • עסק בכמה בעיות שוליות.

תוכנה דומה

ATLAS
ATLAS

17 Feb 15

TRIP
TRIP

20 Feb 15

Lolimot
Lolimot

2 Jun 15

NetworkX
NetworkX

20 Feb 15

תגובות ל levmar

תגובות לא נמצא
להוסיף הערה
הפעל את התמונות!