שיטת ניוטון-רפסון

שיטת ניוטון-רפסון (או כלל ניוטון) היא אלגוריתם יעיל באנליזה נומרית, למציאת שורשים של פונקציה ממשית כלשהי, דהיינו נקודות בהן הפונקציה מתאפסת. השיטה פותחה באופן בלתי תלוי בידי אייזק ניוטון וג'וזף רפסון. השיטה מבוססת על הרעיון הבא: בהינתן פונקציה שאת השורש שלה אנחנו מחפשים, ואנו מגבילים את עצמנו לתחום בו יש לפונקציה רק שורש אחד, אם נבחר נקודה קרובה לשורש, השורש של המשיק לפונקציה באותה נקודה יהיה קרוב יותר לשורש שאנו מחפשים. בכל איטרציה של הלולאה, יתקבל קירוב טוב יותר ויותר. סדר הפעולות בשיטת ניוטון רפסון הוא: בחירת נקודה קרובה לשורש המבוקש. חישוב שיפוע המשיק לפונקציה בנקודה זו; זוהי הנגזרת של הפונקציה באותה נקודה. חישוב משוואת המשיק באמצעות גאומטריה אנליטית. מציאת שורש המשיק, כלומר הנקודה בה המשיק חותך את ציר ה-x. אם בחירת הנקודה ההתחלתית הייתה טובה, הנקודה החדשה שהתקבלה קרובה יותר ממנה לשורש, ויש לחזור על התהליך עם הנקודה החדשה כנקודת ההתחלה. אם לא, הנקודה המתקבלת תחרוג מהתחום הנידון. תחת תנאים מסוימים ניתן להבטיח שהשיטה תעבוד היטב, גם עבור נקודות התחלתיות רחוקות מאוד מהשורש. תהי f : [ a , b ] → R {\displaystyle f:[a,b]\rightarrow \mathbb {R} } פונקציה גזירה בקטע [ a , b ] {\displaystyle [a,b]} . נתחיל את האיטרציה מהנקודה x 0 {\displaystyle x_{0}} . שיפוע המשיק לפונקציה בנקודה זו הוא f ′ ( x 0 ) {\displaystyle f'\left(x_{0}\right)} . אם כך, אנחנו מחפשים את משוואת הישר שעובר דרך הנקודה ( x 0 , f ( x 0 ) ) {\displaystyle \left(x_{0},f(x_{0})\right)} ושיפועו f ′ ( x 0 ) {\displaystyle f'\left(x_{0}\right)} . זהו למעשה הקירוב הליניארי לפונקציה   f {\displaystyle \ f} בנקודה x 0 {\displaystyle x_{0}} . על פי הגאומטריה האנליטית נקבל שמשוואה זו היא y − f ( x 0 ) = f ′ ( x 0 ) ( x − x 0 ) {\displaystyle y-f(x_{0})=f'\left(x_{0}\right)(x-x_{0})} . מאחר שאנו מחפשים את החיתוך של ישר זה עם ציר x {\displaystyle x} , נציב y = 0 {\displaystyle y=0} ונקבל, לאחר העברת אגפים: x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) {\displaystyle x_{1}=x_{0}-{\frac {f(x_{0})}{f'(x_{0})}}} כאשר x 1 {\displaystyle x_{1}} הוא נקודת החיתוך המבוקשת. נסתכל כעת בסדרה { x n } n = 0 ∞ {\displaystyle \left\{x_{n}\right\}_{n=0}^{\infty }} המוגדרת רקורסיבית על ידי x n + 1 = x n − f ( x n ) f ′ ( x n ) {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}} סדרה זו מתכנסת לשורש המבוקש, בהינתן בחירה מתאימה של x 0 {\displaystyle x_{0}} . נראה כיצד ניתן להשתמש בשיטה זו כדי לחשב בקלות שורשים. נניח כי אנו רוצים לחשב את a {\displaystyle {\sqrt {a}}} עבור a > 0 {\displaystyle a>0} כלשהו. מספר זה הוא השורש החיובי של הפונקציה f ( x ) = x 2 − a {\displaystyle f(x)=x^{2}-a} . נגזור ונקבל f ′ ( x ) = 2 x {\displaystyle f'(x)=2x} . בתור אבר ראשון באיטרציה נבחר את a {\displaystyle a} עצמו (ניתן להוכיח כי בבחירה זו מובטח שהשיטה תיתן את הפתרון). כלומר, נביט בסדרה { x n } n = 0 ∞ {\displaystyle \left\{x_{n}\right\}_{n=0}^{\infty }} המוגדרת כך: x 0 = a {\displaystyle x_{0}=a} x n + 1 = x n − f ( x n ) f ′ ( x n ) = x n − x n 2 − a 2 x n = x n − x n 2 + a 2 x n = x n 2 + a 2 x n {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}=x_{n}-{\frac {x_{n}^{2}-a}{2x_{n}}}=x_{n}-{\frac {x_{n}}{2}}+{\frac {a}{2x_{n}}}={\frac {x_{n}}{2}}+{\frac {a}{2x_{n}}}} בעזרת משוואה זו, ניתן לחשב תוך לכל היותר 10 איטרציות ערך מדויק עד 10 ספרות אחרי הנקודה של כל מספר עד 1,000. במספר איטרציות גדול יותר, השיטה עובדת עבור כל מספר ממשי חיובי. נדגים עבור 2 {\displaystyle {\sqrt {2}}} : x 0 = 2 {\displaystyle x_{0}=2} x 1 = 2 2 + 2 4 = 3 2 = 1.5 {\displaystyle x_{1}={\frac {2}{2}}+{\frac {2}{4}}={\frac {3}{2}}=1.5} x 2 = 3 2 2 + 2 6 2 = 17 12 = 1.416666667 {\displaystyle x_{2}={\frac {\frac {3}{2}}{2}}+{\frac {2}{\frac {6}{2}}}={\frac {17}{12}}=1.416666667} x 3 = 17 12 2 + 2 34 12 = 1 169 408 = 1.414215686 {\displaystyle x_{3}={\frac {\frac {17}{12}}{2}}+{\frac {2}{\frac {34}{12}}}=1{\frac {169}{408}}=1.414215686} x 4 = 1.414213562 {\displaystyle x_{4}=1.414213562} בתוך ארבע איטרציות הושג דיוק של 10 ספרות אחרי הנקודה. לפעמים נוח יותר להוציא גורם משותף של חצי, ולהתייחס לחישוב כאל ממוצע בין שני ערכים, דבר שגם מסביר אינטואיטיבית את החישוב. דוגמה נוספת, מעט יותר מסובכת:   f ( x ) = x x − 2 = e x ln ⁡ x − 2 {\displaystyle \ f(x)=x^{x}-2=e^{x\ln x}-2} : הנגזרת היא:   ( ln ⁡ x + 1 ) e x ln ⁡ x {\displaystyle \ (\ln x+1)e^{x\ln x}} . נסמן: x 0 = 2 {\displaystyle x_{0}=2} x 1 = 2 1 − 2 6.77 = 1.704691945 {\displaystyle x_{1}={\frac {2}{1}}-{\frac {2}{6.77}}=1.704691945} x 2 = 1.704 1 − 0.48 3.8 = 1.577944557 {\displaystyle x_{2}={\frac {1.704}{1}}-{\frac {0.48}{3.8}}=1.577944557} x 3 = 1.5779 1 − 0.0538 2.99 = 1.559924538 {\displaystyle x_{3}={\frac {1.5779}{1}}-{\frac {0.0538}{2.99}}=1.559924538} x 4 = 1.5599 1 − 0.000907 2.89 = 1.559610563 {\displaystyle x_{4}={\frac {1.5599}{1}}-{\frac {0.000907}{2.89}}=1.559610563} ושוב, לאחר ארבע איטרציות בלבד הושג דיוק של 10 ספרות אחרי הנקודה. עבור פונקציות מסוימות, ניתן להוכיח ששיטת ניוטון-רפסון תתכנס לפתרון המבוקש, בהתחשב בנגזרת הראשונה והשנייה: תהא f ( x ) {\displaystyle f(x)} גזירה פעמיים ברציפות בקטע [ a , b ] {\displaystyle [a,b]} , יש לה שורש יחיד בקטע זה - c {\displaystyle c} , ונניח שהנגזרת והנגזרת השנייה אינן משנות סימן בקטע. אם כל הערכים ( x 0 − c ) , f ′ ( x ) , f ″ ( x ) {\displaystyle (x_{0}-c),f'(x),f''(x)} הם חיוביים, או ששניים מהם שליליים והשלישי חיובי, אז האיטרציה מתכנסת לפתרון. במקרים אלו ניתן גם לתחום את גודל השגיאה, על ידי אי השוויון | x n + 1 − c | ≤ M 2 m ( x n + 1 − x n ) 2 {\displaystyle |x_{n+1}-c|\leq {\frac {M}{2m}}(x_{n+1}-x_{n})^{2}} כאשר M = sup a < x < b | f ″ ( x ) | , m = inf a < x < b | f ′ ( x ) | {\displaystyle M=\sup _{a<x<b}|f''(x)|,\,m=\inf _{a<x<b}|f'(x)|} . ההוכחה מתבססת על שימוש בטור טיילור מסדר שני. נראה אותה עבור המקרה הראשון - עבור שאר המקרים הרעיון זהה. תהי { x n } n = 0 ∞ {\displaystyle \left\{x_{n}\right\}_{n=0}^{\infty }} הסדרה המתקבלת מאיטרצית ניוטון. נניח כי x n > c {\displaystyle x_{n}>c} . כעת נפתח את טור טיילור של f {\displaystyle f} סביב x n {\displaystyle x_{n}} , עם טעות מסדר שני: 0 = f ( c ) = f ( x n ) + f ′ ( x n ) ( c − x n ) + f ″ ( ξ ) 2 ( c − x n ) 2 = {\displaystyle 0=f(c)=f(x_{n})+f'(x_{n})(c-x_{n})+{\frac {f''(\xi )}{2}}(c-x_{n})^{2}=} = f ′ ( x n ) ( c − x n + f ( x n ) f ′ ( x n ) ) + f ″ ( ξ ) 2 ( c − x n ) 2 = {\displaystyle =f'(x_{n})\left(c-x_{n}+{\frac {f(x_{n})}{f'(x_{n})}}\right)+{\frac {f''(\xi )}{2}}(c-x_{n})^{2}=} כעת נשתמש בהגדרת הסדרה { x n } n = 0 ∞ {\displaystyle \left\{x_{n}\right\}_{n=0}^{\infty }} ונקבל: = f ′ ( x n ) ( c − x n + 1 ) + f ″ ( ξ ) 2 ( c − x n ) 2 = 0 {\displaystyle =f'(x_{n})(c-x_{n+1})+{\frac {f''(\xi )}{2}}(c-x_{n})^{2}=0} נעביר אגפים: f ′ ( x n ) ( x n + 1 − c ) = f ″ ( ξ ) 2 ( c − x n ) 2 {\displaystyle f'(x_{n})(x_{n+1}-c)={\frac {f''(\xi )}{2}}(c-x_{n})^{2}} כעת נזכור כי על פי הנתון f ″ ( x ) > 0 {\displaystyle f''(x)>0} ולכן הביטוי באגף ימין חיובי. מכאן כי גם הביטוי באגף שמאל חייב להיות חיובי. על פי הנתון, f ′ ( x ) > 0 {\displaystyle f'(x)>0} ולכן בהכרח מתקיים: x n + 1 − c > 0 {\displaystyle x_{n+1}-c>0} כלומר x n + 1 > c {\displaystyle x_{n+1}>c} הראינו שהסדרה חסומה מלרע על ידי c {\displaystyle \,c} . כעת נראה שזו סדרה יורדת: על פי הנוסחה ידוע כי x n + 1 = x n − f ( x n ) f ′ ( x n ) {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}} . הנגזרת חיובית, כלומר הפונקציה עולה בקטע, ומאחר ש- x n > c {\displaystyle x_{n}>c} הרי ש- f ( x n ) > f ( c ) = 0 {\displaystyle f(x_{n})>f(c)=0} ולכן f ( x n ) f ′ ( x n ) > 0 {\displaystyle {\frac {f(x_{n})}{f'(x_{n})}}>0} ומכאן שמתקיים x n + 1 < x n {\displaystyle x_{n+1}<x_{n}} . הראינו שהסדרה יורדת. משפט בסיסי באנליזה קובע כי סדרה יורדת וחסומה מלרע מתכנסת לגבול. אם כן, נסמן lim n → ∞ x n = L {\displaystyle \lim _{n\to \infty }x_{n}=L} . אז מתקיים: lim n → ∞ x n = lim n → ∞ x n + 1 {\displaystyle \lim _{n\to \infty }x_{n}=\lim _{n\to \infty }x_{n+1}} ולכן L = L − f ( L ) f ′ ( L ) {\displaystyle L=L-{\frac {f(L)}{f'(L)}}} ונקבל מיידית f ( L ) = 0 {\displaystyle f(L)=0} . מכיוון ש- c {\displaystyle c} הוא השורש היחיד בקטע, L = c {\displaystyle L=c} . הראינו שהסדרה מתכנסת אל השורש המבוקש. נפתח הפעם את טור טיילור של x n + 1 {\displaystyle x_{n+1}} סביב הנקודה x n {\displaystyle x_{n}} : f ( x n + 1 ) = f ( x n ) + f ′ ( x n ) ( x n + 1 − x n ) + f ″ ( ξ ) 2 ( x n + 1 − x n ) 2 = {\displaystyle f(x_{n+1})=f(x_{n})+f'(x_{n})(x_{n+1}-x_{n})+{\frac {f''(\xi )}{2}}(x_{n+1}-x_{n})^{2}=} = f ′ ( x n ) ( x n + 1 − x n + f ( x n ) f ′ ( x n ) ) + f ″ ( ξ ) 2 ( x n + 1 − x n ) 2 = {\displaystyle =f'(x_{n})\left(x_{n+1}-x_{n}+{\frac {f(x_{n})}{f'(x_{n})}}\right)+{\frac {f''(\xi )}{2}}(x_{n+1}-x_{n})^{2}=} = f ′ ( x n ) ( x n + 1 − x n + 1 ) + f ″ ( ξ ) 2 ( x n + 1 − x n ) 2 = f ″ ( ξ ) 2 ( x n + 1 − x n ) 2 {\displaystyle =f'(x_{n})(x_{n+1}-x_{n+1})+{\frac {f''(\xi )}{2}}(x_{n+1}-x_{n})^{2}={\frac {f''(\xi )}{2}}(x_{n+1}-x_{n})^{2}} כעת, לפי משפט הערך הממוצע של לגראנז' קיימת η ∈ ( c , x n + 1 ) {\displaystyle \eta \in (c,x_{n+1})} המקיימת: f ( x n + 1 ) − f ( c ) x n + 1 − c = f ′ ( η ) {\displaystyle {\frac {f(x_{n+1})-f(c)}{x_{n+1}-c}}=f'(\eta )} וקיבלנו: x n + 1 − c = f ( x n + 1 ) f ′ ( η ) {\displaystyle x_{n+1}-c={\frac {f(x_{n+1})}{f'(\eta )}}} . כעת נציב את f ( x n + 1 ) {\displaystyle f\left(x_{n+1}\right)} : x n + 1 − c = f ″ ( ξ ) 2 f ′ ( η ) ( x n + 1 − x n ) 2 < M 2 m ( x n + 1 − x n ) 2 {\displaystyle x_{n+1}-c={\frac {f''(\xi )}{2f'(\eta )}}(x_{n+1}-x_{n})^{2}<{\frac {M}{2m}}(x_{n+1}-x_{n})^{2}} . ובכך הושלמה ההוכחה. בשנת 1879 פרסם המתמטיקאי ארתור קיילי לראשונה הכללה של השיטה לפונקציות מרוכבות. כאשר עוסקים בפונקציות מורכבות, ניתן ליישם ישירות את שיטת ניוטון כדי למצוא את האפסים שלהן. לכל אפס יש נקודת משיכה במישור המרוכב, קבוצת כל ערכי ההתחלה שגורמים לשיטה להתכנס לאפס המסוים הזה. ניתן למפות קבוצות כאלה כמו בתמונה המוצגת. עבור פונקציות מורכבות רבות, גבולות אגני המשיכה הם פרקטלים. במקרים מסוימים ישנם אזורים במישור המורכב שאינם נמצאים באף אחד מאגני המשיכה הללו, כלומר האיטרציות אינן מתכנסות. לדוגמה, אם משתמשים בתנאי התחלתי ממשי כדי לחפש שורש של x 2 + 1 {\displaystyle x^{2}+1} , כל האיטרציות הבאות יהיו מספרים ממשיים ולכן האיטרציות לא יכולות להתכנס לאף אחד מהשורשים, מכיוון ששני השורשים אינם ממשיים. במקרה זה כמעט כל התנאים ההתחלתיים האמיתיים מובילים להתנהגות כאוטית, בעוד שמצבים ראשוניים מסוימים חוזרים עד אינסוף או למחזורים חוזרים בכל אורך סופי. המתמטיקאי קורט מקמלן הראה כי לכל אלגוריתם איטרטיבי אפשרי טהור הדומה לשיטת ניוטון, האלגוריתם יתפצל בחלק מהאזורים הפתוחים של המישור המורכב כשהוא מיושם על פולינום כלשהו בדרגה 4 ומעלה. עם זאת, מקמולן נתן אלגוריתם מתכנס בדרך כלל לפולינומים בדרגה 3. ניתן להכליל את שיטת ניוטון-רפסון גם לשדות וקטורים על ידי החלפת השימוש בנגזרת לשימוש ביעקוביאן: בהינתן פונקציה וקטורית F : R k → R m {\displaystyle \mathbf {F} :\mathbb {R} ^{k}\to \mathbb {R} ^{m}} נרצה למצוא וקטור x {\displaystyle \mathbf {x} } כך ש- F ( x ) = 0 {\displaystyle \mathbf {F} (\mathbf {x} )=0} . כלומר, לפתור מערכת של m משוואות (לא בהכרח ליניאריות) ב-k נעלמים. אם k=m, נוכל לעשות זאת באמצעות כלל הנסיגה, x n + 1 = x n − ( J F ( x n ) ) − 1 F ( x n ) {\displaystyle x_{n+1}=x_{n}-\left(\mathbf {J} _{\mathbf {F} }(x_{n})\right)^{-1}\mathbf {F} (x_{n})} כאשר J F ( x n ) {\displaystyle \mathbf {J} _{\mathbf {F} }(\mathbf {x} _{n})} היא מטריצת היקוביאן של F {\displaystyle \mathbf {F} } בנקודה x n {\displaystyle \mathbf {x} _{n}} . אם m>k, מטריצת היעקוביאן בהכרח איננה הפיכה ולכן אין לה מטריצה הופכית. במקרה זה נחליף את המטריצה ההופכית בנוסחה לעיל במטריצה: J + = ( J T J ) − 1 J T {\displaystyle \mathbf {J} ^{+}=(\mathbf {J} ^{T}\mathbf {J} )^{-1}\mathbf {J} ^{T}} מטריצה זו מהווה תחליף טוב למטריצה ההופכית בהקשר זה. במקרים רבים, אופטימיזציה מצריכה מציאת נגזרת של פונקציה והשוואתה לאפס. דרך אחת לבצע זאת היא על ידי שיטת ניוטון-רפסון לנגזרת. במילים אחרות, תחת קיומה של נגזרת שנייה ל- f {\displaystyle f} ותנאים טכניים נוספים, הסדרה שמוגדרת על ידי כלל הנסיגה x n + 1 = x n − f ′ ( x n ) f ″ ( x n ) {\displaystyle x_{n+1}=x_{n}-{\frac {f'\left(x_{n}\right)}{f''\left(x_{n}\right)}}} מתכנסת לנקודת קיצון של f {\displaystyle f} . קיימת הרחבה גם של שיטה זו לממדים גבוהים יותר. יתרונה הגדול של שיטת ניוטון-רפסון הוא סדר ההתכנסות הריבועי. חסרונותיה העיקריים: השיטה לא תמיד מתכנסת. לא תמיד ניתן לחשב את הנגזרת ולעיתים החישוב מסורבל. כדי להתגבר על החסרון הראשון, משתמשים לעיתים בשיטה אחרת, המבטיחה התכנסות (למשל שיטת החצייה), כדי להגיע לסביבת השורש, ושם מפעילים את שיטת ניוטון-רפסון. אם לא ניתן לחשב את הנגזרת, או שחישוב הנגזרת גוזל משאבי חישוב, משתמשים בשיטת המיתר, שסדר ההתכנסות שלה הוא קרוב לזה של שיטת ניוטון-רפסון. כדי להתגבר על החסרון השני משתמשים בשיטות קוואזי-ניוטוניות כדוגמת שיטת ברוידן אשר דורשות חישוב יחיד של הנגזרת (או היעקוביאן) ולאחר מכן שיערוך של היעקוביאן בנקודה הבאה ע"פ הנקודה הנוכחית. שיטות מסוג זה נמצאות בשימוש רחב באלגוריתמי אופטימזציה ממוחשבים. אם השורש הוא בעל ריבוי גדול מ-1, השיטה תתכנס, אך קצב ההתכנסות לא יהיה ריבועי, אלא ליניארי (סדר ההתכנסות הוא 1). אם השורש הוא מסדר   m {\displaystyle \ m} השיטה האיטרטיבית המוגדרת על ידי x n + 1 = x n − m f ( x n ) f ′ ( x n ) {\displaystyle x_{n+1}=x_{n}-m{\frac {f(x_{n})}{f'(x_{n})}}} תתכנס, וקצב ההתכנסות יהיה ריבועי. מדיה וקבצים בנושא שיטת ניוטון-רפסון בוויקישיתוף שיטת ניוטון-רפסון, באתר MathWorld (באנגלית) שיטת ניוטון רפסון במחשבון, סרטון באתר יוטיוב Peter Henrici, Applied and Computational Complex Analysis, 1974 Gilbert Strang, A Chaotic Search for i, The College Mathematics Journal 22, 1991-01-01, עמ' 3–12 doi: 10.1080/07468342.1991.11973353 Curt McMullen, Families of Rational Maps and Iterative Root-Finding Algorithms, Annals of Mathematics 125, 1987, עמ' 467–493 doi: 10.2307/1971408