עד כה ראינו כל מיני כלים כמו LU,QR,SVD וכדומה והנחנו תמיד כי הנתונים עליהם אנו עובדים מושלמים ובנוסף החישובים להם נדרש יעשו בצורה מושלמת.
בפרק זה נראה כי לא כך הדבר באמת ונראה כיצד נוכל להתמודד עם זה.
הערה
בפרק זה לא נעסוק בחקר של השפעת שגיאות נומריות על פירוקים כגון QR או LU כי ניתוחם מורכב למדיי.
כחלופה, בפרק זה נתבונן בבעיות יסודיות יותר שמאפשרות ניתוח מלא.
בבניית אלגוריתם לפתרון בעיה כלשהי, עלינו להיות מודעים לאפשרות של קיומן של שגיאות נומריות. יש לבחון את הפתרון המוצע על מנת לוודא ששגיאות אלו זניחות ואם השגיאות אינן זניחות אנו נרצה לחפש דרכים עוקפות להשגת הפתרון שיקטינו שאת השגיאות הנומריות הללו.
יצוג מספרים במחשב והערכת שגיאות
בעבודה עם מחשב נשתמש תמיד באורך מילה סופי ולאור הייצוג הסופי שאנו כופים על מספרים יכולות להיות שגיאות.
לא נתעסק פה בייצוג הבינארי(זה נשאר לספרתיות ואת"ם) ולכן נניח פשוט שהמספרים שלנו נתונים בייצוג סופי בבסיס עשרוני.
הגישה הפשוטה ביותר שעולה על הדעת לייצוג מספרים היא שיטת הנקודה הקבועה אשר בה כל מספר מיוצג ע"י אוסף של t=n+k+1 הספרות העשרוניות הבאות:
(±1)dkdk−1dk−2…d1d0.d−1d−2d−3…d−n
פה הנקודה קבועה במקומה ולא יכולה לזוז.
שיטת הנקודה הקבועה מאוד פשוטה אבל חישובים רבים צפויים להיתקל בבעיות.
דוגמה
במחשב שלנו n=2,k=4 ונניח שעלינו לחשב את הפעולה 45632.25⋅65421.12.
התוצאה הנכונה היא 2985312903.12 אלא שמספר זה חור מהתחום האפשרי לייצוג במחשב שלנו ולכן התוצאה שתוצג תהיה למעשה 99999.99 כי זה המספר הגדול ביותר האפשרי להצגה והכי קרוב לתוצאה הנכונה.
על מנת לפתור חלק מהבעיות נסתכל על שיטת הנקודה הצפה אשר לה יש כמה חלקים:
מנטיסה עם (±1)d0.d−1d−2…d−n.
אקספוננט עם (±1)emem−1…e1e0.
כך שנקבל:
(±1)d0.d−1d−2…d−n⋅10(±1)emem−1…e1e0
האפקט המתקבל בגישה החדשה הוא הזזת הנקודה ימינה ושמאלה והדבר מוביל להגדלת טווח הערכים בצורה משמעותית.
הגדרה 1 (שגיאה מוחלטת ויחסית)
בהינתן x=0 וערכו המקורב x~, השגיאה המוחלטת והשגיאה היחסית של x יוגדרו כך:
Δx=x−x~שגיאה מוחלטת:rx=xΔxשגיאה יחסית:
הערה
בדרך כלל נתייחס לערך המוחלט של שגיאות אלה.
דוגמה
נניח כי נתון לנו הערך x=0.23875 ואנו נדרשים לייצג אותו עם n=3 ספרות מימין לנקודה ע"י העגלה ⟸ x~=0.239.
בהעגלה שכזו, השגיאה המוחלטת חסומה ע"י ∣Δx∣=2.5⋅10−4<5⋅10−4.
במקרה הכללי שגיאה זו חסומה ע"י ∣Δx∣≤5⋅10−(n+1).
נשים לב כי אם אנו מתקרבים לאפס, השגיאה הולכת ל-∞.
אם נניח כי dk≥1 אזי ∣x∣≥10k ואז החסם על השגיאה היחסית יהיה:
rx=xΔx≤10k5⋅10−(n+1)=5⋅10−n−1−k=5⋅10−t
דוגמה
נניח כי בידינו וקטור x באורך N ורצוננו לחשב את הנורמה האוקלידית של וקטור זה ∥x∥2.
נתון שערכי x שגויים ומתקיים שסטייתם δxk מקיימת ∣δxk∣≤ε.
לכן נקבל כי השגיאה האבסולוטית הינה ε∥x∥2∥x∥1. נשים לב כי פה אנו לא רגישים לכפל בסקלר של הוקטור.
השגיאה יחסית תהיה ε∥x∥22∥x∥1. נשים לב כי הביטוי הזה כן רגיש לכפל בסקלר של הוקטור.
דוגמה
נסתכל על אוסף מספרים קטנים וחיוביים ונרצה לסכום אותם.
המספרים שמורים בשיטת הנקודה הצפה כאשר k=0,n=4,m=10.
אם היינו עושים זאת בשיטה הצפויה, כלומר:
double S = 0;
for (int k = 1; k <= N; k++)
{
S += x[k];
}
נניח כי N מאוד גדול וכי 0<xk<1.
בחישוב זה תתעורר בעיה, עם הצטברות הסכום S תדרש העגלה לאיברים המצטרפים ותצטבר שגיאה משמעותית. למשל:
Sn+1=Sn+xn=243.32+0.56872=243.88
הפתרון שהוצע להתמודדות עם השגיאה המצטברת הוצע ע"י Kahan והוא:
double S = 0, err = 0;
for (int k = 1; k <= N; k++)
{
Stemp = S+x[k]+err;
err = err + x[k]+S-Stemp;
S = Stemp;
}
שגיאות בפתרון מערכת משוואות
נתמקד כעת בבעיה מסויימת ודרכה נמחיש את הרגישות לשגיאות נומריות. אנו נדון בפתרון מערכת המשוואות Ax=b.
אנו יודעים כי החישובים שלנו מושלמים, אך במקום לקבל את {A,b} אנו מקבלים גרסה "רועשת" שלו {A~,b~}={A+δA,b+δb}.
הערה
δA היא מטריצה שונה ולא הכפלה של סקלר δ ב-A.
כלומר, δA∈Rn×m ו-δ לבדו לא קיים.
אנחנו נלך לפתור עם A~,b~ ונראה מה תהיה השגיאה ב-x.
(A+δA)(x+δx)=b+δb
אנו נרצה להגיד כי השגיאה חסומה ולמצוא את החסם הזה.
נפתח תחילה את הסוגריים תוך שאנו מניחים כי δAδx מתבטל שכן הכפלה של שתי שגיאות שונה בסדר גודל עד כדי שהיא לא משנה.
זה יהיה החסם העליון על השגיאה שהוא תלוי בשגיאה היחסית של A והשגיאה היחסית של b והן מוכפלות באיזושהי תכונה מוזרה של A.
נשים לב כי ∥∣A∣∥2=σ1 ו-∥∣A−1∣∥2=σn1 ולכן:
כעת, נניח כי δb=0 ולכן אנו שוגים אך ורק ב-A. כלומר, המשוואה שלנו היא δAx=b ולכן כעת מתקיים:
∥x∥∥δx∥≤∥∣A∣∥∥∣δA∣∥κ{A}
נשאל את עצמנו כעת מהו הוקטור b הגרוע ביותר שיכול להיות? כלומר, מיהו b שיוביל לשגיאה הגדולה ביותר האפשרית בפתרון המקורב.
שתי הפתרונות נתונים ע"י x=A−1b∧x^=(A+δA)−1b ולכן:
כאשר M1,M2 מטריצות חיוביות חצי מוגדרות.
זוהי בדיוק בעיית ע"ע מוכללת קלאסית ופתרונה הוא הו"ע המוכלל בעל הערך העצמי הגבוה ביותר וזה יהיה הוקטור b שייתן את המקסימום עבור הביטוי הזה.
שגיאה בחישוב ע"ע וו"ע
כעת נרצה למצוא ע"ע למטריצה A אך קיבלנו את A+δA.
נניח כי A סימטרית וכך גם δA.
נשאל כעת מהי הסטייה הצפויה בע"ע ובו"ע כתוצאה מהשגיאה בהנחה שהפתרון מחושב בדיוק מושלם?