שיטת המיתר

באנליזה נומרית, שיטת המיתר היא שיטה איטרטיבית למציאת שורשים של פונקציה רציפה של משתנה אחד. שיטה זו דומה לשיטת ניוטון-רפסון למציאת שורשים. בשיטת ניוטון-רפסון יש צורך בנגזרת הפונקציה בנקודה האחרונה. שיטת המיתר מקרבת את הנגזרת על ידי שיפוע המיתר המחבר את שתי הנקודות האחרונות שחושבו, ומכאן שמה. סדר ההתכנסות של השיטה נמוך יותר מזה של שיטת ניוטון-רפסון: בשיטת ניוטון-רפסון הסדר הוא 2, ואילו בשיטת המיתר, הסדר הוא יחס הזהב (1.618 לערך). יתרונה של שיטת המיתר היא בכך שהיא אינה משתמשת בנגזרת: אם הנגזרת אינה ידועה, או שחישובה גוזל משאבי חישוב רבים, שיטת המיתר מתכנסת מהר יותר. ניקח שני ערכים התחלתיים, x 0 {\displaystyle \,x_{0}} ו- x 1 {\displaystyle \,x_{1}} , הקרובים יחסית לשורש המבוקש. נבנה את הישר העובר דרך הנקודות ( x 0 , f ( x 0 ) ) {\displaystyle \,(x_{0},f(x_{0}))} ו- ( x 1 , f ( x 1 ) ) {\displaystyle \,(x_{1},f(x_{1}))} . משוואת הישר היא: y = f ( x 1 ) − f ( x 0 ) x 1 − x 0 ( x − x 1 ) + f ( x 1 ) . {\displaystyle y={\frac {f(x_{1})-f(x_{0})}{x_{1}-x_{0}}}(x-x_{1})+f(x_{1}).} נבחר את x 2 {\displaystyle \,x_{2}} , הערך הבא באיטרציה, להיות החיתוך של ישר זה עם ציר ה-x. x 2 = x 1 − f ( x 1 ) x 1 − x 0 f ( x 1 ) − f ( x 0 ) {\displaystyle x_{2}=x_{1}-f(x_{1}){\frac {x_{1}-x_{0}}{f(x_{1})-f(x_{0})}}} כעת נבנה ישר בין הנקודות ( x 1 , f ( x 1 ) ) {\displaystyle \,(x_{1},f(x_{1}))} ו- ( x 2 , f ( x 2 ) ) {\displaystyle \,(x_{2},f(x_{2}))} , נחפש את החיתוך שלו בציר ה-x וכן הלאה. התהליך מוגדר בנוסחת הנסיגה הבאה: x n = x n − 1 − f ( x n − 1 ) x n − 1 − x n − 2 f ( x n − 1 ) − f ( x n − 2 ) {\displaystyle x_{n}=x_{n-1}-f(x_{n-1}){\frac {x_{n-1}-x_{n-2}}{f(x_{n-1})-f(x_{n-2})}}} ככל שנחשב יותר איטרציות של נוסחת הנסיגה, כך נקבל ערך קרוב יותר לערך השורש האמיתי. השיטה לא תמיד מתכנסת, אך אם הפונקציה f {\displaystyle \,f} רציפה וגזירה, הערכים ההתחלתיים x 0 {\displaystyle \,x_{0}} ו- x 1 {\displaystyle \,x_{1}} קרובים מספיק לשורש, והשורש הוא שורש פשוט (כלומר נגזרתה של f {\displaystyle \,f} לא מתאפסת באותה נקודה), אזי ניתן להראות כי השיטה מתכנסת לשורש של הפונקציה f {\displaystyle \,f} . סדר ההתכנסות הוא יחס הזהב φ {\displaystyle \,\varphi } , כאשר φ = 1 + 5 2 ≈ 1.618 {\displaystyle \varphi ={\frac {1+{\sqrt {5}}}{2}}\approx 1.618} . להלן קוד בשפת C אשר מיישם את שיטת המיתר. הקוד נכתב בדגש על בהירות ולא על יעילות. הבעיה: למצוא את המספר החיובי x {\displaystyle \,x} המקיים   x 3 = cos ⁡ ( x ) {\displaystyle \ x^{3}=\cos(x)} . הבעיה מומרת לבעיית מציאת שורש של הפונקציה   f ( x ) = x 3 − cos ⁡ ( x ) {\displaystyle \ f(x)=x^{3}-\cos(x)} . בקוד הרשום מטה, שיטת המיתר ממשיכה כל עוד מתקיימים שני התנאים הבאים: | x n + 1 − x n | < e {\displaystyle \,|x_{n+1}-x_{n}|<e} n < m {\displaystyle \,n<m} כאשר e {\displaystyle \,e} הוא קבוע (השגיאה המקסימלית המותרת), n {\displaystyle \,n} הוא מספר האיטרציה ו- m {\displaystyle \,m} הוא חסם על מספר האיטרציות. #include <stdio.h> #include <math.h> double f(double x) { return x*x*x - cos(x); } double SecantMethod(double xn_1, double xn, double e, int m) { int n; double d; for (n = 1; n <= m; n++) { d = (xn - xn_1) / (f(xn) - f(xn_1)) * f(xn); if (fabs(d) < e) return xn; xn_1 = xn; xn = xn - d; } return xn; } int main(void) { printf("%0.15f\n", SecantMethod(0, 1, 5E-11, 100)); return 0; } אחרי הרצה של הקוד התוצאה הסופית תהיה 0.865474033101614. הערכים המתקבלים הם: x 0 = 0 {\displaystyle x_{0}=0\,\!} x 1 = 1 {\displaystyle x_{1}=1\,\!} x 2 = 0.685073357326045 {\displaystyle x_{2}=0.685073357326045\,\!} x 3 = 0.841355125665652 {\displaystyle x_{3}=0.841355125665652\,\!} x 4 = 0.870353470875526 {\displaystyle x_{4}=0.870353470875526\,\!} x 5 = 0.865358300319342 {\displaystyle x_{5}=0.865358300319342\,\!} x 6 = 0.865473486654304 {\displaystyle x_{6}=0.865473486654304\,\!} x 7 = 0.865474033163012 {\displaystyle x_{7}=0.865474033163012\,\!} x 8 = 0.865474033101614 {\displaystyle x_{8}=0.865474033101614\,\!} הגרף הבא מראה את הפונקציה f {\displaystyle \,f} באדום וקו המיתר האחרון בכחול. בגרף ניתן לראות שנקודת החיתוך של המיתר עם ציר ה- x {\displaystyle \,x} קרובה מאוד לשורש של f {\displaystyle \,f} . שיטת המיתר, באתר MathWorld (באנגלית)