כיצד לבצע פקטוריזציה של LU?
כדי לפתור מערכות של שלוש משוואות ליניאריות או יותר, בדרך כלל ממירים את הבעיה למטריצה מוגברת ושורה מצמצמת משם. עם זאת, זה איטי ולא יעיל עם יותר משוואות. מספר פעולות החשבון שצריך לחשב עולה לפי הממד של המטריצה, כך שמערכות של שש משוואות או יותר אינן מעשיות לפיתרון ביד. בשנת החיים האמיתיים, מערכות של 1000 משוואות אינן נדירות - אפילו 50 משוואות כרוך מחשוב מספר דומה של פעולות על מספר האטומים ביקום גלוי.
ישנה שיטה נוספת המפחיתה את כמות הפעולות לקוביית הממד של המטריצה. זה נקרא פקטוריזציה LU - היא מפרקת מטריצה לשתי מטריצות משולשות - U, {\ displaystyle U,} למשולש עליון ו- L, {\ displaystyle L,} למשולש תחתון - ואחרי ההתקנה המתאימה, הפתרונות נמצאים על ידי החלפת גב. מחשבים מסוימים משתמשים בשיטה זו כדי לפתור במהירות מערכות שלא יהיה מעשי להתמודד באמצעות צמצום שורות.
במאמר זה, נוכל להראות כיצד לבצע פרוק LU עבור מערכת של שלוש משוואות, למען הפשטות.
- 1התחל במשוואת המטריצה. ביסודו, ניתן לכתוב מערכת משוואות במונחים של משוואת מטריצה Ax = b, {\ displaystyle A \ mathbf {x} = \ mathbf {b},} כאשר מטריצה A {\ displaystyle A} פועלת על וקטור x { \ displaystyle \ mathbf {x}} להפקת וקטור אחר ב. {\ displaystyle \ mathbf {b}.} לרוב אנו רוצים לדעת x, {\ displaystyle \ mathbf {x},} וזה לא יוצא מן הכלל. בפקטוריזציה LU נראה כי אנו יכולים להגדיר את היחס A = LU, {\ displaystyle A = LU,} כאשר L {\ displaystyle L} ו- U {\ displaystyle U} הן מטריצות משולשות.
- (241−113325) x = (217) {\ displaystyle {\ begin {pmatrix} 2 & 4 & 1 \\ - 1 & 1 & 3 \\ 3 & 2 & 5 \ end {pmatrix}} \ mathbf {x} = {\ begin {pmatrix} 2 \\ 1 \ \ 7 \ end {pmatrix}}}
- 2צמצם שורה {\ displaystyle a} לצורת דרג-שורה. צורת הדרג השורה תהפוך למטריקס U שלנו . {\ Displaystyle U.}
- R2 → 2R2 + R1, R3 → 2R3−3R1 {\ displaystyle R_ {2} \ to 2R_ {2} + R_ {1}, \ R_ {3} \ to 2R_ {3} -3R_ {1}}
- (2410670−87) {\ displaystyle {\ begin {pmatrix} 2 & 4 & 1 \\ 0 & 6 & 7 \\ 0 & -8 & 7 \ end {pmatrix}}}
- R3 → 3R3 + 4R2 {\ displaystyle R_ {3} \ to 3R_ {3} + 4R_ {2}}
- (2410670049) = U {\ displaystyle {\ begin {pmatrix} 2 & 4 & 1 \\ 0 & 6 & 7 \\ 0 & 0 & 49 \ end {pmatrix}} = U}
- המטריצה נמצאת כעת בצורת הדרג.
- R2 → 2R2 + R1, R3 → 2R3−3R1 {\ displaystyle R_ {2} \ to 2R_ {2} + R_ {1}, \ R_ {3} \ to 2R_ {3} -3R_ {1}}
- 3השג l {\ displaystyle l} על ידי ביטול שלבי הצמצום שלך בשורה. שלב זה עשוי להיות מעט מסובך בהתחלה, אך למעשה אנו בונים מטריצה על ידי מעבר אחורה.
- בואו נסתכל על הפחתת השורה האחרונה R3 → 3R3 + 4R2. {\ Displaystyle R_ {3} \ ל- 3R_ {3} + 4R_ {2}.} מצאנו את השורה החדשה 3 על ידי החלפתה בשילוב ליניארי של הישן שורות של המטריצה. כעת, אנו רוצים למצוא את השורה 3 הישנה, כל כך פשוט לפתור אותה.
- R3old → R3−4R23 {\ displaystyle R_ {3} ^ {\ text {old}} \ ל- {\ frac {R_ {3} -4R_ {2}} {3}}}
- זה מבטל את צמצום השורה השנייה. עכשיו, שמנו את זה בצורה של מטריצה. בואו נקרא למטריצה הזו S2. {\ Displaystyle S_ {2}.} וקטור העמודות מימין פשוט מבהיר את מה שאנחנו עושים - המטריצה הזו שאנחנו בונים היא טרנספורמציה לינארית שעושה את אותו הדבר כמו שכתבנו לעיל. שימו לב, מכיוון שלא עשינו שום דבר לשתי השורות העליונות, האלמנטים המתקבלים לשתי השורות במטריצה זו זהים למטריצת הזהות. רק השורה השלישית משתנה.
- (1000100−1,330.33) (R1R2R3) {\ displaystyle {\ begin {pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & -1,33 & 0,33 \ end {pmatrix}} {\ begin {pmatrix} R_ {1} \\ R_ { 2} \\ R_ {3} \ end {pmatrix}}}
- בנה את המטריצה שמבטלת את צמצום השורה הראשונה. באופן דומה, אנו פותרים את השורה 2 ו- 3 הישנה. אנו נקרא למטריצה זו S1. {\ Displaystyle S_ {1}.}
- R2old = R2 − R12 {\ displaystyle R_ {2} ^ {\ text {old}} = {\ frac {R_ {2} -R_ {1}} {2}}}
- R3old = R3 + 3R12 {\ displaystyle R_ {3} ^ {\ text {old}} = {\ frac {R_ {3} + 3R_ {1}} {2}}}
- S1 = (100−0,50.501,500.5) {\ displaystyle S_ {1} = {\ begin {pmatrix} 1 & 0 & 0 \\ - 0,5 & 0,5 & 0 \\ 1,5 & 0 & 0,5 \ end {pmatrix}}}
- הכפל את המטריצות S {\ displaystyle S} לפי הסדר שמצאנו אותן. פירוש הדבר ש- S2S1 = L. {\ Displaystyle S_ {2} S_ {1} = L.} אם ביצעת את הכפל כהלכה, אתה אמור לקבל מטריצה משולשת תחתונה.
- L = (100−0,50.501,5−0,670.17) {\ displaystyle L = {\ begin {pmatrix} 1 & 0 & 0 \\ - 0,5 & 0,5 & 0 \\ 1,5 & -0,67 & 0,17 \ end {pmatrix}} }
- בואו נסתכל על הפחתת השורה האחרונה R3 → 3R3 + 4R2. {\ Displaystyle R_ {3} \ ל- 3R_ {3} + 4R_ {2}.} מצאנו את השורה החדשה 3 על ידי החלפתה בשילוב ליניארי של הישן שורות של המטריצה. כעת, אנו רוצים למצוא את השורה 3 הישנה, כל כך פשוט לפתור אותה.
- 4השכתוב המשוואה מטריקס גרזן = b {\ displaystyle a \ mathbf {x} = \ mathbf {ב}} ב במונחים של lu {\ displaystyle lu} . עכשיו שיש לנו שתי מטריצות, אנחנו יכולים לראות למטה כי L {\ displaystyle L} מתנהג על וקטור Ux {\ displaystyle U \ mathbf {x}} יציאות ב. {\ Displaystyle \ mathbf {ב}.}
- L (Ux) = b {\ displaystyle L (U \ mathbf {x}) = \ mathbf {b}}
- מכיוון ש- Ux {\ displaystyle U \ mathbf {x}} הוא וקטור, תן y = Ux. {\ Displaystyle \ mathbf {y} = U \ mathbf {x}.} לאחר מכן, אנו רואים כי Ly = b. {\ Displaystyle L \ mathbf {y} = \ mathbf {ב}.} המטרה כאן היא לפתור הראשון עבור y, {\ displaystyle \ mathbf {y},} מכן חבר לתוך Ux = y {\ displaystyle U \ mathbf {x} = \ mathbf {y}} כדי לפתור עבור x. {\ displaystyle \ mathbf {x}.}
- 5פתר עבור y {\ displaystyle \ mathbf {y}} . מכיוון שאנו עוסקים במטריצות משולשות, החלפת גב היא הדרך ללכת.
- Ly = (y1−12y1 + 12y232y1−23y2 + 16y3) = (217) {\ displaystyle L \ mathbf {y} = {\ התחל {pmatrix} y_ {1} \\ - {\ frac {1} {2}} y_ {1} + {\ frac {1} {2}} y_ {2} \\ {\ frac {3} {2}} y_ {1} - {\ frac {2} {3}} y_ {2} + {\ frac {1} {6}} y_ {3} \ end {pmatrix}} = {\ התחל {pmatrix} 2 \\ 1 \\ 7 \ end {pmatrix}}}
- y = (2440) {\ displaystyle \ mathbf {y} = {\ התחל {pmatrix} 2 \\ 4 \\ 40 \ end {pmatrix}}}
- 6פתר עבור x {\ displaystyle \ mathbf {x}} . זה יכלול שוב החלפה אחורית מכיוון ש- U {\ displaystyle U} הוא משולש.
- Ux = (2x1 + 4x2 + x36x2 + 7x349x3) = (2440) {\ displaystyle U \ mathbf {x} = {\ התחל {pmatrix} 2x_ {1} + 4x_ {2} + x_ {3} \\ 6x_ {2 } + 7x_ {3} \\ 49x_ {3} \ end {pmatrix}} = {\ התחל {pmatrix} 2 \\ 4 \\ 40 \ end {pmatrix}}}
- x = (51,759−0,2940 / 49) {\ displaystyle \ mathbf {x} = {\ begin {pmatrix} 51,759 \\ - 0,29 \\ 40/49 \ end {pmatrix}}}
- למרות ששיטה זו אולי לא נראית לך יעילה במיוחד (ואכן, פקטוריזציה של LU למערכות של שלוש משוואות אינה טובה יותר מצמצום שורה), מחשבים מצוידים היטב לבצע החלפת גב, כך שהתוצאות באמת מוצגות כמספר משוואות עולה.