אלגוריתם לנצוש

אלגוריתם לָאנְצוֹשׁ (Lánczos) הוא אלגוריתם שפיתח המתמטיקאי ופיזיקאי ההונגרי-יהודי-אמריקאי קורנל לאנצוש ב-1950. האלגוריתם מוצא חלק (או את כל) הערכים עצמיים והווקטורים העצמיים של מטריצה הרמיטית (או סימטרית) בגודל n × n {\displaystyle n\times n} במספר מוגבל של פעולות. כמות הפעולות הנדרשת למציאת כל הערכים העצמיים והווקטורים העצמיים של מטריצה היא O ( n 3 ) {\displaystyle {\mathcal {O}}(n^{3})} , אבל בעזרת אלגוריתם לאנצוש ניתן למצוא חלק מהערכים העצמיים בפחות פעולות. למרות שהאלגוריתם יעיל חישובית, השיטה בהצגה המקורית שלה הייתה לא מועילה, מאחר שסבלה מחוסר יציבות נומרית. ב-1970 הראו איביו וניומן איך לייצב את השיטה ויישמו זאת כדי לפתור מערכות הנדסיות גדולות מאוד. בעבודה המקורית שלהם, הם הציעו שיטה לבחירת וקטור התחלתי. מעט אחר כך ביצע כריסטופר פייג' אנליזה לשגיאה. קלט: מטריצה הרמיטית A {\displaystyle A} בגודל n × n {\displaystyle n\times n} , ומספר איטרציות m {\displaystyle m} (בשביל לקבל את כל הערכים העצמיים והווקטורים העצמיים במדויק, יש לבחור m = n {\displaystyle m=n} ). למעשה, האלגוריתם לא צריך לקבל את המטריצה, אלא את היכולת להפעיל אותה על וקטורים. פלט: מטריצה V {\displaystyle V} בגודל n × m {\displaystyle n\times m} עם עמודות אורתונורמליות ומטריצה תלת-אלכסונית T = V ∗ A V {\displaystyle T=V^{*}AV} בגודל m × m {\displaystyle m\times m} . הערכים העצמיים של המטריצה T {\displaystyle T} "קרובים" לחלק מהערכים העצמיים של המטריצה המקורית A {\displaystyle A} . בשביל לקבל את הערכים העצמיים של T {\displaystyle T} אפשר להשתמש למשל באלגוריתם QR. מכיוון שהמטריצה T {\displaystyle T} היא מטריצה תלת-אלכסונית, הערכים העצמיים שלה מחושבים ב O ( m 2 ) {\displaystyle {\mathcal {O}}(m^{2})} פעולות. אלגוריתם: יהי v 1 ∈ C n {\displaystyle v_{1}\in \mathbb {C} ^{n}} וקטור שרירותי עם נורמה אוקלידית 1 {\displaystyle 1} . צעד התחלתי: יהי w 1 ′ = A v 1 {\displaystyle w_{1}'=Av_{1}} . יהי α 1 = w 1 ′ ∗ v 1 {\displaystyle \alpha _{1}=w_{1}'^{*}v_{1}} . יהי w 1 = w 1 ′ − α 1 v 1 {\displaystyle w_{1}=w_{1}'-\alpha _{1}v_{1}} . עבור j = 2 , … , m {\displaystyle j=2,\dots ,m} בצע: יהי β j = ‖ w j − 1 ‖ {\displaystyle \beta _{j}=\left\|w_{j-1}\right\|} (נורמה אוקלידית). אם β j ≠ 0 {\displaystyle \beta _{j}\neq 0} אז v j = w j − 1 / β j {\displaystyle v_{j}=w_{j-1}/\beta _{j}} , אחרת בחר את v j {\displaystyle v_{j}} להיות וקטור שרירותי עם נורמה אוקלידית 1 {\displaystyle 1} שיהיה אורתוגונלי לכל v 1 , … , v j − 1 {\displaystyle v_{1},\dots ,v_{j-1}} . יהי w j ′ = A v j {\displaystyle w_{j}'=Av_{j}} . יהי α j = w j ′ ∗ v j {\displaystyle \alpha _{j}=w_{j}'^{*}v_{j}} . יהי w j = w j ′ − α j v j − β j v j − 1 {\displaystyle w_{j}=w_{j}'-\alpha _{j}v_{j}-\beta _{j}v_{j-1}} . תהי V {\displaystyle V} המטריצה עם עמודות v 1 , … , v m {\displaystyle v_{1},\dots ,v_{m}} . תהי T = ( α 1 β 2 0 β 2 α 2 β 3 β 3 α 3 ⋱ ⋱ ⋱ β m − 1 β m − 1 α m − 1 β m 0 β m α m ) {\displaystyle T={\begin{pmatrix}\alpha _{1}&\beta _{2}&&&&0\\\beta _{2}&\alpha _{2}&\beta _{3}&&&\\&\beta _{3}&\alpha _{3}&\ddots &&\\&&\ddots &\ddots &\beta _{m-1}&\\&&&\beta _{m-1}&\alpha _{m-1}&\beta _{m}\\0&&&&\beta _{m}&\alpha _{m}\\\end{pmatrix}}} . הערה A v j = w j ′ = β j + 1 v j + 1 + α j v j + β j v j − 1 {\displaystyle Av_{j}=w_{j}'=\beta _{j+1}v_{j+1}+\alpha _{j}v_{j}+\beta _{j}v_{j-1}} עבור 1 < j < m {\displaystyle 1<j<m} . אחד המימושים המקובלים לאלגוריתם נמצא בחבילה ARPACK. לדוגמה, המימוש באוקטבה (Octave) מתבסס על מימוש זה. Trefethen, Lloyd N., and David Bau III. Numerical linear algebra. Vol. 50. Siam, 1997. Stewart, Gilbert W. Matrix Algorithms: Volume II: Eigensystems. Society for Industrial and Applied Mathematics, 2001. אלגוריתם לנצוש, באתר MathWorld (באנגלית) Lanczos, C. "An iteration method for the solution of the eigenvalue problem of linear differential and integral operators", J. Res. Nat’l Bur. Std. 45, 255-282 (1950). קיים אנלוג לאלגוריתם עבור מטריצות שאינן סימטריות בשם אלגוריתם ארנולדי http://www.caam.rice.edu/software/ARPACK/ https://www.gnu.org/software/octave/doc/interpreter/Sparse-Linear-Algebra.html#doc_002deigs