דטרמיננטות

דטרמיננטה היא אולי המושג החשוב ביותר שקשור למטריצות. כמו כל מושג חשוב במתמטיקה, היא צצה בהקשרים רבים ושונים (לא מזמן הראיתי כיצד היא צצה בהקשר הלכאורה לא קשור לכלום של ספירת עצים פורשים בגרף) ויש לה כמה הגדרות שקולות שונות. לרוע המזל, זה גם מושג טכני למדי שעלול להרתיע את מי שזה עתה החלו ללמוד מתמטיקה; אני מקווה שהפוסט הזה יצליח להיות ידידותי (ובפרט, את החלקים ה"כבדים"- ויהיו כאלו – אשמור לסוף ומי שיישבר שם, באמת שלא נורא).

בפשטות, דטרמיננטה של מטריצה ריבועית \(A\), שמסומנת כ-\(\left|A\right|\), היא מספר (סקלר) שמחושב מתוך \(A\) ומאפיין אותה במידת מה. כך למשל מטריצה היא הפיכה אם ורק אם \(\left|A\right|\ne0\), ומתקיים \(\left|A^{-1}\right|=\left|A\right|^{-1}\). אולי התיאור האינטואיטיבי הטוב ביותר שאני מכיר לדטרמיננטות הוא באמצעות גאומטריה: דטרמיננטה (או ליתר דיוק, הערך המוחלט שלה) היא נפח המקבילון שמוגדר על ידי שורות \(A\). בואו ננסה להסביר את ההגדרה הזו לפני שנגיע לפורמליזמים.

מקבילית בדו מימד ניתנת לתיאור באמצעות שני וקטורים. לוקחים את הוקטורים ומדביקים אותם על ראשית הצירים, ואז לוקחים אותם שוב ומדביקים את הזנב של כל אחד על הראש של השני שכבר הודבק. במילים אחרות, אם \(u,v\) הם הוקטורים, אז המעטפת של המקבילית מורכבת משני "מסלולים" שנפגשים באותה נקודה: בראשון הולכים קודם כמו ב-\(u\) ואז כמו \(v\), ובשני הולכים קודם כמו ב-\(v\) ואז כמו \(u\).

מקבילון זה אותו דבר, רק ב-\(n\) מימדים ועם \(n\)וקטורים.

המקבילונים הפשוטים ביותר הם קוביות. כאן הוקטורים הם מאותו אורך ומאונכים זה לזה. בדו מימד נקבל ריבוע. וקטורים מאותו אורך אבל שאינם מאונכים יתנו לנו מעויין; וקטורים מאונכים שאינם מאותו אורך יתנו לנו מלבן; וכשניתן לוקטורים להתפרע בשתי התכונות גם יחד נקבל מקבילית "כללית".

הנוסחה שאנחנו מכירים מהתיכון לשטח של מקבילית מערבת איזה גובה, לא את שני הוקטורים שעליהם המקבילית בנויה. הרעיון הוא שאם מעבירים שני גבהים בתוך המקבילית אפשר לחלק אותה למלבן (שאת השטח שלו קל לחשב) ושני משולשים (שגם השטח שלהם לא נורא כל כך). מקבלים ששטח המקבילית הוא \(h\cdot a\) כאשר \(h\) הוא הגובה ו-\(a\) הוא אורך הצלע שאליה מורידים את הגובה (כלומר, האורך של אחד מהוקטורים \(u\) או \(v\)).

כרגע אני לא מנסה למצוא נוסחה אלטרנטיבית – במקום זה, בואו נחשוב שניה על התכונות של שטח מקבילית כתלות בוקטורים \(u,v\) שפורשים אותה. הנוסחה שראינו מבהירה לנו מייד שאם כופלים את אחד הוקטורים בסקלר אי שלילי, השטח של המקבילית מוכפל גם הוא באותו סקלר (כי \(a\) מוחלף ב-\(\lambda a\) אבל \(h\) לא משתנה – הגובה לא מושפע מאורך הצלע שאליה מורידים אותו). אם אנחנו רוצים להכניס גם סקלרים שליליים למשחק אנחנו עוברים לדבר על "שטח מכוון" – השטח של המקבילית שנקבעת על ידי \(u,v\) הוא חיובי אם כשהולכים מ-\(u\) אל \(v\) נגד כיוון השעון עוברים דרך המקבילית ושלילי אחרת (מי שלמד קצת פיזיקה אולי מזהה את זה בתור "כלל יד ימין"). מי שעניין הכיוון מבלבל אותו, לא נורא; כל מה שצריך להבין מהדיון הזה הוא שהכללנו טיפה את מושג השטח כך שכעת כפל בסקלר כלשהו של אחד הוקטורים אכן יכפיל בסקלר גם את השטח.

בואו נשתמש בסימונים כדי להקל על ההבנה של מה שהולך כאן: אשתמש ב-\(S\left(u,v\right)\) כדי לתאר את שטח המקבילית שנקבעת על ידי \(u,v\). בינתיים ראינו כי \(S\left(\lambda u,v\right)=S\left(u,\lambda v\right)=\lambda\cdot S\left(u,v\right)\). האבחנה הבאה, שהיא אולי מבלבלת קצת יותר, היא ש-\(S\left(u+v,w\right)=S\left(u,w\right)+S\left(v,w\right)\) (ובדומה גם \(S\left(u,v+w\right)=S\left(u,v\right)+S\left(u,w\right)\)). כלומר, אם יש לנו מקבילית שאחד מהוקטורים שלה הוא סכום של שני וקטורים \(u,v\), אז אפשר להסתכל על שתי המקביליות שהוקטורים הללו יוצרים בנפרד יחד עם \(w\) ולחבר את השטחים שלהם כדי לקבל את שטח המקבילית המקורית. כדי להוכיח את זה פורמלית צריך ממש לצייר את הסיטואציה ולהשתמש בחפיפת משולשים ואקשן. אם כן, קיבלנו ש-\(S\) היא פונקציה לינארית בכל משתנה בנפרד (כלומר, אם מקפיאים משתנה אחד, אז \(S\) היא לינארית כפונקציה של המשתנה השני). לפונקציה כזו קוראים "מולטי-לינארית".

כעת, הנה תכונה קצת יותר ברורה: \(S\left(u,u\right)=0\). כלומר, למקבילית "מנוונת" שבה כל הצלעות הן אותו קו, יש שטח אפס. עוד תכונה ברורה למדי היא ש-\(S\left(\left(1,0\right),\left(0,1\right)\right)=1\), כלומר המקבילית שצלעותיה הם בדיוק וקטורי הבסיס הסטנדרטי ב-\(\mathbb{R}^{2}\) ולכן היא בעצם ריבוע עם אורך צלע 1 יש שטח 1. מסתבר שהתכונות שציינתי עד כה של \(S\) – מולטי-לינאריות, התאפסות על אותו הוקטור ו-1 על וקטורי הבסיס הסטנדרטי – מספיקות כדי לאפיין את \(S\) לחלוטין.

אפשר להכליל את הדיון כאן גם ל-\(\mathbb{R}^{n}\); לא אכנס כאן לאופן המדויק שבו מגדירים מקבילון \(n\)-ממדי, אבל גם במקרה הזה אפשר לדבר על פונקציה \(S\left(v_{1},\dots,v_{n}\right)\) שמקבלת וקטורים ב-\(\mathbb{R}^{n}\), וניתן להראות שהיא מקיימת מולטי-לינאריות, ושאם \(v_{i}=v_{j}\) עבור \(i\ne j\) כלשהם אז \(S\left(v_{1},\dots,v_{n}\right)=0\) (כלומר, מספיק ששתי צלעות של המקבילון יהיו זהות כדי שהוא יהיה מנוון ובעל נפח 0), ו-\(S\left(e_{1},\dots,e_{n}\right)=1\) – נפח המקבילון על אברי הבסיס הסטנדרטי ב-\(\mathbb{R}^{n}\) הוא 1. אם כן, יש לנו מוטיבציה לחקור פונקציות שמקיימות את התנאים הללו – וכאמור, אנו עומדים לראות כי קיימת פונקציה אחת ויחידה כזו (עבור \(n\) נתון) שמקיימת את כל התכונות גם יחד. הפונקציה הזו נקראת דטרמיננטה. רק שאת הפונקציה הזו אפשר להגדיר לכל מרחב \(\mathbb{F}^{n}\), גם לא מעל \(\mathbb{R}\) ספציפית (למרות שבשדות \(\mathbb{F}\) אחרים לא תמיד ברור מהו "מקבילון", אבל כאמור – המשמעות של דטרמיננטה היא רחבה הרבה יותר מכך), וכך גם נעשה.

אם כן, יהא \(V=\mathbb{F}^{n}\) מרחב וקטורי מעל השדה \(\mathbb{F}\). אנו מתעניינים בפונקציות \(f:V^{n}\to\mathbb{F}\), כלומר פונקציות שמקבלות \(n\) משתנים שכל אחד מהם הוא איבר של \(V=\mathbb{F}^{n}\), ומחזירות ערך ב-\(\mathbb{F}\) (במילים אחרות, פונקציונלים).

פונקציה \(f\) שכזו נקראת לינארית במשתנה ה-\(i\) אם מתקיים \(f\left(v_{1},v_{2},\dots,\alpha v_{i}+\beta u_{i},v_{i+1},\dots,v_{n}\right)=\alpha f\left(v_{1},\dots,v_{i},\dots,v_{n}\right)+\beta f\left(v_{1},\dots,u_{i},\dots,v_{n}\right)\), כלומר אם כאשר מקפיאים את כל המשתנים פרט למשתנה ה-\(i\) של \(f\) מקבלים פונקציה לינארית. כעת, \(f\) היא מולטי-לינארית אם היא לינארית בכל \(n\) המשתנים שלה.

\(f\) היא מתחלפת אם \(v_{i}=v_{j}\) עבור \(i\ne j\) גורר ש-\(f\left(v_{1},\dots,v_{n}\right)=0\), כלומר הצבת אותו ערך בשניים מהמשתנים של \(f\) מבטיחה שערכה של \(f\) יהיה 0. כדי להבין את הכוונה ב"מתחלפת", בואו נראה תעלול בפונקציה בשני משתנים שמשתמש במולטי-לינאריות שלה:

\(0=f\left(a+b,a+b\right)=f\left(a,a+b\right)+f\left(b,a+b\right)=f\left(a,a\right)+f\left(a,b\right)+f\left(b,a\right)+f\left(b,b\right)=f\left(a,b\right)+f\left(b,a\right)\)

כאן השתמשנו בכך ש-\(f\left(a+b,a+b\right)=f\left(a,a\right)=f\left(b,b\right)=0\) כי \(f\) מתחלפת. כעת, העברת אגפים נותנת לנו \(f\left(a,b\right)=-f\left(b,a\right)\). כלומר, אם החלפנו את המקומות של \(a,b\) ב-\(f\) זה גרם בדיוק להחלפת הסימן של ערך \(f\). את אותו התעלול אפשר לעשות גם עבור \(f\) עם יותר משתנים: הכלל הוא שאם מחליפים שניים מתוך \(n\) הערכים שהוצבו ב-\(f\), התוצאה היא היפוך הסימן של \(f\).

אחרי כל הפמפום הזה כבר ברור מה אני רוצה להוכיח: שקיים פונקציונל מולטי-לינארי מתחלף יחיד \(f\) שמקיים \(f_{0}\left(e_{1},\dots,e_{n}\right)=1\) כאשר \(e_{1},\dots,e_{n}\in V\) הם וקטורי הבסיס הסטנדרטי של \(V\) (זכרו ש-\(V=\mathbb{F}^{n}\) ולכן יש משמעות ל"בסיס סטנדרטי" כאן). בואו ננסה להבין איך \(f\) הזה חייב להיראות.

כמקודם, כדי שהעסק יהיה ביותר ברור אני אניח בהתחלה ש-\(f\) היא פונקציה על שני קלטים, אבל ההוכחה הכללית תהיה זהה. נניח אם כן ש-\(f\) היא פונקציה שמקיימת את שלוש הדרישות שלעיל ונסתכל על ערכה על שני קלטים שרירותיים לחלוטין, כלומר \(f\left(u,v\right)\). אפשר לייצג את הקלטים הללו באמצעות הבסיס הסטנדרטי באופן יחיד, ולכן \(f\left(u,v\right)=f\left(\alpha_{1}e_{1}+\alpha_{2}e_{2},\beta_{1}e_{1}+\beta_{2}e_{2}\right)\), ועל ידי שימוש במולטי-לינאריות נקבל:

\(f\left(u,v\right)=\alpha_{1}\beta_{1}f\left(e_{1},e_{1}\right)+\alpha_{1}\beta_{2}f\left(e_{1},e_{2}\right)+\alpha_{2}\beta_{1}f\left(e_{2},e_{1}\right)+\alpha_{2}\beta_{2}f\left(e_{2},e_{2}\right)\)

או בקיצור, הערכים של \(f\) על קלטים שרירותיים נקבעים על ידי הערכים שלה על זוגות של איברים מהבסיס הסטנדרטי. זה לא ממש מפתיע; זו הכללה של העובדה שהערכים של פונקציה לינארית נקבעים על ידי ערכיה על אברי הבסיס הסטנדרטי.

כעת, בגלל ש-\(f\) מתחלפת, \(f\left(e_{1},e_{1}\right)=f\left(e_{2},e_{2}\right)=0\). לכן כל מה שקובע את ערכיה של \(f\) הוא \(f\left(e_{1},e_{2}\right)\) ו-\(f\left(e_{2},e_{1}\right)\). אבל כפי שראינו, \(f\left(e_{2},e_{1}\right)=-f\left(e_{1},e_{2}\right)\), ולכן הדבר היחיד שקובע את ערכיה של \(f\) הוא \(f\left(e_{1},e_{2}\right)\). אבל כאן אין לנו חופש בחירה – דרשנו במפורש ש-\(f\left(e_{1},e_{2}\right)=1\).

עכשיו קל להבין איך זה עובד במקרה הכללי: אם \(f\left(x_{1},\dots,x_{n}\right)\) היא פונקציה מולטי-לינארית מתחלפת על \(n\) משתנים, הערכים שלה נקבעים באופן יחיד על סדרות של \(n\) איברים מהבסיס הסטנדרטי. בגלל ש-\(f\) מתחלפת, כל הסדרות שבהן יש איבר שמופיע פעמיים נותנות אפס, ולכן כל מה שחשוב הוא ערכיה של \(f\) על פרמוטציות של אברי הבסיס הסטנדרטי – סידור מחדש שלהם בסדר כלשהו. במתמטיקה אוהבים לסמן פרמוטציות באות \(\sigma\); פורמלית, \(\sigma\) היא פשוט פונקציה חח"ע ועל מ-\(\left\{ 1,2,\dots,n\right\} \) לעצמו, ואז אפשר לתאר את "הפעלה של \(f\) על הפרמוטציה \(\sigma\) של אברי הבסיס הסטנדרטי" ב-\(f\left(e_{\sigma\left(1\right)},\dots,e_{\sigma\left(n\right)}\right)\).

עכשיו, כל פרמוטציה כזו אפשר "לתקן" ולהחזיר אותה למצב שבו כל האיברים מסודרים לפי הסדר שלהם על ידי ביצוע זוגות של החלפות בין איברים. למשל, את הפרמוטציה \(312\) (פורמלית: \(\sigma\left(1\right)=3\) ו-\(\sigma\left(2\right)=1\) ו-\(\sigma\left(3\right)=2\)) מתקנים על ידי כך שמחליפים את 3 ב-1 ומקבלים \(132\) ואז מחליפים את 3 ב-2 ומקבלים \(123\). כאן נדרשו לנו שתי החלפות; באופן כללי, אם נדרש מספר זוגי של החלפות כדי "לתקן" את הפרמוטציה אומרים שהיא זוגית ואחרת אומרים שהיא אי זוגית. לצורך נוחות מגדירים \(\mbox{sgn}\left(\sigma\right)=1\) אם \(\sigma\) זוגית ו-\(\mbox{sgn}\left(\sigma\right)=-1\) אם היא אי זוגית (יש כאן הוכחה לא לגמרי טריוויאלית שאני משמיט – שלא ייתכן מצב שבו ניתן לתקן את הפרמוטציה גם על ידי מספר זוגי וגם על ידי מספר אי זוגי של החלפות).

בשביל מה כל זה טוב? בשביל הנוסחה הנפלאה והפשוטה \(f\left(e_{\sigma\left(1\right)},\dots,e_{\sigma\left(n\right)}\right)=\mbox{sgn}\left(\sigma\right)f\left(e_{1},\dots,e_{n}\right)=\mbox{sgn}\left(\sigma\right)\). הסבירו לעצמכם מדוע היא נכונה! זה נובע, כפי שכבר ראינו, מכך שהחלפה של שני ערכים שמוצבים ב-\(f\) הופכת את הסימן של \(f\).

נסכם – ראינו שאם יש פונקציה כלשהי שמקיימת את כל הדרישות (מולטי-לינארית, מתחלפת ו-1 על וקטורי הבסיס הסטנדרטי) אז היא חייבת להיות הפונקציה שמקיימת \(f\left(e_{\sigma\left(1\right)},\dots,e_{\sigma\left(n\right)}\right)=\mbox{sgn}\left(\sigma\right)\) ו-0 על סדרות של וקטורי הבסיס הסטנדרטי שבהן אותו וקטור חוזר על עצמו, מה שקובע את יתר ערכיה באופן מוחלט. זה מראה שאם קיימת פונקציה כלשהי שעונה על הדרישות, היא יחידה; זה עדיין לא מראה שהיא קיימת, למרות שמפתה לומר זאת. הסיבה לכך היא שגם אם נגדיר את \(f\) על וקטורי הבסיס באופן הזה זה לא מבטיח מייד שהיא תקיים את כל הדרישות, אבל קל לראות שזה אכן כך – מולטי-לינאריות נובעת מכך שאנחנו מרחיבים את \(f\) באופן כזה שמבטיח שהיא תהיה מולטי-לינארית; 1 על וקטורי הבסיס נובע מיידית מההגדרה; החלק המסובך היחיד הוא להראות ש-\(f\) היא מתחלפת. ראינו שזה כך על קלט שמורכב מאברי הבסיס הסטנדרטי, אבל למה זה כך באופן כללי?

כדי לטפל בבעיה הזו אנחנו רוצים ראשית למצוא נוסחה קצת יותר מפורשת עבור \(f\). כאן נוח לחשוב על \(f\) לא כפונקציה שפועלת על וקטורים, אלא כפונקציה על מטריצה \(A\), כך שהשורה ה-\(i\) במטריצה היא הוקטור ה-\(i\) שעליו \(f\) פועלת. כלומר, \(A_{ij}\) הוא הכניסה ה-\(j\) בתוך הוקטור \(v_{i}\). כדי לקשור את זה למה שכבר ראינו, בואו נזכור ש-\(v_{i}=\sum_{j=1}^{n}A_{ij}e_{j}\). כעת, אם נפתח את \(f\left(A\right)=f\left(v_{1},\dots,v_{n}\right)\) לסכום על ידי כתיבת כל \(v_{i}\) בתור צירוף לינארי שכזה ושימוש במולטי-לינאריות של \(f\), ונשתמש בנוסחה לערכי \(f\) על אברי בסיס שראינו קודם, נקבל לבסוף את התוצאה הזו:

\(f\left(A\right)=\sum_{\sigma}\mbox{sgn}\left(\sigma\right)A_{1\sigma\left(1\right)}A_{2\sigma\left(2\right)}\cdots A_{n\sigma\left(n\right)}\)

כאן הסכום נלקח על כל התמורות \(\sigma\) הקיימות על \(n\) איברים. אם רוצים להיות אפילו יותר קומפקטיים מבחינת הסימון, אפשר לכתוב:

\(f\left(A\right)=\sum_{\sigma}\mbox{sgn}\left(\sigma\right)\prod_{i=1}^{n}A_{i\sigma\left(i\right)}\)

וכעת אפשר כבר להפסיק להשתמש בסימון \(f\): הסימון המקובל לפונקציה הזו הוא \(\det A\), או \(\left|A\right|\). הנוסחה שלמעלה היא לרוב ההגדרה הסטנדרטית שלה.

עכשיו אפשר לנסות ולהבין למה \(\det\) היא אכן פונקציה מתחלפת. בהקשר של פונקציה על מטריצות, המשמעות של מתחלפת היא "אם יש שתי שורות זהות במטריצה, הדטרמיננטה היא אפס". הרעיון הוא שאם שתי שורות הן זהות, אז גם אחרי שמערבבים את השורות על ידי החלפתן אמורים לקבל את אותו ערך בדיוק של הדטרמיננטה. בואו נסמן ב-

\(\sum_{\sigma}\mbox{sgn}\left(\sigma\right)\prod_{i=1}^{n}A_{i\sigma\left(i\right)}=\sum_{\sigma\tau}\mbox{sgn}\left(\sigma\tau\right)\prod_{i=1}^{n}A_{i\sigma\tau\left(i\right)}=\sum_{\sigma\tau}-\mbox{sgn}\left(\sigma\right)\prod_{i=1}^{n}A_{i\sigma\tau\left(i\right)}\)

אלא שבגלל שהחלפנו שתי שורות זהות, \(\prod_{i=1}^{n}A_{i\sigma\tau\left(i\right)}=\prod_{i=1}^{n}A_{i\sigma\left(i\right)}\) (כלומר, ל-\(\tau\) "אין השפעה"), ולכן מקבלים

\(\sum_{\sigma}\mbox{sgn}\left(\sigma\right)\prod_{i=1}^{n}A_{i\sigma\left(i\right)}=-\sum_{\sigma}\mbox{sgn}\left(\sigma\right)\prod_{i=1}^{n}A_{i\sigma\left(i\right)}\)

ומכאן שבהכרח \(\left|A\right|=0\). זו הוכחה טיפה טכנית, ומי שלא הצליח לעקוב אחריה לגמרי – לא נורא.

לכאורה סיימנו – יש לנו עכשיו הגדרה עם נוסחה יפה (כן כן, הנוסחה הזו יפהפיה!) לדטרמיננטה שהיא מה שרצינו כל הזמן. אלא שהנוסחה הזו לא פרקטית לחישובים מעשיים – יש \(n!\) פרמוטציות על \(n\) איברים, ו-\(n!\) גדל מאוד מאוד מהר, כך שחישוב דטרמיננטה בעזרת הנוסחה הוא בעיה חישובית קשה. למעשה, יש פונקציה מאוד דומה לדטרמיננטה – הפרמננטה, שמוגדרת כך: \(\mbox{perm}\left(A\right)=\sum_{\sigma}\prod_{i=1}^{n}A_{i\sigma\left(i\right)}\). כלומר, אותו הדבר רק בלי הפלוס-מינוס של סימן התמורה. הפרמנטטה היא, באופן מוכח, בעיה \(\mbox{NP}\)-קשה; זה אומר שמאוד לא סביר שיימצא יום אחד אלגוריתם לחישוב יעיל שלה. אז מה שהופך את הדטרמיננטה לקלה (מאוד!) לחישוב הוא לא הנוסחה שהצגתי כבר אלא תכונות שלה שעוד צריך לדבר עליהן.

אם כן, ראינו שהדטרמיננטה היא פונקציה מולטי-לינארית ומתחלפת; מה זה אומר כשחושבים עליה כפונקציה של מטריצות? מתחלפת אומר שאם מחליפים שתי שורות במטריצה זה הופך את סימן הדטרמיננטה. מולטי-לינארית אומר, קודם כל, שאם כופלים שורה כלשהי בסקלר, זה מכפיל את הדטרמיננטה כולה באותו סקלר. את התכונה השניה שנובעת ממולטי-לינאריות אפשר לנסח כך: אם \(A\) היא מטריצה, ו-\(B,C\) הן מטריצות הזהות ל-\(A\) פרט לשורה ה-\(i\) כך שסכום השורות ה-\(i\) של \(B,C\) הוא השורה ה-\(i\) של \(A\), אז \(\left|A\right|=\left|B\right|+\left|C\right|\). שימו לב שזה לא נכון שמתקיים \(\left|B+C\right|=\left|B\right|+\left|C\right|\)! מולטי-לינאריות עובדת רק אם "מקפיאים" את כל השורות פרט לאחת ומפצלים את החיבור אך ורק בה. לצורך הפוסט הזה בלבד אמציא את הסימון הלא סטנדרטי והמוזר \(A=B\oplus_{i}C\) שאומר בדיוק את מה שתיארתי למעלה – ש-\(A\) היא המטריצה שמתקבלת מ-\(B,C\) (שהן מטריצות זהות פרט לשורה ה-\(i\)) כאשר השורה ה-\(i\) של \(A\) היא סכום השורות ה-\(i\) של \(B,C\) ושאר השורות של \(A\) זהות לשורות של \(B,C\).

כשלמדתי אלגברה לינארית, התכונה הכמו-חיבורית הזו נראתה לי מאוד מוזרה, אבל זה קרה מכיוון שלא למדתי על ההגדרה של דטרמיננטה כפונקציה מולטי-לינארית; אני מקווה שקצת ריככתי את המוזרות הזו עבור אלו מכם שלא הכירו את המושג קודם.

במבט ראשון התכונה הכמו-חיבורית הזו נראית חלשה למדי. אבל היא אומרת משהו מאוד לא טריוויאלי ומאוד מפתיע: נניח ש-\(A\) מתקבלת מ-\(B\) על ידי כך שלוקחים שורה \(j\) של \(B\), כופלים אותה בסקלר ומחברים אותה לשורה אחרת \(i\); אז \(\left|A\right|=\left|B\right|\), כלומר הפעולה הזו בכלל לא משנה את הדטרמיננטה! הסיבה לכך היא שאפשר לחשוב על \(A\) בתור \(A=B\oplus_{i}C\) כאשר \(C\) זהה ל-\(B\) פרט לכך שבשורה ה-\(i\) מופיעה השורה ה-\(j\) של \(B\) (ולכן גם של \(C\)). כעת, \(\left|A\right|=\left|B\right|+\left|C\right|\) אבל \(\left|C\right|=0\) כי השורה ה-\(i\) של \(C\) שווה לשורה ה-\(j\) של \(C\), והדטרמיננטה היא פונקציה מתחלפת.

מה ראינו כאן? ראינו שאנחנו יודעים בדיוק איך שלוש הפעולות האלמנטריות של דירוג מטריצות משפיעות על הדטרמיננטה. זה אומר שאם \(A\) היא מטריצה כלשהי, אפשר לדרג את \(A\) לקבלת מטריצה \(D\) שבה נוח יותר לחשב את הדטרמיננטה, ואם זוכרים אילו פעולות אלמנטריות בוצעו בדרך אפשר בקלות רבה לחשב את \(\left|A\right|\) מתוך \(\left|D\right|\). כל מה שנשאר להבין הוא אם יש מטריצות שבהן קל לחשב את הדטרמיננטה וגם ניתן להגיע אליהן באמצעות פעולות אלמנטריות על מטריצות; התשובה הפשוטה היא שמטריצות משולשיות, שהן מה שמגיעים אליו באופן טבעי בדירוג של מטריצות ריבועיות, הן בדיוק מטריצות שבהן קל לחשב את הדטרמיננטה: במטריצה משולשית, הדטרמיננטה היא פשוט מכפלת האיברים על האלכסון הראשי.

את הטענה שלעיל אפשר לראות ישירות מהנוסחה. כזכור, מטריצה משולשית עליונה היא מטריצה שבה \(A_{ij}=0\) אם \(i>j\) (כלומר, כל מה שמתחת לאלכסון הראשי הוא אפס). כעת, לכל פרמוטציה \(\sigma\) שאיננה הזהות, בהכרח יהיה \(i\) כלשהו עבורו \(i>\sigma\left(i\right)\) (זה תרגיל נחמד להוכיח זאת) ולכן \(A_{i\sigma\left(i\right)}=0\) ולכן \(\prod_{i=1}^{n}A_{i\sigma\left(i\right)}=0\) לכל \(\sigma\) שאיננה הזהות, ולכן נותרנו עם \(\left|A\right|=\prod_{i=1}^{n}A_{ii}\). אותו דבר תקף, כמובן, גם עבור מטריצה משולשית תחתונה (אבל בדירוג מטריצות רגיל מגיעים למטריצה משולשית עליונה). מכיוון שדירוג מטריצות ניתן לביצוע במהירות רבה, גם חישוב דטרמיננטה יכול להתבצע במהירות רבה, וזה מבלי שדיברנו על אופטימיזציות אחרות שאפשר אולי לנקוט בהן.

אני רוצה לסיים את הפוסט בהצגה של הגדרה שקולה נוספת של דטרמיננטה, שהיא רקורסיבית באופיה: דטרמיננטה של מטריצה מסדר \(n\times n\) מוגדרת בעזרת דטרמיננטה של מטריצה מסדר \(\left(n-1\right)\times\left(n-1\right)\), עם תנאי ההתחלה הטריוויאלי שבמטריצה בעלת כניסה בודדת, הדטרמיננטה היא בדיוק הכניסה הזו. קודם אציג את ההגדרה, שאיננה פשוטה כל כך להבנה, ואז ננסה להבין מדוע היא נכונה.

אם כן, תהא \(A\) מטריצה מסדר \(n\times n\). אני יכול לבחור שורה \(i\) ועמודה \(j\) של המטריצה ופשוט למחוק אותן לחלוטין, כאילו מעולם לא נתקיימו. לתוצאה קוראים מטריצת המינור ה-\(i,j\)-ית של \(A\) וזוהי מטריצה מסדר \(\left(n-1\right)\times\left(n-1\right)\). למטריצה הזו אפשר לחשב דטרמיננטה, והדטרמיננטה הזו נקראת המינור ה-\(i,j\)-י של \(A\) (לפעמים קוראים בשם "המינור" למטריצת המינור, אבל בואו לא ניתן לשמות וסימונים לבלבל אותנו יותר ממה שצריך). אשתמש בסימון שאני המצאתי, \(\left|A^{ij}\right|\) כדי לתאר את המינור ה-\(i,j\) של \(A\).

כעת, הבה ונקבע שורה \(i\) כלשהי באופן שרירותי. אני טוען שמתקיים \(\left|A\right|=\sum_{j=1}^{n}\left(-1\right)^{i+j}A_{ij}\left|A^{ij}\right|\). במילים אחרות, \(\left|A\right|\) היא סכום של המינורים שמתקבלים ממחיקת השורה ה-\(i\) וכל העמודות של \(A\) (כל עמודה בתורה), ובנוסף לכך הסכום הזה הוא מתחלף – לאיברים יש סימן פלוס או סימן מינוס, בהתאם לשאלה אם \(i+j\) זוגי או אי זוגי. הנוסחה הזו נקראת פיתוח לפי השורה ה-\(i\) של \(\left|A\right|\), ובאותה מידה אפשר גם לפתח לפי עמודות.

אציג דוגמה. ראשית, שימו לב לכך ש-\(\left|\begin{array}{cc}a & b\\c & d\end{array}\right|=ad-bc\) (קל לראות שזה נובע מההגדרה). כעת, בואו נראה פיתוח של דטרמיננטה של מטריצה מסדר \(3\times3\) על פי השורה הראשונה:

\(\left|\begin{array}{ccc}1 & 2 & 0\\5 & 1 & 7\\1 & 5 & 2\end{array}\right|=1\cdot\left|\begin{array}{cc}1 & 7\\5 & 2\end{array}\right|-2\left|\begin{array}{cc}5 & 7\\1 & 2\end{array}\right|+0\cdot\left|\begin{array}{cc}5 & 1\\1 & 5\end{array}\right|=\left(2-35\right)-2\left(10-7\right)+0\left(25-1\right)=-33-6=-39\).

כדאי להעיר שדרך ההצגה הזו היא אמנם נוחה למדי לחישוב של דטרמיננטות של מטריצות קטנות (בוודאי שיותר מאשר הנוסחה הבסיסית, ולטעמי גם יותר נוחה לביצוע בידי אדם מאשר דירוג מטריצות) אבל מבחינה חישובית היא גרועה בדיוק כמו לחשב על פי הנוסחה המקורית: אם \(t\left(n\right)\) הוא הזמן שלוקח לחשב במקרה הגרוע דטרמיננטה של מטריצה מסדר \(n\times n\), אז קל לראות ש-\(t\left(n\right)=n\cdot t\left(n-1\right)\), כלומר זמן ריצה של \(\Theta\left(n^{n}\right)\) שהוא ממש לא מוצלח.

בכל זאת, לעתים דרך ההצגה הזו נוחה להוכחות, ולכן אנו רוצים להוכיח שהיא נכונה. אבל איך? ובכן, לשמחתנו אין לנו שום צורך להוכיח שההגדרה שנתתי כרגע שקולה להגדרה עם הנוסחה; תחת זאת מספיק להראות שגם עם ההגדרה שנתתי כרגע לדטרמיננטה, אני מקבל פונקציה שהיא מולטי-לינארית, מתחלפת ומחזירה 1 על איברי הבסיס הסטנדרטי, כלומר על מטריצת היחידה. הטענה האחרונה ברורה (שימו לב כמה נוח לפתח על פי שורה או עמודה שכוללת כמעט רק אפסים), ולכן נותר להבהיר את שתי הטענות האחרות.

אעבור במעין אינדוקציה על \(n\): זה אומר שבנוסחה \(f\left(A\right)=\sum_{j=1}^{n}\left(-1\right)^{i+j}A_{ij}\left|A^{ij}\right|\) אני יכול להניח שהדטרמיננטה שמופיעה באגף ימין היא באמת פונקציית הדטרמיננטה המוכרת והאהובה עלינו, עבור מטריצות \(\left(n-1\right)\times\left(n-1\right)\), וכל שנותר לי לעשות הוא להוכיח ש-\(f\) מקיימת את התכונות הנדרשות מדטרמיננטה של מטריצות \(n\times n\). זה אומר, בפרט, שאני יכול להניח שהדטרמיננטות באגף ימין הן כבר מולטי-לינאריות, וזה גורר מייד שגם \(f\) כזו, כי היא בסך הכל צירוף לינארי של פונקציות מולטי-לינאריות – הרי לכם טיעון מחץ מתמטי שחוסך לנו לא מעט כתיבה מתישה (וכנראה לא משכנע חצי מכם).

כל מה שנשאר לעשות הוא להשתכנע ש-\(f\) היא מתחלפת. נניח אם כן ש-\(k,l\) הן שתי שורות זהות של \(A\) ונוכיח ש-\(f\left(A\right)\) היא אפס. ראשית, אם \(i\ne k,l\) אז נהדר, סיימנו: במקרה זה \(A^{ij}\) תהיה מטריצה שבה השורות שהגיעו משורות \(k,l\) הן זהות (כי כל השינוי שעשינו הוא למחוק משתי השורות הללו את הכניסה ה-\(j\)-ית) ולכן \(\left|A^{ij}\right|=0\) ונגמר העניין. אם כן, נניח לנו ש-\(k=i\). אז במקרה זה:

\(f\left(A\right)=\sum_{j=1}^{n}\left(-1\right)^{k+j}A_{kj}\left|A^{kj}\right|\)

ועכשיו אני אשתמש בתעלול הופך קיבה: אני אשתמש בנוסחה הרקורסיבית (שכבר הוכחתי עבור מטריצות \(\left(n-1\right)\times\left(n-1\right)\)) כדי לחשב את \(\left|A^{kj}\right|\) על ידי כך שאני אפתח את הדטרמיננטה הזו לפי השורה… אם הצלחתם לעקוב אחרי עד לכאן, אולי כבר ניחשתם שעל פי השורה ה-\(l\) (כי איזו עוד שורה אפשר לבחור? השורה ה-\(k\) כבר נרצחה, וחוץ ממנה רק לשורה ה-\(l\) היה ייחוד; שימו לב איך אנחנו "נדחפים" כאן בכוח לכיוון ההוכחה הנכון).

ובכן, איך נראה הפיתוח של \(\left|A^{kj}\right|\) על פי השורה ה-\(l\)? מבחינה טכנית צריך טיפה להיזהר פה: מפתה לכתוב \(\left|A^{kj}\right|=\sum_{\begin{array}{c}i=1\end{array}}^{n}\left(-1\right)^{l+i}A_{li}\left|\left(A^{kj}\right)^{li}\right|\) כאשר \(\left(A^{kj}\right)^{li}\) היא מינור של מינור – המטריצה שמתקבלת מ-\(A\) על ידי מחיקת השורות \(l,k\) והעמודות \(j,i\). לרוע המזל, זו לא הנוסחה הנכונה: אבל שימו לב שכך אנו כוללים בפיתוח גם את העמודה \(j\) שכבר נרצחה (הרי אני מחשב את הדטרמיננטה של \(A^{kj}\)). גם \(\left|A^{kj}\right|=\sum_{\begin{array}{c}i\ne j\end{array}}^{n}\left(-1\right)^{l+i}A_{li}\left|\left(A^{kj}\right)^{li}\right|\) (כש-\(i\) מתחיל מ-1, כרגיל) היא לא נוסחה נכונה, בגלל שהחזקה של ה-\(-1\) מתקלקלת מתישהו (בדיוק כאשר \(i\) קופץ "מעל" \(j\)). הנוסחה הנכונה היא:

\(\left|A^{kj}\right|=\sum_{\begin{array}{c}i=1\end{array}}^{j-1}\left(-1\right)^{l+i}A_{li}\left|\left(A^{kj}\right)^{li}\right|+\sum_{\begin{array}{c}i=j+1\end{array}}^{n}\left(-1\right)^{l+i-1}A_{li}\left|\left(A^{kj}\right)^{li}\right|\)

הבה ונציב את כל המפלץ הזה בנוסחה המקורית:

\(f\left(A\right)=\sum_{j=1}^{n}\left(-1\right)^{k+j}A_{kj}\left(\sum_{\begin{array}{c}i=1\end{array}}^{j-1}\left(-1\right)^{l+i}A_{li}\left|\left(A^{kj}\right)^{li}\right|+\sum_{\begin{array}{c}i=j+1\end{array}}^{n}\left(-1\right)^{l+i-1}A_{li}\left|\left(A^{kj}\right)^{li}\right|\right)\)

ומכל זה נקבל:

\(f\left(A\right)=\sum_{j=1}^{n}\sum_{i=1}^{j-1}\left(-1\right)^{l+k+i+j}A_{kj}A_{li}\left|\left(A^{kj}\right)^{li}\right|+\sum_{j=1}^{n}\sum_{i=1}^{j+1}\left(-1\right)^{l+k+i+j-1}A_{kj}A_{li}\left|\left(A^{kj}\right)^{li}\right|\)

עכשיו מגיע הפאנץ'. זכרו ש-\(k,l\) היו שורות זהות, ולכן \(A_{kj}=A_{lj}\) זה אומר שהאיבר \(A_{lt}A_{lr}\left|\left(A^{lt}\right)^{lr}\right|\) מופיע פעמיים – פעם בסכום השמאלי, ופעם בסכום הימני, וזאת לכל \(t,r\) רלוונטיים. רק שהמופעים של שני האיברים הללו הם עם סימנים הפוכים בגלל ההבדל הקטנטן בחזקה של ה-\(-1\), ולכן הסכום הכולל הוא אפס.

אחרי כזה בלאגן טכני (אבל באמת, בלי שום דבר מסובך במיוחד) אין מנוס אלא לסיים מייד כדי לתת לכם להתאושש; בפעם הבאה נראה איך דטרמיננטה מתקשרת לשאלת ההפיכות של מטריצות.

פונקציונלים לינאריים והדואלי של הדואלי של הדואלי של הדואלי

בפוסטים האחרונים עסקתי בטרנספורמציות לינאריות בין מרחבים וקטוריים, והפעם אני רוצה לדבר על סוג מסויים של טרנספורמציות שראוי לדיון בפני עצמו – פונקציונלים לינאריים. כרגיל, נסמן ב-\(V\) מרחב וקטורי מעל שדה \(\mathbb{F}\); פונקציונל לינארי על \(V\) הוא פשוט טרנספורמציה לינארית \(T:V\to\mathbb{F}\), כלומר כזו שנותנת (באופן לינארי) ערך סקלרי לאיברי \(V\). הכי פשוט להתחיל מדוגמאות.

ובכן, נסתכל על \(\mathbb{R}\left[x\right]\) – מרחב הפולינומים עם מקדמים ב-\(x\). דוגמה לפונקציונל לינארי על המרחב הזה הוא הצבה: \(T_{a}\left(p\left(x\right)\right)=p\left(a\right)\), כאשר \(a\in\mathbb{R}\) כלשהו. לא קשה להוכיח שזו פעולה לינארית (כלומר, \(T_{a}\left(\alpha p\left(x\right)+\beta q\left(x\right)\right)=\alpha p\left(a\right)+\beta q\left(a\right)\) כאשר \(\alpha,\beta\in\mathbb{R}\)), והיא אכן מעבירה כל איבר של \(\mathbb{R}\left[x\right]\) לאיבר של \(\mathbb{R}\). מה שמעניין כאן הוא האופן שבו הטרנספורמציה הזו משתמשת ב"מידע נוסף" שיש ב-\(\mathbb{R}\left[x\right]\) ולא בא לידי ביטוי במבנה שלו כמרחב וקטורי – העובדה שאפשר להציב ערכים ב-\(x\).

עוד דוגמה דומה מאוד היא אינטגרל מסויים. אינטגרלים מסויימים מוגדרים עבור המון פונקציות, אבל לשם פשטות נוח להתמקד במרחב פונקציות שמובטח שקיים להן אינטגרל מסויים ושהן יהוו מרחב וקטורי – פונקציות רציפות על קטע סגור. נסמן ב-\(C\left(\left[a,b\right]\right)\) את מרחב כל הפונקציות \(f:\left[a,b\right]\to\mathbb{R}\) שהן רציפות (זו משמעות ה-\(C\), מהמילה Continuous). כעת אפשר להגדיר פונקציונל לינארי עליהן: \(L\left(f\right)=\int_{a}^{b}f\left(x\right)dx\). הסיבה לכך שזהו פונקציונל לינארי דורשת הצדקה כלשהי; העובדה שמתקיים \(\int_{a}^{b}\left[\alpha f\left(x\right)+\beta g\left(x\right)\right]dx=\alpha\int_{a}^{b}f\left(x\right)dx+\beta\int_{a}^{b}g\left(x\right)dx\) נקראת לינאריות האינטגרל המסויים ויש להוכיח אותה.

עוד דוגמה מפורסמת למדי היא עקבה (Trace) של מטריצות. אם \(A\) היא מטריצה ריבועית \(n\times n\), אז \(\mbox{tr}A=\sum_{i=1}^{n}a_{ii}\), כלומר העקבה של \(A\) היא סכום האיברים שעל האלכסון שלה. לא קשה לראות כי \(\mbox{tr}\left(\alpha A+\beta B\right)=\alpha\mbox{tr}A+\beta\mbox{tr}B\) ולכן שוב יש לנו פונקציונל, הפעם מהמרחב \(M_{n}\left(\mathbb{F}\right)\) (מרחב המטריצות מסדר \(n\times n\) מעל השדה \(\mathbb{F}\)) אל \(\mathbb{F}\). בקיצור, פונקציונלים הם משהו שמקובע היטב במציאות המתמטית היומיומית.

בפוסטים קודמים כבר רמזתי, אם לא אמרתי במפורש, שאוסף כל הטרנספורמציות הלינאריות בין שני מרחבים נתונים הוא בעצמו מרחב וקטורי. זה מובלע בכך שהאוסף הזה איזומורפי למטריצות, שהן מרחב וקטורי, אבל כדאי לציין זאת במפורש: אם \(V,W\) הם שני מרחבים וקטוריים, אז קבוצת כל הטרנספורמציות הלינאריות \(T:V\to W\), שמסומנת לעתים כ-\(\mbox{Hom}\left(V,W\right)\), היא עצמה מרחב וקטורי, עם פעולות החיבור והכפל בסקלר ה"טבעיות" (כלומר, הטרנספורמציה \(T+S\) מוגדרת על ידי \(\left(T+S\right)\left(v\right)=T\left(v\right)+S\left(v\right)\) ו-\(\left(\lambda T\right)\left(v\right)=\lambda T\left(v\right)\)). יתר על כן, אם \(V,W\) הם ממימד סופי אז \(\text{dim}\text{Hom}\left(V,W\right)=\text{dim} V\cdot\text{dim}W\) – לא מפתיע כל כך מכיוון שהמטריצות שמייצגות טרנספורמציה מ-\(V\) אל \(W\) הן מטריצות מסדר \(\dim W\times\dim V\), ומרחב המטריצות מסדר \(n\times m\) הוא ממימד \(nm\) (חשבו על בסיס עבורו).

כדי לחסוך בסימונים, במקום לכתוב \(\mbox{Hom}\left(V,\mathbb{F}\right)\) כדי לתאר את מרחב הפונקציונלים הלינאריים על \(V\), פשוט נסמן אותו כ-\(V^{*}\). כעת, מכיוון ש-\(\mathbb{F}\) הוא מרחב וקטורי ממימד 1 מעל עצמו, אז \(\dim V^{*}=\dim V\), ולכן \(V\) ו-\(V^{*}\) איזומורפיים כמרחבים וקטוריים (כזכור, כל שני מרחבים וקטוריים סוף ממדיים מאותו מימד הם איזומורפיים). מה שמעניין כאן הוא שאני רואה ששני המרחבים איזומורפיים, אבל לא הצגתי שום איזומורפיזם מפורש עבורם; האם ניתן לעשות זאת?

ובכן, נקבע בסיס \(B=\left\{ b_{1},\dots,b_{n}\right\} \) ל-\(V\). כעת, לכל \(b_{i}\), נגדיר פונקציונל \(f_{b_{i}}\) באופן הבא: \(f_{b_{i}}\left(b_{j}\right)=\delta_{ij}\) כאשר \(\delta_{ij}\) היא הדלתא של קרונקר: אם \(i\ne j\) אז \(\delta_{ij}=0\) ואם \(i=j\) אז \(\delta_{ij}=1\). זה בסך הכל סימון, אבל כזה שהוא נוח למדי לעתים קרובות.

הגדרתי את הפעולה של \(f_{b_{i}}\) רק על אברי \(B\), אבל כבר ראינו שדי בכך כדי להגדיר את פעולת \(f_{b_{i}}\) על כל אברי המרחב; הטענה שלי היא שקבוצת הפונקציונלים \(B^{*}=\left\{ f_{b_{1}},\dots,f_{b_{n}}\right\} \) היא בסיס של \(V^{*}\), ומכיוון שהיא מגודל \(n\) רק צריך להראות שהיא בלתי תלויה לינארית. כלומר, נניח ש-\(\sum\lambda_{i}f_{b_{i}}=0\) – איבר האפס כאן הוא "פונקציונל האפס", הפונקציונל שמחזיר 0 לכל קלט. כעת, נפעיל את \(\sum\lambda_{i}f_{b_{i}}\) על \(b_{j}\) ונקבל \(0=\sum\lambda_{i}f_{b_{i}}\left(b_{j}\right)=\sum\lambda_{i}\delta_{ij}=\lambda_{j}\) וכך קיבלנו ש-\(\lambda_{j}=0\) לכל \(j\), כלומר הפונקציונלים אכן בלתי תלויים לינארית, והקבוצה \(B^{*}\) היא אכן בסיס למרחב \(V^{*}\). הדמיון הרב בין \(V\) ל-\(V^{*}\) גורם לנו לקרוא ל-\(V^{*}\) המרחב הדואלי ל-\(V\); ו-\(B^{*}\) הוא באופן בלתי מפתיע הבסיס הדואלי ל-\(B\).

אם לעשות משהו פעם אחת עבד, למה לא לעשות אותו פעמיים? נשאלת השאלה מהו \(\left(V^{*}\right)^{*}\), שאסמן בקיצור \(V^{**}\) – מהו המרחב הדואלי למרחב הדואלי של \(V\)? פורמלית זהו אוסף של פונקציונלים שהקלטים שלהם הם בעצמם פונקציונלים של \(V\); אבל אני רוצה לשכנע אתכם שבמובן מאוד חזק, \(V^{**}\) הוא בעצמו \(V\). לשם כך אני אראה איזומורפיזם בין \(V\) ל-\(V^{**}\), אבל לא סתם איזומורפיזם אלא איזומורפיזם שיהיה קנוני במובן שתכף אסביר. ההגדרה שלו היא טיפה מבלבלת והופכת את הקיבה במבט ראשון (למרות שאם נודה על האמת, היא מאוד פשוטה), וזה בדיוק האפקט שאני רוצה שירגיש כאן מי שנתקל לראשונה בעניינים הללו. פשוט תחשבו שאתם ברכבת הרים ויהיה בסדר.

ובכן, יהא \(v\in V\) איבר כלשהו של \(V\). בואו נגדיר פונקציונל לינארי \(L_{v}:V^{*}\to\mathbb{F}\) באופן הבא: \(L_{v}\left(f\right)=f\left(v\right)\). כלומר, \(L_{v}\) הוא בסך הכל יצור מאוד דומה לפונקציונל ה"הצבה בפולינום" שראינו בתחילת הפוסט, רק שהפעם הוא מקבל כקלט פונקציונל \(f\) ולא פולינום \(p\), אבל הפעולה שלו זהה – הוא מציב בפונקציונל את הערך \(v\) שהוא "hard coded" בתוך הגדרת \(L_{v}\) ומחזיר את התוצאה. כעת צריך לבדוק שזה באמת פונקציונל לינארי, כלומר לשים לב לכך ש:

\(L_{v}\left(\alpha f+\beta g\right)=\left(\alpha f+\beta g\right)\left(v\right)=\alpha f\left(v\right)+\beta g\left(v\right)=\alpha L_{v}\left(f\right)+\beta L_{v}\left(g\right)\)

זה נובע ממש מההגדרות, אז אין לנו בעיה. אבל מדוע מה שתיארנו כאן הוא איזומורפיזם בין \(V\) ובין \(V^{**}\)? ובכן, בגלל ש-

\(L_{\alpha v+\beta u}\left(f\right)=f\left(\alpha v+\beta u\right)=\alpha f\left(v\right)+\beta f\left(u\right)=\alpha L_{v}\left(f\right)+\beta L_{u}\left(f\right)\)

מכיוון שזה נכון לכל \(f\in V^{*}\) אפשר פשוט לכתוב \(L_{\alpha v+\beta u}=\alpha L_{v}+\beta L_{u}\), מה שאומר שהטרנספורמציה \(T\left(v\right)=L_{v}\) היא טרנספורמציה לינארית \(T:V\to V^{**}\). במילים: זו טרנספורמציה שלוקחת וקטור של \(V\) ומחזירה פונקציונל שמקבל כקלט פונקציונל של \(V\). יש לנו כאן שלוש רמות שונות של טרנספורמציה לינארית, ועוד היד נטויה.

כעת, מכיוון ש-\(\dim V^{**}=\dim V^{*}=\dim V\), כדי להשתכנע ש-\(T\) היא איזומורפיזם מספיק להראות שהיא חח"ע, כלומר ש-\(\dim\ker T=0\) (כי אז ינבע ש-\(\dim\mbox{Im}T=\dim V-\dim\ker T=\dim V\) ולכן \(\mbox{Im}T=V^{**}\)). במילים אחרות, צריך להראות ש-\(L_{v}\) הוא פונקציונל האפס רק אם \(v=0\). כעת, אם \(L_{v}\) הוא פונקציונל האפס זה אומר ש-\(f\left(v\right)=0\) לכל פונקציונל \(f:V\to\mathbb{F}\). אבל אם \(L_{v}\) איננו פונקציונל האפס ברור שקיימים פונקציונלים שלא מתאפסים עליו; תשלימו את הקבוצה \(\left\{ v\right\} \) לבסיס של \(V\) ואז תסתכלו על אברי הבסיס הדואלי, יהיה שם פונקציונל שלא מתאפס על \(v\)…

לסיכום, ראינו ש-\(V^{**}\) איזומורפי ל-\(V\). האיזומורפיזם הזה הוא קנוני במובן זה שהוא אינו תלוי בבחירת בסיס ל-\(V\). כאשר ראינו ש-\(V^{*}\) איזומורפי ל-\(V\), היינו חייבים לבחור בסיס ל-\(V\) כדי לקבל איזומורפיזם, ויש הרבה מאוד בסיסים שאפשר לבחור ולכן יש הרבה מאוד איזומורפיזמים אפשריים ולא ברור מי מהם הוא "הכי טבעי"; כאן לעומת זאת אין ממש ספק שהאיזומורפיזם שהצגתי הוא הטבעי ביותר. למי שיש בכל זאת ספק רק אעיר שאפשר לתת משמעות מתמטית לחלוטין ל"קנוניות" כאן באמצעות תורת הקטגוריות; נוותר על זה להפעם.

עכשיו אני רוצה לדבר על משהו קצת שונה – האופן שבו אפשר להבין את הגאומטריה של מרחבים וקטוריים באמצעות פונקציונלים.

ראשית, שימו לב שאפשר לחשוב על פונקציונל באופן כללי בתור פולינום לינארי במספר משתנים. למה הכוונה? קחו בסיס \(B=\left\{ b_{1},\dots,b_{n}\right\} \) ל-\(V\) ופונקציונל \(f\), ובואו נסמן \(a_{i}=f\left(b_{i}\right)\). כעת, איך \(f\) פועלת על וקטור \(v\) שוקטור הקואורדינטות שלו על פי \(B\) הוא \(\left[\lambda_{1},\dots,\lambda_{n}\right]\) (כלומר, \(v=\sum\lambda_{i}b_{i}\))? פשוט מאוד:

\(f\left(v\right)=f\left(\sum\lambda_{i}v_{i}\right)=\sum\lambda_{i}f\left(b_{i}\right)=\sum a_{i}\lambda_{i}\)

זה אומר שאפשר לחשוב על \(f\) בתור הפולינום \(p\left(x_{1},\dots,x_{n}\right)=a_{1}x_{1}+\dots+a_{n}x_{n}\), והצבה של \(v\) ב-\(f\) היא כמו הצבה של וקטור הקואורדינטות של \(v\) (על פי \(B\)) בתוך ה-\(x\)-ים של \(p\).

כעת, כל פונקציונל לינארי \(f\in V^{*}\) שאיננו פונקציונל האפס בהכרח חייב לקיים \(\mbox{Im}f=1\), כי המימד של המרחב שאליו \(f\) הולך הוא 1. לכן \(\dim\ker f=\dim V-\dim\mbox{Im}f=n-1\) – הגרעין של \(f\), אוסף כל הוקטורים ש-\(f\) מעביר לאפס, הוא ממימד קטן ב-1 מהמימד של \(V\) עצמו. לתת-מרחב לינארי כזה, שהמימד שלו קטן ב-1 מהמימד של המרחב כולו, קוראים על-מישור (hyperplane). השם "על-מישור" מגיע מהמקרה של \(V=\mathbb{R}^{3}\); במקרה זה העל-מישורים של המרחב הם מישורים במובן הרגיל ביותר של המילה; ולכן באופן מוכלל קוראים ליצורים כאלו "על-מישורים". אני חושב שהדוגמה הכי קלה היא דווקא עבור \(V=\mathbb{R}^{2}\) – במקרה זה העל-מישורים הם פשוט ישרים (ספציפית, ישרים שעוברים דרך הראשית).

הנה דרך נוספת לחשוב על כך: פולינום בשני משתנים \(p\left(x,y\right)=ax+by\) מגדיר לנו די בבירור קו ישר באמצעות המשוואה \(ax+by=0\) – דיברתי כבר על כך בפוסטים קודמים ועל איך שזו "הצורה הכללית" של כל הישרים שעוברים דרך הראשית. כל הדיון למעלה הוא פשוט הכללה של זה.

כעת, אלו מכם שזוכרים משהו מגאומטריה ודאי יודעים שחיתוך של שני מישורים הוא קו ישר. כלומר, חיתוך של שני מישורים מהווה מרחב במימד קטן ב-1 מזה של המישורים שחותכים – הוא על-מישור שלהם עצמם. האם זו תופעה כללית? כלומר, האם אפשר לקבל תת-מרחבים לינאריים יותר ויותר כלליים של \(V\) על ידי חיתוך של על-מישורים? התשובה חיובית, וכדי לסגור את השאלה באופן מוחלט אני אכניס עוד סימון אחד ודי.

נניח ש-\(V\) הוא מרחב וקטורי סוף ממדי, ו-\(W\) תת-מרחב שלו. אז נסמן ב-\(W^{0}\) את אוסף כל הפונקציונלים הלינאריים ב-\(V^{*}\) שמתאפסים על כל איבר ב-\(W\). זה אוסף לא ריק, כי פונקציונל האפס תמיד שם; לא קשה לראות ש-\(W^{0}\) הוא תת מרחב של ממש (כי אם נחבר שני פונקציונלים שמתאפסים על כל אברי \(W\), גם התוצאה תתאפס על כל אברי \(W\) וכך גם עם כפל בסקלר). כעת נובעת התוצאה הלא ממש מפתיעה הבאה:

\(\dim W+\dim W^{0}=\dim V\)

ובמילים, ככל ש-\(W\) קטן יותר, כך קבוצת הפונקציונלים שמתאפסת עליו גדולה יותר. אם \(W\) הוא על-מישור, אז אוסף כל הפונקציונלים שמאפסים אותו הוא חד ממדי, אבל אם \(W\) הוא ממימד קטן ב-2 ממימד \(V\) אז אוסף הפונקציונלים שמאפסים אותו הוא ממימד 2 וכן הלאה.

התוצאה הזו לא מפתיעה כי היא נראית בדיוק כמו \(\dim\ker T+\dim\mbox{Im}T=\dim V\), וההוכחה היא דומה מאוד להוכחה של המשפט ההוא: ניקח בסיס עבור \(W\) ונשלים אותו לבסיס של \(V\) – \(B=\left\{ b_{1},\dots,b_{m},b_{m+1},\dots,b_{n}\right\} \), כאשר \(m=\dim W\) ו-\(m\) הוקטורים הראשונים הם הבסיס של \(W\). כעת בואו נסתכל על הבסיס הדואלי \(B^{*}=\left\{ f_{1},\dots,f_{n}\right\} \) ונטען ש-\(\left\{ f_{m+1},\dots,f_{n}\right\} \) הם בדיוק בסיס ל-\(W^{0}\), מה שיוכיח שהמימד של \(W^{0}\) הוא בדיוק \(n-m=\dim V-\dim W\).

ובכן, זה שכל \(f_{i}\) כזו עם \(m<i\le n\) מאפסת כל איבר של \(W\) זה ברור – \(f_{i}\left(b_{j}\right)=0\) לכל \(1\le j\le m\) ולכן \(f_{i}\) מאפסת כל איבר שניתן לכתוב כצירופים לינאריים רק של \(b_{1},\dots,b_{m}\). זה אומר ש-\(\mbox{span}\left\{ f_{m+1},\dots,f_{n}\right\} \subseteq W^{0}\), אבל מה עם הכיוון השני? ובכן, אם \(g\in W^{0}\) הוא פונקציונל שמאפס את כל אברי \(W\), נכתוב אותו כצירוף לינארי של אברי הבסיס – \(g=\sum\lambda_{j}f_{j}\), וכעת נציב בו לפי התור את \(b_{i}\) עבור \(1\le i\le m\) – אברי הבסיס של \(W\) שהם כמובן גם איברים של \(W\) ולכן \(g\left(b_{i}\right)=0\) לכל אחד מהם. נקבל \(0=g\left(b_{i}\right)=\sum\lambda_{j}f_{j}\left(b_{i}\right)=\sum\lambda_{j}\delta_{ij}=\lambda_{i}\) והנה – קיבלנו שבצירוף הלינארי שמרכיב את \(g\), כל המקדמים \(\lambda_{i}\) עבור \(1\le i\le m\) הם בהכרח אפס, ולכן הוקטורים שפורשים את כל ה-\(g\)-ים הללו הם \(\left\{ f_{m+1},\dots,f_{n}\right\} \). זה מסיים את ההוכחה.

בואו נסכם לרגע. ראינו שלכל תת מרחב \(W\) של \(V\) קיים תת-מרחב \(W^{0}\) של \(V^{*}\) של "הפונקציונלים שמתאפסים על \(W\)" וגם הבנו מה המימד שלו. זה כיוון אחד – מה עם הכיוון השני? האם כל תת-מרחב \(U\) של \(V^{*}\) מגדיר תת מרחב של \(V\), של "כל אברי \(V\) שמאפסים את כל הפונקציונלים ב-\(U\)"? התשובה חיובית, אבל אין צורך לעבוד שוב כדי לראות זאת; אולי כבר הבנתם שאנחנו פשוט יכולים להשתמש בתוצאה שכבר ראינו ובדואליות של \(V\) ו-\(V^{*}\). הבה ונניח שיש לנו תת-מרחב \(U\) של \(V^{*}\); אז ממה שכבר ראינו, קיים תת-מרחב \(U^{0}\) של \(V^{**}\) של כל האיברים של \(V^{**}\) שמאפסים את כל אברי \(U\). אבל מה זה \(V^{**}\)? ראינו שכל איבר בו הוא פונקציונל \(L_{v}\) עבור \(v\in V\), כך ש \(L_{v}\left(f\right)=f\left(v\right)\); אם כן, מה זה אומר שפונקציונל \(L_{v}\) מאפס את כל \(U\)? זה אומר שלכל \(f\in U\) מתקיים \(L_{v}\left(f\right)=0\), כלומר \(f\left(v\right)=0\), כלומר \(v\) הוא וקטור של \(V\) שמאופס על ידי כל אברי \(U\). מכאן שאפשר לחשוב על \(U^{0}\) בתור תת-מרחב של \(V\) (לפדנטיים – לא הוא, אלא העותק האיזומורפי שלו ב-\(V\) על ידי האיזומורפיזם הקנוני של \(V\) עם \(V^{**}\)) ויתקיים \(\dim U+\dim U^{0}=\dim V^{*}\).

שימו לב כמה זה נחמד: מצד אחד יש לנו תת-קבוצות של המרחב (למשל, מישורים וישרים ב-\(\mathbb{R}^{3}\)), מצד שני יש לנו קבוצות של פונקציונלים לינאריים (או בניסוח אחר, פולינומים לינאריים במספר משתנים) ואנחנו רואים שהקבוצות הללו הן אותו הדבר במובן מאוד חזק ואפשר לקבל מכל אחת את השניה.

הרעיונות הללו הם בדיוק מה שעומד בבסיס הגאומטריה האלגברית; השאלה הראשונה שנשאלת כאשר מתחילים ללמוד גאומטריה אלגברית היא איך נראית הדואליות הזו כאשר רוצים לתאר מרחבים קצת יותר מחוכמים, ולשם כך מדברים על פולינומים במספר משתנים ממעלה כלשהי, לא רק פולינומים לינאריים. כך למשל המשטח שהוא פני עיגול (ספרה) ברדיוס \(R\) ניתן לתיאור כאוסף האפסים של הפולינום \(p\left(x,y,z\right)=x^{2}+y^{2}+z^{2}-R^{2}\) שהוא פולינום ממעלה שניה; וכשמתירים מעלה כלשהי, יכולת התיאור גדלה פלאים. הקבוצות שניתנות לתיאור באופן הזה נקראות יריעות אלגבריות, והאבחנה הבסיסית היא שמתקיימת דואליות דומה מאוד לזו שהצגתי לעיל בין יריעות אלגבריות ובין אוספים של פולינומים. עם זאת, הסיטואציה מורכבת משמעותית יותר מזו שראינו למעלה וכדי לתת ניסוחים מדוייקים למה שהולך שם צריך להשתמש במושגים מתמטיים שהאלגברה הלינארית לא נכנסת אליהם (אידאלים, חוגי מנה, טופולוגיה…) ולכן הפוסטים בנושא ייאלצו להמתין.

דמיון מטריצות

בפוסט הקודם דיברתי על ייצוג טרנספורמציות לינאריות באמצעות מטריצות. מה שאולי לא הובלט מספיק שם היה שאת אותה טרנספורמציה לינארית אפשר לייצג באמצעות המון מטריצות, וכל מטריצה מייצגת המון טרנספורמציות לינאריות; מה שקובע חד משמעית את הקשר בין טרנספורמציות ומטריצות הוא בחירה של בסיסים עבור המרחבים שמעורבים בטרנספורמציה. מכאן עולות כמה שאלות – ראשית, האם כל מטריצה יכולה לייצג כל טרנספורמציה לינארית, או שמראש טרנספורמציה יכולה להיות מיוצגת רק על ידי תת-קבוצה מסויימת של מטריצות, וכל מטריצה יכולה לייצג רק תת-קבוצה מסויימת של טרנספורמציות? שנית, איך אפשר, בהינתן מטריצה שמייצגת טרנספורמציה על ידי בסיס אחד, לעבור למטריצה שמייצגת אותה על ידי בסיס אחר? ושלישית, האם קיימים בסיסים שבהם יותר "נוח" לייצג טרנספורמציה מאשר בסיסים אחרים? לשאלות הללו יש תשובות לא רעות בכלל שאני רוצה להציג.

נתחיל בדוגמה שמבהירה מייד מה התשובה לאחת השאלות – מטריצת האפס, זו שכולה אפסים, תמיד מייצגת את טרנספורמציית האפס, כי כשכופלים אותה בוקטור כלשהו תמיד מקבלים אפס. בדומה, טרנספורמציית האפס (שמעבירה כל איבר לאפס) תמיד תהיה מיוצגת על ידי מטריצת האפס. אז ברור שלא כל מטריצה יכולה לייצג כל טרנספורמציה. למעשה, התכונות של המטריצה יכולות ללמד אותנו דברים על התכונות של כל הטרנספורמציות שיכולות להיות מיוצגות על ידה. אז נתחיל בלהבין את הקשר בין מטריצות שונות שמייצגות את אותה הטרנספורמציה, והצעד הראשון בדרך לשם הוא המושג של מטריצת מעבר בין בסיסים.

נניח שיש לנו מרחב וקטורי \(V\) ויש לו שני בסיסים סדורים \(B=\left\{ b_{1},\dots,b_{n}\right\} \) ו-\(C=\left\{ c_{1},\dots,c_{n}\right\} \). נניח גם שיש לנו וקטור \(v\), שנתון לנו על ידי וקטור הקואורדינטות שלו לפי \(B\): \(\left[v\right]_{B}\). האם יש לנו דרך נוחה לקבל את וקטור הקואורדינטות שלו על פי \(C\)? כמובן, אפשר לתת תשובות לשאלה הזו שהן ספציפיות למרחב הוקטורי שבו אנו עובדים – אפשר לקחת את וקטור הקואורדינטות \(\left[v\right]_{B}\), לחשב ממנו ייצוג מפורש נוח כלשהו עבור \(v\) ואז לחשב מהייצוג המפורש הזה את \(\left[v\right]_{C}\). אלא שלא באמת צריך את זה. בואו נזכור שלכל טרנספורמציה \(T:V\to V\) אפשר לדבר על המטריצה \(\left[T\right]_{B}^{C}\) שמייצגת את \(T\) על פי הבסיסים \(B,C\). כאן קורה משהו טיפה מוזר – \(T\) היא ממרחב כלשהו אל עצמו, ועם זאת אנו מתעקשים להשתמש בשני בסיסים שונים – אבל הפורמליזם תקין, ומתקיים \(\left[T\right]_{B}^{C}\left[v\right]_{B}=\left[T\left(v\right)\right]_{C}\). כעת, בואו נבחר בתור \(T\) טרנספורמציה פשוטה במיוחד: טרנספורמציית הזהות, \(I\), שמקיימת \(I\left(v\right)=v\) לכל \(v\in V\). כעת מה יקרה? \(\left[I\right]_{B}^{C}\left[v\right]_{B}=\left[v\right]_{C}\) ממש על פי הגדרה, כלומר \(\left[I\right]_{B}^{C}\) היא מטריצה שההכפלה בה עושה בדיוק את מה שרצינו. למטריצה כזו אני קורא מטריצת המעבר מהבסיס \(B\) לבסיס \(C\), ואולי כדאי להזהיר מראש שיש ספרים שדווקא קוראים לה מטריצה המעבר מ-\(C\) אל \(B\), אלוהים יודע למה.

את מטריצת המעבר הזו קל לחשב: פשוט לוקחים את אברי \(B\), מוצאים את וקטורי הקואורדינטות שלהם לפי הבסיס \(C\) ואלו עמודות מטריצת המעבר, שאסמן \(M_{B}^{C}\) לצורך פשטות.

כעת, כמו שהגדרתי את \(M_{B}^{C}\) אני יכול באותה מידה בדיוק להגדיר את \(M_{C}^{B}\) שמעבירה מהבסיס \(C\) לבסיס \(B\). כעת עולה מאליה השאלה מהי המטריצה \(M_{C}^{B}M_{B}^{C}\), והתשובה האולי לא מפתיעה היא שמדובר על מטריצת היחידה \(I\) (כן, אותו סימון לטרנספורמציה ומטריצה! אהההה!) שבה יש 1-ים על האלכסון הראשי ו-0-ים בכל מקום אחר. למטריצת היחידה התכונה הנחמדה שאם כופלים אותה בוקטור כלשהו הוא אינו משתנה, כך שהיא מייצגת את הטרנספורמציה "לא משנים כלום, אפילו לא את הקואורדינטות" שהיא בדיוק גם הטרנספורמציה ש-\(M_{C}^{B}M_{B}^{C}\) מבצעת (אם העברנו קואורדינטות מ-\(B\) אל \(C\) אבל אז חזרנו מ-\(C\) אל \(B\) אז לא עשינו כלום). בדומה גם \(M_{B}^{C}M_{C}^{B}=I\).

באופן כללי אם יש לנו שתי מטריצות \(P,Q\) מסדר \(n\times n\) – כלומר, ריבועיות, כך ש-\(PQ=QP=I\) אומרים על שתיהן שהן הפיכות ומסמנים \(Q=P^{-1}\). מה שראינו כרגע הוא שמטריצות המעבר בין בסיסים הן הפיכות וראינו גם מה ההופכי שלהן. איך כל זה קשור לשאלה המקורית שלי על מטריצות שונות שמייצגות את אותה טרנספורמציה? טוב ששאלתם.

תהא לה \(T:V\to V\) טרנספורמציה ממרחב אל עצמו (לפעמים קוראים בשם "אופרטור" לכזו טרנספורמציה, אבל זה לא קשר מחייב) ויהיו \(B,C\) בסיסים של \(V\). לצורך פשטות אסמן את \(\left[T\right]_{B}^{B}\) פשוט כ-\(\left[T\right]_{B}\)(כלומר, אם אותו בסיס משמש גם בתור הבסיס של המקור וגם בתור הבסיס של היעד – מה שאפשרי רק עבור אופרטורים – כותבים אותו רק פעם אחת) וכעת השאלה שלי היא מה טיב הקשר בין \(\left[T\right]_{B}\) ובין \(\left[T\right]_{C}\). הפתרון טמון באבחנה הבאה: להפעיל את \(\left[T\right]_{C}\) על וקטור קואורדינטות על פי \(C\) זה אותו דבר בדיוק כמו לקחת וקטור קואורדינטות על פי \(C\), להמיר אותו לוקטור קואורדינטות על פי \(B\), להפעיל את \(\left[T\right]_{B}\) על התוצאה, ואת התוצאה הזו להמיר חזרה לבסיס \(C\). בנוסחה:

\(\left[T\right]_{C}=M_{B}^{C}\left[T\right]_{B}M_{C}^{B}\)

ובניסוח טיפה שונה: אם \(P\) היא מטריצת המעבר מהבסיס \(C\) לבסיס \(B\), אז \(\left[T\right]_{C}=P^{-1}\left[T\right]_{B}P\). זה מראה שאם אנחנו רוצים לעשות שינוי במערכת הקואורדינטות שבה אנו מייצגים את המרחב, כל שעלינו לעשות הוא לחשב את מטריצת המעבר בין שתי מערכות הקואורדינטות, ואז נוכל לתקן בהתאם את הכל – גם וקטורים, וגם מטריצות שמתארות טרנספורמציות מורכבות.

באופן לא ממש מפתיע, כפי שקורה בדרך כלל באלגברה לינארית, גם הכיוון השני נכון. כלומר, אם \(P\) היא מטריצה הפיכה כלשהי, אפשר לחשוב עליה כעל מטריצת מעבר בין בסיסים, ולכן אם יש לנו שתי מטריצות ריבועיות \(A,B\) כך ש-\(A=P^{-1}BP\) אז \(A,B\) מייצגות את אותה הטרנספורמציה בבסיסים שונים.

באופן כללי במתמטיקה, לא רק באלגברה לינארית, צצה לפעמים סיטואציה שבה שני איברים \(a,b\) קשורים ביניהם על ידי משוואה מהצורה \(a=x^{-1}bx\). דוגמה קלאסית היא תמורות בתורת החבורות; לא אכנס לכך כעת, אבל כדאי לדעת שזה קיים. אם \(a=x^{-1}bx\) אז אומרים ש-\(a\) התקבל מ-\(b\) על ידי הצמדה על ידי \(x\); במקרה של מטריצות, אם מטריצה \(A\) מתקבלת ממטריצה \(B\) על ידי הצמדה, אומרים ש-\(A\) דומה ל-\(B\).

שימו לב לכך ש-\(A=I^{-1}AI\) ולכן כל מטריצה דומה לעצמה; לכך שאם \(A=P^{-1}BP\) אז \(B=PAP^{-1}\) ולכן \(B\) דומה ל-\(A\) (על ידי הצמדה ב-\(P^{-1}\)); ואם \(A=P^{-1}BP\) ו-\(B=Q^{-1}CQ\) אז \(A=\left(QP\right)^{-1}C\left(QP\right)\) (התוצאה האחרונה נובעת מהטענה הטכנית שלא הוכחתי לפיה \(\left(AB\right)^{-1}=B^{-1}A^{-1}\) לכל זוג מטריצות הפיכות \(A,B\)). שלוש הטענות הללו יחד מראות כי דמיון מטריצות הוא יחס שקילות: אפשר לחלק את מרחב כל המטריצות לקבוצות כך שבכל קבוצה כל המטריצות דומות זו לזו. מסקנה אחת מכך היא שאם יש לי שתי טרנספורמציות שמיוצגות (כל אחת בבסיס אחר) על ידי אותה מטריצה, הן מיוצגות בדיוק על ידי אותן מטריצות. זה בפרט מראה שתכונות מסויימות של הטרנספורמציה שבאות לידי ביטוי במטריצות שמייצגות אותה חייבות להישמר על ידי הצמדה. אולי הדוגמה הכי בולטת היא הפיכות – אם טרנספורמציה היא הפיכה (כלומר, חח"ע ועל) אז גם כל המטריצות שמייצגות אותה חייבות להיות הפיכות, ולכן הצמדה של מטריצה הפיכה גם היא הפיכה. למעשה, יש עוד מספר תכונות חשובות שנשמרות אבל כדי להציג אותן יש צורך להתעסק קצת יותר לעומק במטריצות וזאת טרם עשיתי.

השאלה הבאה היא האם לכל מטריצה יש ייצוג "נוח", כלומר האם כל מטריצה דומה למטריצה פשוטה כלשהי. זה כמובן מעלה את השאלה מהי מטריצה פשוטה; תשובה אפשרית אחת היא מטריצה אלכסונית, כי במטריצה כזו פעולת הכפל מתנהגת באופן פשוט מאוד. התשובה היא שמטריצות רבות אכן דומות למטריצה אלכסונית, אך לא כולן; הזיהוי של הסיטואציה שבה יש דמיון למטריצות אלכסוניות הוא אחד מהנושאים שאני מתכוון לדבר עליהם. למרות שלא כל המטריצות דומות למטריצות אלכסוניות אפשר להראות שכל מטריצה דומה למטריצה שהיא "כמעט אלכסונית" – צורת ז'ורדן, אבל לשם כך יש צורך שהשדה שמעליו אנו עובדים יהיה סגור אלגברית – עוד מושג שעליו אדבר בהמשך. לעת עתה נעזוב את ענייני דמיון המטריצות שכן עדיין חסר לנו מושג או שניים לפני שנוכל להתמודד איתם.

קואורדינטות, טרנספורמציות, מטריצות וחיות אחרות

בשעה טובה הגענו אל מה שאני מחשיב בתור אחת התוצאות היפות ביותר במתמטיקה בסיסית. לצערי קל לפספס את היופי כאן (אני כבר מתאר לעצמי קוראים נזעמים שבסוף הפוסט ירטנו שזה בכלל לא יפה או מעניין) ואני מקווה שאצליח להיות משכנע.

נתחיל ממשהו קונקרטי. כזכור, \(\mathbb{R}^{2}\), המרחב האוקלידי, מורכב מנקודות שכל אחת מהן היא זוג מספרים \(\left(x,y\right)\). אנחנו חושבים על המספרים הללו בתור הקואורדינטות של הנקודה – אבל מה זו בעצם קואורדינטה?

קואורדינטה, במובן היבש ביותר, היא מספר שבא לתאר מיקום. כדי לתאר מרחב כלשהו אנחנו צריכים להחליט על מערכת קואורדינטות עבורו, ואז כל נקודה במרחב מתוארת על ידי כמה מספרים שמתארים את האופן שבו אותה נקודה מתאימה למערכת הקואורדינטות. בדוגמה של המישור מערכת הקואורדינטות היא פשוטה – יש לנו ציר \(x\) וציר \(y\), שהם שניהם קווים ישרים מאונכים; לציר ה-\(x\) יש כיוון חיובי שהוא ימינה, ולציר ה-\(y\) יש כיוון חיובי שהוא למעלה, ונקודת המפגש שלהם נקראת "ראשית הצירים", וכל קואורדינטה אומרת כמה צריך ללכת לאורך הצירים כדי להגיע אל הנקודה. למשל, \(\left(3,-2\right)\) פירושו שצריך ללכת 3 יחידות לכיוון ימין על ציר \(x\), ואז ללכת \(2\) יחידות לכיוון למטה (הכיוון השלילי) במקביל לציר \(y\), ואז מגיעים אל הנקודה המבוקשת.

מה שאני רוצה שתבינו הוא שמערכת הצירים הזו היא שרירותית. אפשר היה לכוון את אחד מהצירים בכיוון ההפוך ועדיין היינו מסוגלים לתאר את כל המישור, רק שאם למשל היינו מכוונים את ציר \(x\) בכיוון ההפוך, הקואורדינטות של הנקודה שקודם היו \(\left(3,-2\right)\) כעת יהיו \(\left(-3,-2\right)\).

אבל אפשר היה לעשות דברים יותר מעוותים מסתם לשנות כיוון. אפשר היה למחוק את ציר \(y\) לחלוטין ולהחליף אותו בציר שאקרא לו ציר \(d\) (מלשון diagonal) שהוא בכלל לא ניצב לציר \(x\) אלא בזווית של 45 מעלות אליו. במילים אחרות, הוא הקו שמורכב מכל הנקודות מהצורה \(\left(a,a\right)\) (כשם שציר \(y\) היה הקו שמורכב מכל הנקודות מהצורה \(\left(0,a\right)\)). כעת, הנקודה שקודם הקואורדינטות שלה היו \(\left(3,-2\right)\) תהיה כעת בעלת הקואורדינטות \(\left(5,-2\right)\). רגע, מה?

אנחנו כל כך רגילים למערכת צירים שבה שני הצירים מאונכים זה לזה, שבכלל לא ברור מה המשמעות של קואורדינטות במערכת צירים שבה המצב אינו כזה. לכן כדאי להכניס את האלגברה הלינארית לתמונה כמה שיותר מהר – הדרך ה"נכונה" להכליל את הרעיונות הללו היא דרכה. אפשר לחשוב על כל מערכת צירים ב-\(\mathbb{R}^{2}\) בתור זוג וקטורים \(v,u\in\mathbb{R}^{2}\) שהם בלתי תלויים לינארית. מכיוון שהם בלתי תלויים לינארית ו-\(\mathbb{R}^{2}\) הוא מרחב ממימד 2, אז הם בסיס; ולכן כל וקטור \(w\in\mathbb{R}^{2}\) ניתן להצגה יחידה בתור \(w=\lambda v+\tau u\). הקואורדינטות של \(w\) במערכת הצירים שמוגדרת על ידי \(v,u\) יהיו הזוג \(\left(\lambda,u\right)\).

כאשר אנחנו חושבים על \(\mathbb{R}^{2}\) מערכת הצירים ה"רגילה" שצצה לנו לראש היא זו שנקבעת על ידי הוקטורים \(\left(1,0\right),\left(0,1\right)\). אולי אתם זוכרים שקראתי לקבוצה הזו הבסיס הסטנדרטי של \(\mathbb{R}^{2}\), וזו בדיוק הסיבה. במערכת הזו, הקואורדינטות של \(\left(3,-2\right)\) הן בדיוק \(\left(3,-2\right)\), אבל אם הבסיס שלנו היה \(\left(1,0\right),\left(1,1\right)\) אז הקואורדינטות של ה-\(2\)-יה \(\left(3,-2\right)\) הן \(\left(5,-2\right)\) כי \(\left(3,-2\right)=5\left(1,0\right)-2\left(1,1\right)\).

מה שקורה למעלה הוא מבלבל מאוד בגלל שאנחנו משתמשים באותו סימון הן כדי לתאר וקטור – איבר במרחב – והן כדי לתאר את הקואורדינטות שלו. כדי להבהיר מי נגד מי כדאי לחשוב על מרחב וקטורי שנראה שונה. בואו נדבר על \(\mathbb{R}_{3}\left[x\right]\) – מרחב הפולינומים עם מקדמים ממשיים ממעלה לכל היותר 2. בסיס מתבקש למרחב הזה הוא הקבוצה \(\left\{ x^{2},x,1\right\} \) (כשאברי הבסיס סדורים משמאל לימין), ואז הקואורדינטות של הפולינום \(ax^{2}+bx+c\) על פי הבסיס הזה הן פשוט הוקטור \(\left(a,b,c\right)\) – שלשה של מספרים מתוך \(\mathbb{R}\). אבל, היינו יכולים לבחור גם בסיס שונה למרחב, למשל את הבסיס \(\left\{ x^{2}+1,2x,3\right\} \), ואז הקואורדינטות היו שונות: הקואורדינטות של הפולינום \(5x^{2}+9x\) היו \(\left(5,\frac{9}{2},-\frac{5}{3}\right)\) כי \(5x^{2}+9x=5\left(x^{2}+1\right)+\frac{9}{2}\left(2x\right)-\frac{5}{3}\left(3\right)\).

זה מוביל אותנו להגדרה הפורמלית. אם \(V\) הוא מרחב וקטורי מעל שדה \(\mathbb{F}\) ו-\(B=\left\{b_1,\dots,b_n\right\}\) הוא בסיס סופי עבורו (וכאן הסדר של הוקטורים בתוך הבסיס חשוב – אומרים במקרה הזה שזה בסיס סדור), אז לכל וקטור \(v\in V\) מוגדר וקטור קואורדינטות של \(v\) על פי הבסיס \(B\) שמסומן ב-\(\left[v\right]_{B}\). הוקטור הזה הוא וקטור ב-\(\mathbb{F}^{n}\) והוא מוגדר כך: \(v=\sum\lambda_{i}b_{i}\) והצירוף הלינארי הזה הוא יחיד; אז \(\left[v\right]_{B}=\left(\lambda_{1},\dots,\lambda_{n}\right)\). למעשה, לרוב יהיה נוח לחשוב על \(\left[v\right]_{B}\) בתור וקטור עמודה דווקא, כלומר \(\left[v\right]_{B}=\left[\begin{array}{c}\lambda_{1}\\\vdots\\\lambda_{n}\end{array}\right]\).

כאן התכונות של הבסיס הן קריטיות. העובדה שכל איבר במרחב נפרש על ידי הבסיס קריטית לכך שלכל איבר יהיה קיים וקטור קואורדינטות, והעובדה שההצגה היא יחידה קריטית לכך שההגדרה תעבוד ותהיה חופשיה משאלות נוספות כמו "אם יש כמה וקטורי קואורדינטות אפשריות, את מי בוחרים?". אבל יש כאן משהו עמוק יותר מסתם ייצוג קומפקטי. בואו נזכור ש-\(\mathbb{F}^{n}\) הוא מרחב וקטורי בפני עצמו עם פעולות חיבור וכפל בסקלר; ולא קשה לראות שמתקיים \(\left[v+u\right]_{B}=\left[v\right]_{B}+\left[u\right]_{B}\) (כאן החיבור בצד שמאל הוא חיבור ב-\(V\), אבל החיבור מימין הוא חיבור ב-\(\mathbb{F}^{n}\)), ובדומה \(\left[\lambda v\right]_{B}=\lambda\left[v\right]_{B}\). כלומר, אם נחשוב על הפעולה "בהינתן וקטור, החזר את וקטור הקואורדינטות שלו על פי \(B\)" בתור פונקציה, זוהי בעצם טרנספורמציה לינארית; והיא חד-חד ערכית ועל בגלל ש-\(B\) הוא בסיס. מה שראינו פה הוא שכל מרחב וקטורי ממימד \(n\) הוא איזומורפי למרחב \(\mathbb{F}^{n}\). זו הכללה חזקה של האבחנה הישנה שלי לפיה \(\mathbb{R}^{2}\) ו-\(\mathbb{R}_{2}\left[x\right]\) איזומורפיים; כעת כל מה שהיה עלי לומר הוא "הם מרחבים וקטוריים מאותו מימד ולכן הם איזומורפיים".

זה מעלה את השאלה – אם כל מרחב וקטורי ממימד סופי הוא בבסיסו \(\mathbb{F}^{n}\), למה בכלל לדבר על מרחבים אחרים? יש לכך שתי תשובות. הראשונה היא שלפעמים נקודת מבט שונה מספקת תובנות אחרות; אבל השניה והיותר קונקרטית היא שאלגברה לינארית היא לא רק תחום שמתעסק בעצמו; כל הרעיון הוא שאובייקטים רבים ושונים מתגלים בתור מרחבים וקטוריים. האובייקטים הללו לעתים נדירות כוללים רק חיבור וכפל בסקלר; לרוב יש להם מבנה נוסף, ואם נחשוב עליהם בתור \(\mathbb{F}^{n}\) ותו לא, המבנה הזה ילך לאיבוד. עם זאת, כשמתעסקים באלגברה לינארית נטו אני מוצא שאכן נוח לעתים קרובות לחשוב על המרחב הוקטורי הכללי שבו מתעסקים בתור \(\mathbb{F}^{n}\). שימו רק לב שכל זה תקף רק למרחבים ממימד סופי; מרחבים ממימד אינסופי הם סיפור שונה לגמרי.

כעת, בפוסט הקודם אמרתי שכל מטריצה \(A\) מסדר \(m\times n\) מגדירה טרנספורמציה לינארית \(T_{A}:\mathbb{F}^{n}\to\mathbb{F}^{m}\) שמוגדרת פשוט על ידי \(T_{A}\left(x\right)=Ax\), כש-\(x\) הוא וקטור של \(\mathbb{F}^{n}\) שמיוצג כוקטור עמודה. הפאנץ' שנובע מהשימוש בוקטורי קואורדינטות הוא שכל טרנספורמציה לינארית בין שני מרחבים ממימד סופי ניתנת להצגה בתור \(T_{A}\) עבור \(A\) כלשהי. בואו ננסח את זה פורמלית: אם יש לנו טרנספורמציה לינארית \(T:V\to W\) ויש לנו בסיסים \(B=\left\{ b_{1},\dots,b_{n}\right\} \) של \(V\) ו-\(C=\left\{ c_{1},\dots,c_{m}\right\} \) של \(W\), אז קיימת מטריצה מסדר \(m\times n\) שמסומנת כ-\(\left[T\right]_{B}^{C}\) ("המטריצה המייצגת של \(T\) על פי הבסיסים \(B,C\)") כך שמתקיים הקשר הפשוט אך המכריע

\(\left[T\right]_{B}^{C}\cdot\left[v\right]_{B}=\left[T\left(v\right)\right]_{C}\)

ובמילים – לכפול את \(\left[T\right]_{B}^{C}\) בוקטור הקואורדינטות של \(v\) על פי \(B\) ייתן לנו את וקטור הקואורדינטות של \(T\left(v\right)\) על פי \(C\). זה אומר שכל טרנספורמציה לינארית בין מרחבים ממימד סופי ניתן לראות ככפל של מטריצה בוקטור.

אלא שקורה כאן יותר מכך. טרנספורמציות לינאריות אפשר לחבר, ואפשר לכפול אותן בסקלר, ואפשר להרכיב אותן (הרכבה של שתי טרנספורמציות לינאריות היא הטרנספורמציה שמתקבל מכך שמפעילים אחת ואז את השניה). הפעולות הללו מתאימות לחיבור מטריצות, כפל מטריצה בסקלר, ו… כפל מטריצות. זו אולי הדוגמה המרכזית לשימושיות של כפל מטריצות – כפל מטריצות מתאים להרכבת הטרנספורמציות הלינאריות שהן מייצגות. זה אומר שטרנספורמציות ומטריצות הן אותו הדבר במובן עמוק יותר מאשר "שתיהן מהוות את אותו מרחב וקטורי" – גם הפעולות המורכבות יותר של הרכבה (אצל טרנספורמציות) וכפל (אצל מטריצות) הן זהות אצלן.

בואו נבין איך מוצאים את המטריצה המייצגת הזו ואיך מוכיחים שהיא באמת עושה את מה שאני מתיימר לטעון שהיא עושה. כמיטב מסורת האלגברה הלינארית, זו הוכחה ש"כותבת את עצמה" כמעט לגמרי – אנחנו מתחילים מדבר פשוט מאוד שחייב לקרות, וממנו הכל נובע באופן טבעי ופשוט.

אם כן, מה יש לנו? יש לנו טרנספורמציה \(T:V\to W\) ויש לנו בסיסים \(B\) ל-\(V\) ו-\(C\) ל-\(W\). אנחנו מחפשים את המטריצה \(\left[T\right]_{B}^{C}\). הדרך לחלץ אותה היא להבין איך היא חייבת לפעול על וקטורים פשוטים – וקשה למצוא וקטורים פשוטים יותר של קואורדינטות לפי הבסיס \(B\) מאשר וקטורי הקואורדינטות של אברי הבסיס \(B\): וקטור הקואורדינטות של האיבר \(b_{i}\) של הבסיס \(B\) הוא פשוט מאוד הוקטור שכולו אפסים פרט לכניסה במקום \(i\) שהיא 1, כי ההצגה היחידה של \(b_{i}\) כצירוף לינארי של אברי הבסיס היא \(b_{i}\) עצמו.

כעת, \(T\left(b_{i}\right)\)הוא איבר של \(W\) ולכן ניתן להצגה כצירוף לינארי של אברי \(C\), כלומר \(T\left(b_{i}\right)=\sum_{j=1}^{m}a_{ji}c_{j}\) כאשר \(a_{ji}\) הם סקלרים – \(a_{ji}\) הוא המקדם של הוקטור \(c_{j}\) בצירוף הלינארי שנותן את \(T\left(b_{i}\right)\). החלק ה"חישובי" כאן הוא למצוא את אותם \(a_{ji}\)-ים, וזה תלוי הן בטרנספורמציה \(T\) והן בבסיסים \(B,C\). לרוב הגיוני לבחור בסיסים שבהם החישוב יהיה יותר נוח; זה מוביל אותנו באופן טבעי לשאלה "מה הבסיסים שבהם הכי טוב לייצג טרנספורמציה \(T\)?" שנדבר עליה בהמשך.

מרגע שנמצאו ה-\(a_{ji}\)-ים הסיפור נגמר – המטריצה, באופן לא כל כך מפתיע, היא כזו שהכניסה ה-\(ji\) בה היא \(a_{ji}\). בואו נבין למה זה עובד: אם \(A\) היא המטריצה הנתונה ו-\(v_{i}\) הוא וקטור הקואורדינטות של איבר הבסיס \(b_{i}\), אז \(Av_{i}\) הוא וקטור עמודה מסדר \(m\), כך ש-\(\left[Av_{i}\right]_{j}=\sum_{k=1}^{n}a_{jk}\left[v_{i}\right]_{k}=a_{ji}\), כי כל האיברים בסכום מתאפסים למעט זה שמתאים לכניסה היחידה של \(v_{i}\) שאיננה אפס – הכניסה \(i\) עצמה. קיבלנו ש-\(\left[Av_{i}\right]_{j}\) הוא בדיוק המקדם ה-\(j\)-י של \(T\left(b_{i}\right)\) בוקטור הקואורדינטות שלו על פי \(C\), כפי שרצינו; זה אומר שלפחות על אברי \(B\) המטריצה המייצגת אכן עובדת היטב.

לכאורה עכשיו צריך לבצע את אותו חישוב עבור איבר כללי ולא רק איבר בסיס, אבל אין בכך שום צורך. הסיבה לכך היא שטרנספורמציה לינארית נקבעת באופן יחיד על ידי פעולת מקדמיה על אברי הבסיס, וזה אומר, בניסוח קצת שונה, שאם שתי טרנספורמציות לינאריות מזדהות בפעולה שלהן על אברי בסיס כלשהו, הן אותה הטרנספורמציה. לכן, מכיוון שהטרנספורמציה שמוגדרת על ידי המטריצה \(A\) מתנהגת על אברי \(B\) בדיוק כמו \(T\), הם בדיוק אותה הטרנספורמציה. סוף הסיפור.

אם לסכם באופן מילולי מה עושים בפועל: מחשבים את \(T\left(b_{i}\right)\) לכל איבר בסיס \(b_{i}\) ומציגים אותו כצירוף לינארי \(T\left(b_{i}\right)=\sum\lambda_{j}c_{j}\). לוקחים את וקטור הקואורדינטות של התוצאה, והוא יהיה העמודה ה-\(i\)-ית במטריצה \(\left[T\right]_{B}^{C}\). פשוט למדי.

כעת נותרה רק עוד טענה מרכזית אחת שציינתי ואני רוצה להוכיח. נניח ש-\(T:V\to W\) ו-\(S:W\to U\) הן שתי טרנספורמציות לינאריות. אפשר להרכיב אותן – להגדיר טרנספורמציה חדשה \(ST:V\to U\) שמוגדרת פשוט כ-\(ST\left(v\right)=S\left(T\left(v\right)\right)\) (הפעלה של \(T\) ואז הפעלה של \(S\) על התוצאה). אם \(B,C,D\) הם בסיסים של \(V,W,U\) בהתאמה, אז מתקיים:

\(\left[ST\right]_{B}^{D}=\left[S\right]_{C}^{D}\cdot\left[T\right]_{B}^{C}\)

כלומר, הרכבת טרנספורמציות וכפל מטריצות זה אותו הדבר. אפשר היה לחשוש שההוכחה כאן תהיה טכנית ומסובכת, אבל למעשה היא טריוויאלית: פשוט צריך לשים לב לכך שמתקיים:

\(\left[S\right]_{C}^{D}\cdot\left[T\right]_{B}^{C}\cdot\left[v\right]_{B}=\left[S\right]_{C}^{D}\left[T\left(v\right)\right]_{C}=\left[S\left(T\left(v\right)\right)\right]_{D}=\left[ST\left(v\right)\right]_{D}\)

כלומר, \(\left[S\right]_{C}^{D}\cdot\left[T\right]_{B}^{C}\) פועלת על \(\left[v\right]_{B}\) בדיוק כמו \(\left[ST\right]_{B}^{D}\), ולכן הן חייבות להיות אותה מטריצה (אם אתם עדיין לא משוכנעים שהן חייבות להיות זהות, נסו להוכיח פורמלית שלטרנספורמציה לינארית יש בדיוק מטריצה מייצגת אפשרית אחת לזוג בסיסים נתון). הסיבה שזה כל כך פשוט נובעת מכך שכפל מטריצות הוא אסוציאטיבי; זו טענה שדווקא דורשת הוכחה פורמלית ואני פשוט חמקתי ממנה (עם זאת, מעבר לכתיבה של סכום כפול אין שם שום דבר נורא).

יש משהו יפה בכך שמשפט שאומר משהו כל כך לא מובן מאליו במבט ראשון הוא כל כך פשוט להוכחה; זה מראה שהמשהו הלא מובן מאליו הוא בעצם כן מובן מאליו, אחרי שמבינים את המובן מאליו.

טרנספורמציות לינאריות

עד עכשיו בפוסטים על אלגברה לינארית דיברתי על מרחבים וקטוריים, כלומר על אובייקט מתמטי שמקיים תכונות מסויימות. השלב הבא במתמטיקה הוא לרוב לבדוק אילו מניפולציות אפשר להפעיל על האובייקט הזה שעדיין מותירות את הסדר הפנימי בו על כנו במובן מסויים. באלגברה לינארית המניפולציות הללו נקראות טרנספורמציות לינאריות. לפני שאתן את ההגדרה, הכי פשוט להציג את הדוגמה הקלאסית: חשבו על \(\mathbb{R}^{3}\), עליו ניתן לחשוב גם פשוט בתור המרחב האוקלידי התלת-ממדי הרגיל. מניפולציות שאפשר לעשות על המרחב הזה הן סיבוב בזווית כלשהי סביב ציר, שיקוף ביחס לציר כלשהו, ניפוח או כיווץ של המרחב, והזזה. אני מדבר על מניפולציות על כל המרחב, אבל הן מן הסתם ישפיעו באותו האופן גם על תת-קבוצה שלו, כך שאם יש לנו במרחב רק דגם של בית, ואנחנו מסובבים את כל המרחב, גם הדגם של הבית יסתובב בהתאם. זה מה שקורה בתוכנות גרפיקה תלת-ממדיות: עובדים עם איזו גרסה סופית של \(\mathbb{R}^{3}\) ומפעילים עליה בדיוק את הטרנספורמציות שתיארתי לעיל. עם זאת, כמובן שבפועל המצב קצת יותר בעייתי – נראה בהמשך הפוסט שהזזה היא לא באמת טרנספורמציה לינארית על פי ההגדרה שלנו.

אם כן, מהי טרנספורמציה לינארית? בראש ובראשונה זוהי פונקציה: פונקציה \(f\) מקבוצה \(A\) אל קבוצה \(B\) (מה שמסומן לרוב ב-\(f:A\to B\)) היא התאמה שלכל איבר ב-\(A\) (שנקרא התחום של הפונקציה) מחזירה איבר ב-\(B\) (שנקרא הטווח של הפונקציה). למשל, הפונקציה \(f:\mathbb{R}\to\mathbb{R}\) שמוגדרת על ידי הכלל \(f\left(x\right)=x^{2}\), כלומר היא מעלה בריבוע את המספר שהיא מופעלת עליו. מכיוון שריבוע של מספר ממשי הוא תמיד אי שלילי, אפשר היה לכתוב אותה גם כ-\(f:\mathbb{R}\to\mathbb{R}^{+}\) כאשר \(\mathbb{R}^{+}\) מתאר רק את הממשיים האי שליליים.

הדוגמה הזו מצביעה על כך שהטווח של פונקציה הוא מושג "גמיש" – הוא יכול להיות קבוצה שכוללת גם איברים שהפונקציה כלל לא מעבירה אליהם אף איבר של התחום. הקבוצה של כל האיברים בטווח שאכן מופיעים כפלט של הפונקציה עבור קלט כלשהו מהתחום נקראת התמונה של הפונקציה ומסומנת לרוב בתור \(\mbox{Im}f\) (\(\mbox{Im}\) מלשון Image). אם הטווח של פונקציה שווה לתמונה שלה אומרים שהפונקציה היא על. כלומר, \(f\left(x\right)=x^{2}\) היא על אם חושבים עליה כפונקציה \(f:\mathbb{R}\to\mathbb{R}^{+}\), אבל היא לא על אם חושבים עליה כפונקציה \(f:\mathbb{R}\to\mathbb{R}\). קצת מבלבל, אני יודע.

בואו נראה עוד דוגמה: \(f:\mathbb{R}^{2}\to\mathbb{R}^{2}\) שמוגדרת על ידי \(f\left(\left(x,y\right)\right)=\left(x,-y\right)\) היא פונקציה שלכל נקודה ב-\(\mathbb{R}^{2}\) מחזירה את השיקוף שלה ביחס לציר \(x\). הפונקציה הזו היא די בבירור על (נסו להוכיח זאת לעצמכם). עוד דוגמה היא הפונקציה \(f:\mathbb{R}\to\mathbb{N}\) שמוגדרת על ידי \(f\left(x\right)=\left[\left|x\right|\right]\) – לוקחים את הערך המוחלט של \(x\) (עבור ממשיים זה פשוט \(x\) בלי סימן המינוס אם היה כזה), ואז לוקחים את הערך השלם של התוצאה – המספר השלם הקרוב ביותר ל-\(\left|x\right|\). הסיבה שאני מביא את הפונקציה הזו היא כדי להמחיש שהתחום והטווח יכולים להיות שונים.

עם זאת, גם הדוגמה שלמעלה לא מבהירה עד כמה התחום והטווח יכולים להיות שונים, כי הטבעיים הם בכל זאת תת קבוצה של הממשיים. אז בואו נחשוב על פונקציית הגימטריה: פונקציה שלוקחת מילה (רצף סופי של תווים מהא"ב העברי) ומחזירה מספר שהוא הערך הגימטרי שלו. כאן התחום הוא "קבוצת כל המחרוזות הסופיות עם תווים בעברית" והטווח הוא \(\mathbb{N}\). הסיבה שאני מדגיש שהתחום והטווח יכולים להיות שונים באופיים היא שעוד מעט נדבר בדיוק על טרנספורמציות לינאריות בין מרחבים וקטוריים שונים באופיים, לכאורה.

הפונקציות שהצגתי עד כה היו "חופשיות" למדי באופיין – לא באמת דרשתי מהן דרישות אלא רק אמרתי מה הן עושות. טרנספורמציה לינארית היא פונקציה \(T:V\to W\) (השימוש ב-\(T,S\) וכדומה עבור טרנספורמציות לינאריות הוא סטנדרטי) עם הדרישות הנוספות ש-\(V,W\) יהיו שניהם מרחבים וקטוריים מעל אותו שדה \(\mathbb{F}\), וש-\(T\) "תכבד" את הפעולות של \(V,W\). פורמלית זה אומר שצריך להתקיים:

  1. \(T\left(v+u\right)=T\left(v\right)+T\left(u\right)\) לכל \(v,u\in V\).
  2. \(T\left(\lambda v\right)=\lambda T\left(v\right)\) לכל \(v\in V\) ו-\(\lambda\in\mathbb{F}\).

מה קורה כאן? התנאי הראשון, בניסוח מילולי, אומר "נניח שיש לך שני איברים ב-\(V\): זה לא משנה אם קודם תחבר אותם ואז תפעיל את \(T\) על התוצאה, או אם קודם תפעיל את \(T\) עליהם בנפרד ואז תחבר את התוצאות", והתנאי השני אומר "נניח שיש לך איבר ב-\(V\): זה לא משנה אם קודם תכפול אותו בסקלר ואז תפעיל את \(T\) על התוצאה או אם קודם תפעיל את \(T\) עליו ואז תכפול את התוצאה באותו סקלר". במובן מסויים זה אומר ש-\(T\) מתחלפת עם הפעולות של חיבור ושל כפל בסקלר.

בואו נראה דוגמה פשוטה – ראינו כבר כי המרחב \(\mathbb{R}_{2}\left[x\right]\) של פולינומים ממעלה קטנה מ-2 עם מקדמים ממשיים "נראה כמו" המרחב \(\mathbb{R}^{2}\), וכעת אפשר לתת לכך משמעות מדוייקת: נגדיר טרנספורמציה \(T:\mathbb{R}_{2}\left[x\right]\to\mathbb{R}^{2}\) שמוגדרת על ידי \(T\left(ax+b\right)=\left(a,b\right)\), ולא קשה לראות שתכונות 1 ו-2 אכן מתקיימות על ידה. אמרתי בשעתו ש-\(T\) היא לא יותר מאשר "לשנות את הסימון" – במקום לסמן איבר ב-\(ax+b\) אני מסמן אותו ב-\(\left(a,b\right)\), אבל המהות נותרת זהה: חיבור שני פולינומים וחיבור שני וקטורים ב-\(\mathbb{R}^{2}\) זה אותו הדבר, וזה נובע מכך ש-\(T\) מכבד את פעולת החיבור.

ועכשיו בואו נראה למה "הזזה" אינה טרנספורמציה לינארית: הזזה לדוגמה היא פונקציה \(f:\mathbb{R}^{2}\to\mathbb{R}^{2}\) שמוגדרת על ידי \(f\left(\left(a,b\right)\right)=\left(a+2,b\right)\). כלומר, אנחנו מזיזים ב-2 יחידות בכיוון החיובי של ציר \(x\). חיש קל רואים איך הכל מתרסק: \(f\left(0\cdot\left(0,0\right)\right)=\left(2,0\right)\), אבל \(0\cdot f\left(\left(0,0\right)\right)=0\), כך שהזזה לא מקיימת את תכונה 2 (ואם נטרח לבדוק נראה שגם תכונה 1 לא מתקיימת). יש מובן כלשהו שבו הזזה היא "כמעט" טרנספורמציה לינארית אבל לא ניכנס אליו כעת.

בדוגמה שנתתי למעלה עם הפולינומים יש עוד שתי תכונות חשובות ש-\(T\) מקיימת: היא על, והיא גם חד-חד ערכית (חח"ע). חד-חד ערכית פירושו ש-\(T\) מעבירה קלטים שונים לפלטים שונים: אין שני קלטים של \(T\) שנותנים את אותו הפלט. שתי התכונות הללו מבטיחות שניתן יהיה להפוך את \(T\): שקיימת טרנספורמציה \(T^{-1}:\mathbb{R}^{2}\to\mathbb{R}_{2}\left[x\right]\) שמבצעת בדיוק את הפעולה ההפוכה לפעולת \(T\). במקרה שלנו הטרנספורמציה הזו היא פשוט \(T^{-1}\left(\left(a,b\right)\right)=ax+b\). טרנספורמציה לינארית שהיא גם הפיכה נקראת איזומורפיזם של התחום והטווח שלה: היא מעידה על כך שהתחום והטווח הם בעצם אותו מרחב וקטורי עד כדי הסימונים שאנו משתמשים בהם.

בואו נראה למה התכונות של על וחח"ע כל כך חשובות לנו כאן. נתבונן בטרנספורמציה \(T:\mathbb{R}^{2}\to\mathbb{R}^{3}\) שמוגדרת על ידי \(T\left(\left(a,b\right)\right)=\left(a,b,0\right)\). לא קשה לראות שתכונות 1+2 מתקיימות (ומכאן ואילך אפסיק לומר את זה; אם אני נותן טרנספורמציה בלי נימוק, תוכיחו לעצמכם שהיא אכן טרנספורמציה) והיא גם חח"ע, אבל אינה על, כי את \(\left(0,0,1\right)\) אי אפשר לקבל, למשל, ולכן גם אין לנו מושג לאן להעביר אותו אם נרצה להגדיר טרנספורמציה הפוכה ל-\(T\). התחושה היא שב-\(\mathbb{R}^{3}\) יש "יותר אינפורמציה" או "יותר חופש" מאשר ב-\(\mathbb{R}^{2}\), אם כי עדיין לא הגענו לשלב שבו אפשר לנסח במדויק מה הולך כאן (טוב, בעצם אפשר – המימד של \(\mathbb{R}^{3}\) גדול מהמימד של \(\mathbb{R}^{2}\) ועוד מעט נראה שאיזומורפיזם משמר מימד).

בכיוון השני, הנה טרנספורמציה אחרת, \(T:\mathbb{R}^{3}\to\mathbb{R}^{2}\) שמוגדרת על ידי \(T\left(\left(a,b,c\right)\right)=\left(a,b\right)\). כאן אנחנו פשוט מוחקים את הקואורדינטה השלישית; זה גורר מייד שהטרנספורמציה אינה חח"ע כי למשל \(T\left(\left(0,0,0\right)\right)=T\left(\left(0,0,1\right)\right)=\left(0,0\right)\). העובדה ש-\(T\) אינה חח"ע אומרת שאנחנו "מאבדים מידע" כשאנו מפעילים אותה; והיא אינה הפיכה כי הפעם אין לנו מושג לאן להעביר את \(\left(0,0\right)\) כי יש לנו יותר מדי אפשרויות ולא ברור במי מהן לבחור (אם נבחר שרירותית להעביר את \(\left(0,0\right)\) אל \(\left(0,0,0\right)\) אז נקבל שאם מפעילים את \(T\) על \(\left(0,0,1\right)\) ואז מפעילים את ה"הופכית" על התוצאה, מקבלים את \(\left(0,0,0\right)\), כלומר לא חזרנו לאיבר שממנו התחלנו).

כל הדיון עד כה היה כללי למדי – במתמטיקה לעתים קרובות מגדירים פונקציה בין שני מבנים ומתעניינים בשאלה אם היא חח"ע ועל. כעת אפשר להכניס לתמונה תוצאה יפהפיה שהיא כולה אלגברה לינארית וקושרת בין "כמה הטרנספורמציה רחוקה מלהיות חח"ע" ובין "כמה הטרנספורמציה היא על".

לצורך כך, הגדרות: \(T\) תהיה טרנספורמציה לינארית \(T:V\to W\). נגדיר את התמונה שלה להיות\(\mbox{Im}T=\left\{ T\left(x\right)|x\in V\right\} \) (כבר הזכרתי זאת), ונגדיר את הגרעין שלה להיות כל האיברים של \(V\) שהולכים לאפס (לאיבר האפס של \(W\)), \(\ker T=\left\{ x\in V|T\left(x\right)=0\right\} \). שימו לב ש-\(\mbox{Im}T\) היא תת-קבוצה של \(W\) בעוד \(\ker T\) היא תת-קבוצה של \(V\), ויותר מכך: שתיהן הן תתי-מרחבים של המרחבים שמכילים אותן (גם כאן ההוכחה פשוטה ואותיר אותה לכם). אם הן תתי-מרחבים, אז יש להן מימד, והמשפט אומר בפשטות שאם \(V\) הוא מרחב סוף-ממדי אז מתקיים הקשר הבא:

\(\dim V=\dim\mbox{Im}T+\dim\ker T\)

כלומר, המימד של התחום \(V\) שווה לסכום ממדי התמונה והגרעין של \(T\), לכל טרנספורמציה לינארית \(T\) ש-\(V\) הוא התחום שלה. אפשר ואולי גם כדאי לחשוב על כך באופן הזה: \(\dim V\) הוא כמות המידע (או חופש) שיש במרחב שמתחילים בו, \(V\). \(\dim\ker T\) הוא כמות המידע ש"הולך לאיבוד" (חשבו על 0 בתור פח זבל שכזה – תכף יתברר למה), ואחרי שזרקנו חלק מהמידע לזבל \(\dim\mbox{Im}T\) מתאר את כמות המידע שנותר לנו בתמונה. זה הסבר בנפנוף ידיים; כאן ההוכחה היא אחד מהמקרים שבהם מה שנראה אולי מסובך במבט ראשון הופך לטריוויאלי ומובן מאליו. אבל לפני שנוכיח, בואו נבין טרנספורמציות לינאריות קצת יותר טוב.

ראשית, בואו נשכנע אתכם שהגרעין של \(T\) מודד במובן מסויים כמה \(T\) רחוקה מלהיות חח"ע. אם \(u,v\) הם שני וקטורים ששוברים את החח"ע של \(T\) אז מתקיים \(T\left(u\right)=T\left(v\right)\). נעביר אגפים ונקבל \(T\left(u\right)-T\left(v\right)=0\), ובגלל ש-\(T\) היא טרנספורמציה לינארית קיבלנו ש-\(T\left(u-v\right)=0\), כלומר \(u-v\) הוא איבר בגרעין של \(T\). אם "נקפיא" את \(u\) נקבל שקבוצת כל ה-\(v\)-ים כך ש-\(T\left(u\right)=T\left(v\right)\) היא בדיוק הקבוצה \(\left\{ u+k|k\in\ker T\right\} \), כלומר היא בדיוק "הזזה" של הגרעין של \(T\) על ידי חיבור \(u\) אליו. בגלל ש-\(u\) היה וקטור שרירותי לחלוטין, התוצאה מתקיימת לכל איבר במרחב \(V\). מכאן שהחח"ע של \(T\) מופרת בדיוק באותו האופן לכל איבר במרחב, והגרעין של \(T\) מתאר בדיוק את האופן הזה.

לחלקכם הדיון הזה עשוי להישמע מוכר באופן חשוד, ולא במקרה – זה בדיוק מה שדיברנו עליו כשאמרתי שפתרון למערכת משוואות כלשהי ניתן באמצעות חיבור של פתרון פרטי כלשהו של המערכת עם הפתרונות של המשוואה ההומוגנית. עכשיו כבר אפשר לגלות שאם \(A\) היא מטריצה מסדר \(n\times m\) מעל \(\mathbb{F}\) אז היא בפרט מגדירה טרנספורמציה לינארית \(T_{A}:\mathbb{F}^{m}\to\mathbb{F}^{n}\) על ידי \(T_{A}\left(v\right)=A\cdot v\), ו"מרחב הפתרונות של המשוואה ההומוגנית המוגדרת על ידי \(A\)" הוא בדיוק "הגרעין של \(T_{A}\)". העובדה הזו תהיה חשובה למדי בהמשך.

עכשיו הגענו לנקודה שבה אפשר לחבר את מושג הבסיס שעליו דיברנו בפוסט הקודם לטרנספורמציות לינאריות. הפאנץ' הוא שאם יש לנו בסיס \(\left\{ v_{1},\dots,v_{n}\right\} \) למרחב \(V\), אז כדי לדעת איך טרנספורמציה \(T:V\to W\) פועלת על המרחב כולו מספיק לנו לדעת איך היא פועלת על איברי הבסיס ותו לא. הנימוק פשוט, כמעט טריוויאלי: אם \(v\in V\) הוא איבר כלשהו במרחב, אז קיימת לו הצגה יחידה כצירוף לינארי של אברי הבסיס, \(v=\sum\lambda_{i}v_{i}\). מתכונות הטרנספורמציה הלינארית נקבל ש-\(T\left(v\right)=T\left(\sum\lambda_{i}v_{i}\right)=\sum T\left(\lambda_{i}v_{i}\right)=\sum\lambda_{i}T\left(v_{i}\right)\). כלומר, מספיק לדעת את \(T\left(v_{1}\right),\dots,T\left(v_{n}\right)\), ואז התמונה של איבר ב-\(V\) היא צירוף לינארי עם אותם מקדמים שמגדירים את האיבר ב-\(v\), רק שהצירוף הלינארי שמגדיר את התמונה הוא לא על אברי הבסיס אלא על התמונות שלהם.

בואו נראה דוגמה לא טריוויאלית. נתבונן במרחב \(\mathbb{R}^{3}\left[x\right]\) ונגדיר עליו טרנספורמציה לינארית של גזירה \(D:\mathbb{R}^{3}\left[x\right]\to\mathbb{R}^{2}\left[x\right]\): מי שמכיר חדו"א יודע שהנגזרת של הפולינום \(ax^{2}+bx+c\) היא \(2ax+b\). מצד שני, אפשר להגיע לנוסחה גם כך: בסיס ל-\(\mathbb{R}^{3}\left[x\right]\) הוא הקבוצה \(\left\{ 1,x,x^{2}\right\} \), ואת פעולת הנגזרת על האיברים הללו קל לדעת: \(D\left(x^{2}\right)=2x\) ו-\(D\left(x\right)=1\) ו-\(D\left(1\right)=0\). כעת, \(ax^{2}+bx+c\) הוא בעצם צירוף לינארי של שלושת אברי הבסיס, עם המקדמים \(a,b,c\), ולכן \(D\left(ax^{2}+bx+c\right)=aD\left(x^{2}\right)+bD\left(x\right)+cD\left(1\right)=a\cdot2x+b\cdot1+c\cdot0=2ax+b\).

בואו נעבור לדוגמה גאומטרית – סיבוב ב-90 מעלות עם כיוון השעון של \(\mathbb{R}^{2}\). לחשוב איך זה עובד עבור וקטור כללי יכול להיות כאב ראש; אבל די קל לחשוב איך זה עובד עבור שני וקטורים ספציפיים. הראשון, \(\left(1,0\right)\), הוא אופקי לגמרי ומצביע "ימינה", ולכן אחרי סיבוב של 90 מעלות הוא יהיה אנכי לגמרי ויצביע "למטה", ולכן \(T\left(1,0\right)=\left(0,-1\right)\); ואילו השני, \(\left(0,1\right)\), הוא אנכי לגמרי ומצביע "למעלה", ולכן אחרי סיבוב של 90 מעלות הוא יהיה אופקי לגמרי ויצביע "ימינה", כלומר \(T\left(0,1\right)=\left(1,0\right)\).

כעת אפשר לראות את הפעולה הכללית של \(T\): \(T\left(a,b\right)=aT\left(1,0\right)+bT\left(0,1\right)=\left(0,-a\right)+\left(b,0\right)=\left(b,-a\right)\). קיבלנו את הנוסחה הכללית עבור \(T\) באמצעות זה שידענו את פעולת \(T\) על שני וקטורים ספציפיים (שלמרבה המזל מהווים בסיס).

כמו רוב הדברים באלגברה לינארית, גם התוצאה הזו היא דו-צדדית, ועדיין לא הצגתי את הצד המעניין. מצד אחד, זה מגניב ביותר שכל טרנספורמציה לינארית ניתנת לתיאור רק באמצעות פעולתה על אברי הבסיס; אבל מה שבאמת חזק כאן הוא שכל פונקציה ששולחת את אברי הבסיס לתוך מרחב לינארי ניתנת להרחבה יחידה לטרנספורמציה לינארית על \(V\)! שתי התוצאות הללו יחד בעצם מסווגות לנו את כל הטרנספורמציות הלינאריות שיכולות בכלל להתקיים מ-\(V\) לתוך מרחב \(W\) נתון. בואו ננסח את זה פורמלית:

אם \(V\) הוא מרחב עם בסיס \(\left\{ v_{1},\dots,v_{n}\right\} \), אז לכל קבוצה \(\left\{ w_{1},\dots,w_{n}\right\} \) של איברים במרחב \(W\) קיימת טרנספורמציה לינארית יחידה \(T\) כך ש-\(T\left(v_{i}\right)=w_{i}\) לכל \(1\le i\le n\). הטרנספורמציה הזו מוגדרת לכל \(v\in V\) באופן הצפוי הבא: \(v\) ניתן לכתיבה באופן יחיד כ-\(\sum\lambda_{i}v_{i}\) ולכן \(T\left(v\right)=\sum\lambda_{i}w_{i}\). כדאי לחשוב על כך כאילו התחלנו את הגדרת \(T\) מכך שהגדרנו אותה על אברי הבסיס, ואז הרחבנו באופן לינארי את ההגדרה. זה רעיון בסיסי ומהותי במתמטיקה: מגדירים מחלקה מסויימת של פונקציות, ואז מראים שקיימת קבוצה בסיסית כלשהי במרחב כך שדי בהיכרות עם פעולת הפונקציה עליה כדי לדעת איך היא מתנהגת בכל המרחב. דוגמה בלתי קשורה בעליל מגיעה מאנליזה מרוכבת, שם פונקציה אנליטית נקבעת באופן יחיד ("המשכה אנליטית") על בסיס ערכיה על קבוצה פתוחה במרחב.

כעת אפשר להוכיח את המשפט המרכזי של הפוסט. כזכור, הוא אומר שמתקיים \(\dim V=\dim\mbox{Im}T+\dim\ker T\). אם כן, תהא \(T\) טרנספורמציה לינארית \(T:V\to W\). כדי להבין את \(T\) נרצה לקחת בסיס ל-\(V\), אבל לא סתם בסיס; נבחר את הבסיס שיהיה הכי טוב עבורנו. נתחיל מ-\(\ker T\): הוא תת-מרחב של \(V\) ולכן גם לו יש בסיס \(u_{1},\dots,u_{r}\) (כאן \(r=\dim\ker T\)). כעת, את הבסיס הזה, שהוא קבוצה בלתי תלויה לינארית ב-\(V\), אפשר להשלים לבסיס \(\left\{ u_{1},\dots,u_{r},v_{1},\dots,v_{m}\right\} \) של \(V\), ומתקיים הקשר \(r+m=\dim V\) (הרי \(\dim V\) הוא בדיוק גודל של בסיס), כלומר \(\dim V=\dim\ker T+m\). כל מה שנשאר לעשות, אם כן, הוא להשתכנע שמימד התמונה של \(T\) הוא בדיוק \(m\). לצורך כך די להוכיח ש-\(T\left(v_{1}\right),\dots,T\left(v_{m}\right)\) מהווים בסיס לתמונה של \(T\).

איך מראים שקבוצה היא בסיס? צריך להראות שהיא בלתי תלויה, ושהיא פורשת. זה שהיא פורשת זה די מובן מאליו: איבר כללי בתמונה של \(T\) הוא מהצורה \(T\left(v\right)\) כך ש-\(v\in V\). את אותו \(v\) אפשר לכתוב כ-\(v=\sum_{i=1}^{r}\tau_{i}u_{i}+\sum_{j=1}^{m}\lambda_{j}v_{j}\) (זה צירוף לינארי של אברי הבסיס, אבל אני מבדיל בין אותם אברי בסיס שהיו שייכים במקור לגרעין וכל היתר). כעת, \(T\left(u_{i}\right)=0\) לכל ה-\(u_{i}\)-ים ולכן \(T\left(v\right)=\sum\tau_{i}T\left(u_{i}\right)+\sum\lambda_{j}T\left(v_{j}\right)=\sum\lambda_{j}T\left(v_{j}\right)\). במילים אחרות, \(T\left(v\right)\) הוא צירוף לינארי של \(T\left(v_{j}\right)\) בלבד; כל ה-\(u_{i}\)-ים נזרקים לזבל. הם הולכים לאפס, שלא משפיע על התוצאה הסופית. זו הנקודה שבה האינפורמציה הולכת לאיבוד.

נשאר להראות ש-\(T\left(v_{1}\right),\dots,T\left(v_{m}\right)\) היא קבוצה בלתי תלויה, ולשם כך מספיק להראות שאם \(\sum\lambda_{j}T\left(v_{j}\right)=0\) אז כל המקדמים הם אפס. מכיוון ש-\(\sum\lambda_{j}T\left(v_{j}\right)=T\left(\sum\lambda_{j}v_{j}\right)\), הרי שאם \(\sum\lambda_{j}T\left(v_{j}\right)=0\) נובע מכך ש-\(\sum\lambda_{j}v_{j}\) הוא איבר בגרעין של \(T\). מצד שני, אם הוא איבר בגרעין אז יש לו גם הצגה בתור \(\sum\tau_{i}u_{i}\), כי ה-\(u\)-ים הם בסיס לגרעין; ומכיוון שכל איבר ניתן להצגה יחידה כצירוף לינארי של אברי הבסיס, אז בהכרח \(\sum\lambda_{j}v_{j}\) ו-\(\sum\tau_{i}u_{i}\) היא אותה ההצגה. אבל בהצגה \(\sum\lambda_{j}v_{j}\) המקדמים של ה-\(u\)-ים הם אפס, ובהצגה \(\sum\tau_{i}u_{i}\) המקדמים של ה-\(v\)-ים הם אפס, ולכן כל המקדמים הם אפס, ובפרט ה-\(\lambda\)-ים הם כאלו, כנדרש.

אפשר לתאר את ההוכחה הזו בדרך קצת יותר מובנית, על ידי הכנסת מושג חדש לתמונה. אם \(V\) הוא מרחב וקטורי ו-\(U_{1},U_{2}\) הם שני תת-מרחבים שלו, אפשר להגדיר תת-מרחב חדש \(U_{1}+U_{2}=\left\{ u_{1}+u_{2}|u_{1}\in U_{1},u_{2}\in U_{2}\right\} \) – כלומר, תת-המרחב שכל איבר בו הוא סכום של איבר מ-\(U_{1}\) ואיבר מ-\(U_{2}\) (למה זה תת מרחב?). במקרה שבו האיבר היחיד שמשותף ל-\(U_{1}\) ו-\(U_{2}\) הוא 0 (מסמנים זאת \(U_{1}\cap U_{2}=\left\{ 0\right\} \)) נהוג לסמן את \(U_{1}+U_{2}\) בסימון \(U_{1}\oplus U_{2}\) ולדבר על הסכום הישר של \(U_{1},U_{2}\). סכום ישר גם הוא מושג שחוזר על עצמו רבות במתמטיקה אך לא אביא הגדרה כללית יותר שלו כאן.

החשיבות של סכום ישר כאן היא שכל איבר של \(U_{1}\oplus U_{2}\) ניתן להצגה יחידה (היחידות הזו צצה בכל מקום…) כסכום של איבר מ-\(u_{1}\) ואיבר מ-\(u_{2}\); כדי לראות זאת, נניח ש-\(u_{1}+u_{2}=v_{1}+v_{2}\) הן שתי הצגות שונות כסכום של אותו איבר. אז \(u_{1}-v_{1}=v_{2}-u_{2}\). כעת, \(U_{1}\) הוא תת מרחב שכולל את \(u_{1},v_{1}\) ולכן גם \(u_{1}-v_{1}\) שייך ל-\(U_{1}\); בדומה, \(v_{2}-u_{2}\) שייך ל-\(U_{2}\), ומכיוון שבשני המקרים מדובר על אותו איבר בדיוק, קיבלנו שהוא שייך הן ל-\(U_{1}\) והן ל-\(U_{2}\) ולכן הוא אפס, ולכן \(u_{1}-v_{1}=0\) כלומר \(u_{1}=v_{1}\) ובדומה \(u_{2}=v_{2}\). הנה עוד דוגמה להוכחה מקסימה שבה הכל פשוט מסתדר מעצמו.

לא קשה לראות שהמימד של \(U_{1}\oplus U_{2}\) הוא סכום הממדים של \(U_{1}\) ו-\(U_{2}\); בסיס ל-\(U_{1}\oplus U_{2}\) יהיה פשוט איחוד של הבסיסים של \(U_{1}\) ו-\(U_{2}\), והעובדה שזה בסיס נובעת בקלות מעניין ההצגה היחידה שהוכחתי למעלה.

כעת, את מה שעשיתי בהוכחה למעלה אפשר לתאר כך: כתבתי את \(V\) בתור \(V=\ker T\oplus U\) כאשר \(U\) הוא תת מרחב של \(V\) שהוא איזומורפי ל-\(\mbox{Im}T\) (שהוא תת-מרחב של \(W\)). עם מה שמכונה Abuse of Notation (כלומר, שימוש בסימון שגוי כדי לתאר רעיון נכון) אפשר לומר שהראיתי ש-\(V=\ker T\oplus\mbox{Im}T\), ולכן, ממה שאמרתי על מימד של סכום ישר, מובן מאליו מייד ש-\(\dim V=\dim\ker T+\dim\mbox{Im}T\); אבל כאמור, זו לא הוכחה פורמלית אלא דרך לזכור ולהבין את האינטואיציה.

בפוסט הבא נמשיך לדבר על טרנספורמציות לינאריות, כשהפעם אחתור למה שהוא כבר באמת גביע קדוש – העובדה שטרנספורמציות לינאריות ומטריצות זה בעצם אותו הדבר בדיוק.

מוסיפים בסיס לדיון על אלגברה לינארית

בפוסט הקודם הצגתי את המושגים של מרחב וקטורי ותת-מרחב וקטורי, וכעת אני רוצה לגשת ישר ולעניין. בפוסט על משוואות הומוגניות ראינו שיש קבוצה קטנה מאוד של פתרונות שכל פתרון אחר ניתן לתיאור כצירוף לינארי שלהם; בפוסט הזה אני רוצה להרחיב על הנקודה הזו בצורה כללית קצת יותר.

אז בואו נאמר ש-\(V\) הוא מרחב וקטורי מעל איזה שהוא שדה \(\mathbb{F}\). צירוף לינארי של קבוצת וקטורים סופית \(v_{1},\dots,v_{n}\in V\) הוא פשוט סכום של הוקטורים הללו כשכל אחד מוכפל בסקלר מתוך \(\mathbb{F}\), כלומר משהו מהצורה \(\lambda_{1}v_{1}+\dots+\lambda_{n}v_{n}\) כאשר \(\lambda_{1},\dots,\lambda_{n}\in\mathbb{F}\) או כפי שאני כותב בקיצור, \(\sum\lambda_{i}v_{i}\) (אני לא אטרח לכתוב את האינדקסים של הסכימה כשברור שהם מ-1 ועד \(n\) כמו שיקרה בערך תמיד).

בגלל ש-\(V\) הוא מרחב וקטורי, כל צירוף לינארי של אברי \(V\) הוא בעצמו איבר של \(V\). לכן, אם \(v_{1},\dots,v_{n}\) הם וקטורים, קבוצת כל הצירופים הלינאריים שלהם עם מקדמים מ-\(\mathbb{F}\) היא תת-קבוצה של \(V\); והפאנץ' הראשון הוא שהקבוצה הזו היא תת-מרחב לינארי, כלומר סגורה לכפל בסקלר ולחיבור. ההוכחה לכך פשוטה: אם \(\sum\lambda_{i}v_{i}\) הוא צירוף לינארי ו-\(\tau\in\mathbb{F}\) הוא סקלר אחר כלשהו, אז גם \(\tau\left(\sum\lambda_{i}v_{i}\right)=\sum\left(\tau\lambda_{i}\right)v_{i}\) הוא צירוף לינארי, פשוט עם סקלרים אחרים (\(\tau\lambda_{i}\) במקום \(\lambda_{i}\)) ולכן יש סגירות לכפל בסקלר (למי שבאמת רוצה להרגיש את העסק בידיים ולהבין אותו יותר טוב מומלץ לנסות ולהוכיח את השוויון \(\tau\left(\sum\lambda_{i}v_{i}\right)=\sum\left(\tau\lambda_{i}\right)v_{i}\) בהתבסס על התכונות של מרחב וקטורי; זו הדרך היחידה להבין למה רשימת האקסיומות ההיא כל כך חשובה והדברים שמופיעים בה הכרחיים כדי שהחשבונות יתנהגו נחמד כפי שאנחנו רוצים).

באופן דומה, אם \(\sum\lambda_{i}v_{i}\) ו-\(\sum\tau_{i}v_{i}\) הם שני צירופים לינאריים של אותה קבוצת וקטורים, אז \(\sum\lambda_{i}v_{i}+\sum\tau_{i}v_{i}==\sum\left(\lambda_{i}+\tau_{i}\right)v_{i}\) גם הוא צירוף לינארי של אותה קבוצת וקטורים ולכן יש לנו סגירות לחיבור. מסקנה: אוסף הצירופים הלינאריים של קבוצת וקטורים סופית ב-\(V\) הוא תת-מרחב של \(V\), והוא נקרא המרחב הנפרש על ידי קבוצת הוקטורים. לרוב מסמנים זאת בתור \(\mbox{span}\left\{ v_{1},\dots,v_{n}\right\} \).

מה קורה אם אנחנו רוצים להסתכל על המרחב שנפרש על ידי קבוצה אינסופית של וקטורים? כאן הסיפור יותר מורכב, כי צירוף לינארי הוא תמיד סופי; אין לנו משמעות עבור סכומים אינסופיים של איברים (לפעמים ניתן לתת משמעות כזו, וכתוצאה מכך מתקבלת תורה מעניינת וחשובה בפני עצמה, אך לא תמיד). עם זאת, אפשר עדיין לקחת קבוצה אינסופית של וקטורים ולדבר על קבוצת כל הצירופים הלינאריים הסופיים של איברים מתוכה. לפעמים מגדילים לעשות וכותבים \(\sum\lambda_{i}v_{i}\) גם כאשר יש אינסוף וקטורים בקבוצה ומוסיפים שהסכום הוא תמיד כזה שבו כל ה-\(\lambda_{i}\) למעט מספר סופי הם אפס. מכיוון שרוב הזמן נדבר רק על פרישה על ידי קבוצות סופיות של וקטורים, מי שלא מבין עד הסוף על מה דיברתי כרגע – לא נורא.

כשעסקנו במשוואות לינאריות, מלמלתי משהו על כך שמה שבאמת מעניין אותנו הוא קבוצה פורשת מינימלית, כלומר כזו שאין בה וקטורים מיותרים. הבה ונראה דוגמה. המרחב יהיה \(\mathbb{R}^{2}\) וניקח בו את הקבוצה \(\left\{ \left(1,0\right),\left(0,1\right),\left(1,1\right)\right\} \). לא כל כך קשה לראות שאפשר לכתוב כל איבר ב-\(\mathbb{R}^{2}\) בתור צירוף לינארי של אברי הקבוצה הזו, אבל מצד שני, גם הקבוצה \(\left\{ \left(0,1\right),\left(1,1\right)\right\} \) מספיקה (ולמעשה – כל תת-קבוצה של שניים משלושת הוקטורים הללו מספיקה). לכן \(\left\{ \left(1,0\right),\left(0,1\right),\left(1,1\right)\right\} \) איננה מינימלית. מה השתבש? ובכן, את \(\left(1,1\right)\) אפשר לכתוב בתור \(\left(0,1\right)+\left(1,0\right)\), כך שאין בו באמת צורך: בכל צירוף לינארי של אברי הקבוצה שמשתמש ב-\(\left(1,1\right)\) אפשר להעיף אותו ופשוט לעדכן את המקדמים של \(\left(0,1\right),\left(1,0\right)\) בהתאם. למשל, נביט על \(2\left(1,0\right)+3\left(0,1\right)-4\left(1,1\right)=\left(-2,-1\right)\). מכיוון ש-\(\left(1,1\right)=\left(0,1\right)+\left(1,0\right)\), אפשר לעשות את התרגיל החשבוני הבא:

\(\left(-2,-1\right)=2\left(1,0\right)+3\left(0,1\right)-4\left[\left(1,0\right)+\left(0,1\right)\right]\)

\(=2\left(1,0\right)-4\left(1,0\right)+3\left(0,1\right)-4\left(0,1\right)\)

\(=\left(2-4\right)\cdot\left(1,0\right)+\left(3-4\right)\cdot\left(0,1\right)\)

\(=-2\left(1,0\right)-\left(0,1\right)\)

בקיצור, אם יש לנו קבוצת וקטורים שבה אחד הוקטורים ניתן לכתיבה כצירוף לינארי של היתר הוא תמיד מיותר ותמיד אפשר להעיף אותו ועדיין לקבל קבוצה שפורשת את אותו תת מרחב בדיוק. קבוצה כזו, שבה וקטור אחד לפחות ניתן להצגה כצירוף לינארי של שאר הוקטורים, נקראת קבוצה תלויה לינארית, ובאופן בלתי מפתיע קבוצה שבה לא ניתן להציג אף וקטור מהקבוצה כצירוף לינארי של האחרים היא קבוצה בלתי תלויה לינארית.

למרבה השמחה, קיים קריטריון פשוט ויפה לבדוק מתי קבוצה היא בלתי תלויה לינארית: \(\left\{ v_{1},\dots,v_{n}\right\} \) היא בלתי תלויה לינארית אם השוויון \(\sum\lambda_{i}v_{i}=0\) גורר ש-\(\lambda_{i}=0\) לכל \(i\). במילים: קבוצה היא בלתי תלויה לינארית אם הדרך היחידה להציג את 0 כצירוף לינארי של איבריה היא הדרך הטריוויאלית שבה כל המקדמים הם 0 (ההגדרה עובדת גם עבור קבוצות אינסופיות, אם שוב מסכימים ש"צירוף לינארי" הוא כזה שבו תמיד רק מספר סופי של מקדמים שונה מאפס). בואו נראה למה הקריטריון הזה נכון:

אם \(\sum\lambda_{i}v_{i}=0\) אבל לא כל המקדמים הם אפס, למשל \(\lambda_{1}\ne0\), אז אפשר להעביר אגפים ולקבל \(-\lambda_{1}v_{1}=\lambda_{2}v_{2}+\dots+\lambda_{n}v_{n}\), ומכיוון ש-\(\lambda_{1}\ne0\) אפשר לחלק בו ולקבל \(v_{1}=-\frac{\lambda_{2}}{\lambda_{1}}v_{2}-\dots-\frac{\lambda_{n}}{\lambda_{1}}v_{n}\), כלומר קיבלנו שאחד הוקטורים בקבוצה הוא צירוף לינארי של האחרים ולכן הקבוצה תלויה לינארית (שימו לב איך השתמשנו כאן בעובדה שהסקלרים הם מתוך שדה ולכן תמיד אפשר לחלק ב-\(\lambda_{1}\); אם היכולת הפעוטה הזו לבצע חילוק נלקחת מאיתנו, זה פותח פתח לעולם מתמטי שלם ומרתק שלא כאן המקום להיכנס אליו).

מצד שני, \(\left\{ v_{1},\dots,v_{n}\right\} \) היא תלויה לינארית זה אומר שאחד הוקטורים, למשל \(v_{1}\), הוא צירוף לינארי של האחרים: \(v_{1}=\lambda_{2}v_{2}+\dots+\lambda_{n}v_{n}\). נעביר אותו אגף ונקבל \(-v_{1}+\lambda_{2}v_{2}+\dots+\lambda_{n}v_{n}=0\), והרי לנו צירוף לינארי לא טריוויאלי (כי המקדם של \(v_{1}\) אינו אפס) ששווה אפס.

אם כן, קבוצת וקטורים היא תלויה לינארית אם ורק אם קיים צירוף לינארי לא טריוויאלי שלה ששווה אפס, ולכן היא בלתי תלויה לינארית אם ורק אם הצירוף הלינארי היחיד שלה ששווה אפס הוא הטריוויאלי. זו דוגמה נאה לאופי ה"פשוט" של הוכחות באלגברה לינארית; אני מאוד אוהב את ההוכחות הללו, שפשוט מוכיחות את עצמן ואני יכול לכתוב מהראש יותר מעשר שנים אחרי שלמדתי את החומר הזה לראשונה.

ועכשיו להגדרה החשובה ביותר בפוסט: אם \(V\) הוא מרחב וקטורי ו-\(B\) היא קבוצת וקטורים שהיא בלתי תלויה לינארית וגם פורשת את \(V\), אז הקבוצה נקראת בסיס ל-\(V\). השאלה הראשונה שעולה בדרך כלל אחרי הגדרה של אובייקט מתמטי כלשהו היא – האם האובייקט בכלל קיים? ובאילו תנאים הוא קיים? במקרה של בסיס התשובה פשוטה – לכל מרחב וקטורי קיים בסיס. זה המשפט ה"כבד" הראשון שאני רוצה להוכיח כאן (למעשה, כבר הוכחתי אותה בעבר אבל נעשה את זה שוב). לרוע המזל, במקרה הכללי ההוכחה אינה כה פשוטה, ולכן לפני שאגש אליה אציג כמה תכונות מעניינות על בסיסים שיקלו עלינו בהמשך. בשורה התחתונה נגיע לכך שההוכחה תהיה פשוטה למדי עבור מרחבים שיש להם קבוצה פורשת סופית, אך עבור מרחבים שאין להם קבוצה כזו היא תהיה מסובכת משמעותית יותר ותזדקק לכלי מתמטי לא טריוויאלי.

אם כן, בואו נניח של-\(V\) יש קבוצה פורשת \(\left\{ u_{1},u_{2},\dots,u_{m}\right\} \). הקבוצה הזו יכולה להיות תלויה לינארית; אני לא מניח עליה שום דבר מלבד זה שהיא פורשת וכוללת \(n\) איברים. הטענה שלי כעת היא שכל קבוצה בלתי תלויה לינארית ב-\(V\) מכילה לכל היותר \(n\) איברים; כלומר, שקיום קבוצה פורשת מגודל \(n\) משרה חסם על הגודל המקסימלי של קבוצה בלתי תלויה לינארית.

למה זה נכון? ובכן, בזכות מה שראינו על משוואות לינאריות! נניח ש-\(\left\{ v_{1},\dots,v_{n}\right\} \) היא קבוצת וקטורים ב-\(V\) ו-\(n>m\). מטרתנו היא להראות שקיים צירוף לינארי \(\sum_{i=1}^{n}\lambda_{i}v_{i}=0\) שבו לא כל המקדמים הם אפס. כדי לחדד את העובדה שאנחנו מחפשים פה את המקדמים הללו נכתוב אותם כמשתנים: אנו רוצים למצוא פתרון לא טריוויאלי למשוואה \(\sum_{i=1}^{n}x_{i}v_{i}=0\).

נראה שאפשר לתרגם את הבעיה הזו לבעיה של פתרון מערכת משוואות לינארית. איך? ובכן, מכיוון ש-\(\left\{ u_{1},\dots,u_{n}\right\} \) היא קבוצה פורשת, כל \(v_{i}\) ניתן לכתיבה כצירוף לינארי של איברים ממנה. כלומר, \(v_{i}=\sum_{j=1}^{m}a_{ij}u_{j}\). אם נציב את המשוואה הזו בקודמת נקבל \(\sum_{i=1}^{n}x_{i}\left(\sum_{j=1}^{m}a_{ij}u_{j}\right)=0\). כעת אפשר לעשות תעלול של שינוי סדר סכימה ולקבל שהמשוואה הזו זהה למשוואה \(\sum_{j=1}^{m}\left(\sum_{i=1}^{n}a_{ij}x_{i}\right)u_{j}=0\).

עכשיו הפאנץ': בואו נביט לרגע במערכת המשוואות ההומוגנית שמוגדרת על ידי \(\sum_{i=1}^{n}a_{ij}x_{i}=0\). זו מערכת עם \(n\) משתנים ו-\(m\) משוואות, כאשר \(n>m\). למערכת כזו בהכרח יש פתרונות לא טריוויאליים, כי אחרי דירוג המטריצה המתאימה נקבל לכל היותר \(m\) משתנים תלויים, ועדיין יישארו לנו \(n-m\) משתנים בלתי תלויים שאפשר להציב בהם כל ערך שנרצה ועדיין לקבל פתרון. לכן אם ניקח בתור המקדמים \(\lambda_{1},\dots,\lambda_{n}\) פתרון לא טריוויאלי של המשוואה ההומוגנית, המשוואה \(\sum_{j=1}^{m}\left(\sum_{i=1}^{n}a_{ij}\lambda_{i}\right)u_{j}=0\) תתקיים מייד כי היא בעצם המשוואה \(\sum_{j=1}^{m}0\cdot u_{j}=0\). זה מסיים את המשפט.

ההוכחה הזו ממחישה במובן מסויים למה היה חשוב להתחיל את הדיון באלגברה לינארית ממשוואות לינאריות דווקא; אני מוכיח פה טענה כללית על מרחבים וקטוריים, אבל נזקק לצורך כך לידע שיש לי על פתרון משוואות לינאריות. זו רק ההתחלה – במקרים רבים הוכחות באלגברה לינארית מגיעות בסופו של דבר לפתרון משוואות לינאריות.

כעת בואו נשים לב לאפיון מקסים של בסיסים שמראה שהם על קו התפר הדק שבין קבוצות בלתי תלויות לינארית, וקבוצות פורשות. אם קבוצה \(B\) היא בסיס ל-\(V\) אז היא מקסימלית ביחס לתכונה "להיות בלתי תלויה לינארית", ומינימלית ביחס לתכונה "לפרוש את \(V\)". למה הכוונה? במקסימליות כוונתי לכך שאם נוסיף ל-\(B\) וקטור כלשהו, אז \(B\) תחדל מלהיות בלתי תלויה לינארית, וזה ברור מכיוון ש-\(B\) פורשת את כל \(V\) ולכן כל וקטור שנוסיף ל-\(B\) יהיה וקטור שכבר ניתן להצגה כצירוף לינארי של אברי \(B\). במינימליות כוונתי לכך שאם נוריד מ-\(B\) וקטור כלשהו ששייך לה, אז \(B\) תחדל מלהיות פורשת, וזה נכון מכיוון שאם הסרנו וקטור \(v\) מתוך \(B\), אז \(v\) הזה כבר לא ניתן להצגה כצירוף לינארי של הוקטורים שנשארו (אחרת \(B\) לא הייתה בלתי תלויה לינארית).

מה שבאמת יפה כאן הוא שגם ההפך נכון: אם יש לנו קבוצה \(A\) כלשהי שהיא מינימלית ביחס לפרישת \(V\), היא בהכרח בלתי תלויה ולכן בסיס, ואם יש לנו קבוצה \(A\) כלשהי שהיא מקסימלית ביחס ללהיות בלתי תלויה אז היא בהכרח פורשת את \(V\) ולכן בסיס. נסו להוכיח זאת בעצמכם – זה לא קשה. אם לסכם את מה שאמרתי במשפט קולע וקומפקטי אפשר לומר כי שלוש התכונות הבאות שקולות, עבור קבוצה \(B\) במרחב \(V\):

  1. \(B\) היא בסיס.
  2. \(B\) בלתי תלויה והוספת כל וקטור של \(V\) תהפוך אותה לתלויה.
  3. \(B\) פורשת את \(V\) והסרת כל וקטור מ-\(B\) תגרום לכך שהיא כבר אינה פורשת את \(V\).

סוף סוף אפשר להוכיח שלמרחב וקטורי שבו יש קבוצה פורשת סופית (נאמר, מגודל \(m\)), יש בסיס, אבל למעשה אוכיח משהו חזק יותר: שכל קבוצה בלתי תלויה \(A\) (כולל הקבוצה הריקה) ניתן להשלים לבסיס של \(V\). כלומר, לא משנה אילו איברים כבר יש ב-\(A\), כל עוד היא בלתי תלויה אפשר לבנות בסיס שמכיל את כל אברי \(A\) ואולי עוד איברים.

ההוכחה היא פשוטה להפליא: \(A\) היא בלתי תלויה לינארית. אם היא פורשת את כל \(V\), סיימנו; היא בסיס. אחרת, אם היא לא פורשת את כל \(V\), קיים וקטור ב-\(v\) שאינו נפרש על ידה ולכן הוספתו ל-\(A\) תותיר את \(A\) בלתי תלויה. אז נוסיף אותו ונבדוק שוב האם קיבלנו קבוצה פורשת או לא. מובטח לנו שהתהליך יסתיים ברגע שנקבל קבוצה בת \(m\) איברים – זו עדיין תהיה קבוצה בלתי תלויה, אבל יהיה לנו מובטח שהוספת כל וקטור אליה תהפוך אותה לתלויה שזה בדיוק תנאי 2 לעיל (שימו לב ש-\(A\) מלכתחילה חייבת להיות בת לכל היותר \(m\) איברים אחרת מובטח לנו שהיא תהיה תלויה).

אפשר להוכיח גם בכיוון השני: נניח ש-\(A\) היא עצמה קבוצה פורשת של \(V\), אז בואו נתחיל להסיר ממנה וקטורים שניתן להציג אותם כצירוף לינארי של שאר הוקטורים בקבוצה (אם אין כאלו, הקבוצה בלתי תלויה לינארית ולכן בסיס). בסופו של דבר נגיע לכך שלא נוכל להסיר עוד איברים ואז תכונה 3 תבטיח שהגענו לבסיס.

שתי הגישות הללו הן פשוטות להחריד: זה מראה כמה קל למצוא בסיסים עבור מרחבים וקטוריים – הגישה החמדנית הפשוטה, של "יש וקטור כלשהו שעוד לא פרשת? קח אותו לבסיס!" עובדת.

עכשיו, בואו נשים לב לעוד תכונה חשובה של בסיסים. אמרנו שאם יש ב-\(V\) קבוצה פורשת עם \(m\) איברים, אז כל קבוצה עם \(n>m\) איברים היא תלויה לינארית; כעת, בואו נניח שיש לנו שני בסיסים \(B_{1},B_{2}\), כך שב-\(B_{1}\) יש \(m\) איברים וב-\(B_{2}\) יש \(n\) איברים ו-\(m\le n\). מכיוון ש-\(B_{1}\) היא קבוצה פורשת, אז אם \(n>m\) נקבל ש-\(B_{2}\) היא קבוצה תלויה; אבל \(B_{2}\) היא בסיס ולכן קבוצה בלתי תלויה, ולכן בהכרח \(n=m\). כלומר, אם יש לנו בסיס מגודל סופי עבור \(V\), אז כל בסיס של \(V\) הוא מאותו הגודל בדיוק. זה מוביל אותנו להגדרה החשובה השניה של הפוסט: אם \(B\) בסיס סופי למרחב וקטורי \(V\), אז הגודל של \(B\) נקרא המימד של \(V\). כך למשל \(\mathbb{R}^{2}\) הוא ממימד 2 כי יש לו את הבסיס \(\left\{ \left(0,1\right),\left(1,0\right)\right\} \). לרוב מסמנים מימד של מרחב באופן הבא: \(\dim V\). כלומר, \(\dim\mathbb{R}^{2}=2\).

\(\dim V\)הוא קו הגבול שלנו בין קבוצות בלתי תלויות לינארית וקבוצות פורשות. אם בקבוצה יש יותר מ-\(\dim V\) איברים, היא בהכרח תלויה לינארית כפי שכבר ראינו; ואם בקבוצה יש פחות מ-\(\dim V\) איברים היא בהכרח לא פורשת את \(V\) (כי אם היא הייתה פורשת אז קבוצה בעלת \(\dim V\) איברים הייתה תלויה לינארית ולכן לא בסיס). זה אחד המאפיינים החשובים ביותר של מרחבים וקטוריים ועוד ניתקל בו בהמשך.

בואו נראה עכשיו דוגמה למרחבים ולבסיס שלהם. המרחב יהיה \(\mathbb{F}^{n}\) – זה, כזכור, מרחב כל ה-\(n\)-יות של איברים מ-\(\mathbb{F}\). הבסיס הוא פשוט מאוד: \(n\)-יות שיש בהן 0 בכל מקום חוץ מבכניסה אחת שבה יש 1. למשל, עבור \(\mathbb{F}^{3}\) הבסיס יהיה מורכב מהוקטורים \(e_{1}=\left(1,0,0\right)\), \(e_{2}=\left(0,1,0\right)\) ו-\(e_{3}=\left(0,0,1\right)\). באופן כללי בסיס ל-\(\mathbb{F}^{n}\) יהיה מורכב מוקטורים \(e_{1},\dots,e_{n}\). די בבירור זו קבוצה פורשת, וגם להראות שהיא בלתי תלויה לינארית זה די פשוט (כי \(\sum\lambda_{i}e_{i}=\left(\lambda_{1},\dots,\lambda_{n}\right)\) ולכן אם אגף ימין הוא וקטור האפס גם \(\lambda_{1}=\dots=\lambda_{n}=0\)). הבסיס הספציפי הזה של \(\mathbb{F}^{n}\) נקרא הבסיס הסטנדרטי.

אני רוצה להדגיש ש"הבסיס הסטנדרטי" הוא משהו שקיים עבור \(\mathbb{F}^{n}\), לא עבור כל מרחב וקטורי. למשל, בואו נביט בתת המרחב של \(\mathbb{R}^{2}\) שמורכב מכל הוקטורים מהצורה \(\left(a,a\right)\). תת המרחב הזה נפרש על ידי הוקטור הבודד \(\left(1,1\right)\); וקטורים מהצורה \(\left(1,0\right)\) או \(\left(0,1\right)\) לא הולכים לפרוש אותו ואפילו לא שייכים אליו בכלל. לכן לתת המרחב \(\left\{ \left(a,a\right)|a\in\mathbb{R}\right\} \) פשוט אין בסיס סטנדרטי. אני מקווה שאני מונע כרגע בלבול נפוץ שצץ אצל אנשים שנתקלים באלגברה לינארית לראשונה (בוודאי כזה שצץ אצלי בשעתו).

בואו נשים לב לעוד משהו ונסיים בזאת: אם \(V\) הוא מרחב וקטורי ו-\(U\) הוא תת-מרחב שלו, אז \(\dim U\le\dim V\) ויש שוויון רק אם \(U=V\). גם זו לא תוצאה מובנת מאליה; הרעיון הוא לקחת בסיס ל-\(U\) ואז להשלים אותו לבסיס של \(V\), מה שבהכרח רק יוסיף וקטורים ולכן יגדיל את \(\dim V\). אם לא מוסיפים וקטורים כלל (ולכן \(\dim U=\dim V\)) אז הבסיס ל-\(U\) הוא גם בסיס ל-\(V\), ולכן \(U=V\) – שניהם שווים למרחב שאותו הבסיס פורש.

לסיום, אני רוצה להציג את ההוכחה שיש ל-\(V\) בסיס גם אם אין ל-\(V\) קבוצה פורשת סופית. במקרה כזה, שבו לא קיימת קבוצה פורשת סופית (או באופן שקול, קיימת קבוצה בלתי תלויה לינארית אינסופית) אומרים ש-\(V\) הוא "אינסוף ממדי". עבור מרחבים כאלו, בסיס הוא לרוב לא מעניין במיוחד ויותר מתעניינים בקבוצה שסכומים אינסופיים של איברים מתוכה פורשים את כל איברי המרחב (אלא שיש לכך משמעות רק במקרה שבו אפשר לתת משמעות לסכומים אינסופיים שכאלו). חלק מהבעיה היא שלמרות שבסיס תמיד קיים, זה לא אומר שקל למצוא אותו – הוכחת הקיום היא לא קונסרטוקטיבית ומתבססת על הלמה של צורן. מי שמתעניין בהמשך, אני ממליץ לו שיקרא קודם על הלמה של צורן אחרת לא יהיה ברור במיוחד מה אני עושה.

ובכן, תהא \(A\) קבוצה בלתי תלויה כלשהי ב-\(V\). נתבונן על אוסף כל הקבוצות הבלתי תלויות ב-\(V\) שמכילות את \(A\). אם נראה שיש קבוצה מקסימלית באוסף הזה, סיימנו (כבר ראינו שקבוצה שהיא מקסימלית ביחס ל"להיות בלתי תלויה" חייבת להיות בסיס). לשם כך מספיק להראות שכל שרשרת של קבוצות \(A_{1}\subseteq A_{2}\subseteq A_{3}\subseteq\dots\) היא בעלת חסם מלמעלה – כלומר, קבוצה בלתי תלויה ב-\(V\) שמכילה את \(A\) וגם את כל אברי השרשרת. הדרך הטבעית להגדיר קבוצה שכזו היא פשוט בתור האיחוד \(\bigcup A_{i}\); זו בוודאי קבוצה שמכילה את \(A\) ואת כל אברי השרשרת, אבל מדוע היא בלתי תלויה לינארית? ובכן, נניח שהיא תלויה לינארית, אז יש בה איברים \(v_{1},\dots,v_{m}\) כך ש-\(\sum\lambda_{i}v_{i}=0\) וזה צירוף לינארי לא טריוויאלי. אבל מכיוון ש-\(v_{1},\dots,v_{m}\) היא קבוצה סופית של איברים, יש \(A_{k}\) כלשהו בשרשרת שמכיל את כולם, ולכן כבר \(A_{k}\) הוא קבוצה בלתי תלויה לינארית – סתירה. זה מסיים את ההוכחה בזכות הלמה של צורן.

בפוסט הבא, כדי לעשות את החיים מעניינים, נתחיל לדבר על טרנספורמציות לינאריות – מה שקורה כשלוקחים מרחב וקטורי ומתחילים להתעלל בו.

אז מה זה מרחב וקטורי?

בשעה טובה ומוצלחת הגענו לפוסט שיתאר במדויק את האובייקט המרכזי של האלגברה הלינארית – מרחב וקטורי. אפשר פשוט לתת את ההגדרה שהיא בעיקר רשימת מכולת של כל מני תכונות אלגבריות, אבל אני מעדיף להתחיל מלהיזכר מה ראינו עד כה.

בפוסט הקודם התעסקתי באוספי פתרונות של מערכות משוואות הומוגניות. מערכת משוואות שכזו הייתה מהצורה \(Ax=0\) כאשר \(A\) מטריצה כלשהי והערכים שאנחנו מציבים במקום \(x\) הם וקטורים: כל וקטור היה סדרה של מספרים (או, אם תרצו, מטריצה בעלת עמודה אחת). בפוסט הקודם שמנו לב לכך שסכום של שני פתרונות של אותה המשוואה גם הוא פתרון של אותה המשוואה, ושכפל של פתרון בסקלר (כלומר, במספר) נותן גם הוא פתרון של המשוואה. כלומר, אוסף הפתרונות היה סגור לחיבור וכפל בסקלר. אמרתי כבר אז שאלו התכונות המהותיות שמגדירות מרחב וקטורי: מרחב וקטורי מכיל איברים, "וקטורים", שניתן לחבר, וניתן לכפול בסקלר.

הבה ונראה עוד דוגמה: מטריצות. גם שתי מטריצות מאותם ממדים אנחנו יודעים לחבר (כל כניסה במטריצה שמתקבלת מהחיבור היא סכום האיברים בכניסות המתאימות במטריצות שמחברים) ואנחנו יודעים לכפול בסקלר (פשוט כופלים את כל הכניסות במטריצה באותו סקלר). זה הופך את המטריצות מסדר \(n\times m\) למרחב וקטורי (לכל \(n,m\)), ומאפשר לנו להצביע כבר עכשיו על בלבול טרמינולוגי שעשוי להיווצר: מצד אחד, אמרתי שוקטור הוא פשוט מטריצה חד ממדית; מצד שני, הנה ראינו שכל מטריצה היא איבר של מרחב וקטורי מתאים. כדי למנוע את הבלבול הזה נזכור שלמטריצות חד-ממדיות קראתי "וקטור עמודה" ו"וקטור שורה" ואת המילה "וקטור" נייחד לדיבור על איבר של מרחב וקטורי כלשהו, כשברור על איזה מרחב וקטורי מדובר.

עבור מטריצות גם ראינו פעולת כפל בין זוגות של מטריצות – משהו שונה מהותית מכפל בסקלר. מרחבים וקטוריים לא מתעניינים בשאלה אם יש או אין כפל בין הוקטורים עצמם, אבל במתמטיקה עוסקים רבות גם במרחבים וקטוריים שבהם אכן קיימת פעולת כפל כזו. מרחב וקטורי שיש כפל בין איבריו נקרא אלגברה, אך בשלב הזה אין טעם לדבר עליו. כמו כן, יש סוג אחר של פעולת כפל בין וקטורים – "מכפלה פנימית" – שמחזיר סקלר ולא וקטור; זה מושג חשוב מאוד באלגברה לינארית אך גם עליו לא נדבר עדיין. בינתיים אנחנו חושבים רק על פעולות החיבור והכפל בסקלר.

לפני שנתקדם עוד, אני רוצה לדבר קצת יותר על מהו סקלר, בעצם. עד כה השתמשתי בהגדרה המעורפלת של "סקלר הוא מספר" ותמיד חשבנו על הסקלרים שלנו בתור מספרים ממשיים. המספרים הממשיים הם קבוצה "נחמדה" במובן זה שהיא סגורה ביחס לארבע פעולות החשבון הבסיסיות – חיבור, חיסור, כפל וחילוק (רק חילוק ב-0 הוא פעולה בלתי אפשרית; כל יתר הפעולות הן חוקיות). בנוסף, בממשיים יש את המספר 0 שהוא נחמד במובן זה שהוא נייטרלי לחיבור (\(0+x=x\) לכל איקס) ואת 1 שהוא נחמד במובן זה שהוא נייטרלי לכפל (\(1\times x=x\) לכל \(x\)). לבסוף, החיבור והכפל מקיימים את חוקי החילוף, הקיבוץ והפילוג. כל התכונות הללו הופכות את הממשיים לקבוצה שמאוד נחמד לעשות בה חשבון, ולקבוצות כאלו יש שם מיוחד: שדה. כתבתי על שדות פוסט לא מזמן, אבל בואו נזכיר את ההגדרה לכל מקרה: שדה \(\mathbb{F}\) הוא קבוצה שקיימים בה איברים שמסומנים ב-\(0,1\) ומוגדרות עליה פעולות חיבור וכפל כך שמתקיים:

  1. חוק החילוף: \(a+b=b+a\) ו-\(ab=ba\).
  2. חוק הקיבוץ: \(\left(a+b\right)+c=a+\left(b+c\right)\) ו-\(\left(ab\right)c=a\left(bc\right)\).
  3. חוק הפילוג: \(a\left(b+c\right)=ab+ac\).
  4. נייטרליות ביחס לחיבור וכפל של 0 ו-1: \(x+0=x\) ו-\(x\cdot1=x\) לכל \(x\in\mathbb{F}\).
  5. קיום נגדי חיבורי: אם \(x\in\mathbb{F}\) אז קיים ב-\(\mathbb{F}\) איבר שמסומן כ-\(-x\) כך ש-\(x+\left(-x\right)=0\).
  6. קיום הופכי כפלי: אם \(x\in\mathbb{F}\) ו-\(x\ne0\) אז קיים איבר שמסומן כ-\(x^{-1}\) כך ש-\(xx^{-1}=1\).

שתי הדרישות האחרונות מאפשרות לנו להגדיר חיסור וחילוק בעזרת חיבור וכפל: לחסר ממישהו מספר זה בעצם לחבר לו את הנגדי של אותו המספר, ולחלק אותו במספר זה בעצם לכפול אותו בהופכי של אותו המספר.

יפה, אז זו ההגדרה לשדה. \(\mathbb{R}\) הוא שדה, וגם \(\mathbb{C}\) (המרוכבים) הוא שדה, וגם \(\mathbb{Q}\) (הרציונליים) הוא שדה ויש עוד ועוד. את רוב מה שנעשה בעתיד הקרוב אפשר לתאר מעל כל שדה ולכן נשתמש ב-\(\mathbb{F}\) כדי לתאר שדה כלשהו.

כעת, כשנעסוק במרחב וקטורי תמיד יהיה שדה כלשהו ברקע, וכשנגיד "סקלר" נתכוון תמיד לאיבר של אותו השדה.

עכשיו, כדי לא למתוח אתכם יותר, בואו נביא את ההגדרה הפורמלית למרחב וקטורי ואז נדבר קצת. קבוצה \(V\) היא מרחב וקטורי מעל השדה \(\mathbb{F}\) אם קיימת פעולת חיבור בין איברי \(V\) ופעולת "כפל בסקלר" בין איבר של \(\mathbb{F}\) ואיבר של \(V\) (נהוג לכתוב את האיבר של \(\mathbb{F}\) מצד שמאל ואת האיבר של \(V\) מימין) שמחזירה איבר של \(V\) כך שפעולת החיבור של \(V\) מקיימת את חוקי החילוף והקיבוץ, יש ב-\(V\) איבר נייטרלי לחיבור 0 ולכל איבר קיים איבר נגדי חיבורי – את כל אלו אנחנו כבר מכירים מההגדרה של שדה, אבל ב-\(V\) אין כפל של איברים ולכן הוא אינו שדה.

גם פעולת הכפל בסקלר צריכה "להתנהג יפה", וזה בא לידי ביטוי בכך שהיא מקיימת גרסה מתאימה של חוק הקיבוץ וחוק הפילוג. אני אסמן ב-\(\lambda,\tau\) איברים של \(\mathbb{F}\) (סקלרים) וב-\(v,u\) איברים של \(V\) (וקטורים), ועכשיו אפשר לכתוב פורמלית את הדרישות הללו. חוק הקיבוץ נראה כך:

\(\left(a\times b\right)\cdot v=a\cdot\left(b\cdot v\right)\)

כאן אני מסמן בנקודה את פעולת הכפל בסקלר, וב-\(\times\) את פעולת הכפל של השדה \(\mathbb{F}\). כך קצת יותר ברור למה דרישת האסוציאטיביות איננה טריוויאלית; אני בעצם דורש שפעולת הכפל בסקלר תכבד במובן חזק למדי את פעולת הכפל בתוך השדה \(\mathbb{F}\). זה מקשה עלינו מאוד להמציא מרחבים וקטוריים מטורללים עם פעולות כפל בסקלר מוזרות (ולכן אחראי במידה רבה לכך שהאלגברה הלינארית היא "פשוטה" שכזו).

מכיוון שיש לנו חיבור הן ב-\(\mathbb{F}\) והן ב-\(V\) ואלו שתי פעולות שונות, יש לנו גם שני חוקי פילוג:

\(\left(a+b\right)v=av+bv\)

\(a\left(v+u\right)=av+au\)

לבסוף, צריך לדרוש במפורש שתתקיים התכונה הטבעית למדי לפיה אם כופלים את איבר היחידה של \(\mathbb{F}\) בוקטור כלשהו הוא אינו משתנה: \(1\cdot v=v\).

זו כל ההגדרה. אל תחשבו עליה בתור "מישהו ישב והמציא רשימת תכונות מוזרה ועכשיו הוא משחק איתן ורואה מה יוצא". מה שקורה פה הוא שזיהינו את התכונות המהותיות שהופיעו באוסף הפתרונות של משוואות הומוגניות, ובמטריצות, ובדוגמאות שעוד רגע אביא, ועכשיו אנחנו מנסים להבין עד כמה התכונות הספציפיות הללו אחראיות למבנה ה"יפה" של המבנים המתמטיים הללו. כל דבר שנוכיח עבור מרחב וקטורי כללי יהיה נכון אוטומטית גם עבור כל הדוגמאות שנצליח לחשוב עליהן – וזה בדיוק מקור הכוח של הגישה האבסטרקטית שאנחנו נוקטים בה כאן.

בואו נעבור לדוגמה אחרת למרחב וקטורי שגם אותה הזכרתי כבר – המישור האוקלידי. במישור הזה כל נקודה היא וקטור, שמתואר על ידי זוג מספרים ממשיים בסוגריים: \(\left(3,2\right)\) הוא וקטור שמתאים לנקודה שקואורדינטת ה-\(x\) שלה היא 3 וקואורדינטת ה-\(y\) שלה היא 2. לרוב כשמדברים על נקודה כזו בתור "וקטור" נהוג לצייר חץ מראשית הצירים אליה ולחשוב על החץ הזה בתור הוקטור. יש לגישה הזו יתרון בכך שלפעמים נוח לחשוב על הוקטור לא במונחים של קואורדינטות \(x\) ו-\(y\) אלא של גודל (אורך החץ) וכיוון (הזווית של החץ עם ציר \(x\)) אבל לא נזדקק לגישה הזו.

חיבור וקטורים מתבצע על ידי כך שלוקחים את אחד החצים ומדביקים אותו כך שהזנב שלו נמצא על הראש של השני. כעת מציירים חץ חדש מראשית הצירים אל הנקודה שאליה הראש של החץ הראשון הגיע. מבחינה גאומטרית זה נראה מתוסבך, אבל מבחינה מעשית זה פשוט לחבר את הקואורדינטות של שני הוקטורים: \(\left(3,2\right)+\left(1,1\right)=\left(4,3\right)\).

כפל בסקלר של וקטור מתבצע על ידי כפל בסקלר של הקואורדינטות, כלומר \(\frac{1}{2}\left(3,2\right)=\left(\frac{3}{2},1\right)\). המשמעות הגאומטרית של פעולה כזו היא "מתיחה" או "כיווץ" של הוקטור – שינוי הגודל שלו תוך שמירה על הזווית. עם שתי הפעולות הללו, המישור האוקלידי הוא מרחב וקטורי מעל \(\mathbb{R}\).

באופן דומה גם המרחב האוקלידי הוא מרחב וקטורי, רק שהפעם כל וקטור הוא שלשה של קואורדינטות, אבל חוקי החיבור והכפל בסקלר זהים. מכאן מייד עולה השאלה – אם עשינו את זה עבור 2 ו-3, למה לא לעשות את זה באופן כללי? ואכן, המרחב האוקלידי ה-\(n\) ממדי הוא אוסף \(n\)-יות של מספרים ממשיים, כש-\(n\)-יה של מספרים ממשיים זו פשוט דרך מפוצצת להגיד "סדרה של \(n\) מספרים ממשיים", עם פעולות חיבור וכפל בסקלר על פי קואורדינטות. את המרחב הזה מסמנים ב-\(\mathbb{R}^{n}\), ולכן המישור האוקלידי מסומן בפרט כ-\(\mathbb{R}^{2}\) והמרחב האוקלידי התלת ממדי ב-\(\mathbb{R}^{3}\).

לבסוף אפשר לבצע עוד אבסטרקציה אחת: אם \(\mathbb{F}\) הוא שדה כלשהו, אז \(\mathbb{F}^{n}\), אוסף ה-\(n\)-יות עם איברים מתוך \(\mathbb{F}\), הוא מרחב וקטורי מעל \(\mathbb{F}\) עם אותן הגדרות לחיבור וכפל בסקלר. אותו \(\mathbb{F}^{n}\) הוא אולי הדוגמה החשובה ביותר למרחב וקטורי – בהמשך נראה שאפשר לחשוב על כל מרחב וקטורי סוף-ממדי בתור \(\mathbb{F}^{n}\) ("סוף-ממדי" הוא מושג שיובהר בהמשך) עם \(\mathbb{F}\)ו-\(n\) מסויימים, וזו אולי הדרך הפשוטה ביותר שאני מכיר לחשוב על מרחבים וקטוריים.

בואו נראה תכף ומייד איך זה קורה על ידי דוגמא אחרת למרחבים וקטוריים – פולינומים. פולינום הוא ביטוי מהצורה \(a_{n}x^{n}+a_{n-1}x^{n-1}+\dots+a_{1}x+a_{0}\) כאשר \(a_{0},a_{1},.\dots,a_{n}\) נקראים "מקדמים" ו-\(x\) הוא "משתנה". בנוסף, אנחנו מניחים ש-\(a_{n}\ne0\) (אחרת לא היה טעם לכתוב את \(a_{n}x^{n}\) מלכתחילה) ו-\(n\) נקרא מעלת הפולינום. למשל, \(x^{2}+1\) הוא פולינום ממעלה שניה ו-\(x^{5}+x^{4}+18x\) הוא פולינום ממעלה חמישית.

בהקשר שלנו, המקדמים תמיד נלקחים מעל שדה נתון מסויים; ב-\(\mathbb{F}\left[x\right]\) מסומן אוסף הפולינומים עם מקדמים מתוך \(\mathbb{F}\). החיבור והכפל בסקלר מוגדרים בצורה הטבעית, "מקדם-מקדם". למשל, \(\left(a_{1}x+a_{0}\right)+\left(b_{2}x^{2}+b_{1}x+b_{0}\right)=b_{2}x^{2}+\left(a_{1}+b_{1}\right)x+\left(a_{0}+b_{0}\right)\). קיבלנו מרחב וקטורי שאגלה כבר עכשיו שאיננו סוף-ממדי. מה שכן, אפשר לדבר גם על "תת-מרחבים" (מושג שעוד יחזור לו בהמשך) של "כל הפולינומים ממעלה קטנה מ-\(n\)". מרחב כזה מסומן ב-\(\mathbb{F}_{n}\left[x\right]\). למשל, \(\mathbb{R}_{2}\left[x\right]\) הוא מרחב כל הפולינומים ממעלה קטנה מ-2 במקדמים ממשיים, כלומר כל הפולינומים מהצורה \(a_{1}x+a_{0}\) כאשר הפעם \(a_{1}\) יכול להיות אפס. הסימון הזה טיפה מבלבל כי היינו מצפים ש-\(\mathbb{R}_{2}\left[x\right]\) יהיה מרחב כל הפולינום ממעלה שניה, אבל במחשבה שניה הוא דווקא הגיוני כי כל פולינום ב-\(\mathbb{R}_{2}\left[x\right]\) מתואר על ידי זוג של מספרים: \(a_{1},a_{0}\). אם היינו מרשים פולינומים ממעלה שניה, כבר היינו מדברים על שלשות של מספרים.

כעת, שימו לב שבמקום לכתוב \(a_{1}x+a_{0}\) הייתי יכול לכתוב \(\left(a_{0},a_{1}\right)\), וזה בעצם איבר של \(\mathbb{R}^{2}\). כלומר, אפשר לחשוב על איבר של \(\mathbb{R}_{2}\left[x\right]\) גם בתור איבר של \(\mathbb{R}^{2}\). יותר מכך: \(\left(a_{1}x+a_{0}\right)+\left(b_{1}x+b_{0}\right)=\left(a_{1}+b_{1}\right)x+\left(a_{0}+b_{0}\right)\), ומצד שני \(\left(a_{0},a_{1}\right)+\left(b_{0},b_{1}\right)=\left(a_{0}+b_{0},a_{1}+b_{1}\right)\), מה שאומר שאברי \(\mathbb{R}_{2}\left[x\right]\) ואברי \(\mathbb{R}^{2}\) נראים אותו דבר גם אחרי הפעלת פעולת חיבור, ובאופן דומה גם אחרי כפל בסקלר. כל זה מוביל אותנו למסקנה ש-\(\mathbb{R}_{2}\left[x\right]\) ו-\(\mathbb{R}^{2}\) הם אותו מרחב וקטורי עד כדי הבדל בשיטת הסימון שלנו לאברי המרחב הוקטורי הזה. בלשון מתמטית אומרים ש-\(\mathbb{R}^{2}\) ו-\(\mathbb{R}_{2}\left[x\right]\) הם מרחבים איזומורפיים.

אמרנו כבר שמטריצות הן דוגמה למרחב וקטורי, אבל אני רוצה לחדד את זה – גם קבוצה של חלק מהמטריצות יכולה להוות מרחב וקטורי. למשל, הבה ונתבונן על מטריצות מסדר \(2\times2\) שבהן האיברים שאינם על האלכסון הראשי הם אפס: למטריצה כזו יש צורה כללית \(\left[\begin{array}{cc}a_{0} & 0\\0 & a_{1}\end{array}\right]\). כעת מתגלה – הפתעה הפתעה! – שאוסף המטריצות הזה הוא מרחב וקטורי, וכזה שאיזומורפי ל-\(\mathbb{R}^{2}\) ול-\(\mathbb{R}_{2}\left[x\right]\). זו גם הזדמנות מצויינת לחדד נקודה עדינה: למרות שמרחב המטריצות הנ"ל ו-\(\mathbb{R}_{2}\left[x\right]\) הם איזומורפיים כמרחבים וקטוריים, זה לא אומר שהם זהים באופן מוחלט; זה אומר שהם זהים רק ביחס למה שמהווה מרחב וקטורי, כלומר פעולות החיבור והכפל בסקלר. ביחס לפעולות אחרות המרחבים הללו עשויים להיות שונים לגמרי. למשל, הכרנו פעולה של כפל מטריצות; במקרה שלנו מתקיים \(\left[\begin{array}{cc}a_{0} & 0\\0 & a_{1}\end{array}\right]\left[\begin{array}{cc}b_{0} & 0\\0 & b_{1}\end{array}\right]=\left[\begin{array}{cc}a_{0}b_{0} & 0\\0 & a_{1}b_{1}\end{array}\right]\). לעומת זאת, אם נכפול את הפולינומים \(a_{1}x+a_{0}\) ו-\(b_{1}x+b_{0}\) נקבל בכלל \(a_{1}b_{1}x^{2}+\left(a_{1}b_{0}+a_{0}b_{1}\right)x+a_{1}a_{0}\) שלא ממש מזכיר את המטריצה שהתקבלה מהכפל (וחמור מכך, הוא בכלל פולינום ממעלה שניה, כלומר לא איבר של \(\mathbb{R}_{2}\left[x\right]\)). כלומר, מרחב המטריצות ומרחב הפולינומים לא מתנהגים אותו דבר ביחס לפעולת כפל בין איברים, אלא רק ביחס לפעולת כפל בסקלר.

מרחב המטריצות הזה הוא מה שנקרא תת מרחב וקטורי. באופן כללי, אם \(V\) הוא מרחב וקטורי ו-\(U\) היא תת-קבוצה של \(V\) שהיא עצמה מהווה מרחב וקטורי אם שוכחים מ-\(V\), אז \(U\) מכונה תת-מרחב של \(V\). בהינתן \(V\) שאנו יודעים שהוא מרחב וקטורי ותת קבוצה \(U\) שלו, די קל לבדוק אם \(U\) מהווה מרחב וקטורי – לא צריך לבדוק אם כל חוקי הפילוג/קיבוץ/חילוף מתקיימים כי אנחנו יודעים שהם מתקיימים עבור כל אברי \(V\) ואברי \(U\) הם בפרט איברים של \(V\); מה שכן צריך לבדוק הוא ש-\(U\) סגור לחיבור וכפל בסקלר ומזה ינבע כל היתר. במקרה של המטריצות, למשל, צריך לוודא שאחרי שמחברים אותן או כופלים אותן בסקלר עדיין מתקבלת מטריצה עם אפסים בכניסות שאינן על האלכסון הראשי, מה שאכן קורה; אבל "קבוצת כל המטריצות \(2\times2\) שיש בהן 1 איפה שהוא" בוודאי אינה סגורה לכפל בסקלר (למעשה, יש לכל היותר 4 סקלרים שבהם ניתן לכפול מטריצה מהמרחב ועדיין להישאר בתוכו; מהם?) ולכן איננה תת-מרחב.

עכשיו אפשר לעבור לדוגמה נוספת. הבה ונתבונן על \(\mathbb{C}\) – שדה המרוכבים. נשכח לרגע מכך שיש פעולת כפל בין אברי \(\mathbb{C}\) ונחשוב רק על פעולת החיבור, וכעת הבה ונגדיר פעולה של "כפל בסקלר" עם איבר של \(\mathbb{R}\), הממשיים. מה תהיה הפעולה הזו? בדיוק פעולת הכפל הרגילה של \(\mathbb{C}\), רק ש"צמצמנו" אותה ואנחנו מרשים כפל רק בין איבר של \(\mathbb{R}\) ואיבר של \(\mathbb{C}\). עם פעולות החיבור והכפל בסקלר הללו \(\mathbb{C}\) מהווה מרחב וקטורי מעל \(\mathbb{R}\).

את הרעיון הזה אפשר להכליל בקלות: נניח ש-\(F\) הוא שדה ו-\(E\) הוא שדה שמכיל את \(F\). אז יש פעולת כפל שמוגדרת באופן טבעי בין איברי \(F\) ואברי \(E\) – פעולת הכפל הרגילה של \(E\). כאשר מצמצמים את הפעולה הזו רק לאברי \(F\), מקבלים ש-\(E\) הוא מרחב וקטורי מעל \(F\), לכל זוג שדות \(E\supseteq F\). האבחנה הזו היא הבסיס לתחום המתמטי המרתק של תורת השדות. שימו לב ש-\(F\) הוא בפרט מרחב וקטורי מעל \(F\), ולכן \(F\) הוא גם תת-מרחב וקטורי של \(E\) במקרה הזה.

והנה עוד דוגמה למרחב וקטורי: פונקציות ממשיות, \(f:\mathbb{R}\to\mathbb{R}\). "חיבור" של שתי פונקציות \(f,g\) יניב פונקציה \(f+g\) שמוגדרת כך: \(\left(f+g\right)\left(x\right)=f\left(x\right)+g\left(x\right)\), וכפל בסקלר של \(f\) יניב פונקציה \(\lambda f\) שמוגדרת כך: \(\left(\lambda f\right)\left(x\right)=\lambda\cdot f\left(x\right)\). תחת ההגדרות הללו קיבלנו מרחב וקטורי, וכמובן שאפשר להכליל את ההגדרה לסוגים רבים ושונים של פונקציות. כך למשל פונקציות ממשיות רציפות הן תת-מרחב וקטורי של מרחב הפונקציות שתיארתי כרגע.

והנה עוד דוגמה: הבה ונסתכל על נוסחת הנסיגה \(x_{n}=x_{n-1}+x_{n-2}\). "פתרון" של הנוסחה הזו הוא סדרת אינסופית של מספרים \(a_{0},a_{1},a_{2},\dots\) שמקיימים את הנוסחה, כלומר \(a_{n}=a_{n-1}+a_{n-2}\) (עבור \(n\ge2\)). כעת, אם ניקח שתי סדרות כאלו ונחבר אותן, או ניקח סדרה ונכפול אותה בסקלר, עדיין נקבל פתרון של נוסחת הנסיגה – זה מראה שאוסף כל הפתרונות של נוסחת הנסיגה \(x_{n}=x_{n-1}+x_{n-2}\) הוא תת-מרחב וקטורי של מרחב שאסמן ב-\(\mathbb{R}^{\omega}\) – מרחב כל הסדרות האינסופיות של ממשיים עם חיבור וכפל על פי קואורדינטות. לאבחנה שמרחב הפתרונות הזה הוא מרחב וקטורי יש חשיבות לא קטנה כאשר פותרים נוסחאות נסיגה מעין אלה.

אפשר להמשיך ולתת עוד דוגמאות, אבל אני מקווה שהרעיון הבסיסי הובן. בפוסט הבא נעבור לדבר על המושג המרכזי שמתקשר למרחבים וקטוריים – בסיס.

משוואות לינאריות – הקרב האחרון

בפוסטים הקודמים שלי על אלגברה לינארית הסברתי קצת איך אפשר לפתור משוואות לינאריות על ידי הבאה שלהן לצורה פשוטה ככל האפשר, ואז הסברתי שבעזרת מטריצות אפשר לחשוב על ה"צורה הפשוטה ככל האפשר" הזו בתור סוג מיוחד של מטריצה, אבל זה עדיין לא סיים את הסיפור. בפוסט הזה אני רוצה לתת את התשובה הסופית והחד משמעית לשאלה – איך פותרים מערכת של משוואות לינאריות?

בסימונים שלנו, מערכת של \(n\) משוואות לינאריות עם \(m\) משתנים \(x_{1},\dots,x_{m}\) מתוארת על ידי מטריצה \(A\) מסדר \(n\times m\), כך ש-\(A_{ij}\) הוא המקדם של המשתנה \(x_{j}\) במשוואה ה-\(i\) (כלומר, השורות מייצגות משוואות והעמודות מייצגות מקדמים). את המערכת כולה אפשר לכתוב כ-\(A\overline{x}=\overline{c}\) כאשר \(\overline{x}=\left(x_{1},x_{2},\dots,x_{m}\right)\) הוא וקטור המשתנים, ו-\(\overline{c}=\left(c_{1},\dots,c_{n}\right)\) הוא וקטור של האגף הימני של המשוואה: כלומר, המשוואה ה-\(i\) היא מהצורה \(A_{i1}x_{1}+A_{i2}x_{2}+\dots A_{im}x_{m}=c_{i}\). אם רוצים להיות ממש ממש מדוייקים, אז \(\overline{x}\) ו-\(\overline{c}\) שניהם חייבים להיות וקטורי עמודה, כלומר \(\overline{x}=\left[\begin{array}{c}x_{1}\\\vdots\\x_{m}\end{array}\right]\) ו-\(\overline{c}=\left[\begin{array}{c}c_{1}\\\vdots\\c_{n}\end{array}\right]\).

הדבר הראשון שאני רוצה שנשים לב אליו הוא שלמשוואה מהצורה \(A\overline{x}=\overline{0}\), כלומר כזו שבה \(\overline{c}\) פשוט כולו אפסים, יש חשיבות מיוחדת. משוואה כזו נקראת משוואה הומוגנית (או מערכת משוואות הומוגנית – אני פשוט חושב כבר על מערכות של משוואות בתור משוואה מטריציונית אחת). הסיבה לחשיבות שלה היא זו: נניח שיש לנו משוואה כללית \(A\overline{x}=\overline{c}\) ונניח ש-\(v\) ו-\(u\) הם שני וקטורי פתרונות של המשוואה, כלומר \(Av=\overline{c}\) וגם \(Au=\overline{c}\) (למה אין קו מעל ה-\(u,v\)? כי \(u,v\) בדרך כלל מסמנים וקטורים, להבדיל מ-\(c\) שבדרך כלל מסמן מספר בודד; בקרוב אשמיט את הקו גם מעל \(\overline{0}\) כי מעצבן לכתוב אותו כל הזמן כשברור שהכוונה לוקטור). אז מתקיים ש-\(Au-Av=\overline{0}\) על פי ההגדרה שנתתי לחיבור (ולכן גם לחיסור) מטריצות; ומכיוון שכללי החיבור והכפל של מטריצות מקיימים את חוג הפילוג, נובע מכך ש-\(A\left(u-v\right)=0\). במילים אחרות, אם \(u,v\) הם שניהם פתרונות למערכת משוואות כלשהי, לא בהכרח הומוגנית, עם מטריצת מקדמים \(A\), אז \(u-v\) הוא פתרון למערכת המשוואות ההומוגנית עם מטריצת המקדמים \(A\).

זה מוביל אותנו לאבחנת המחץ הבאה: אם \(v\) הוא פתרון של המשוואה \(A\overline{x}=\overline{c}\), אז כל פתרון של המשוואה הזו ניתן לכתיבה בתור \(v+w\) כאשר \(w\) הוא פתרון של המשוואה ההומוגנית \(A\overline{x}=\overline{0}\)! בואו נבהיר לעצמנו שוב למה: אם \(v\) הוא הפתרון הנתון שלנו, ו-\(u\) הוא פתרון כלשהו של המשוואה \(A\overline{x}=\overline{c}\) אז אפשר להגדיר וקטור חדש \(w=u-v\). כפי שראינו, \(w\) יהיה פתרון של המשוואה ההומוגנית, ומכיוון ש-\(w=u-v\) אז על ידי העברת אגפים נקבל ש-\(u=v+w\), כפי שהבטחתי. גם ההפך נכון: אם \(v\) הוא פתרון של \(A\overline{x}=\overline{c}\) ו-\(w\) הוא פתרון של המשוואה ההומוגנית המתאימה, אז \(v+w\) גם הוא פתרון של \(A\overline{x}=\overline{c}\): זאת מכיוון ש-\(A\left(v+w\right)=Av+Aw=\overline{c}+\overline{0}=\overline{c}\).

במילים אחרות, אם אנחנו רוצים לדעת מהם כל הפתרונות של \(A\overline{x}=\overline{c}\), מספיק לנו למצוא פתרון פרטי יחיד למשוואה הזו, ולמצוא את כל הפתרונות למשוואה ההומוגנית \(A\overline{x}=\overline{0}\). בלשון ציורית יותר (שיש לה משמעות גאומטרית קונקרטית), אוסף הפתרונות של \(A\overline{x}=\overline{c}\) הוא בדיוק אוסף הפתרונות של \(A\overline{x}=\overline{0}\) כשהוא מוזז על ידי חיבור עם פתרון פרטי כלשהו.

בואו נקדיש אם כן כמה דקות להבנה איך מוצאים פתרון פרטי יחיד למשוואה \(A\overline{x}=\overline{c}\), ולאחר מכן נוכל לשכוח לנצח מקיומה ולעבור לדבר רק על משוואות הומוגניות, שכפי שיתברר בקרוב הן מרתקות פי כמה וכמה.

הצעד הראשון בדרך לפתרון משוואה היא לדרג את \(A\) ולתקן את \(\overline{c}\) בהתאם, אז בואו נניח שכבר עשיתי זאת: נותר להבין איך מוצאים פתרון למשוואה \(A\overline{x}=\overline{c}\) כאשר \(A\) היא מטריצה מצומצמת. כמה דוגמאות יקלו מאוד על ההבנה של מה שהולך כאן. נתחיל ממערכת ממש פשוטה:

\(\left[\begin{array}{ccc}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_{1}\\x_{2}\\x_{3}\end{array}\right]=\left[\begin{array}{c}5\\2\\7\end{array}\right]\)

כאן המטריצה המצומצמת היא פשוט מטריצה אלכסונית, והפתרון נובע מאליו: \(x_{1}=5\) ו-\(x_{2}=2\) ו-\(x_{3}=7\) – אלו פשוט שלוש המשוואות שמיוצגת על ידי המערכת.

נסכם את כלל האצבע שקיבלנו כאן: אם במטריצה שלנו יש שורה שכולה אפסים פרט ל-1 בודד, אז המשתנה שמתאים לעמודה שבה מופיע ה-1 שווה בדיוק לערך המספרי שבאגף ימין של המשוואה.

כעת נעבור למערכת קצת יותר בעייתית:

\(\left[\begin{array}{ccc}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 0\end{array}\right]\left[\begin{array}{c}x_{1}\\x_{2}\\x_{3}\end{array}\right]=\left[\begin{array}{c}5\\2\\7\end{array}\right]\)

זו אותה מערכת כמו קודם רק שעכשיו השורה האחרונה במטריצה המצומצמת כולה אפסים – זה בהחלט עשוי לקרות. במקרה הזו למערכת פשוט אין פתרון: המשוואה השלישית שמיוצגת על ידי המטריצה היא המשוואה \(0=7\) שאין לה פתרון. למי שעדיין מוזר לו שדברים כאלו עשויים להתרחש, תסתכלו על המערכת הבאה של שתי משוואות בשני נעלמים:

\(x_{1}+x_{2}=7\)

\(x_{1}+x_{2}=0\)

המערכת הזו היא פשוט דרך מסורבלת לכתוב \(0=7\) שוב, אבל הפעם עם משתנים. אם נדרג את מטריצת המקדמים של המשוואה נגיע אל \(\left[\begin{array}{cc}1 & 1\\0 & 0\end{array}\right]\left[\begin{array}{c}x_{1}\\x_{2}\end{array}\right]=\left[\begin{array}{c}7\\-7\end{array}\right]\) שבבירור אין לה פתרון.

אם כן, נסכם את כלל האצבע: אם במטריצה המדורגת שלנו יש שורת אפסים שבה באגף ימין של המשוואה יש מספר שאינו אפס, למערכת כולה אין פתרון. אם יש שורת אפסים במטריצה כך שגם באגף ימין יש אפס, זה לא אומר כלום; השורה הזו לא אומרת שאין פתרון למשוואה, אבל היא גם לא מסייעת לנו במציאת הפתרון. סיטואציה כזו מתארת מצב שבו יש לנו "עודף אינפורמציה" במערכת המקורית – משוואות שאומרות את אותו הדבר, אולי בצורה קצת שונה. למשל, המערכת הזו:

\(x_{1}+x_{2}=2\)

\(4x_{1}+4x_{2}=8\)

אלו שתי משוואות שהן למעשה אותו דבר, ובדירוג של המטריצה המתאימה נקבל שורת אפסים ששווה לאפס.

סיטואציה עוד יותר מורכבת שעלולים להיתקל בה היא זו:

\(\left[\begin{array}{cccc}1 & & & 2\\ & 1 & & 0\\ & & 1 & 3\end{array}\right]\left[\begin{array}{c}x_{1}\\x_{2}\\x_{3}\\x_{4}\end{array}\right]=\left[\begin{array}{c}5\\3\\8\end{array}\right]\)

(כשאני מתעצל ולא כותב תוכן של תא במטריצה הכוונה היא תמיד לכך שהוא 0)

מה הולך כאן? המטריצה היא מצומצמת, אבל לא אלכסונית, ויש עמודה "מכוערת" שנותרה בחיים גם אחרי הצמצום – העמודה שמתאימה למשתנה \(x_{4}\). סיטואציה כמו זו מתאימה למצב שבו יש יותר משתנים ממשוואות, ולכן יש אינסוף פתרונות. מה שעושים כאן הוא לחשוב על המשתנה הרביעי \(x_{4}\) בתור "פרמטר" – אנחנו שואלים את עצמנו – אם \(x_{4}=t\), מה חייבים להיות הערכים ששאר המשתנים מקבלים?

מהמשוואה הראשונה נקבל ש-\(x_{1}+2x_{4}=5\), כלומר אם \(x_{4}=t\) אז \(x_{1}=5-2t\). בדומה, מהמשוואה השלישית נקבל ש-\(x_{3}=8-3t\). המשוואה השניה נותנת לנו \(x_{2}=3\) בלי קשר לערכו של \(x_{4}\). כמו כן, אם היו עוד עמודות במטריצה, היינו מקבלים עוד משתנים שצריך לחשוב עליהם כפרמטרים. הנקודה היא שלכל הצבת ערכים במשתנים שהם פרמטרים, אנחנו מקבלים באופן חד ערכי את הערכים של \(x_{1},x_{2},x_{3}\) בפתרון המתאים; ובפרט אם אנחנו רק רוצים פתרון פרטי של המערכת אפשר לבחור להציב 0 בכל המשתנים הפרמטריים. במקרה שלנו הצבה כזו תיתן לנו את הפתרון הפרטי \(x_{1}=5,x_{2}=3,x_{3}=8\) ו-\(x_{4}=0\).

באופן כללי, כל פתרון של המשוואה הזו הוא מהצורה \(\left(5-2t,3,8-3t,t\right)\). שימו לב שאפשר לכתוב את זה גם כ-\(\left(5,3,8,0\right)+\left(-2t,0,-3t,t\right)\), וש-\(\left(-2t,0,-3t,t\right)\) הוא פתרון כללי למשוואה ההומוגנית \(\left[\begin{array}{cccc}1 & & & 2\\ & 1 & & 0\\ & & 1 & 3\end{array}\right]\left[\begin{array}{c}x_{1}\\x_{2}\\x_{3}\\x_{4}\end{array}\right]=\left[\begin{array}{c}0\\0\\0\end{array}\right]\); כך בפועל אנחנו רואים איך פתרונות למשוואה הלא הומוגנית נכתבים כסכום של פתרון פרטי של המשוואה הלא הומוגנית ופתרון עבור המשוואה ההומוגנית.

לפעמים קצת פחות ברור מי המשתנים התלויים ומי המשתנים הפרמטריים, למשל כאן:

\(\left[\begin{array}{cccc}1 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_{1}\\x_{2}\\x_{3}\\x_{4}\end{array}\right]=\left[\begin{array}{c}5\\3\\8\end{array}\right]\)

זוהי מטריצה מצומצמת, אבל כאן \(x_{2}\) הוא משתנה פרמטרי, לא משתנה תלוי (אם כי זו הבדלה קצת קלושה במקרה הזה כי באותה מידה אפשר לחשוב על \(x_{1}\) בתור המשתנה הפרמטרי). אם תזכרו, ההגדרה של מטריצה מצומצמת כללה דרישה לפיה בכל שורה, הכניסה הראשונה שאיננה אפס תהיה 1, ושהעמודה שבה שוכנת כניסה זו תכיל אפסים בכל מקום מלבד השורה שבה היא 1. הכניסה הזו מתאימה למשתנה תלוי; החשיבות כאן היא בכך שמובטח לנו שאותו משתנה לא יופיע שוב באף אחת מהמשוואות האחרות.

אם כן, כלל האצבע הוא כזה: בהינתן המטריצה המצומצמת, בכל שורה שאיננה שורת אפסים, מצא מיהו המשתנה שמתאים לכניסה הראשונה שאיננה 0. לאחר שמצאת את כל המשתנים הללו, הצב 0 בכל המשתנים האחרים, ו"קרא" את הפתרון עבור המשתנים התלויים מתוך המשוואות שהתקבלו לאחר ההצבה הזו. זה הכל.

זה סוגר את השאלה איך פותרים משוואות לינאריות לחלוטין, אבל כל העניין הזה עם "משתנים תלויים" ובלתי תלויים ופרמטרים כנראה עדיין נראה מוזר למדי למי שלא מכיר אותו. בואו נעבור לדבר עליו קצת יותר ברצינות, ולשם כך נדבר מכאן והלאה רק על משוואות הומוגניות.

מה שנחמד במשוואות הומוגניות, להבדיל ממשוואות כלליות, הוא שקל לבנות פתרונות חדשים מתוך פתרונות קיימים. אם \(Av=0\) ו-\(c\) הוא מספר כלשהו, אז גם \(A\left(cv\right)=0\), כאשר \(cv\) מייצג הכפלה של כל כניסה של \(v\) במספר \(c\) – לפעולה כזו קוראים כפל של וקטור בסקלר. הוקטור הוא \(v\) והסקלר הוא \(c\); מכאן ואילך אשתמש במילה "סקלר" כדי לתאר מספר, כשהמטרה בשימוש ב"סקלר" היא לחדד את ההבדל שבינו ובין וקטור.

כמו כן, אם \(v,u\) שניהם פתרונות של המערכת ההומוגנית ש-\(A\) מתאר, אז גם סכומם הוא פתרון כי \(A\left(v+u\right)=Av+Au=0+0=0\). במילים: קבוצת הפתרונות של משוואה הומוגנית סגורה לפעולות של חיבור וכפל בסקלר. בסוד אגלה כבר עכשיו ששתי התכונות הללו הופכות את קבוצות הפתרונות הזו למרחב וקטורי, שהוא האובייקט המרכזי באלגברה לינארית.

כעת, למערכת משוואות הומוגנית תמיד יש פתרון אחד לפחות: \(\overline{0}\). כשכופלים מטריצה כלשהי בוקטור האפס, תמיד מקבלים וקטור שכולו אפסים. אבל שימו לב שזה לא חייב להיות וקטור מאותו האורך! למשל, \(\left[\begin{array}{ccc}1 & 0 & 1\\0 & 1 & 1\end{array}\right]\left[\begin{array}{c}0\\0\\0\end{array}\right]=\left[\begin{array}{c}0\\0\end{array}\right]\). זכרו – וקטור העמודה משמאל מתאים למשתנים, וזה שמימין מתאים למשוואות.

לפתרון 0 הזה קוראים "הפתרון הטריוויאלי". השאלה שלנו כשאנחנו מתעסקים במערכת משוואות היא אם קיימים פתרונות שאינם טריוויאליים. אם קיים ולו פתרון אחד שאינו טריוויאלי למערכת הומוגנית, אז יש לה אינסוף פתרונות, כי אפשר לכפול את הפתרון בכל אחד מאינסוף הסקלרים האפשריים ולקבל פתרון חדש, להבדיל מהפתרון הטריוויאלי שאם כופלים אותו בסקלר מקבלים שוב אותו עצמו (כדאי להעיר כאן שאפשר לדבר על משוואות לינאריות גם בעולמות שבהם הסקלרים נלקחים מתוך קבוצה סופית – "שדה סופי" – אבל לעת עתה לא נדבר עליהם; במקרים הללו אוסף הפתרונות אכן יהיה סופי). אם כן, מה שאנחנו מחפשים אינו רשימה של כל הפתרונות כי כזו תהיה גדולה מדי מכדי שניתן יהיה לכתוב אותה; אנחנו מחפשים ייצוג פשוט לקבוצת כל הפתרונות.

למשל: נניח שהתמזל מזלנו וגילינו ש-\(\left(3,2,1\right)\) הוא פתרון למשוואה הומוגנית כלשהי. אנחנו יודעים שכל כפולה שלו בסקלר \(t\) גם היא תהיה פתרון, אז \(\left\{ \left(3t,2t,t\right)|t\in\mathbb{R}\right\} \) הוא ייצוג קומפקטי יחסית לקבוצת חלק מהפתרונות של המשוואה; אולי יש עוד פתרונות שאינם רק כפולה של \(\left(3,2,1\right)\). אם, למשל, גם \(\left(6,6,6\right)\) הוא פתרון, אז גם כל וקטור מהצורה \(\left(6s,6s,6s\right)\) כאשר \(s\in\mathbb{R}\) הוא פתרון, ואז גם סכום של כל וקטור מהצורה \(\left(3t,2t,t\right)\) עם וקטור מהצורה \(\left(6s,6s,6s\right)\) יהיה פתרון – קיבלנו ש-\(\left\{ \left(3t+6s,2t+6s,t+6s\right)|t,s\in\mathbb{R}\right\} \) גם הוא ייצוג קומפקטי (יחסית!) לקבוצת חלק מהפתרונות. אבל אולי יש עוד פתרון שטרם תפסנו…

זה מוביל אותנו להגדרה הבאה: אם \(v_{1},v_{2},\dots,v_{n}\) היא קבוצה של וקטורים ו-\(\lambda_{1},\lambda_{2},\dots,\lambda_{n}\) הם סקלרים, אז הביטוי \(\lambda_{1}v_{1}+\lambda_{2}v_{2}+\dots+\lambda_{n}v_{n}\) (או בקיצור, \(\sum_{i=1}^{n}\lambda_{i}v_{i}\)) נקרא צירוף לינארי של הוקטורים \(v_{1},\dots,v_{n}\) עם המקדמים \(\lambda_{1},\dots,\lambda_{n}\). אם \(v_{1},\dots,v_{n}\) הם פתרונות של משוואה הומוגנית, אז גם כל צירוף לינארי שלהם הוא פתרון. לא קשה לראות שעבור כל קבוצת וקטורים, אוסף כל הצירופים הלינאריים שלה מקיים את התכונות של "סגור לכפל בסקלר ולחיבור" ולכן הוא מרחב וקטורי – המרחב שנפרש על ידי \(v_{1},\dots,v_{n}\). האתגר שלנו עם מערכת המשוואות הלינאריות הוא למצוא קבוצת פתרונות שפורשת את כל מרחב הפתרונות; ויותר מכך – קבוצה מינימלית של פתרונות שפורשת את כל מרחב הפתרונות. קבוצה כזו נקראת בסיס למרחב הפתרונות. תכף ומייד עולה השאלה מי מבטיח לנו בכלל שיש מספר סופי של פתרונות שפורשים את כל היתר. זו שאלה מצויינת ולא טריוויאלית בכלל; העובדה שזה אכן המצב – שלמרות שיכולים להיות למשוואה הומוגנית אינסוף פתרונות, תמיד תהיה קבוצת סופית של פתרונות שפורשים את כל היתר – היא תוצאה מקסימה וחזקה.

טוב, אז למה זה נכון? ואיך מוצאים את הבסיס הזה? את זה כבר ראינו, בערך: משתמשים במטריצה המצומצמת. אם \(Ax=0\) היא מערכת משוואות הומוגנית כלשהי, אז גם אחרי שנדרג את \(A\) נקבל מערכת משוואות הומוגנית (עם אותם פתרונות בדיוק). כעת, כבר הסברתי כיצד ניתן למצוא מהם המשתנים התלויים והמשתנים הבלתי תלויים (המשתנים התלויים הם בדיוק אלו שיש שורה שבה הכניסה שלהם היא הראשונה שאינה 0). בואו נניח שמבין \(m\) משתנים, בדיוק \(r\) הראשונים הם המשתנים התלויים. זה אומר שיש לנו \(m-r\) פתרונות שונים למערכת שהם מהצורה \(v_{1}=\left(x_{1},\dots,x_{r},1,0,0,\dots,0\right)\), \(v_{2}=\left(x_{1},\dots,x_{r},0,1,0,\dots,0\right)\), וכו' עד \(v_{m-r}=\left(x_{1},\dots,x_{r},0,0,0,\dots,1\right)\), כאשר בכל וקטור שכזה ה-\(x_{1},\dots,x_{r}\) לא זהים אלא נקבעים בכל פעם מחדש על פי מה שקורה כשמציבים 0 בכל המשתנים הבלתי תלויים חוץ מאחד מהם שבו מציבים 1.

בואו נבין למה כל פתרון אפשרי של המשוואה ניתן לכתיבה כצירוף לינארי של הפתרונות הללו. התשובה פשוטה: אם \(v=\left(a_{1},a_{2},\dots,a_{r},b_{1},b_{2},\dots,b_{m-r}\right)\) הוא פתרון כלשהו של המשוואה (בכוונה אני מפריד בין הערכים במקומות של המשתנים התלויים והערכים במקומות של המשתנים הבלתי תלויים), אז \(v=b_{1}v_{1}+b_{2}v_{2}+\dots+b_{m-r}v_{m-r}\). השאלה היא רק למה. ראשית, שימו לב ש-\(b_{1}v_{1}=\left(b_{1}x_{1},\dots,b_{1}x_{r},b_{1},0,0,\dots,0\right)\), ושהקוארדינטה שבה מופיע \(b_{1}\) לבד היא כזו שבשאר הוקטורים בסכום היא אפס, ולכן גם בסכום הכולל הקוארדינטה הזו תהיה \(b_{1}\) כפי שצריך, וכנ"ל לכל הקוארדינטות שאחריה. השאלה היא רק למה הקוארדינטות הראשונות, של המשתנים התלויים, "יוצאות בסדר". וכאן יש לי טיעון מחץ שעשוי להיות מבלבל קצת במבט ראשון, אבל חוסך לי את החשבונאות שנראה שצריך להיכנס אליה בכדי להבין מה קורה בקוארדינטות של המשתנים התלויים.

ראשית, בואו ותסכימו איתי ש-\(v^{\prime}=b_{1}v_{1}+b_{2}v_{2}+\dots+b_{m-r}v_{m-r}\) הוא פתרון של המשוואה ההומוגנית \(Ax=0\) – הוא חייב להיות כזה, כי הוא צירוף לינארי של פתרונות של המערכת. בנוסף, אותו וקטור \(v\) שניסיתי לכתוב הוא כמובן פתרון של המשוואה ההומוגנית כי מזה התחלתי. אני מאוד מקווה ש-\(v^{\prime}=v\), אבל טרם שכנעתי אתכם בכך: בינתיים אנחנו יודעים רק שהם שווים ב-\(m-r\) הקוארדינטות האחרונות. אבל, מכיוון ששניהם פתרונות של המשוואה ההומוגנית כך גם \(v^{\prime}-v\), וקטור ההפרש שלהם. אם \(v^{\prime}=v\) אז וקטור ההפרש הזה הוא וקטור האפס; אם הם לא שווים אז כל קוארדינטה שבה הם נבדלים תהיה שונה מאפס. אם כן, אנחנו יודעים בודאות ש-\(v^{\prime}-v\) הוא אפס לפחות בקוארדינטות שמתאימות למשתנים הבלתי תלוים, כלומר \(m-r\) האחרונות, ושהוא פתרון למשוואה ההומוגנית. אבל מה זה אומר? זה אומר שהוא פתרון למשוואה ההומוגנית שבו מציבים 0 בכל המשתנים הבלתי תלויים, וזה מכריח את המשתנים התלויים להיות 0 גם כן. מדוע? כי כל שורה במערכת המצומצמת היא מהצורה \(x_{i}+\lambda_{1}y_{1}+\dots+\lambda_{m-r}y_{m-r}=0\) כאשר \(x_{i}\) הוא המשתנה התלוי היחיד שמופיע בשורה הזו, ו-\(y_{1},\dots,y_{m-r}\) הם המשתנים הבלתי תלויים עם המקדמים שלהם שמתאימים לשורה הזו (חלק מהמקדמים יכולים להיות אפסים). אם נציב 0 בכל המשתנים הבלתי תלויים נקבל \(x_{i}=0\).

אם לחזור על הטיעון בקצרה לטובת מי שאיבדו אותי: למשוואה \(Ax=0\) יש רק פתרון אחד שבו כל המשתנים הבלתי תלויים הם 0, וזה הפתרון הטריוויאלי שבו כל המשתנים הם 0. לכן, מכיוון ש-\(v^{\prime}-v\) הוא פתרון שבו כל המשתנים הבלתי תלויים הם 0 הוא חייב להיות וקטור האפס ולכן \(v^{\prime}=v\). זה אומר שכדי לבנות את \(v\) הספיק לי לבנות את הצירוף הלינארי של אותם \(v_{1},\dots,v_{m-r}\) באופן כזה שהכניסות של \(v^{\prime}\) שמתאימות למשתנים הבלתי תלויים "יצאו בסדר" כדי להבטיח שגם הכניסות של המשתנים התלויים יהיו בסדר. זו המחשה מוצלחת לטעמי של האופן שבו אלגברה לינארית היא פשוטה והכל בה מסתדר היטב.

זה סוף הסיפור מבחינת משוואות לינאריות; ראינו איך באמצעות דירוג המטריצה אנחנו יכולים לקבל בקלי קלות קבוצה לא גדולה של פתרונות למערכת המשוואות שממנה אפשר לבנות בקלות כל פתרון אחר (לא הסברתי עדיין למה זו הקבוצה המינימלית, כי זה מצריך דיון קצת יותר מורכב על מושג הבסיס שאני מעדיף לדחות להמשך). אבל מבחינת האלגברה הלינארית זו רק ההתחלה. בפוסט הזה צצו מאליהם מושגים רבים שהם מרכזיים באלגברה לינארית: מרחב וקטורי, צירוף לינארי, פרישה, בסיס. את הרעיונות הללו אפשר לתאר בהקשרים רחבים הרבה יותר מאשר פתרון משוואות לינאריות, ודווקא הגישה הכללית יותר הופכת אותם לפשוטים יותר להבנה. בפוסט הבא אתאר פורמלית את המושגים המרכזיים באלגברה לינארית – שדה ומרחב וקטורי – ואז נוכל להתחיל לבצע את הדיבור הכללי הזה.

כפל מטריצות – מה, לעזאזל?

בפוסט הקודם הצגתי מטריצות בתור כלי שעוזר לי לפתור מערכת משוואות – במקום לכתוב כל פעם את כל מערכת המשוואות, אני כותב מטריצה ו"מדרג" אותה והתהליך חוסך לי כתיבה מיותרת וקצת יותר קל לקריאה. זו מן הסתם לא הסיבה למה מטריצות הן כל כך מעניינות ו"אחד המושגים הבסיסיים ביותר במתמטיקה" כפי שאני שוב ושוב מפמפם. הסיבה האמיתית היא שמטריצות הן יצורים אלגבריים – אפשר להגדיר עליהן פעולות של חיבור וכפל שבמובן מסויים מזכירות מאוד את החיבור והכפל הרגילים, וזה מעניק למטריצות מבנה מעניין.

כשאני אומר "מזכיר", אני מתכוון שמתקיים למשל \(A+B=B+A\) (כלל החילוף), ושמתקיים \(A\left(B+C\right)=AB+AC\) (כלל הפילוג) ומתקיים \(\left(AB\right)C=A\left(BC\right)\) (כלל הקיבוץ, שמתקיים גם לחיבור). בנוסף, עוד לפני שהפוסט הזה יסתיים נראה איך פעולת הכפל של מטריצות מתקשרת הן לפתרון משוואות והן לבעיה שונה לחלוטין – ספירת מסלולים בגרפים.

בנוסף אגלה כבר עכשיו שאחד מה"גביעים הקדושים" שאני חותר אליהם בדיבורים על אלגברה לינארית הוא ייצוג של פונקציות חשובות מסויימות (טרנספורמציות לינאריות) בתור מטריצות, ואז כפל מטריצות יתאים בדיוק לפעולה של הרכבת פונקציות. אם להיות יותר קונקרטיים, דוגמה לכך באה לידי ביטוי בציור אובייקטים תלת ממדיים: אפשר לבצע עליהם מניפולציות גאומטריות שונות ומשונות דוגמת סיבוב סביב ציור מסויים, שיקוף, וכיווץ או מתיחה – כל הפעולות הללו הן טרנספורמציות לינאריות וקיימות מטריצות שמתארות אותן, ואפשר "לאגור" ביצוע של פעולות שונות על ידי כפל של המטריצות הללו עד לקבלה של מטריצה אחת סופית שמייצגת את כל השינויים שביצענו (מי שיפתח ספריה של גרפיקה תלת ממדית, נאמר OpenGL, קרוב לודאי שיתקל שם במטריצות).

ולמה כל ההקדמה הזו? כי כפי שנראה, פעולת הכפל שאציג לא ממש תהיה מה שאנשים מצפים לה ממבט ראשון.

בואו ניזכר טיפה מהן מטריצות. מטריצה \(A\) שהיא מסדר \(n\times m\) כוללת \(nm\) "כניסות", כך שכל כניסה היא בעלת שני אינדקסים – הראשון בין 1 ו-\(n\) ("שורה") והשני בין 1 ו-\(m\) ("עמודה"). כל כניסה כוללת מספר כלשהו (לצורך הדיון בינתיים אני מניח שזה מספר ממשי). את הכניסה בשורה \(i\) ועמודה \(j\) מסמנים ב-\(A_{ij}\).

כעת, אם יש לנו שתי מטריצות \(A,B\), כיצד נגדיר מטריצה \(C=A+B\)? בתור התחלה, אף אחד לא אומר שאנחנו בכלל יודעים איך להגדיר כזה דבר; אם \(A,B\) לא שתיהן בדיוק מאותם מימדים – כלומר, עם \(n\) שורות ועם \(m\) עמודות, החיבור כלל לא מוגדר פשוט כי לא ברור איך נכון להגדיר אותו. אבל, אם \(A,B\) שתיהן מאותן מימדים יש הגדרה מאוד טבעית שצצה לראש – נחבר אותן "כניסה כניסה". בדוגמה:

\(\left[\begin{array}{cc}a_{11} & a_{12}\\a_{21} & a_{22}\end{array}\right]+\left[\begin{array}{cc}b_{11} & b_{12}\\b_{21} & b_{22}\end{array}\right]=\left[\begin{array}{cc}a_{11}+b_{11} & a_{12}+b_{12}\\a_{21}+b_{21} & a_{22}+b_{22}\end{array}\right]\)

ובהגדרה פורמלית: אם \(C=A+B\) אז \(C_{ij}=A_{ij}+B_{ij}\).

זה מוביל אותנו גם להגדרה מאוד טבעית ופשוטה של כפל: אם \(C=AB\) אז \(C_{ij}=A_{ij}B_{ij}\). כלומר, כופלים את המטריצות "כניסה כניסה". זו לא ההגדרה שאני רוצה להציג. לא שזו לא הגדרה קיימת; למכפלה "כניסה כניסה" קוראים "מכפלת הדמר", מסמנים אותה ב-\(A\circ B\) ומתעסקים איתה קצת. אלא שהשם "כפל מטריצות" שמור לפעולה שונה, שהיא פי עשרות מונים יותר נפוצה ושימושית.

זו נקודה שכדאי לעצור ולהתעכב עליה: אף אחד לא מחייב אותנו, כשאנחנו קוראים לפעולה כלשהי "כפל", לוודא שהיא אכן הכללה "טבעית" של פעולת כפל קיימת או כל דבר דומה; זה פשוט עניין של מתן שם שאנחנו אוהבים לפעולה שאנחנו אוהבים. ייתכן שנדמה שהיה צריך מבחינה מוסרית לקרוא לפעולת הכפל שאציג בשם "הרכבת מטריצות" או משהו דומה לכך, אבל אין לכך שום סיבה אמיתית. למעשה, ככל שמתקדמים בלימודי האלגברה כך נתקלים ביותר ויותר אובייקטים שיש בהם פעולה שמכונה "כפל" אבל איננה דומה לכפל "רגיל". המשמעות של המילה הזו אצל מתמטיקאים היא פשוט רחבה הרבה יותר מאשר נדמה במבט ראשון. אני מקווה שמספיק בשכנוע הזה כדי להסביר מדוע הטרמינולוגיה הזו היא מוזרה במבט ראשון, אבל לגיטימית לגמרי.

נעבור להגדרה. ראשית כל, בואו נדבר על מטריצות פשוט במיוחד – כאלו שיש להן רק שורה אחת, או רק עמודה אחת. מטריצה כזו נקראת וקטור. יותר במדויק – מטריצה בת שורה אחת היא וקטור שורה ומטריצה בעלת עמודה אחת היא וקטור עמודה. אפשר לחשוב על וקטורים כאלו פשוט בתור סדרות של מספרים: \(\left(a_{1},a_{2},\dots,a_{n}\right)\) ו-\(\left(b_{1},b_{2},\dots,b_{n}\right)\) הם וקטורים בעלי \(n\) איברים כל אחד. למי שמכיר וקטורים במשמעות גאומטרית – זה אותו הדבר, וארחיב על כך בעתיד.

כעת, וקטורים אפשר לכפול באמצעות מה שנקרא מכפלה סקלרית. מכפלה סקלרית פירושו שכופלים את הוקטורים איבר-איבר, אבל לא עוצרים כאן – אחר כך גם מחברים את התוצאה של כל פעולות הכפל הללו. יש לפעולה הזו משמעות גאומטרית כאשר חושבים על הוקטורים כעל אובייקטים גאומטריים אבל לא אכנס לכך כרגע; חשוב לי להדגיש שאפילו הפעולה הזו לא באה לגמרי משום מקום.

פורמלית, \(\left(a_{1},a_{2},\dots,a_{n}\right)\cdot\left(b_{1},b_{2},\dots,b_{n}\right)=a_{1}b_{1}+a_{2}b_{2}+\dots+a_{n}b_{n}\), וזו ההזדמנות שלי להציג סימן מקוצר לחיבור שהוא קריטי כשמדברים על כפל מטריצות: \(\Sigma\). בסימון המקוצר הזה המכפלה הסקלרית של הוקטורים שלמעלה מתוארת כך: \(\sum_{i=1}^{n}a_{i}b_{i}\). מה שקורה כאן הוא שבתחתית של ה-\(\Sigma\) מגדירים "משתנה אינדקס" בשם \(i\) ו"מאתחלים" אותו ל-1; ה-\(n\) למעלה פירושו "לכל ערך טבעי של \(i\) החל מערך האתחול שלו ועד ל-\(n\)", וה-\(a_{i}b_{i}\) אומר שלכל \(i\) שרצים עליו, מוסיפים לסכום של \(a_{i}b_{i}\). אין כאן שום דבר יותר מאשר כתיב מקוצר של \(a_{1}b_{1}+a_{2}b_{2}+\dots+a_{n}b_{n}\) שדורש הרבה, הרבה פחות מקום; ולשם שינוי אני לא אתחיל להגדיר פעולות כפל מוזרות גם על ה-\(\Sigma\) הזה עצמו.

עכשיו אפשר לתת הגדרה בנפנוף ידיים מהיר של כפל מטריצות: \(C=AB\) היא מטריצה שהכניסה ה-\(ij\) שלה היא התוצאה של המכפלה הסקלרית של השורה ה-\(i\) של \(A\) עם העמודה ה-\(j\) של \(B\). הרי על שורה של מטריצה אפשר לחשוב גם כוקטור שורה העומד בפני עצמו; ועל עמודה של \(j\) אפשר לחשוב גם כוקטור עמודה העומד בפני עצמו; ואפשר להכפיל אותם; והתוצאה תהיה מספר, אז ההגדרה שנתתי היא בעלת משמעות.

יש בכל זאת בעיה אחת שמייד קופצת: כדי לכפול סקלרית שני וקטורים הם צריכים להיות מאותו האורך. אם אני כופל שורות של \(A\) בעמודות של \(B\), זה אומר שאני צריך שהאורך של כל שורה של \(A\) יהיה זהה לאורך של כל עמודה של \(B\). זה אומר, למשל, שאי אפשר לכפול יחד שתי מטריצות מסדר \(2\times3\)! במטריצה \(\left[\begin{array}{ccc}1 & 2 & 3\\1 & 2 & 3\end{array}\right]\) האורך של כל שורה הוא 3 (כמספר העמודות במטריצה) והאורך של כל עמודה הוא 2 (כמספר השורות במטריצה) וזה אומר שעל פי ההגדרה שנתתי אי אפשר לכפול אותה אפילו עם עצמה! זה מוזר למדי אבל זו אכן תוצאה הכרחית של ההגדרה שלי.

לכן הנה הכלל: אם \(A\) היא מטריצה מסדר \(n\times m\) (\(n\) שורות, \(m\) עמודות) ו-\(B\) היא מטריצה מסדר \(k\times l\) (\(k\) שורות, \(l\) עמודות) אז כדי שתהיה משמעות למכפלה \(AB\) חייב להתקיים \(m=k\) (מספר העמודות של \(A\) שווה למספר השורות של \(B\)). אם אכן \(m=k\), אז המכפלה \(AB\) תהיה מטריצה מסדר \(n\times l\) (\(n\) שורות, \(l\) עמודות), כי יש כניסה ב-\(AB\) לכל זוג של שורה ב-\(A\) ועמודה ב-\(B\) שמוכפלות סקלרית.

בואו נראה דוגמה: \(\left[\begin{array}{ccc}1 & 2 & \pi\\0 & 3 & 6\end{array}\right]\left[\begin{array}{cc}5 & 0\\1 & 0\\0 & 1\end{array}\right]=\left[\begin{array}{cc}7 & \pi\\3 & 6\end{array}\right]\). למה הכניסה \(1,1\) של המכפלה היא 7? כי זו התוצאה של המכפלה הסקלרית \(\left(1,2,\pi\right)\cdot\left(5,1,0\right)=5+2+\pi\cdot0=7\). נסו להבהיר לעצמכם למה שאר הכניסות קיבלו את הערכים שהן קיבלו, ולמה הממדים של התוצאה הם \(2\times2\). אם הצלחתם, כבר הבנתם את ההגדרה גם אם טרם הבנתם "למה".

בואו נגדיר כפל באופן פורמלי כדי שלא יהיו ספקות. אם \(A\) היא מטריצה מסדר \(n\times m\) ו-\(B\) היא מטריצה מסדר \(m\times k\) אז \(C=AB\) היא מטריצה מסדר \(n\times k\) כך ש-

\(C_{ij}=\sum_{r=1}^{m}A_{ir}B_{rj}\)

זה הכל.

לכפל מטריצות יש תכונה מוזרה אחת (מוזרה עבור מי שרגיל לכפל "רגיל") שצריך לשים על השולחן כמה שיותר מהר: לא בהכרח מתקיים \(AB=BA\). ראשית, בכלל לא ברור שתהיה משמעות גם ל-\(AB\) וגם ל-\(BA\); בשביל זה שתי המטריצות חייבות להיות עם אותו מספר שורות ועמודות – מטריצות כאלו מכונות מטריצות ריבועיות. אבל גם אם \(A,B\) שתיהן ריבועיות מסדר \(n\times n\) זה ממש לא נכון שבהכרח יתקיים \(AB=BA\) (אם כי לפעמים זה כן קורה). למשל, \(\left[\begin{array}{cc}1 & 1\\0 & 0\end{array}\right]\left[\begin{array}{cc}1 & 0\\1 & 0\end{array}\right]=\left[\begin{array}{cc}1 & 0\\0 & 0\end{array}\right]\) אבל \(\left[\begin{array}{cc}1 & 0\\1 & 0\end{array}\right]\left[\begin{array}{cc}1 & 1\\0 & 0\end{array}\right]=\left[\begin{array}{cc}1 & 1\\1 & 1\end{array}\right]\). אתם צריכים לחשוב על זה שהתכונה הזו לא מתקיימת בתור דבר טוב: זה אומר שאפשר לתאר עם כפל מטריצות עולם יותר עשיר משנדמה לנו, כי במציאות יש גם פעולות שהן לא חילופיות באופן הזה (למשל, הטרנספורמציות של צורות תלת ממדיות שהזכרתי בתחילת הפוסט אינן כאלו – לסובב ואז לשקף לא תמיד נותן אותו דבר כמו לשקף ואז לסובב).

עכשיו אני רוצה חיש קל להראות שני שימושים שונים לגמרי של הפעולה הזו. הראשון יהיה קשור למערכות של משוואות לינאריות. הטענה שלי היא פשוטה: מערכת משוואות לינארית ניתנת לתיאור פשוט באמצעות כפל מטריצות. בואו נתחיל עם דוגמה – המערכת

\(2x+3y=17\)

\(8x-4y=6\)

ממש לא מעניין אותי הפתרון של המערכת. מה שכן מעניין אותי היא לתרגם את הבעיה "פתור את המערכת" לבעיה "פתור את המשוואה הבאה שמערבת מטריצות". לשם כך ראשית כל אסתכל על המטריצה של מקדמי המשוואה: \(\left[\begin{array}{cc}2 & 3\\8 & -4\end{array}\right]\). שימו לב שבניגוד לקודם, כעת אני לא לא מכניס פנימה גם את המספרים שמעבר לסימן השווה; אותם אני מכניס לוקטור נפרד – וקטור העמודה \(\left[\begin{array}{c}17\\6\end{array}\right]\). בנוסף, אני אכניס לתמונה וקטור חדש לגמרי – וקטור של משתנים: \(\left[\begin{array}{c}x\\y\end{array}\right]\). כעת מערכת המשוואות שלמעלה זהה לחלוטין למשוואה הבודדת הבאה על מטריצות:

\(\left[\begin{array}{cc}2 & 3\\8 & -4\end{array}\right]\left[\begin{array}{c}x\\y\end{array}\right]=\left[\begin{array}{c}17\\6\end{array}\right]\)

לא מאמינים? ובכן, קל לחשב על פי ההגדרה שנתתי שמתקיים \(\left[\begin{array}{cc}2 & 3\\8 & -4\end{array}\right]\left[\begin{array}{c}x\\y\end{array}\right]=\left[\begin{array}{c}2x+3y\\8x-4y\end{array}\right]\) (זכרו שוקטור עמודה הוא מטריצה, פשוט עם עמודה בודדת) ולכן השוויון שלמעלה הוא השוויון \(\left[\begin{array}{c}2x+3y\\8x-4y\end{array}\right]=\left[\begin{array}{c}17\\6\end{array}\right]\) ומכיוון שמשווים וקטורים "כניסה כניסה" זו בדיוק מערכת המשוואות המקורית.

בינתיים זה נראה עדיין כמו הבדל בשיטת הסימון, אבל מתישהו ההבדל הזה הופך להיות כל כך אפקטיבי עד שאי אפשר להתעלם ממנו יותר. עבורי זה קורה כשמבינים שאת פעולות הדירוג שהצגתי בפוסט הקודם אפשר להציג גם כן בתור פעולות של כפל מטריצות. בואו ננסה להבין איך זה קורה.

ראשית, בואו נסתכל על מטריצה מיוחדת – מטריצת היחידה, \(I=\left[\begin{array}{ccc}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{array}\right]\). זו מטריצה מסדר \(3\times3\) אבל על פי אותו עיקרון ניתן להגדיר מטריצת יחידה לכל סדר (אבל היא חייבת להיות ריבועית) במילים, לכל כניסה \(ii\) יש במטריצת היחידה 1, ולכל כניסה \(ij\) כך ש-\(i\ne j\) יש בה 0. המקומות שבהם נמצאים ה-1-ים של המטריצה נקראים האלכסון הראשי של המטריצה.

המטריצה הזו מעניינת כי אם \(A\) היא מטריצה מסדר \(n\times m\) ו-\(I\) היא מטריצת יחידה מסדר \(n\times n\) אז \(IA=A\). כדי להבין למה, בואו ננסה להבין מהי הכניסה ה-\(ij\) של \(IA\): זו המכפלה הסקלרית של השורה ה-\(i\) של \(I\) בעמודה ה-\(j\) של \(A\). השורה ה-\(i\) של \(I\) כוללת רק אפסים חוץ ממקום אחד שכולל 1 – בדיוק המקום ה-\(i\). אז כשכופלים את השורה הזו בעמודה ה-\(j\) של \(A\) אנחנו מתעלמים מכל הכניסות בעמודה הזו חוץ מאחת – הכניסה ה-\(i\)-ית, שהיא בדיוק מה שנמצא בשורה ה-\(i\)-ית של \(A\). לכן בכניסה ה-\(ij\) של \(IA\) יהיה בדיוק את האיבר בכניסה ה-\(ij\) של \(A\).

כעת בואו נחזור על אותה פעולת כפל אבל עם מטריצה שהיא "כמעט \(I\)" פרט לכך שהחלפנו את השורה הראשונה עם השניה. מהי הכניסה ה-\(1j\) של המכפלה הפעם? היא תכיל את האיבר השני בעמודה ה-\(j\) של \(A\). כלומר, השורה הראשונה במכפלה תכיל את השורה השניה של \(A\), ובאופן לא מפתיע השורה השניה במכפלה תכיל את השורה הראשונה של \(A\). גם כאן מומלץ לבדוק אותי עצמאית.

מה שראינו פה הוא עקרון כללי: אם נבצע פעולה אלמנטרית כלשהי על מטריצת היחידה \(I\) – בין אם החלפת שורות, או כפל שורה במספר, או חיבור כפולה של שורה אחת לשורה אחרת – נקבל מטריצה (שמכונה, באופן לא מפתיע, "מטריצה אלמנטרית") שהכפל שלה ב-\(A\) זהה להפעלת הפעולה האלמנטרית הזו על \(A\).

אם כן, נניח ש-\(\overline{x}\) מסמן לנו וקטור של משתנים, ו-\(\overline{c}\) וקטור של מספרים, מערכת כללית של משוואות לינאריות מתוארת על ידי \(A\overline{x}=\overline{c}\) (שימו לב ש-\(\overline{x}\) ו-\(\overline{c}\) בכלל לא חייבים להיות מאותו האורך; אורכו של הראשון הוא מספר המשתנים ואורכו של השני הוא מספר המשוואות). כעת, אם \(E\) היא מטריצה אלמנטרית כלשהי, אפשר לכפול בה את שני אגפי המשוואה ולקבל \(\left(EA\right)\overline{x}=E\overline{c}\) (כמובן, צריך להוכיח שדברים כאלו באמת עובדים; אלו הוכחות לא מעניינות ולא אציג אותן כאן). אם אנחנו רוצים להפעיל שתי פעולות אלמנטריות, \(E_{1}\) ו-\(E_{2}\), אפשר לכפול את המשוואה בהן בזו אחר זו ולקבל \(\left(E_{2}\left(E_{1}A\right)\right)\overline{x}=E_{2}\left(E_{1}\overline{c}\right)\). כעת העובדה שכפל מטריצות מקיים את חוץ הקיבוץ הופכת לקריטית: זה אומר ש-\(E_{2}\left(E_{1}A\right)=\left(E_{2}E_{1}\right)A\), ולכן במקום לכפול את \(A\) קודם ב-\(E_{1}\) ואז ב-\(E_{2}\) אפשר לכפול את \(A\) רק פעם אחת במטריצה \(E_{2}E_{1}\) ש"מקודדת בתוכה" הפעלה של שתי פעולות אלמנטריות ולא רק אחת. באותו אופן, אם אנחנו רוצים להפעיל על \(A\) כמות סופית כלשהי של פעולות אלמנטריות, אפשר קודם כל לכפול את המטריצות האלמנטריות אלו באלו ובסוף לקבל מטריצה \(E\) שכבר מאחסנת בתוכה את כל הפעולות שרוצים לבצע על \(A\) כשהן מסודרות לפי הסדר הנכון. אחרי הכפל נקבל \(\left(EA\right)\overline{x}=E\overline{c}\); מכיוון ש-\(E\overline{c}\) הוא בעצמו וקטור אחר של מספרים, מה שקיבלנו בסופו של דבר הוא משוואה אחרת מהצורה \(B\overline{x}=\overline{d}\), שבה אנחנו יכולים להניח ש-\(B\) היא מטריצה מצומצמת. בקיצור, כשבפוסט הבא אחזור לעסוק בפתרון משוואות אוכל לצמצם את כל הבעיה שלנו למשוואות מהצורה \(B\overline{x}=\overline{d}\) עם מטריצות מצומצמות.

את הרעיון הזה לפיו מטריצה אחת יכולה "לאגור" הרבה פעולות שונות שכל אחד מקודדת על ידי מטריצה אחרת הזכרתי גם בהקשר של פעולות על אובייקטים תלת ממדיים קודם, וזה בדיוק אותו הסיפור שם. אני חושב שזו המחשה טובה מאין כמוה לכוח שיש בחוק הקיבוץ, שאנחנו לא תמיד שמים לב אליו. אנסה לתת המחשה פשטנית: נגיד שיש לנו אלף אובייקטים, ועל כל אחד אנחנו רוצים לבצע את אותה סדרה של אלף טרנספורמציות. בלי חוק הקיבוץ, היינו צריכים להפעיל את אותן אלף טרנספורמציות על כל אחד מאלף האובייקטים – מיליון פעולות; אבל עם חוק הקיבוץ אנחנו כופלים את המטריצות של אלף הטרנספורמציות יחד, ואת התוצאה אנחנו כופלים בכל אחד מאלף האובייקטים. סך הכל אלפיים פעולות – הבדל של סדרי גודל (כמובן, העניין הזה של "אגירה" ניתן להמחשה גם עבור פעולות פשוטות כמו חיבור מספרים – זה בדיוק מה שקורה בחשבון בנק, למשל. איכשהו, אני חושב שהדוגמה עובדת הרבה יותר טוב עבור פעולה כמו כפל מטריצות שאליה אנחנו הרבה פחות מורגלים ומסוגלת לתאר טרנספורמציות יותר מורכבות מסתם חיבור או חיסור).

למשוואות נחזור בפוסט הבא, וכעת אני רוצה לדבר בחטף על דוגמה שונה לשימוש בכפל מטריצות, בהקשר של גרפים. כשאני אומר "גרף", אני מתכוון לקבוצה \(V\) של צמתים ו-\(E\) של קשתות שמחברות זוגות של צמתים; מי שלא מכיר את המושג מוזמן לקרוא את הפוסט שבו תיארתי אותו לראשונה.

אנחנו רוצים לספור מסלולים בגרף. מסלול הוא פשוט סדרה של צמתים כל שכל שני צמתים בסדרה מחוברים בקשת, ואורכו הוא כמספר הקשתות שבו. לכל מסלול גם יש צומת התחלתי וצומת סופי – הצמתים הראשונים והאחרונים בסדרה. כך למשל \(v\to u\) הוא מסלול באורך 1 מ-\(v\) אל \(u\), ו-\(v\to u\to w\) הוא מסלול באורך 2 מ-\(v\) אל \(w\) (שעובר ב-\(u\)). גם \(v\) לבדו הוא מסלול: מסלול באורך 0 עם צומת התחלה \(v\) וצומת סיום \(v\). זה נשמע מטופש אבל תכף נראה שזו הגדרה מועילה.

בגרף שלנו נרשה שצומת יכיל קשת אל עצמו (מה שנקרא "חוג עצמי") ולכן \(v\to v\) הוא מסלול חוקי וגם נרשה כמה קשתות בין שני צמתים (מה שנקרא "קשתות מקבילות"); שני מסלולים שכוללים בדיוק את אותה סדרת צמתים אבל מתישהו משתמשים בקשתות שונות ייחשבו שונים. אפשר לאסור על כל השכלולים הללו ועדיין מה שאציג יעבוד, אבל אני רוצה להראות תוצאה כללית ככל האפשר ולכן מרשה את זה (ובפועל לעתים קרובות אכן יש צורך בחוגים עצמיים וקשתות מקבילות; למשל, כשהגרף שלנו מגיע מאוטומט סופי דטרמיניסטי). בנוסף, הגרף יכול להיות מכוון – קשת היא תמיד מצומת א' אל צומת ב' ומסלול חייב להיות עם כיוון הקשתות כדי להיות חוקי.

כעת, נניח שיש לנו גרף עם \(n\) צמתים, \(v_{1},\dots,v_{n}\). מגדירים עבורו מטריצה \(A\) מסדר \(n\times n\) – "מטריצת השכנויות/סמיכויות" שלו – באופן הבא: \(A_{ij}\) שווה למספר הקשתות מ-\(i\) אל \(j\). כלומר זה מספר שלם אי שלילי (בגלל שאנחנו מרשים קשתות מקבילות, \(A_{ij}\) יכול להיות גדול מ-1; ובגלל שהגרף מכוון \(A_{ij}\) לא בהכרח שווה ל-\(A_{ji}\)).

מכיוון ש-\(A\) היא מטריצה ריבועית, אפשר לכפול אותה בעצמה. \(A^{k}\) היא מה שמקבלים כשכופלים את \(A\) בעצמה \(k\) פעמים. כמו ש-\(a^{0}=1\) עבור מספרים, כך מגדירים גם ש-\(A^{0}=I\) כאשר \(I\) היא מטריצת היחידה מסדר \(n\times n\).

כעת אפשר לעבור לתוצאה המקסימה: \(A^{t}\) היא מטריצה שמקודדת בדיוק את מספרי המסלולים מאורך \(t\) בין כל שני צמתים בגרף; יותר בפירוט, \(A_{ij}^{t}\) הוא בדיוק מספר המסלולים מאורך \(t\) מ-\(v_{i}\) אל \(v_{j}\).

למה זה עובד? ובכן, עבור \(A^{0}\) זה ברור מההגדרה שנתתי: מסלול באורך 0 חייב להתחיל ולהסתיים באותו צומת, ויש בדיוק 1 כזה. זה מתאים בדיוק לכך שעל האלכסון הראשי של \(A^{0}\) יש 1 ובשאר הכניסות יש 0.

עבור \(A^{1}\) זה גם ברור: כל קשת \(v\to u\) מגדירה מסלול באורך 1 מ-\(v\) אל \(u\), ולכן מספר המסלולים הכולל מ-\(v\) אל \(u\) באורך 1 הוא כמספר הקשתות מ-\(v\) אל \(u\).

הכיף מתחיל עבור \(A^{2}\), וכאן ההגדרה של כפל מטריצות מתגלה במלוא כוחה. מהו מסלול באורך 2? מסלול מהצורה \(v\to u\to w\) (הצמתים לא חייבים להיות שונים אלו מאלו בהכרח). אם אנחנו מתעניינים במספר המסלולים מ-\(v\) אל \(w\), אז כל מסלול כזה נבנה באופן הבא: בחר צומת \(u\) שישמש בתור צומת האמצע; בחר קשת מ-\(v\) אל \(u\) (אם קיימת כזו), ואז בחר קשת מ-\(u\) אל \(w\) (אם קיימת כזו).

כמה מסלולים כאלו יש? אם קבענו את \(u\), אז נותר לבחור קשת מ-\(v\) אל \(u\), ולבחור קשת מ-\(u\) אל \(w\), ושתי הבחירות הללו בלתי תלויות זו בזו, ולכן מספר האפשרויות הוא מכפלה של מספר האפשרויות לבחור קשת מ-\(v\) אל \(u\) במספר האפשרויות לבחור קשת מ-\(u\) אל \(w\) (זהו "עקרון הכפל" הקומבינטורי). כעת, לכל \(u\) שיכול לשמש כצומת ביניים אנחנו מקבלים מספר אפשרויות כלשהו, ולכן מספר האפשרויות הכולל הוא סכום כל האפשרויות על כל ה-\(u\)-ים האפשריים (זהו "עקרון החיבור" הקומבינטורי).

בואו נסמן את הצמתים במספרים כדי שיהיה לנו קצת יותר קל. נניח שאנחנו רוצים לדעת כמה מסלולים יש מ-\(v_{i}\) אל \(v_{j}\), וש-\(v_{r}\) הוא צומת הביניים שלנו. אז יש \(A_{ir}\) קשתות מ-\(v_{i}\) אל \(v_{r}\); \(A_{rj}\) קשתות מ-\(v_{r}\) אל \(v_{j}\); ולכן \(A_{ir}A_{rj}\) מסלולים מ-\(v_{i}\) אל \(v_{j}\) שעוברים דרך \(v_{r}\); ולכן \(\sum_{r=1}^{n}A_{ir}A_{rj}\) מסלולים בסך הכל מ-\(v_{i}\) אל \(v_{j}\). אבל \(\sum_{r=1}^{n}A_{ir}A_{rj}\) ידידינו הוא בדיוק ההגדרה שלנו לכניסה ה-\(ij\) בכפל המטריצה \(A\) בעצמה, ולכן \(A^{2}\) אכן מקודד בדיוק את המסלולים מאורך 2 בין צמתים בגרף.

ההוכחה הכללית עבור \(A^{t}\) פשוטה באותה מידה, אם שמים לב לכך ש-\(A^{t}=A^{t-1}A\) ומשתמשים באינדוקציה כדי להניח ש-\(A^{t-1}\) כבר מקודד את מספר המסלולים מאורך \(t-1\) בין צמתים בגרף. במקרה זה, אפשר לחשוב על מסלול מאורך \(t\) בגרף מ-\(v_{i}\) אל \(v_{j}\) כאילו הוא מהצורה \(v_{i}\rightarrow v_{r}\to v_{j}\), כאשר \(v_{i}\rightarrow v_{r}\) מייצג לא קשת אחת אלא מסלול שלם מאורך \(t-1\) מ-\(v_{i}\) אל \(v_{r}\). שאר הניתוח זהה: מספר המסלולים מ-\(v_{i}\) אל \(v_{j}\) מאורך \(t\) שהצומת הלפני-אחרון בהם הוא \(v_{r}\) הוא כמספר המסלולים מאורך \(t-1\) מ-\(v_{i}\) אל \(v_{r}\) כפול מספר הקשתות מ-\(v_{r}\) אל \(v_{j}\). סוף הסיפור.

אני לא יכול להתאפק כאן ולהזכיר מאוד בחטף נושא מתקדם טיפה יותר. נניח שהמטריצה \(A\) שלנו, במקום לקודד את מספר הקשתות, הייתה מקודדת הסתברות למעבר מ-\(v_{i}\) אל \(v_{j}\)? כלומר, הגרף שלנו היה כזה שבו אם אתם נמצאים בצומת מסוייים, אז בסיבוב הבא עליכם לזוז לצומת אחר (או להישאר במקום – זה נחשב כאילו זזתם מהצומת אל עצמו) והייתם בוחרים לאן לעבור בהסתברות קבועה מסויימת על בסיס המיקום הנוכחי שלכם. אם \(A\) הייתה המטריצה שמקודדת את ההסתברויות הללו, מה הייתה המשמעות של \(A^{t}\)? כמעט אותו דבר – \(A_{ij}^{t}\) הייתה ההסתברות שבה אם התחלתם מ-\(v_{i}\) וביצעתם \(t\) סיבובים, תגיעו אל \(v_{j}\). לכן אם אנחנו יודעים איך מתנהגת \(A^{t}\) עבור ערכים גדולים מאוד של \(t\), אנחנו יודעים מה ההתנהגות לאורך זמן של ההילוך האקראי הזה – לאיזה מקומות בגרף יותר סביר להגיע ולבלות בהם יותר זמן, וכדומה. הרעיון הזה עמד בבסיס אלגוריתם הדירוג של גוגל (מה שידוע על אלגוריתם הדירוג של גוגל, לפחות) כאשר הגרף הוא "האינטרנט" (ואתרים חשובים בו הם כאלו שאליהם ההילוך המקרי מגיע לעתים קרובות יותר) והניתוח של התנהגות \(A^{t}\) עבור ערכים גדולים של \(t\) אכן מערב לו עוד אלגברה לינארית שטרם הגעתי אליה (בפרט, את המושגים של ערכים עצמיים ווקטורים עצמיים).

אם כן, אנו רואים כאן שכפל מטריצות מקודד בתוכו סוג מסויים של פעולה יסודית למדי במתמטיקה, כזו שצצה לה בהקשרים שונים ומשונים (ותאמינו לי, עוד לא ראיתם כלום). אני מקווה שגם אלו מכם שעדיין לא התרגלו להגדרה המוזרה ילמדו לחבב אותה לאורך זמן; לטעמי, להתרגל לפעולה הזו ולטבעיות הרבה שלה היא צעד חשוב בדרך להבנה מהי מתמטיקה "אמיתית".

מטריצות, דירוג מטריצות ומשוואות לינאריות

משוואות לינאריות הן התירוץ המושלם להתחיל לדבר על האובייקט שבאמת מעניין אותנו – כנראה האובייקט המרכזי באלגברה לינארית ובמתמטיקה בכלל: מטריצות. מטריצה היא רשימה דו-ממדית של איברים (בהקשר שלנו, מספרים) אבל היא יותר מזה: היא אובייקט אלגברי שאפשר לבצע עליו מניפולציות אלגבריות: אפשר לחבר שתי מטריצות, אפשר לכפול מטריצה במספר כלשהו, ואפשר לכפול גם שתי מטריצות זו בזו, אבל עם התכונות האלגבריות הללו נחכה טיפה. בפוסט הזה נסתפק בלהבין מהן מטריצות, איך הן הופכות דיבור על משוואות לינאריות לקצת יותר פשוט, ואיך מתארים פתרון משוואות לינאריות ב"שפה" שלהן.

בואו ניקח לדוגמה מערכת של שתי משוואות לינאריות בשני נעלמים:

\(2x+7y=21\)

\(2x-4y=10\)

לאלו שממש ממש במתח, הפתרון של המערכת הוא \(x=7,y=1\), אבל זה לא מה שמעניין אותנו כרגע, ואפילו לא איך פותרים אותה כי ראינו את השיטה לכך בפוסט הקודם, אלא פשוט איך אפשר לכתוב את המערכת הזו בצורה קצת פחות טרחנית מזו שבה כתבתי אותה. בצורת הכתיבה שלי יש הרבה טקסט מיותר – ה-\(x,y\) מיותרים כי אני יודע שבכל משוואה לינארית יהיו משתנים; וסימן השווה מיותר; וגם הפלוס שלפני ה-7 מיותר למרות שהמינוס שלפני הארבע לא. זה לא נראה כמו משהו גרוע עד כדי כך, אבל צריך לזכור שאנחנו חושבים על פתרון משוואות עוד יותר כלליות, כאלו שיש בהן גם שבעה נעלמים ושבע משוואות. בסיטואציות כאלו כבר מפסיקים לתת אות מיוחדת לכל משתנה ופשוט קוראים להם \(x_{1},x_{2},\dots,x_{7}\) וכדומה. די ברור שהשמות הללו הם חסרי משמעות עבורנו והיינו שמחים להימנע מהצורך להשתמש בהם.

מה שבאמת מעניין אותנו במערכת משוואות הוא המקדמים של המשתנים ומה שנמצא אחרי סימן ה"שווה". אלו המספרים שמשתנים ממשוואה למשוואה ומאפיינים אותה. אז מה שעושים הוא פשוט – כותבים רק את המספרים הללו:

\(\begin{array}{ccc}2 & 7 & 21\\2 & -4 & 10\end{array}\)

טוב. חייבים להודות שזה לא נראה משהו. אז כדי שיהיה ברור שכל המספרים הללו קשורים אחד לשני, מקיפים אותם בסוגריים:

\(\left[\begin{array}{ccc}2 & 7 & 21\\2 & -4 & 10\end{array}\right]\)

והנה קיבלנו מטריצה. לפעמים, במקרה הפרטי של מטריצה שבאה לייצג משוואה לינארית, מפרידים את העמודה הימנית ביותר מהיתר באיזה קו מקווקו כדי שיהיה ברור איפה המקדמים נגמרים ומה שאחרי השווה מתחיל, אבל ברשותכם אני אוותר על זה ופשוט נזכור את זה.

פורמלית, עבור מספרים טבעיים \(n,m\), מטריצה מסדר \(n\times m\) (בעלת \(n\) שורות ו-\(m\) עמודות) היא אוסף של איברים ("איברים", בכל הקשר שנזדקק לו, פירושו כאן "מספרים") כך שלכל איבר יש שני אינדקסים שמציינים באיזו שורה ובאיזו עמודה הוא נמצא במטריצה. למשל, במטריצה שהצגתי למעלה, האיבר בשורה 1 ועמודה 1 הוא 2, וגם האיבר בשורה 2 ועמודה 1 הוא 2; ואילו האיבר בשורה 2 ועמודה 3 הוא 10. לרוב משתמשים באותיות לטיניות גדולות כמו \(A,B,C\) כדי לתאר מטריצות, ואז \(A_{11}\) מסמן את האיבר בשורה 1 ובעמודה 1 במטריצה \(A\) (ה"כניסה" ה-\(1,1\) במטריצה), וכדומה. כלומר, אם

\(A=\left[\begin{array}{ccc}2 & 7 & 21\\2 & -4 & 10\end{array}\right]\)

אז \(A_{12}=-4\) ו-\(A_{23}=10\) וכדומה.

מה קורה אם יש במטריצה מספר דו ספרתי של שורות או עמודות? ובכן, אפשר לכתוב משהו כמו \(A_{10,3}\) עם פסיק ואז לא יהיו בלבולים. בכל מקרה הסימון שאני מציג כאן הוא לא קדוש ויש עוד הרבה וריאציות עליו שבהן משתמשים.

בפוסט הקודם הצגתי שתי מניפולציות שאפשר היה לעשות על משוואות במערכת משוואות – לכפול משוואה במספר, ולחבר שתי משוואות – מה שחיש קל הפך ל"לחבר למשוואה אחת משוואה אחרת כשהיא מוכפלת במספר כלשהו". דבר אחד שלא התייחסתי אליו אז כי הוא היה כמעט מובן מאליו הוא שבמערכת משוואות אפשר להחליף את הסדר שבו משוואות מופיעות מבלי לשנות את הפתרונות של המערכת. כל זה מוביל אותנו לשלוש פעולות שאפשר לבצע על מטריצה שמייצגת מערכת משוואות אחת כדי לקבל מטריצה שמייצגת מערכת משוואות שונה עם בדיוק אותם פתרונות:

  1. אפשר להחליף שתי שורות.
  2. אפשר לכפול שורה במספר שונה מאפס.
  3. אפשר להוסיף לשורה אחת שורה אחרת שמוכפלת במספר כלשהו.

שלוש הפעולות הללו נקראות פעולות אלמנטריות. שימו לב שכולן הפיכות – אם החלפנו שתי שורות פשוט נחליף אותן שוב ונחזור למטריצה שממנה התחלנו; אם כפלנו שורה במספר שונה מאפס, אפשר לכפול את השורה גם במספר ההפוך לו ולחזור למטריצה שממנה התחלנו; ואם הוספנו לשורה אחת שורה אחת כפול מספר, אפשר עכשיו להוסיף לה את השורה האחרת כפול מינוס אותו המספר.

אם אפשר להגיע מהמטריצה \(A\) אל המטריצה \(B\) על ידי מספר סופי של הפעלות של פעולות אלמנטריות, אומרים שהן "שקולות-שורה". מכיוון שהפעולות הפיכות, זה גם אומר שאפשר להגיע מ-\(B\) אל \(A\). מה שהיינו רוצים הוא להגיע ממטריצה כלשהי \(A\) אל מטריצה \(B\) שהיא פשוטה יחסית, במובן של "הפתרון של המשוואה ש-\(B\) מייצגת הוא מובן מאליו". בואו נראה איך זה קורה עם המטריצה שנתתי כדוגמה:

\(\left[\begin{array}{ccc}2 & 7 & 21\\2 & -4 & 10\end{array}\right]\overset{r_{2}-r_{1}}{\to}\left[\begin{array}{ccc}2 & 7 & 21\\0 & -11 & -11\end{array}\right]\overset{-\frac{1}{11}r_{2}}{\to}\left[\begin{array}{ccc}2 & 7 & 21\\0 & 1 & 1\end{array}\right]\overset{r_{1}-7r_{2}}{\to}\left[\begin{array}{ccc}2 & 0 & 14\\0 & 1 & 1\end{array}\right]\overset{\frac{1}{2}r_{1}}{\to}\left[\begin{array}{ccc}1 & 0 & 7\\0 & 1 & 1\end{array}\right]\)

כשאני כותב \(r_{2}-r_{1}\) אני מתכוון "משנים את \(r_{2}\) – שורה 2 – על ידי כך שמחסירים ממנה את \(r_{1}\)". כשאני כותב "\(-\frac{1}{11}r_{2}\)" אני מתכוון "כופלים את \(r_{2}\) ב-\(-\frac{1}{11}\)", וכדומה. גם זה לא ממש סימון סטנדרטי אבל אני מקווה שהוא מספיק ברור כאן.

המטריצה שקיבלנו לבסוף, \(\left[\begin{array}{ccc}1 & 0 & 7\\0 & 1 & 1\end{array}\right]\), מייצגת את מערכת המשוואות הבאה:

\(x=7\)

\(y=1\)

שהיא בדיוק הפתרון שהבטחתי בתחילת הפוסט, כך שמה שקרה עם שרשרת המטריצות שהצגתי למעלה הוא פשוט פתרון של המשוואה – אבל פתרון בצורה שיטתית וחסכונית למדי. במערכת של שתי משוואות בשני נעלמים זה אולי עוד נראה מסורבל למדי, אבל כשצריך לעשות את זה, נאמר, על ארבע משוואות בארבעה נעלמים או למעלה מכך היתרון של השיטה המטריציונית הוא ברור. עם זאת, שלא יהיה לכם ספק – עדיין מדובר על עבודה טכנית משעממת ביותר. מה שאנחנו באמת רוצים הוא להבין את העקרונות הכלליים של התהליך כדי שנוכל להגיד למחשב לעשות אותו.

מדוע המטריצה \(\left[\begin{array}{ccc}1 & 0 & 7\\0 & 1 & 1\end{array}\right]\) היא נקודת סיום טובה כל כך עבורנו? מכיוון שבכל שורה מופיע רק אחד המשתנים, והוא מופיע עם המקדם 1. זה אומר שאותה השורה בעצם אומרת "המשתנה כך וכך שווה ל…" ותו לא. אבל איך הצלחנו להגיע אליה? הפתרון טמון דווקא בעמודות. שימו לב שכבר הפעולה הראשונה שביצעתי בשרשרת המטריצות למעלה יועדה לגרום לכך שבעמודה הראשונה במטריצה, בשורה השניה, יהיה 0. מה שזה אומר בפועל הוא שמחקתי את המשתנה \(x\) מהמשוואה השניה והשארתי אותו רק בראשונה. אחר כך, כשחיברתי את השורה השניה לראשונה, זה כבר לא יכל להשפיע על המשתנה \(x\), כלומר על העמודה הראשונה, כי בשורה השניה היה שם 0.

זה מתווה את השיטה הכללית שלנו: אנחנו רוצים לקחת את העמודה הראשונה במטריצה, ולגרום לכך שבשורה הראשונה יהיה שם 1, ובשאר השורות יהיה 0. אחר כך אנחנו רוצים לקחת את העמודה השניה במטריצה ולגרום לכך שבשורה השניה יהיה שם 1, ובשאר השורות 0. כך זה במערכת של שתי משוואות בשני נעלמים אבל גם במערכות גדולות יותר.

אלא מה, לא תמיד אפשר לעשות את זה בכלל. למשל, מה עם המטריצה \(\left[\begin{array}{ccc}1 & 0 & 7\\0 & 0 & 0\end{array}\right]\)? לא משנה מה נעשה, העמודה השניה תמיד תכיל 0. ומה עם המטריצה \(\left[\begin{array}{ccc}1 & 1 & 1\\1 & 1 & 1\end{array}\right]\)? אנחנו לא יכולים לאפס את הכניסה בשורה 2 ועמודה 1 מבלי לאפס גם את הכניסה בשורה 2 ועמודה 2. לכן צריך להיות קצת יותר זהירים ביחס ליעד שלנו. זה המקום שבו צצה ההגדרה של מטריצה מצומצמת. זו הגדרה מדויקת של "מה שאנחנו יכולים לצפות לו תמיד מהתהליך שתיארנו", אבל לא קריטי להבין אותה במלואה בינתיים. בכל זאת אביא אותה פה, כמובן. מטריצה היא מצומצמת אם היא מקיימת ש:

  1. בכל שורה שלה, הכניסה הראשונה שאיננה 0 היא 1.
  2. בכל עמודה שלה, אם יש כניסה שהיא הכניסה הראשונה שאינה 0 בשורה כלשהי, אז שאר הכניסות בעמודה הן 0.
  3. כל השורות שמכילות רק אפסים נמצאות מתחת לכל השורות האחרות.
  4. בהינתן שתי שורות שאינן שורות אפסים, הכניסה הראשונה שאיננה אפס בשורה העליונה יותר מופיעה בעמודה מוקדמת יותר מאשר הכניסה הראשונה שאיננה אפס בעמודה השניה.

אולי הכי ברור להבין את ההגדרה הזו על ידי דוגמאות שלא מתאימות לה:

המטריצה \(\left[\begin{array}{cc}1 & 0\\0 & 2\end{array}\right]\) לא עונה לדרישה 1, כי הכניסה הראשונה שאיננה 0 בשורה 2 היא 2.

המטריצה \(\left[\begin{array}{cc}1 & 0\\1 & 1\end{array}\right]\) לא עונה לדרישה 2 כי העמודה הראשונה מפירה את התנאי: יש שתי כניסות שהן הכניסות הראשונות שאינן 0. גם \(\left[\begin{array}{cc}1 & 1\\0 & 1\end{array}\right]\) מפירה את התנאי בצורה דומה – כאן הכניסה \(A_{12}\) אמנם איננה הכניסה הראשונה שאיננה 0 בשורה הראשונה, אבל \(A_{22}\) היא כן הכניסה הראשונה שאיננה 0 בשורה 2, ולכן שאר העמודה צריכה להכיל אפסים.

דוגמה נגדית ל-3 זה קל מאוד: \(\left[\begin{array}{cc}0 & 0\\1 & 0\end{array}\right]\).

ההגדרה של 4 מסובכת אבל דוגמה נגדית היא פשוטה גם כאן: \(\left[\begin{array}{cc}0 & 1\\1 & 0\end{array}\right]\) היא דוגמה נגדית, כי השורה של ה-01 באה לפני השורה של ה-10 אבל הכניסה הראשונה שאיננה 0 בשורה 01 היא בעמודה 2, ואילו הכניסה הראשונה שאיננה 0 בשורה 10 היא בעמודה 1.

בוודאי תשאלו, בשביל מה כל התנאים הללו טובים? התשובה פשוטה: לכל מטריצה \(A\) כלשהי, קיימת מטריצה מצומצמת אחת ויחידה שאליה ניתן להגיע מ-\(A\) על ידי פעולות אלמנטריות. זה אולי משפט הקיום והיחידות הראשון שבו נתקלים סטודנטים למתמטיקה. זה אומר שכל מערכת משוואות לינארית ניתן להחליף במערכת שקולה לה (שקולה לה במובן זה שיש להן אותן פתרונות) שמתוארת על ידי מטריצה מצומצמת. לתהליך הזה, שבו עוברים ממטריצה כלשהי למטריצה המצומצמת המתאימה לה, קוראים דירוג מטריצות.

כעת אפשר להבין למה כל ארבע התכונות שתיארתי למעלה הן הכרחיות בשביל שהמטריצה המצומצמת תהיה יחידה: כל הדוגמאות הנגדיות שנתתי עונות על כל שלוש הדרישות פרט לדרישה שהן באות לנגוד, כך שאם נשמיט ולו אחת מהדרישות, כבר יהיו שתי מטריצות מצומצמת אפשריות. במקרה הראשון \(\left[\begin{array}{cc}1 & 0\\0 & 2\end{array}\right]\) ניתנת לצמצום אל \(\left[\begin{array}{cc}1 & 0\\0 & 1\end{array}\right]\); במקרה השני \(\left[\begin{array}{cc}1 & 0\\1 & 1\end{array}\right]\) ניתנת לצמצום אל \(\left[\begin{array}{cc}1 & 0\\0 & 1\end{array}\right]\); במקרה השלישי \(\left[\begin{array}{cc}0 & 0\\1 & 0\end{array}\right]\) ניתנת לצמצום אל \(\left[\begin{array}{cc}1 & 0\\0 & 0\end{array}\right]\) ובמקרה הרביעי \(\left[\begin{array}{cc}0 & 1\\1 & 0\end{array}\right]\) ניתנת לצמצום אל \(\left[\begin{array}{cc}1 & 0\\0 & 1\end{array}\right]\).

כעת, איך מדרגים מטריצה באופן כללי? ובכן, קודם כל מוצאים בעמודה הראשונה את השורה הראשונה שבה לא מופיע 0 (אם בכולן מופיע 0 עוברים מייד לעמודה הבאה). מחליפים את סדר השורות (פעולה אלמנטרית 1) כך שהשורה הזו תופיע הראשונה במטריצה. כופלים את השורה הזו בקבוע מתאים (פעולה אלמנטרית 2) כך שבעמודה הראשונה יופיע בה כעת 1. לבסוף, מחסירים את השורה הזו מכל האחרות כשהיא מוכפלת בכל פעם בקבוע מתאים כדי לאפס את כל שאר הכניסות בעמודה הזו. בואו נראה את התהליך על מטריצה מסדר \(3\times3\):

\(\left[\begin{array}{ccc}0 & 2 & 1\\2 & 1 & 1\\1 & 3 & 1\end{array}\right]\overset{r_{1}\leftrightarrow r_{2}}{\to}\left[\begin{array}{ccc}2 & 1 & 1\\0 & 2 & 1\\1 & 3 & 1\end{array}\right]\overset{\frac{1}{2}r_{1}}{\to}\left[\begin{array}{ccc}1 & \frac{1}{2} & \frac{1}{2}\\0 & 2 & 1\\1 & 3 & 1\end{array}\right]\overset{r_{3}-r_{1}}{\to}\left[\begin{array}{ccc}1 & \frac{1}{2} & \frac{1}{2}\\0 & 2 & 1\\0 & \frac{5}{2} & \frac{1}{2}\end{array}\right]\)

בסופו של דבר קיבלתי בעמודה 1 מופע בודד של 1 וכל היתר 0. כעת נטפל בצורה דומה בעמודה 2, פרט לכך ששורה 1 היא כבר "מחוץ למשחק" במובן זה שלא מזיזים אותה יותר (אבל כן צריך לאפס בתוכה את עמודה 2 אם מגיעים לשלב הזה).

כל התהליך הזה, שנקרא אלימינציה גאוסית, ניתן לביצוע מהיר מאוד יחסית, והוא לא מצריך מחשבה כמעט כלל. במילים אחרות, זה אלגוריתם מושלם למחשב; כתרגיל לקורא זה קצת יותר משעמם.

ייתכן שאתם תוהים מה היה הטעם בכל זה. המעבר למטריצות גרם לי לשינוי טרמינולוגיה וסימונים אבל לא הוספתי כאן תוכן מהותי על מה שאמרתי בפוסט הקודם. זה נכון, אבל בפוסט הבא אציג את המושג של כפל מטריצות, וזה יאפשר לתאר את כל מה שעשינו כאן באופן עוד יותר קומפקטי, ויסייע לנו לעבור לשלב הבא, של להבין בדיוק איך פתרונות של מערכות משוואות יכולים להיראות.

אז איך פותרים משוואות לינאריות?

לטעמי נקודת הפתיחה הטובה ביותר לדיון על אלגברה לינארית היא לתאר מערכות של משוואות לינאריות ואיך פותרים אותן. ראשית, כי זו בעיה קונקרטית ובסיסית במתמטיקה; שנית, כי יש לה פתרון מושלם; שלישית, כי מבחינה טכנית הרבה מאוד מהבעיות שצצות בהקשר הרחב יותר של אלגברה לינארית (מרחבים וקטוריים) מצטמצמות לבסוף לפתרון של מערכת משוואות לינארית, ולכן זה גם הבסיס הטכני שצריך בשביל המשך הדרך (כדי לחסוך לנו עבודה בהמשך הדרך; שנוכל לומר "אה, ומכאן זה סתם לפתור משוואות לינאריות ואת זה אנחנו יודעים שאפשר לעשות), ורביעית – כי כבר בעיסוק בבעיה הקונקרטית הזו צצים ועולים אל פני השטח הרעיונות והמושגים הכלליים יותר של האלגברה הלינארית. ולבסוף, כי משוואות לינאריות הן דרך נפלאה להציג מטריצות – מהאובייקטים הבסיסיים והחשובים ביותר במתמטיקה כולה.

אבל לפני כל המהומה הזו, בואו נתחיל בקטן. מהי משוואה לינארית? משוואה היא ביטוי מהצורה "כך וכך שווה לכך וכך". \(2+3=5\) היא דוגמה למשוואה, וגם \(e^{i\pi}+1=0\) היא דוגמה למשוואה, וגם \(\mbox{P=NP}\) היא "משוואה". אבל אנחנו מתעניינים במה שנקרא "פתרון משוואות". במקרה הזה לא כל האיברים שמופיעים במשוואה ידועים לנו, ואנו רוצים לגלות מה הם. למשל, \(2+x=5\) היא משוואה שבה הפתרון פירושו לגלות את הערך של \(x\). אז מהצצה חטופה ב-\(2+3=5\) ברור לנו שכנראה \(x=3\) (ליתר דיוק: ש-\(x=3\) הוא פתרון של המשוואה אבל אולי יש אחרים – במקרה הספציפי הזה אין), אבל מה הדרך השיטתית לפתור משוואות?

התשובה הקצרה היא – אין דרך כללית. אבל, אם המשוואות הן פשוטות יחסית, כן יש דרכים כלליות. ה"פשטות" מתבטאת בכמה שאנחנו מתעללים ב-\(x\): ברור לנו שמשוואה כמו \(2^{x}+\frac{\log^{3}x}{x^{x+\sin x}}=\int_{0}^{x}e^{t^{2}}dt\) היא כנראה מסובכת מהותית יותר מ-\(2+x=5\), שבה אין שום התעללות ב-\(x\) והוא פשוט מופיע כמו שהוא. משוואות לינאריות הן משוואות שבהן זה בערך מה שקורה – אם משתנה מופיע, הוא מופיע כמות שהוא, כשלכל היותר כופלים אותו במספר (לעת עתה נניח שזה מספר ממשי) כלשהו. אני רוצה להדגיש כבר עכשיו שבמשוואה יכולים להופיע כמה משתנים: אז \(2+x=5\) היא משוואה לינארית, וגם \(5x+7=22\) היא משוואה לינארית, וגם \(x+y+z=3\) היא משוואה לינארית, אבל \(x^{2}=1\) איננה משוואה לינארית כי \(x\) כבר מופיע בחזקה גבוהה מ-1; וגם \(\sqrt{x}=4\) אינה משוואה לינארית, ובוודאי שלא משהו כמו \(e^{x}=\cos x\). אז אם המשוואות המוזרות הללו (שאין לי מושג איך לפתור או אם בכלל אפשר לפתור) מפחידות אתכם, זה לא חשוב – אנחנו הולכים לדבר רק על משוואות פשוטות.

משוואה לינארית תמיד אפשר לפשט חיש קל כדי להביא אותה לצורה מאוד פשוטה. למשל, אם \(2+x+3=8\) היא משוואה, אפשר קודם כל לשים לב לכך שאפשר להחליף את הסדר בין \(x\) ושאר המחוברים, כלומר לקבל \(x+2+3=8\) (זה שימוש של כלל החילוף החיבורי; אני משתמש כאן במובלע גם בכלל הקיבוץ שפירושו ש-\(\left(2+x\right)+3\) ו-\(2+\left(x+3\right)\) הם אותו דבר ולכן בכלל לא צריך סוגריים). כעת, \(2+3=5\) ולכן אפשר לכתוב \(x+5=8\). הדרך לפשט הלאה משוואה שכזו היא לשים לב לכך שהשוויון נשמר גם אם מחסרים משני האגפים את אותו המספר: \(x+5-5=8-5\), ולכן \(x=3\). זו המחשה לעקרון הכללי: בכל משוואה, ניתן לחבר לשני האגפים את אותו מספר ולכפול את שני האגפים באותו מספר והשוויון עדיין יישמר.

לכן ברור שלא משנה איזו משוואה לינארית עם משתנה בודד \(x\) תביאו לי, אני אוכל על ידי חיסור מתאים של מספר משני האגפים לקבל משוואה מהצורה \(ax=b\). אם \(a=0\) אז זה אומר ש-\(x\) לא הופיע במשוואה מלכתחילה ולכן זו לא משוואה שיש לנו מה לפתור בה בכלל; אחרת, אפשר לכפול את שני אגפי המשוואה ב-\(\frac{1}{a}\) (שימו לב! אני מעדיף לא לומר "אפשר לחלק ב-\(a\)"; לטעמי עדיף לחשוב על חילוק כעל "כפל בהופכי") ולקבל \(x=\frac{b}{a}\). זה הכל – ראינו כעת איך פותרים משוואה ממעלה ראשונה ולא משנה מה.

תיאוריה זה נחמד, אבל מה קורה בפועל? בואו נראה דוגמה שמצאתי אי שם – המשוואה \(1+\frac{1-2x}{3}-\frac{3x-1}{7}=6-2x\). ממבט ראשון היא נראית נורא מפחידה, אבל בעצם אין כאן כלום. יש שתי דרכים לתקוף משוואה כזו – אחת מסודרת ושיטתית והשניה מהירה יותר. בדרך המסודרת והשיטתית קודם כל נפריד את המשוואה למחוברים:

\(1+\frac{1}{3}-\frac{2}{3}x-\frac{3}{7}x+\frac{1}{7}=6-2x\)

עכשיו נעביר אגפים:

\(2x-\frac{2}{3}x-\frac{3}{7}x=6-1-\frac{1}{3}-\frac{1}{7}\)

ולסיום נוציא \(x\) כגורם משותף באגף שמאל:

\(\left(2-\frac{2}{3}-\frac{3}{7}\right)x=6-1-\frac{1}{3}-\frac{1}{7}\)

והנה אנחנו במשוואה מהצורה \(ax=b\), רק שצריך עוד להשתמש בכללי החשבון כדי להבין מהו בדיוק \(a\) ומהו בדיוק \(b\). מקבלים ש-\(a=\frac{42-14-9}{21}=\frac{19}{21}\) ו-\(b=\frac{126-21-7-3}{21}=\frac{103}{21}\) ולכן \(x=\frac{\frac{103}{21}}{\frac{19}{21}}=\frac{95}{19}=\)

בדרך השניה פשוט עוברים בצעד אחד מהיר מהמשוואה \(1+\frac{1-2x}{3}-\frac{3x-1}{7}=6-2x\) אל המשוואה

\(2x+\frac{7-14x-9x+3}{21}=5\)

ומשם אל

\(2x+\frac{10-23x}{21}=5\)

וכופלים ב-21 ומקבלים

\(42x-23x=105-10\)

כלומר \(19x=95\)

כלומר \(x=\frac{95}{19}\)

זו דוגמה למשוואה מגעילה, מגעילה. זה תרגיל טכני מתיש וחסר טעם וזה לא משהו שאנחנו רוצים לעשות ביום יום. לגלות לכם סוד? כשפתרתי את המשוואה קיבלתי בשיטה הראשונה דווקא \(x=\frac{103}{19}\). איך? סתם טעות מפגרת אי שם במכנה המשותף של \(b\). מה לעשות – כשעושים עבודה של מחשב, קורות טעויות וצריך לבדוק את עצמך בשבע עיניים. זה לא מה שאנחנו רוצים להתעסק בו כאן. לכן מכאן ואילך אני אניח שאם יש לנו משוואה לינארית, היא כבר נתונה בצורה המפושטת שלה (במילים אחרות, המתמטיקה מתחילה כשהחישוב הטכני נגמר).

בואו נעבור עכשיו למשהו קצת יותר מסובך – משוואה עם שני נעלמים. למשל, \(x+y=0\). מה הפתרון למשוואה הזו? ובכן, \(x=0,y=0\) הוא בוודאי פתרון. אבל גם \(x=1,y=-1\) הוא פתרון, וגם \(x=17,y=-17\) הוא פתרון; בעצם, לכל מספר שנציב ב-\(x\), אם נציב את אותו המספר עם סימן הפוך ב-\(y\) נקבל פתרון; את זה אפשר לכתוב גם כ-\(y=-x\) (זו עדיין משוואה, אבל כאן יותר מובהק האופן שבו ערכו של \(y\) נקבע אחרי שקבענו את ערכו של \(x\)). בקיצור, מה שאנחנו רואים כאן, וזה לא מובן מאליו כלל, הוא שלמשוואה לינארית עם שני משתנים יכולים להיות אינסוף פתרונות. למעשה, תמיד יש לה אינסוף פתרונות, כל עוד אני יכול להציב מספרים ממשיים כלשהם במשתנים והמשוואה לא "מנוונת", כלומר שני המשתנים באמת מופיעים בה עם מקדם שונה מאפס.

אינסוף פתרונות זה כבר מעניין. מצד אחד, זו קבוצה אינסופית; מצד שני, די בבירור היא לא כוללת את הכל: למשל, \(x=1,y=1\) הוא לא פתרון של המשוואה \(x+y=0\). אם כן, לאוסף הפתרונות הזה יש אולי מבנה מעניין שמושרה עליו מעצם העובדה שכל האיברים בו מתוארים על ידי אותה משוואה. אחת ההבחנות המרתקות ביותר במתמטיקה לטעמי היא שיש לאוסף הפתרונות הזה מבנה גאומטרי (ובהכללה, שלאוספי פתרונות של משוואות, גם מסדרים גבוהים יותר, יש מבנה גאומטרי באופן כללי; זה הבסיס של הגאומטריה האלגברית שהיא תחום מתקדם מאוד במתמטיקה). עבור משוואות לינאריות בשני נעלמים המבנה הגאומטרי הוא מהפשוטים שניתן להעלות על הדעת – קו ישר; ועם זאת, כדאי לדבר עליו כמה שיותר מהר גם כי זה פשוט יפה, וגם כי זה יהיה מועיל לאינטואיציה בהמשך, למשל כשנדבר על מערכות של כמה משוואות לינאריות.

לא אוכיח כרגע שאוסף הפתרונות הוא אכן קו ישר, אבל בואו ננסה להבין קצת את האופן שבו המשוואה משפיעה על התכונות של הקו. משוואה לינארית כללית בשני משתנים היא מהצורה \(ax+by=c\) כאשר \(a,b,c\) הם מספרים ממשיים כלשהם, והקו הישר הוא אוסף הנקודות \(\left(x,y\right)\) שהן פתרון של המשוואה. אם \(b\ne0\) לרוב נוהגים "לנרמל" את המשוואה על ידי חלוקה במקדם של \(y\) והעברת אגפים ואז מקבלים את המשוואה \(y=mx+n\), שבה יש למספרים \(m,n\) משמעות מובהקת למדי: \(m\) הוא השיפוע של הישר (פורמלית, זהו טנגנס הזווית שהישר יוצר עם ציר ה-\(x\)) ו-\(n\) היא נקודת החיתוך של הישר עם ציר \(y\). אם במשוואה המקורית \(b=0\), כלומר המשוואה היא בעצם מהצורה \(ax=c\), אז עדיין קיבלנו תיאור של ישר: כל זוג \(\left(x,y\right)\) שבו \(x=\frac{c}{a}\) ו-\(y\) הוא בעל ערך כלשהו פותר את המשוואה, ולכן יש לנו כאן ישר אנכי (עם "שיפוע אינסופי" כפי שאוהבים לומר לפעמים). זו הסיבה שלכתוב \(ax+by=c\) זה יותר נוח כשרוצים לעשות טיפול כללי במשוואה, כולל במקרים "מנוונים" שבהם המקדם של \(y\) הוא 0 (זה הופך להיות חשוב יותר כשעוברים לדבר על מערכות של משוואות שבהן לא כל משתנה חייב להופיע בכל המשוואות).

עוד נקודה מעניינת היא ש-\(\left(0,0\right)\) ("ראשית הצירים") היא פתרון של המשוואה \(ax+by=c\) אם ורק אם \(c=0\) למשוואה מהצורה \(ax+by=0\) – כזו שאין בה מספר שונה מאפס שמתרוצץ חופשי ואינו צמוד לאף משתנה – קוראים משוואה הומוגנית. המשוואות הללו יהיו חשובות לנו במיוחד בקרוב.

עכשיו, מצויידים באינטואיציה הגאומטרית הזו, בואו נעבור לנושא שגם הוא עדיין נלמד בבית הספר – מערכת של שתי משוואות בשני נעלמים. כאן נתונות שתי משוואות, והמטרה היא למצוא האם קיים פתרון שנכון עבור שתי המשוואות בו זמנית. דרך החשיבה הגרפית שלנו מקלה מאוד על ההבנה של "מה הולך כאן" – אמרתי כבר שכל משוואה מגדירה קו ישר כלשהו; אז מה שבעצם מבקשים מאיתנו הוא זה – בהינתן שני קווים ישרים, למצוא את נקודות החיתוך שלהם.

אם נלך עם האינטואיציה הגאומטרית, תכף ומייד מתברר שיש רק שלושה מקרים אפשריים: או שהקווים כלל לא נחתכים (הם מקבילים), או שהם בעצם אותו הקו, אולי בתיאור קצת שונה; או שיש בדיוק נקודת חיתוך אחת ויחידה (לא קשה להוכיח פורמלית ששני ישרים שאינם זהים נחתכים לכל היותר בנקודה אחת, כי די בשתי נקודות שדרכן עובר קו כדי לקבוע אותו בצורה יחידה).

דוגמה לשתי משוואות שמגדירות את אותו הקו בתחפושת היא זו:

\(x+y=1\)

\(2x+2y=2\)

המשוואה השניה היא בסך הכל הכפלה של המשוואה הראשונה ב-2, וברור שכל מה שפותר את אחת מהמשוואות יפתור גם את השניה (אם אינם מאמינים, הציבו ותראו מה קורה). למעשה, אם נעביר אגפים ונחלק במקדם של \(y\) נקבל לבסוף עבור שתי המשוואות בדיוק את אותה משוואת ישר: \(y=-x+1\). כלומר, שתי המשוואות מגדירות ישר שהשיפוע שלו הוא \(-1\) ונקודת החיתוך שלו עם ציר \(y\) היא 1.

בואו נעבור לדבר על ישרים מקבילים. מה מאפיין ישרים שכאלו? העובדה שהשיפוע שלהם זהה, אך נקודת החיתוך שלהם עם ציר \(y\) (או עם ציר \(x\), אם מדובר על ישרים בעלי שיפוע "אינסופי") אינה זהה. דוגמה היא במערכת המשוואות הבאה:

\(x+y=0\)

\(x+y=1\)

שתי המשוואות מגדירות ישר עם שיפוע \(-1\), אבל הראשון עובר דרך ראשית הצירים והשני לא. מבט חטוף במשוואה הזו מסייע לנו להבין בקלות שאין לה פתרון – איך ייתכן שהסכום של \(x,y\) יהיה בו זמנית גם 0 וגם 1? אבל לפעמים המצב הוא יותר טריקי מכך.

לסיום, הנה מערכת שבה כל משוואה מגדירה ישר אחר:

\(2x+y=4\)

\(x+2y=6\)

ועכשיו נשאלת השאלה – איך פותרים את זה?

דרך אחת היא ממש לשרטט את הישרים שמתאימים לשתי המשוואות, למצוא את נקודת החיתוך שלהם, ולבדוק מה הקוארדינטות שלה. זו דרך פעולה לגיטימית, אבל קצת מסורבלת. לכן האופן שבו פותרים משוואות כאלו הוא לרוב אלגברי – מבצעים מניפולציה של סמלים, שמתבטאת בפעולות כמו "מעבירים אגף", "מציבים" וכו'. בואו נתחיל מהצבה, שהיא שיטה שפותרת גם משוואות כלליות יותר (למשל, משוואות ממעלה שניה) ולא ממש נשתמש בה בהמשך: הרעיון בהצבה הוא "לבודד" את אחד המשתנים, כפי שבודדנו את \(y\) עד כה כשרצינו לקבל משוואות של ישרים, ואז להציב את הערך שמצאנו בתוך המשוואה השניה ולפתור אותה כשם שפותרים משוואה במשתנה יחיד. כך למשל, על ידי העברת אגפים מקבלים מהמשוואה הראשונה ש-\(y=4-2x\), ואחרי הצבה במשוואה השניה מקבלים \(x+2\left(4-2x\right)=6\), שהופך ל-\(x+8-4x=6\), שהופך ל-\(-3x=-2\), שהופך ל-\(x=\frac{2}{3}\). עכשיו אפשר להציב את \(x\) חזרה בנוסחה \(y=4-2x\) ולקבל \(y=4-\frac{4}{3}=\frac{8}{3}\). זו שיטה לגיטימית ויעילה מאוד.

השיטה השניה, שאציג עכשיו, היא הרבה יותר "מובנית". האבחנה שבבסיסה היא זו: אם יש לנו משוואה לינארית כלשהי (לא משנה עם כמה נעלמים), אז אוסף הפתרונות שלה נותר זהה גם אם כופלים את המשוואה במספר קבוע; ואם יש לנו שתי משוואות לינאריות כלשהן, אז כל פתרון עבור שתי המשוואות בו זמנית הוא גם פתרון עבור הסכום של שתי המשוואות. אני לא אומר זאת כרגע במפורש (טוב, בעצם כן) אבל שתי הפעולות הללו – כפל בקבוע, וחיבור שני איברים – הן הפעולות שמגדירות מרחב וקטורי, שהוא האובייקט המרכזי באלגברה לינארית.

בואו נראה איך האבחנה הזו עוזרת לנו. ניקח את המערכת שהצגתי לפני רגע, נכפול את המשוואה הראשונה בה ב-\(-\frac{1}{2}\), ונקבל את המערכת החדשה:

\(-x-\frac{1}{2}y=-2\)

\(x+2y=6\)

מובטח לי שהפתרונות של המערכת הזו זהים לפתרונות של המערכת הקודמת. כעת אחבר את שתי המשוואות הללו ואקבל משוואה חדשה:

\(\frac{3}{2}y=4\)

שממנה נובע מייד ש-\(y=\frac{8}{3}\) והנה כבר פתרתי.

כדי לעשות את החיים קלים יותר, לרוב משלבים את שני השלבים שתיארתי כרגע לשלב אחד: לוקחים את אחת מהמשוואות, ופשוט מחברים לה את המשוואה השניה כשאותה משוואה כבר מוכפלת בקבוע כלשהו. כך למשל אני יכול לפתור את המערכת של קודם על ידי כך שאכפול את המשוואה התחתונה דווקא במינוס 2 ואחבר אותה למשוואה העליונה. אקבל:

\(0x-3y=-8\)

\(x+2y=6\)

עכשיו אפשר לכפול את המשוואה הראשונה בקבוע מתאים ולקבל:

\(0x+y=\frac{8}{3}\)

\(x+2y=6\)

ועכשיו אפשר להוסיף למשוואה השניה את המשוואה הראשונה כשהיא מוכפלת במינוס 2, ולקבל:

\(0x+y=\frac{8}{3}\)

\(x+0y=\frac{2}{3}\)

מה שמעניין כאן (וניסיתי להדגיש עם ה-\(0x\) וה-\(0y\) שמופיעים שם) הוא שמבחינה רעיונית, עדיין יש לי כאן מערכת משוואות ולא "פתרון" – על ידי הפעולה החדשה שהמצאתי, של "להוסיף לשורה אחת כפולה של השורה השניה" אני מקבל סדרה של מערכות של משוואות, שכולן בעלות התכונה שיש להן בדיוק את אותו הפתרון. פשוט למרבה המזל, המערכת האחרונה היא ממש, ממש פשוטה ואפשר לקרוא את הפתרון ישר מתוכה.

דרך אחרת לתאר את מה שעשיתי כאן היא זו: הצגתי תהליך שמאפשר להמיר מערכת של משוואות במערכת שקולה, ובסוף התהליך תמיד מגיעים למערכת קנונית פשוטה שבה הפתרון מובן מאליו. השיטה הזו (בכפוף לתיאור קצת יותר פורמלי ומדויק שיבוא בפוסט הבא) נקראת אלימינציה גאוסית וקשה להמעיט בחשיבותה; העובדה שניתן לבצע אותה בפועל מאוד ביעילות היא הבסיס לקלות החישובית של בעיות רבות באלגברה לינארית. לסיום אני רק רוצה להעיר שטרם אמרתי זאת במפורש, אבל באופן שהצגתי לעיל אפשר לפתור מערכת של מספר כלשהו של משוואות לינאריות במספר כלשהו של משתנים; אבל הפירוט יחכה להמשך.

אז מה זו אלגברה לינארית?

סטודנטים להנדסה בסמסטר הראשון שלהם מתמודדים עם שני קורסים מתמטיים כבדים. האחד הוא חדו"א (חשבון דיפרנציאלי ואינטגרלי) הידוע לשמצה, והשני הוא אלגברה לינארית (הידועה לשמצה?). על החשיבות של חדו"א כבר דיברתי כאן ואני מקווה להמשיך לדבר בעתיד – אבל מדוע האלגברה הלינארית, שלא ממש נלמדת בתיכון (בניגוד לחדו"א שמושגי היסוד שלו מוצגים בתיכון) היא מקצוע חשוב ובסיסי כל כך בימינו? ועל מה היא מדברת בכלל? זה מה שאני רוצה להציג בפוסט הזה; הרחבות, כרגיל, יגיעו בהמשך.

לי אישית יש בלב פינה חמה לאלגברה לינארית – זה היה הקורס המתמטי הראשון שלמדתי, ואי שם באמצע הדרך כש"נפל לי האסימון" באשר למה שאנחנו באמת עושים בקורס, גם הבנתי לראשונה מה זו מתמטיקה. כך שלטעמי, למרות שמדובר בתחום שנראה טכני ויבש במבט ראשון, זה תחום מאוד מתמטי ומאוד יפה (אם כי עלי להודות שלטעמי תורת הקבוצות היא קורס טוב יותר לקבל בו את תחושת "מה זו מתמטיקה" – ועל תורת הקבוצות כבר כתבתי פוסטים רבים). הגיע הזמן להפסיק להזניח את האלגברה הלינארית.

אם כן, למה "אלגברה", ולמה "לינארית"? אלגברה, במקור, היא התחום שעוסק בפתרון משוואות (השם "אלגברה" נגזר משמו של ספר של גדול המתמטיקאים של העולם המוסלמי – אל-חוואריזמי – על פתרון משוואות), ואכן אפשר להתחיל לבנות את האלגברה הלינארית מפתרון משוואות – משוואות לינאריות, כאלו שבהן כל המשתנים הן ממעלה ראשונה. אבל אלגברה במובנה המודרני יותר עוסקת באובייקטים שנוסף להם מבנה באמצעות פעולות שניתן לבצע עליהם – למשל, חיבור, או כפל, וכדומה. האלגברה הלינארית עוסקת בחקר של מבנה שכזה, שנקרא (לא להיבהל…) "מרחב וקטורי". הכוח של האלגברה הלינארית נובע מכך שהמבנה הזה הוא אבסטרקטי – הוא מוגדר באמצעות כמה תכונות יסוד שלו שהוא מקיים, וזהו. מרגע זה ואילך ניתן להסיק אלף ואחת מסקנות שונות עליו מתוך אותן תכונות יסוד, וכתוצאה מכך כל דבר בעולם שאנו יכולים לחשוב עליו כמרחב וקטורי ייהנה מהמסקנות שהסקנו.

אילו מרחבים וקטוריים אנו מכירים בפועל? אה, מכאן מגיעה השימושיות של האלגברה הלינארית: יש המון. המרחב הדו והתלת ממדי ה"רגילים" הם מרחבים וקטוריים; אוסף כל הפתרונות למערכת משוואות לינארית הוא מרחב וקטורי; אותו דבר גם לאוסף הפתרונות למערכת משוואות דיפרנציאליות לינארית, או למשוואות רקורסיביות לינאריות (דוגמת המשוואה שמגדירה את סדרת פיבונאצ'י); אוספים של מטריצות הן מרחב וקטורי (מהי מטריצה? אובייקט נוסף שהוא מרכזי באלגברה לינארית אך לא אפרט עליו כרגע). גם פונקציות ממרחב וקטורי אחד לאחר שמשמרות את המבנה שלהם (מה שמכונה "טרנספורמציות לינאריות") מהוות בעצמן מרחב וקטורי! ובאופן כללי מרחבים של פונקציות הם במקרים רבים מרחבים וקטוריים. כל כך הרבה דברים הם מרחב וקטורי עד שסיפור שהיה באמת הוא שמרצה בקורס אלגברה לינארית בטכניון נשאל אם הוא יכול לתת דוגמה למשהו שאינו מרחב וקטורי והוא ענה "אה… השולחן הזה?"

האסימון שאמרתי שנפל לי הוא בדיוק ההבנה הזו שאותם שיקולים ורעיונות שהופעלו בתחילת הקורס על מערכות של משוואות לינאריות, ואז על המרחבים הדו והתלת ממדיים, ואז על מטריצות – אותם שיקולים הם למעשה חלק מתורה כללית, שאינה נזקקת לכל המידע הנוסף שמבדיל משוואות לינאריות ממטריצות, למשל; כל שמעניין הוא החלק הדומה, והדבר המדהים הוא שהדמיון הזה הוא קטן – אפשר לתת רשימה קצרה של תכונות זהות, אבל הן מספיקות כדי שניתן יהיה להפיק כמות אדירה של מידע, ולגרום לכך ששני המושגים הללו – משוואה לינארית אל מול מטריצה, למשל – יראו לי דומים להחריד, כמעט זהים. זוהי המתמטיקה – "האמנות של קריאה באותו השם לדברים שונים".

כל זה טוב ויפה, אבל מה כולל בתכל'ס קורס בסיסי באלגברה לינארית? ובכן, אציג מבנה של קורס אפשרי אחד; לא כולם מלמדים את החומר באותו האופן. התחלה טבעית למדי לטעמי היא עיסוק במערכות של משוואות לינאריות – עיסוק שמכליל את מה שנלמד כבר בתיכון. משוואה לינארית בנעלם אחד היא משוואה מהצורה \(ax=b\) שהיא לא כל כך מעניינת (יש לה פתרון אחד – \(x=\frac{b}{a}\), תחת ההנחה ש-\(a\ne0\)) אבל משוואה לינארית בשני נעלמים היא כבר אתגר כלשהו ותלמידים מקדישים לה זמן לא מועט. אם יש לנו רק משוואה אחת בשני נעלמים, יש לה לרוב אינסוף פתרונות – למשל, למשוואה \(x+y=0\), לכל ערך של \(x\) שתבחרו, אם \(y\) יקבל את המינוס של ערך זה, נקבל פתרון. אז לרוב מדברים על מערכת שכוללת שתי משוואות לינאריות (למשל: \(3x+2y=3\) וגם \(x+7y=13\)). מה שעושים באלגברה לינארית הוא לקפוץ למים העמוקים ולדבר על מערכת של \(m\) משוואות ב-\(n\) נעלמים. התורה של פתרון משוואות כאלו היא יפה ומעניינת, ובסופו של דבר מתקבל אלגוריתם שמאפשר לכל מערכת משוואות שכזו לגלות ביעילות אם יש לה פתרון, ואם כן – מהו. האלגוריתם הזה – "אלימינציה גאוסית" – הוא אחד מהאלגוריתמים החשובים במתמטיקה, ולא מעט מהאלגברה הלינארית שמפותחת בהמשך מתבססת עליו.

מערכות של משוואות הן תירוץ טוב להכניס לתמונה מטריצות. מטריצה היא פשוט סדרה דו-ממדית של ערכים, אבל אפשר לחשוב עליה גם בתור יצור אלגברי – כזה שאפשר לחבר ולחסר ולכפול. הגדרת הכפל של מטריצות נראית מאוד מסובכת ולא טבעית ממבט ראשון, אבל המכה מרוככת טיפה אם חושבים על המטריצה כאובייקט שמסייע לתאר משוואות לינאריות (ספציפית, אם חושבים על מערכת משוואות לינאריות כמשוואה אחת שמערבת כפל של שתי מטריצות). בהקשר הזה גם צץ ועולה באופן טבעי המושג של וקטור כסדרה חד ממדית של איברים; אפשר לנצל את ההזדמנות הזו כדי לראות כיצד מדובר בהכללה של וקטורים דו ותלת-ממדיים שמופיעים בדרך כלל בפיזיקה, גרפיקה וכדומה.

בשלב הזה, אם ממש רוצים, אפשר לתאר את המושג של שדה. שדה הוא הכללה של התכונות היפות שיש למספרים הממשיים/מרוכבים/רציונליים; התורה הכללית של אלגברה לינארית תמיד מערבת שדה שנמצא ברקע. את רוב התורה הבסיסית אפשר לפתח מעל הממשיים ותו לא מבלי לשים לב להבדל, אבל יש יתרונות לחשיבה כללית כבר בשלב זה.

אחרי שכבר צברנו כמה דוגמאות לאובייקטים מתמטיים מעניינים – אוספי הפתרונות של משוואות לינאריות, מטריצות, וקטורים, שדות – מגיע הזמן להפיל את הפצצה ולהצביע על כך שכל היצורים הללו הם אותו דבר במובן מאוד חזק – כולם מרחבים וקטוריים. מה זה בדיוק מרחב וקטורי לא אגיד כרגע, בעיקר כי כרגע אני יכול להגיד רק רשימת תכונות שמשמעותן לא ממש ברורה כל עוד לא משחקים קצת עם דוגמאות.

אחרי האבחנה הזו, שמצמצמת את כל האובייקטים שדיברנו עליהם לאוסף קטן מאוד של תכונות מגדירות, נשאלת השאלה מה אפשר להגיד באופן כללי על האובייקט הזה. התוצאה המפתיעה היא שאפשר לומר עליו המון. אחת הסיבות שבגללן מתחילים לימודי מתמטיקה עם אלגברה לינארית היא שזה אובייקט שהתורה שלו היא מאוד פשוטה, התוצאות זורמות "באופן טבעי" ובלי להכניס לתמונה כלים כבדים, והכל מתנהג מאוד יפה. אולי התוצאה הבסיסית החשובה ביותר שאפשר לתת בשלב זה היא העובדה שלכל מרחב וקטורי קיים בסיס – קבוצה קטנה יחסית של וקטורים שבאמצעותה ניתן לתאר את כל הוקטורים במרחב, והבנה שלה מבטיחה הבנה גדולה של המרחב. אחת התוצאות היסודיות היא שעבור מרחב וקטורי נתון כל הבסיסים הם מאותו גודל; מכיוון שמרחבים עם בסיס אינסופי הם מסובכים משמעותית יותר הדיון מכאן ואילך מתמקד לרוב במרחבים בעלי בסיס סופי.

השלב הבא, כמו שקורה לעתים קרובות באלגברה, הוא לבדוק מה קורה למרחבים וקטוריים כאשר פועלים עליהם בצורה שמשמרת את המבנה שלהם. במילים אחרות, מנסים להבין את קבוצת כל הפונקציות ממרחב וקטורי אחד למשנהו שמשמרות את המבנה של המרחב שעליו הן פועלות. פונקציות כאלו נקראות טרנספורמציות לינאריות. חיש מהר אנו מגלים שכל טרנספורמציה כזו נקבעת חד-ערכית על פי פעולתה על אברי בסיס של המרחב, וזה מוביל לאבחנה שאפשר לתאר טרנספורמציה לינארית באמצעות מטריצה, ואת הפעולה של הטרנספורמציה על אברי המרחב הוקטורי – כמו פעולה של כפל מטריצות. זה מסביר את ההגדרה ה"מוזרה" של כפל מטריצות בצורה מושלמת ואף עושה יותר מכך – מראה שטרנספורמציות לינאריות ומטריצות הן אותו הדבר בדיוק (במובן מסויים של "בדיוק", כמובן). זו אולי התוצאה הקשה ביותר להבנה והיפה ביותר באלגברה לינארית בסיסית.

המושג האחרון שמכניסים לתמונה בדרך כלל בקורס בסיסי הוא זה של ערכים עצמיים של טרנספורמציה. על קצה המזלג, מספר כלשהו הוא ערך עצמי של טרנספורמציה אם קיים איבר ("וקטור עצמי") שעליו פעולת הטרנספורמציה היא פשוט כפל במספר הזה – פעולה פשוטה במיוחד. ערכים עצמיים הם לרוב המפתח לייצוג פשוט של טרנספורמציות ולכן מציאתם (שהיא מעט טכנית) היא חשובה למדי, כשהיעד הוא מציאת בסיס למרחב שכולו מורכב מוקטורים עצמיים של הטרנספורמציה.

הנושא הבסיסי האחרון שרלוונטי מתקבל כאשר מוסיפים למרחב הוקטורי מבנה נוסף עם המושג של מכפלה פנימית של וקטורים שמאפשרת להכליל מושגים כמו זווית ואורך של וקטורים, ובפרט להגיד מתי הם ניצבים אלו לאלו. זה מעלה באופן טבעי את המושג של בסיס אורתונורמלי למרחב וקטורי (בסיס שכל הוקטורים בו ניצבים אלו לאלו והם כולם "מאורך 1") ואת הצורך להוכיח שקיים כזה לכל מרחב וקטורי ואיך למצוא אותו (בעזרת מה שנקרא אלגוריתם גרם-שמידט). מכאן מגיעים לגולת הכותרת: משפט הפירוק הספקטרלי, המאפיין את הטרנספורמציות שניתן עבורן למצוא למרחב בסיס של וקטורים עצמיים אורתונורמליים, כלומר שילוב של הגביע הקדוש של מציאת בסיס של וקטורים עצמיים עם הגביע הקדוש של מציאת בסיס אורתונורמלי.

אם כן, זוהי אלגברה לינארית בסיסית על קצה המזלג – נראה לי שיהיה קונצנזוס כלשהו על כך שאלו הם נושאי הבסיס (אם כי יש עוד נושאים בסיסיים שלא הזכרתי). בסדרת הפוסטים שאני מקווה לכתוב על אלגברה לינארית אנסה לתאר את כל מה שדיברתי עליו בפוסט הזה.

משפט המטריצה-עץ של קירכהוף

אני רוצה לדבר הפעם על מה שלטעמי הוא משפט יפהפה ביותר, גם בשל מה שהוא אומר וגם בשל ההוכחה שלו, שלטעמי מייצגת את כל מה שטוב במתמטיקה – גם דורשת הבנה טכנית לא טריוויאלית, וגם מכילה תובנה עמוקה שמאפשרת לראות מדוע המשפט נכון. העולם מסכים איתי, וההוכחה הזו מככבת בספר "Proofs from THE BOOK"; אני מקווה שכל מי שיתאמץ יצליח להבין אותה וליהנות כמוני ממנה.

המשפט מכונה בשם Matrix-tree theorem, או משפט קירכהוף (קירכהוף לא בדיוק הוכיח אותו אבל במאמר שלו המשפט מופיע באופן מובלע). כדי להגיע ישר לעניין ללא הקדמה ארוכה לא אציג מחדש את מושגי הבסיס שבהם עוסק המשפט; כדי להבין את הניסוח (וההוכחה) של המשפט יהיה צורך להכיר את מושגי הבסיס של גרף, עץ, מטריצה ודטרמיננטה. כולם מושגים פשוטים ומרכזיים במתמטיקה ואני ממליץ לקוראים שטרם שמעו עליהם ללכת ולקרוא ספרים בסיסיים בקומבינטוריקה ובאלגברה לינארית כי הם מפספסים עולמות נפלאים שלמים.

ראשית אציג גרסה של המשפט שעוסקת בגרפים לא מכוונים כי ההוכחה שלו פשוטה מעט יותר; לאחר מכן אסביר כיצד ניתן להוכיח את המשפט גם לגרפים מכוונים (באותה הצורה אבל עם תיקונים קלים). המשפט בא לענות על השאלה הקומבינטורית הבאה: בהינתן גרף סופי \(G=\left(V,E\right)\), כמה עצים פורשים יש לו? כזכור, עץ פורש של \(G\) הוא תת-קבוצה של הקשתות שמהווה עץ (כלומר, כשמורידים מ-\(G\) את כל הקשתות שאינן בתת-הקבוצה נשארים עם גרף קשיר וחסר מעגלים). עובדה אחת שאתם אולי לא זוכרים והיא רלוונטית כאן היא שבגרף עם \(n=\left|V\right|\) צמתים, כל עץ הוא בעל בדיוק \(n-1\) קשתות (נסו להוכיח זאת לעצמכם!)

משפט קירכהוף אומר שבהינתן \(G\) כזה, מספר העצים הפורשים שלו הוא בדיוק הדטרמיננטה של מטריצה פשוטה מסויימת שמוגדרת באמצעות \(G\). זה נשמע מאוד מאוד מפתיע ממבט ראשון – מה לדטרמיננטים ולספירת עצים פורשים? ובכן, אני מודה שגם אחרי שאני מכיר את הוכחת המשפט ומבין בדיוק למה הוא עובד, זה עדיין מפתיע אותי.

בואו נכניס מטריצות לתמונה. יש כמה וכמה מטריצות שאפשר להתאים לכל גרף \(G\), ואחת מהן היא מטריצת הלפלסיאן \(L_{G}\) (ובקיצור אכתוב סתם \(L\)). ההגדרה של \(L\) אולי תיראה קצת מוזרה במבט ראשון אבל היא שימושית; למשל, עבור משפט קירכהוף.

ראשית, מכיוון שמטריצות מאונדקסות בדרך כלל עם מספרים טבעיים, הבה ונאנדקס גם את הגרף עם מספרים כאלו: \(V=\left\{ v_{1},\dots,v_{n}\right\} \) ו-\(E=\left\{ e_{1},\dots,e_{m}\right\} \). בדרך כלל כשאתייחס לצומת זה יהיה עם אינדקס \(i\) או \(j\), ולקשת עם אינדקס \(k\).

כעת אנו מוכנים להגדיר את \(L\): ראשית, \(L_{ii}=d\left(v_{i}\right)\), כלומר הכניסה ה-\(i\) על האלכסון של \(L\) היא פשוט הדרגה של \(v_{i}\) – מספר הקשתות שמחוברות ל-\(v_{i}\). כעת, לכל \(i\ne j\) נגדיר את \(L_{ij}\) להיות מינוס מספר הקשתות בין \(v_{i}\)ל-\(v_{j}\) (בדרך כלל יש רק קשת אחת בין כל שני צמתים בגרף, אבל כאן אנחנו מרשים יותר; כמובן שככל שיש יותר קשתות יהיו יותר עצים פורשים). אם נסמן את המספר הזה בסימון שהמצאתי כרגע, \(d\left(v_{i},v_{j}\right)\) ונסכים ש-\(d\left(v_{i},v_{i}\right)\) הוא פשוט דרגת \(v_{i}\) (במקום מספר הקשתות מ-\(v_{i}\) לעצמו), הרי שאפשר לכתוב את הלפלסיאן כך: \(L_{ij}=d\left(v_{i},v_{j}\right)\).

בשלב הזה צריך להראות דוגמה כדי להבין מה קורה פה. אני אנקוט בגישה שונה – אתם תציירו לעצמכם דוגמה, כי זה הרבה יותר אפקטיבי מלקרוא דוגמה שמישהו אחר כתב (וכי אני עצלן), ואני אשב בצד ואחכה שתסיימו.

הגדרת הלפלסיאן עבור גרפים מכוונים כמעט זהה, בשני שינויים קלים: ראשית, \(L_{ii}\) הוא דרגת הכניסה של \(v_{i}\) – מספר הקשתות שנכנסות אליו – ולא הדרגה הכוללת; שנית, \(L_{ij}\) הוא מינוס מספר הקשתות מ-\(v_{i}\) אל \(v_{j}\) (כלומר, קשתות מ-\(v_{j}\) אל \(v_{i}\) לא נספרות ב-\(L_{ij}\), אם כי הן כן ייספרו ב-\(L_{ji}\)). לא קשה לראות שההגדרה הזו מכלילה את ההגדרה לגרפים לא מכוונים אם נוקטים בתעלול הרגיל של לייצג גרף לא מכוון על ידי גרף מכוון שבו לכל זוג צמתים שיש ביניהם קשת בגרף הלא מכוון, היא מוחלפת בקשת לכל אחד משני הכיוונים בגרף המכוון.

כעת, יהא \(r\) אינדקס של צומת כלשהו בגרף, ונסמן ב-\(L^{\left(r\right)}\) את מטריצת המינור ה-\(r\)-ית של \(L\) – המטריצה שמתקבלת מ-\(L\) על ידי מחיקת השורה והעמודה ה-\(r\)-יות. אז הנה משפט קירכהוף, בגרסה שנכונה הן לגרפים מכוונים והן לגרפים לא מכוונים:

מספר העצים הפורשים של הגרף \(G\) שהשורש שלהם הוא \(v_{r}\) הוא \(\det L^{\left(r\right)}\).

(בגרף לא מכוון אין ממש משמעות ל"שורש" ולכן כדי למצוא את מספר העצים הפורשים אפשר לבחור \(r\) שרירותי; בגרף מכוון שורש הוא הצומת היחיד בעץ שקיים מסלול ממנו אל שאר הצמתים בגרף).

שימו לב שעניין המינור הכרחי: לא קשה לראות ש-\(\det L=0\) תמיד כי סכום כל עמודה במטריצה הוא 0 ולכן שורות המטריצה תלויות לינארית. כמובן ש-\(L\) מעניינת גם לכשעצמה – למשל, יש חשיבות גדולה לערך העצמי הבא החיובי הקטן ביותר שלה; אבל לא אכנס לכל זה כרגע.

איך מוכיחים את המשפט? אפשר לנסות לחשב ישירות את הדטרמיננטה על פי ההגדרה ולהבין מה הולך שם. זו הוכחה לגיטימית ולא מעט ספרים נוקטים בה. אני מעדיף להשתמש בגישה אחרת ששולפת עוד כמה שפנים מהכובע ובסוף מאפשרת להבין בדיוק מה קורה פה – גישה שמשתמשת בנוסחת קושי-בינה.

את קושי-בינה לא רואים בדרך כלל בקורס בסיסי באלגברה לינארית וקצת חבל. יש לה גם הוכחה קומבינטורית יפהפיה משל עצמה (גם היא ב-Proofs from THE BOOK) שלא אציג כרגע. בבסיסה, הנוסחה היא הכללה של נוסחה בסיסית שכן רואים באלגברה לינארית: אם \(A,B\) הן מטריצות ריבועיות, אז \(\det\left(A\cdot B\right)=\det A\cdot\det B\).

העניין הוא בכך שמטריצות ריבועיות עשויות להתקבל גם כמכפלה של מטריצות לא ריבועיות: אם \(A\) היא מטריצה \(n\times m\) ו-\(B\) היא מטריצה \(m\times n\) אז מכפלתם \(AB\) היא מטריצה \(n\times n\), ולכן אפשר לדבר על הדטרמיננטה שלה. מצד שני, \(A,B\) אינן ריבועיות ולכן אין משמעות לדטרמינטטה שלהן. האם בכל זאת אפשר לעשות משהו?

אם \(m<n\) אין על מה לדבר, אבל רק כי אז מובן מאליו ש-\(\det AB=0\). למה מובן מאליו? ובכן, זה תרגיל טוב באלגברה לינארית: אם \(m<n\) אז דרגת \(A,B\) היא לכל היותר \(m\) כל אחד; ולכן דרגת המכפלה \(AB\) גם היא לכל היותר \(m\), ולכן \(AB\) היא מטריצה מדרגה לא מלאה ובהכרח הדטרמיננטה שלה היא 0.

מצד שני, אם \(m>n\), נוסחת קושי בינה נכנסת לפעולה. במילים מה שהולך כאן הוא הדבר הבא: \(A\) היא מטריצה מלבנית, אבל היא מכילה הרבה תת-מטריצות ריבועיות \(n\times n\), שמתקבלות מבחירת תת-קבוצה של \(n\) מתוך \(m\) העמודות שלה. באותו האופן גם \(B\) מכילה הרבה תת-מטריצות ריבועיות \(n\times n\) שמתקבלות מבחירת תת-קבוצה של \(n\) מתוך \(m\) השורות שלה. אם נסמן ב-\(\sigma\) בחירה מסויימת של \(n\) מתוך \(m\) אינדקסים, אז נוסחת קושי-בינה היא פשוט \(\det\left(AB\right)=\sum_{\sigma}\left(\det A_{\sigma}\cdot\det B_{\sigma}\right)\). כלומר: לכל בחירה אפשרית של \(n\) מתוך \(m\) אינדקסים \(\sigma\) ניקח מתוך \(A\) ו-\(B\) את תת המטריצות המתאימות (שימו לב שזו אותה בחירת אינדקסים לשתי המטריצות! זה מה שחשוב פה), נחשב את מכפלת הדטרמיננטות שלהן, ונסכום את הכל (אם \(m<n\) אז אפשר להסכים על כך שהסכום ריק ולכן שווה 0, ובכך לקבל נוסחה שתקפה לכל מקרה אפשרי).

איך נוסחת קושי-בינה מסייעת לנו כאן? ובכן, את הלפלסיאן קל למדי לכתוב כמכפלה של מטריצות. בואו נדבר לבינתיים על המקרה של גרף לא מכוון שהוא פשוט קצת יותר, ונגדיר מטריצה \(A\) – "מטריצת החילה" (Incidence matrix) של הגרף. זו תהיה מטריצה \(n\times m\) שבה כל שורה מייצגת צומת בגרף וכל עמודה מייצגת קשת בגרף, כך שלכל קשת \(e_{k}=\left(v_{i},v_{j}\right)\) עם \(i<j\) נקבע ש-\(A_{ik}=1,A_{jk}=-1\) וכל כניסה אחרת במטריצה היא 0. במילים אחרות, כל עמודה במטריצה הזו מכילה בדיוק 1 בודד ו-\(-1\) בודד, בשני הצמתים שמתאימים לקשת של אותה עמודה.

כעת זה תרגיל נחמד לבדוק שאכן \(L=A\cdot A^{T}\) (כאן \(A^{T}\) מייצג את השחלוף של \(A\): \(A_{ij}^{T}=A_{ji}\)). ומהו \(L^{\left(r\right)}\)? לא קשה לראות שהוא \(NN^{T}\) כאשר \(N\) מתקבלת מ-\(A\) על ידי מחיקת השורה ה-\(r\). שימו לב שאנחנו לא מוחקים מ-\(A\) עמודות; הקשתות שהיו מחוברות ל-\(v_{r}\) עדיין מיוצגות ב-\(N\), אבל באופן "חלקי" – העמודה שלהן מכילה רק 1 או רק \(-1\). זו אולי הנקודה הקריטית ביותר בהמשך ההוכחה.

עכשיו, על פי קושי-בינה, \(\det\left(L^{\left(r\right)}\right)=\sum_{\sigma}\det N_{\sigma}\det N_{\sigma}^{T}=\sum_{\sigma}\det\left(N_{\sigma}\right)^{2}\). הצטמצמנו להבנה של מהו \(\det\left(N_{\sigma}\right)\) לכל בחירה מתאימה של עמודות. שימו לב של-\(N\) יש \(n-1\) שורות (כי בגרף המקורי היו \(n\) צמתים והסרנו את השורה של הצומת \(v_{r}\) מהמטריצה \(A\) כדי לקבל את \(N\)), ולכן כל \(\sigma\) היא בחירה של \(n-1\) עמודות, כלומר של \(n-1\) קשתות מהגרף המקורי. והנה לב ההוכחה, התובנה המרכזית בה, מה שהופך את הכל לברור לדעתי: אותה בחירה \(\sigma\) של \(n-1\) עמודות היא בדיקה שלנו האם מועמד כלשהו לתפקיד עץ פורש הוא אכן עץ פורש. הדטרמיננטה \(\det N_{\sigma}\) תהיה בדיוק אבן הבוחן: אם \(\sigma\) אכן מהווה בחירה של \(n-1\) קשתות שיוצרות עץ פורש, נקבל ש-\(\det N_{\sigma}=\pm1\); ואחרת נקבל \(\det N_{\sigma}=0\). זה בבירור מסיים את ההוכחה שכן אז נקבל ש-\(\sum_{\sigma}\det\left(N_{\sigma}\right)^{2}\) הוא בדיוק מספר ה-\(\sigma\)-ות שעבורן קיבלנו עץ פורש, כלומר מספר העצים הפורשים של הגרף.

אתם עוד איתי? אם כן, הבנתם את ההוכחה; נותר לגהץ את הפרטים.

נתחיל במקרה שבו \(\sigma\) לא מגדירה עץ פורש בגרף \(G\). אנחנו רוצים להראות ש-\(\det N_{\sigma}=0\) במקרה הזה, ונעשה זאת על ידי כך שנוכיח שבמטריצה \(N_{\sigma}\) יש קבוצה של שורות שסכומן אפס. תוצאה בסיסית על עצים היא שאם גרף לא מכוון עם \(n\) צמתים ו-\(n-1\) קשתות הוא גם קשיר, אז הוא עץ; לכן אם \(\sigma\) אינה משרה עץ בהכרח יש שני רכיבי קשירות. \(v_{r}\) נמצא באחד מהם; בואו נסתכל דווקא על השני – וליתר דיוק, על השורות במטריצה \(N_{\sigma}\) שמתאימות לצמתים של אותו רכיב קשירות שני. אני טוען שסכום כל השורות הללו הוא 0. מדוע? ובכן, נעבור עמודה עמודה: כל עמודה מתאימה לקשת שמחברת שני צמתים. אם שניהם אינם ברכיב הקשירות ממילא, אז בשורות שמתאימות לרכיב הקשירות כל הכניסות בעמודה הזו יהיו 0. אם שניהם ברכיב הקשירות, אז תהיה שורה שבה יופיע 1, ושורה שבה יופיע \(-1\), ובשאר השורות 0 – ושוב, הסכום הוא 0. ואם אחד מהצמתים ברכיב הקשירות והשני לא? ובכן, זה בלתי אפשרי כי זה נוגד את ההגדרה של רכיב קשירות: אם צומת נמצא ברכיב קשירות מסויים, כך גם כל שכניו.

הטיעון הטכני ביותר יהיה ההוכחה ש-\(\det N_{\sigma}=\pm1\) כאשר \(\sigma\) כן מתאימה לעץ פורש, אבל אחר כך סיימנו את ההוכחה כולה. הרעיון הוא שבמקרה הזה, אפשר לסדר מחדש את שורות ועמודות \(N_{\sigma}\) כך שתתקבל מטריצה משולשית תחתונה (מטריצה שבה כל הכניסות מעל לאלכסון הראשי הן 0), ואת הדטרמיננטה של מטריצה משולשית קל לחשב – זו בסך הכל מכפלת האיברים שעל האלכסון. מכיוון שסידור מחדש של שורות או עמודות משנה רק את הסימן של הדטרמיננטה, זה יסיים את ההוכחה. את המטריצה המסודרת-מחדש אסמן ב-\(M\).

אמרנו ש-\(\sigma\) מהווה עץ. מה שנעשה הוא להתחיל לפרק את העץ לגורמים. ראשית, בואו נזכור שעלה בעץ הוא צומת מדרגה 1, כלומר שמחובר בדיוק לצומת אחר אחד. עוד משפט חשוב על עצים הוא שבעץ יש לפחות שני עלים; לא אוכיח אותו כרגע.

הבה ונסמן ב-\(u_{1}\) עלה שכזה שהוא שונה מ-\(v_{r}\) (תמיד יש כזה; אפילו אם \(v_{r}\) הוא עלה, יש עוד עלה שאפשר לבחור) וב-\(e_{1}\) את הקשת בעץ שמחוברת אליו. השורה הראשונה במטריצה-המסודרת-מחדש שלנו תהיה זו של \(u_{1}\), והעמודה הראשונה תהיה זו של \(e_{1}\). מכיוון ש-\(u_{1}\) מחובר רק ל-\(e_{1}\) בעץ, הכניסה \(M_{11}\) תהיה שווה ל-1 או ל-\(-1\)(לא משנה לנו איזה מהם), וכמו כן \(M_{1j}=0\) לכל \(j>1\) (ובכלל לא משנה איך אני הולך לסדר את יתר העמודות), שכן כל העמודות הללו מתאימות לקשתות ש-\(u_{1}\) לא מחובר אליהן.

כעת נסיר את \(u_{1}\) מהעץ שלנו (ויחד איתו את \(e_{1}\)), ושוב נקבל עץ, ולכן שוב יש בו צומת מדרגה 1 שאינו \(v_{r}\). זה יהיה \(u_{2}\) והקשת שמתאימה לו תהיה \(e_{2}\). זה אומר ש-\(M_{22}\) הוא שוה \(\pm1\); ואנו יודעים בודאות שעבור הקשתות שטרם טיפלנו בהן, \(u_{2}\) אינו מחובר לאף אחת מהן ולכן \(M_{2j}=0\) לכל \(j>2\) (אולי הוא היה מחובר ל-\(e_{1}\), אבל זה אומר רק שאולי \(M_{12}\ne0\) וזה לא מפריע לנו כי כניסה זו היא מתחת לאלכסון הראשי). העיקרון ברור – נמשיך לבנות כך סדרה \(u_{1},u_{2},\dots,u_{n-1}\) של צמתים ו-\(e_{1},e_{2},\dots,e_{n-1}\) של קשתות. הצומת היחיד שלא נגענו בו הוא \(v_{r}\) עצמו, שהשורה שמתאימה לו בכלל לא מופיעה ב-\(N\) כך שהוא לא רלוונטי לבניה שעשינו. קיבלנו מטריצה משולשת תחתונה שעל האלכסון יש לה רק \(\pm1\) וזה מסיים את ההוכחה.

אני מאוד מקווה שנהניתם מההוכחה הזו כפי שאני נהניתי ממנה.

בואו נעבור עכשיו לדבר על מה צריך להשתנות בהוכחה אם נרצה להוכיח את המשפט לגרפים מכוונים. כבר אמרתי שצריך לשנות את הגדרת מטריצת הלפלסיאן עצמה קצת: \(L_{ii}\) הוא דרגת הכניסה של כל צומת ו-\(L_{ij}\) הוא מינוס מספר הקשתות מ-\(v_{i}\) אל \(v_{j}\). זו לא מטריצה סימטרית ולכן גם לא בהכרח ניתן לכתוב אותה בתור \(A\cdot A^{T}\); אבל אפשר לעשות משהו טוב כמעט באותה מידה.

הבה ונגדיר שוב מטריצה \(A\) מסדר \(n\times m\) (כלומר – שורה לכל צומת ועמודה לכל קשת, כמקודם) באופן הבא: לכל קשת \(e_{k}=v_{i}\to v_{j}\) (כלומר, מהצומת \(v_{i}\) אל הצומת \(v_{j}\)) יתקיים \(A_{ik}=1,A_{jk}=-1\) ושאר הכניסות יהיו אפס; במילים אחרות, זו בדיוק אותה מטריצה \(A\) כמו קודם רק שעכשיו אנחנו קובעים איזו כניסה תהיה חיובית ואיזו כניסה תהיה שלילית על פי כיוון הקשת \(e_{k}\).

בנוסף, נגדיר מטריצה \(B\) מסדר \(n\times m\) באופן הבא: לכל קשת \(e_{k}=v_{i}\to v_{j}\) יתקיים \(B_{ik}=0,B_{jk}=-1\) ושאר הכניסות יהיו אפס. כלומר, \(B\) זהה ל-\(A\) פרט לכך שבכל עמודה יש רק \(-1\) עבור הצומת שאליו הקשת נכנסת; לא מופיע 1 עבור הצומת שממנו הקשת יוצאת.

עכשיו לא קשה לראות ש-\(L=A\cdot B^{T}\) וש-\(L^{\left(r\right)}\) הוא \(N_{A}N_{B}^{T}\) כאשר \(N_{A},N_{B}\) מתקבלים מ-\(A,B\) בהתאמה על ידי מחיקת השורה ה-\(r\). אז קושי-בינה מניבה פה \(\det\left(L^{\left(r\right)}\right)=\sum_{\sigma}\det\left(N_{A\sigma}\right)\det\left(N_{B\sigma}\right)\). עכשיו צריך להבין מה קורה פה.

היינו רוצים לומר שאם \(\sigma\) לא מגדיר עץ, אז נקבל ש-\(\det\left(N_{A\sigma}\right)=0\) בדיוק כמו קודם ואז גם המכפלה תתאפס. לרוע המזל, "\(\sigma\) לא מגדיר עץ" הוא מקרה הרבה יותר מסובך כאשר הגרף שלנו מכוון, כי הקריטריון של "גרף עם \(n-1\) קשתות שהוא קשיר הוא עץ" פשוט לא נכון. בעץ מכוון, צריך שיהיה צומת (השורש) שקיים מסלול ממנו לכל הצמתים האחרים, ומספיקה קשת אחת בכיוון הלא נכון כדי לקלקל את זה. לכן בואו נתחיל קודם כל דווקא מדיבור על המקרה שבו \(\sigma\) כן מגדיר עץ. מה נשתנה הפעם?

ובכן, הפעם צריכים להיות קצת יותר זהירים בגלל ש-\(\det\left(N_{A\sigma}\right)\det\left(N_{B\sigma}\right)\) הוא לא ריבוע. מה שאנחנו רוצים לטעון הוא שמתקיים \(\det\left(N_{A\sigma}\right)=\det\left(N_{B\sigma}\right)\) וששניהם שווים או 1 או \(-1\). אפשר להשתמש בשיטת הסידור-מחדש של מטריצה כמו קודם; רק צריך להיות זהירים ולסדר את \(N_{A\sigma}\) ואת \(N_{B\sigma}\) באותו האופן בדיוק כדי שהשינוי בסימן, אם היה כזה, יהיה זהה אצל שניהם.

אחרי הסידור מחדש של המטריצה, מה שמתקבל מ-\(N_{A\sigma}\) ומ-\(N_{B\sigma}\) היא כמקודם מטריצה משולשית תחתונה, אבל מה נמצא על האלכסון? כאן האופן שבו ביצענו את הסדר הופך להיות קריטי: להזכירכם, בשיטה שלנו בשלב ה-\(i\) קבענו את השורה ה-\(i\) להיות צומת \(u_{i}\) שבשלב הזה היה עלה, ואת העמודה להיות קשת \(e_{i}\) שהיא הקשת שנכנסת אל \(u_{i}\). כלומר, הן על פי ההגדרה של \(A\) והן על פי ההגדרה של \(B\), הכניסה המתאימה תהיה \(-1\). זה מבטיח שהדטרמיננטה תהיה מכפלה של \(-1\)-ים ושלא ישתרבב פנימה איזה 0 שיאפס את כולה (מה שהיה עלול לקרות עם \(B\), שבו יש אפסים שלא היו בהוכחה עבור גרפים לא מכוונים).

עכשיו נחזור למקרה שבו \(\sigma\) הוא לא עץ. מי שיושיע אותנו כאן הוא שאנחנו משתמשים גם ב-\(N_{A\sigma}\) וגם ב-\(N_{B\sigma}\): הדטרמיננטה של אחד מהם תתאפס, ולא משנה מה. התעלול פשוט: אם \(\sigma\) הוא כזה שאפילו גרף התשתית של העץ שלנו (מה שמקבלים כשמוחקים את כיווני הקשתות) איננו עץ אז \(\det\left(N_{A\sigma}\right)=0\) מאותו שיקול כמו במקרה הלא מכוון (סכום שורות שהוא אפס, מה שמובטח על ידי ה-1 וה-\(-1\) שיש בכל עמודה שם – וזה משהו שאין ב-\(B\)), ואילו אם גרף התשתית הוא כן עץ, אז נסדר מחדש את \(N_{B\sigma}\) על פי אותה שיטה שבה השתמשנו עד כה במקרים שבהם \(\sigma\) הגדיר עץ. נקבל מטריצה משולשית תחתונה כמו תמיד, רק שהפעם אחד מהאיברים על האלכסון יהיה 0. מדוע? כי אם \(\sigma\) איננו עץ למרות שגרף התשתית הוא כן עץ, זה אומר שיש קשת אחת שמכוונת בכיוון "הלא נכון", ואז הכניסה על האלכסון שמתאימה לקשת הזו ולצומת שמחוברת אליה תהיה 0 (כי הקשת יוצאת מהצומת במקום להיכנס אליו).

אם כן, המקרה המכוון הוא מעט יותר מסובך מהמקרה הלא מכוון אבל גם בו יש תובנות יפות לגבי למה זה עובד – ושוב, אני מקווה שנהניתם.

בעיית וויל האנטינג

נקודת המוצא העלילתית של הסרט "סיפורו של וויל האנטינג" (וכאן אני עומד לגלות טיפה מפרטי העלילה – אבל לא משהו שלא מתגלה ממילא בעשר הדקות הראשונות של הסרט, ואיננו מהותי כל כך) היא חידה מתמטית שפרופסור ב-MIT נותן לסטודנטים בקורס מתקדם שלו, בתקווה שמישהו מהם יצליח לפתור אותה עד סוף הסמסטר ובכך יכנס להיכל התהילה. את החידה פותר כבדרך אגב דווקא השרת של הבניין, מה שחושף אותו כגאון מתמטי חבוי, וכל השאר היסטוריה. אולם מהי החידה שבחרו יוצרי הסרט לתת? מסיבות השמורות עמם, הם החליטו לאפשר לקהל לראות את החידה כתובה במלואה על הלוח, כמו גם את הפתרון. אציג את החידה, ולאחר מכן אסביר כיצד פותרים אותה.

ובכן, נתון גרף (ראו תמונה) ונשאלות עליו השאלות הבאות:

  1. מצאו את מטריצת השכנויות \(A\) של הגרף \(G\).
  2. מצאו את המטריצה שנותנת את מספר המסלולים מאורך 3 ב-\(G\).
  3. מצאו את הפונקציה היוצרת של המסלולים מ-\(i\) אל \(j\).
  4. מצאו את הפונקציה היוצרת של המסלולים מ-\(1\) אל \(3\).

חידת וויל האנטינג

כבר בניסוח שלה, השאלה מרגישה יותר כמו תרגיל סטנדרטי ולא כמו אתגר מתמטי כביר. ואכן, כפי שאראה בקרוב, מדובר בשאלה פשוטה למדי בתורת הגרפים האלגברית – מה שקצת מוזר, בהתחשב בכך שהמרצה מציג את החידה בסרט בתור "Advanced Fourier System", בסוף שיעור שעוסק באנליזת פורייה (דהיינו, המרצה ממלמל משהו על משפט פרסבל, ששייך לאנליזת פורייה). אני סקרן לדעת איך התגלגלה השאלה הספציפית הזו לתסריט הסרט ואשמח אם מישהו שיודע זאת יספר.

הבה ונבהיר מה בעצם רוצים בשאלה הזו. ראשית, נותנים גרף \(G\) על ידי ציור. גרף מורכב (כפי שניתן לראות בציור) מאוסף של עיגולים – "הצמתים" – וקווים שמחברים חלק מהם – "הקשתות". כך למשל בין הצומת 1 לצומת יש קשת אחת, בין 2 ו-3 יש שתי קשתות, בין 1 ו-3 אין אף קשת וכו'. מסלול בגרף מתחיל מצומת א', ואז מבצע סדרת "צעדים", כשכל צעד הוא מעבר מהצומת הנוכחי לצומת שמחובר לצומת הנוכחי בקשת. אם יש כמה קשתות בין שני צמתים, לרוב זה נחשב כאילו יש מספר דרכים לעבור בין שני הצמתים. כך למשל אפשר לקבל את המסלולים הבאים מצומת 1 לצומת 3 מאורך 2: ראשית הולכים מצומת 1 לצומת 2, ולאחר מכן הולכים מ-2 ל-3, אלא שיש שתי דרכים לעשות זאת כי יש שתי קשתות בין 2 ו-3. לכן יש שני מסלולים מאורך 2 מ-1 אל 3.

יש עוד שני מושגים להסביר – "מטריצה" ו"פונקציה יוצרת", שניהם מושגים בסיסיים יחסית במתמטיקה. מטריצה, בהקשר של השאלה הזו, ניתנת לתיאור בתור טבלה של מספרים. כשמדובר על מטריצת השכנויות של גרף מדובר על מטריצה ספציפית, שמקודדת בתוכה את מספר הקשתות בין כל שני צמתים בגרף. הכלל הוא פשוט: בשורה ה-\(i\) והעמודה ה-\(j\) כתוב מספר הקשתות שמחברות את הצמתים \(i\) ו-\(j\). לכן, מבט מהיר בגרף נותן לנו את המטריצה המבוקשת:

\(A=\left(\begin{array}{cccc}0 & 1 & 0 & 1\\1 & 0 & 2 & 1\\0 & 2 & 0 & 0\\1 & 1 & 0 & 0\end{array}\right)\)

עד כאן, שום דבר מורכב. התחכום מתחיל בשאלה הבאה – מי שלא בקיא בתורת הגרפים האלגברית (או בתחומים אחרים שבהם אותם רעיונות מופיעים, כמו למשל הילוכים מקריים בדידים) יכול לתהות מה הקשר בין מטריצה ובין מספר המסלולים ומה הולך כאן. כאן נכנסת לתמונה הפעולה של כפל מטריצות. מכיוון שמושג המטריצה, והמוטיבציה להגדרת כפל המטריצות באופן שבו הוא מוגדר, ראויים שניהם לפוסט שלם, לא אכנס לכך בינתיים אלא אניח כי ההגדרות מוכרות כבר לקורא (ועם מי שטרם יודעים הסליחה). כדי לראות כיצד כפל מטריצות עוזר לנו ניאלץ לשלוף את ההגדרה הפורמלית-טכנית של הכפל. אם נכפול את \(A\) בעצמה, אז בקוארדינטה ה-\(i,j\) של המכפלה נקבל את \(\sum_{k=1}^{n}a_{ik}a_{kj}\). מה המספר הזה אומר? לכל \(k\), \(a_{ik}\cdot a_{kj}\) הוא מכפלה של מספר המסלולים מאורך 1 מ-\(i\) ל-\(k\), במספר המסלולים מאורך 1 מ-\(k\) אל \(j\). כלומר, זה מייצג את מספר הדרכים להגיע בשני צעדים מ-\(i\) אל \(j\) תוך מעבר בצומת הביניים \(k\). כשסוכמים זאת על כל הערכים האפשריים של \(k\) מקבלים את כל הדרכים לעבור מ-\(i\) אל \(j\) ב-2 צעדים.

באופן דומה אם נכפול את \(A^{2}\) ב-\(A\), הקוארדינטה ה-\(i,j\) תהיה סכום של מכפלות, כשכל מכפלה היא של מספר הדרכים להגיע מ-\(i\) אל \(k\) בשני צעדים, ומ-\(k\) אל \(j\) בצעד אחד. אני מקווה שהרעיון ברור: לכל \(m\) טבעי, הקוארדינטה ה-\(i,j\)-ית במטריצה \(A^{m}\) מייצגת את מספר המסלולים מאורך \(m\) מ-\(i\) אל \(j\) (אפילו עבור \(m=0\) זה עובד: \(A^{0}\) היא על פי הגדרה המטריצה שבה הכניסה ה-\(i,i\) היא 1 לכל \(i\), וה-\(i,j\) היא 0 אם \(i\ne j\), וזה מתאים ל"מסלול מאורך 0" מ-\(i\) לעצמו שפשוט לא מכיל צעדים). מכאן שכדי לענות על שאלה 2 בסך הכל צריך לחשב את \(A^{3}\). זה חישוב טכני לא מעניין במיוחד ואפשר לתת לתוכנות מחשב דוגמת מטלאב לבצע אותו. מקבלים:

\(A^{3}=\left(\begin{array}{cccc}2 & 7 & 2 & 3\\7 & 2 & 12 & 7\\2 & 12 & 0 & 2\\3 & 7 & 2 & 2\end{array}\right)\)

אם משעמם לכם תוכלו לקחת את אחת מהכניסות (רצוי כזו עם מספר נמוך יחסית בתוכה) ולספור ידנית את המסלולים ולראות ששני המספרים זהים. מה שכן, שימו לב למידע המעניין יחסית שבולט מייד מהמטריצה: לא קיים מסלול באורך 3 שמתחיל ונגמר בצומת 3.

המשחק היה נהיה משעשע בהרבה אם היינו שואלים שאלות מהסגנון הבא: נניח שאנחנו יוצאים לטיול "אקראי" על הגרף, ובכל צעד אנחנו בוחרים באקראי את אחת מהקשתות שמחוברות לצומת הנוכחי שלנו. איך יראה הטיול? באילו צמתים נשהה זמן רב יחסית? וכן הלאה. זו דוגמה לסוג השאלות שניתן לשאול על שרשראות מרקוב בדידות, נושא מעניין לכשעצמו; והניתוח של התכונות הללו מתבצע בדיוק באמצעות ניתוח המטריצה \(A\) שלנו, תוך שימוש בכלים של אלגברה לינארית. אלא שזה לא הכיוון שאליו הולכת שאלת וויל האנטינג ולכן לא אמשיך לדבר על כך כרגע.

שתי השאלות הבאות הן בעצם אותו דבר – בשאלה 3 מבקשים משהו כללי, ובשאלה 4 מבקשים מקרה פרטי של המשהו הכללי שיתקבל אחרי הצבה בו. זו גם השאלה הראשונה שנראית מעט מאתגרת, אולי בעיקר כי פונקציות יוצרות הן משהו שלרוב האנשים שכבר יצא להם ללמוד אותו זכור במעומעם בתור "הדבר ההוא מקומבינטוריקה שלא באמת הבנו בשביל מה הוא טוב". העניין הוא שכל מי שיפתח ספר רציני בקומבינטוריקה יגלה בו את הפתרון הכללי לבעיות מסוג זה.

כתבתי בשעתו פוסט על פונקציות יוצרות ולכן לא אציג אותן כאן שוב. הפוסט ההוא היה מבוא לפוסט שעסק באופן שבו מוצאים את הפונקציה היוצרת של שפה רגולרית, בעזרת האוטומט שלה – רעיון כמעט זהה לרעיון שיש כאן. אוטומט הוא סוג של גרף, וחישוב של אוטומט הוא סוג של מסלול בגרף. מכיוון שבפוסט ההוא נתתי הסברים מפורטים, בפוסט הזה ארשה לעצמי בעיקר לנפנף בידיים.

ובכן, מה שמבקשים מאיתנו הוא הצגה מפורשת לפונקציה \(f\left(x\right)=\sum_{n=0}^{\infty}b_{n}x^{n}\) כאשר \(b_{n}\) הוא מספר המסלולים מ-\(i\) אל \(j\) מאורך \(n\). אם נסמן ב-\(\left[A\right]_{ij}\) את הכניסה ה-\(i,j\) של המטריצה \(i,j\) וננפנף בידיים ממש מהר, נקבל את החישוב הבא: \(\sum_{n=0}^{\infty}b_{n}x^{n}=\sum_{n=0}^{\infty}\left[A^{n}\right]_{ij}x^{n}=\sum_{n=0}^{\infty}\left[\left(Ax\right)^{n}\right]_{ij}=\left[\sum_{n=0}^{\infty}\left(Ax\right)^{n}\right]_{ij}=\left[\frac{1}{1-Ax}\right]_{ij}\).

מה שעשיתי כאן היה להשתמש בוריאציה על הנוסחה הישנה והטובה לסכום סדרה הנדסית אינסופית מתכנסת: \(1+x+x^{2}+\dots=\frac{1}{1-x}\). כמובן שצריך להצדיק את השימוש בה עבור מטריצות, אבל אמרתי שאנפנף בידיים.

כעת השאלה היא האם באופן כללי בהינתן מטריצה \(B\), יש נוסחה "יפה"עבור הכניסה ה-\(ij\) בהופכית שלה, כלומר \(\left[B^{-1}\right]_{ij}\)? התשובה היא שכן (אם כי "יפה" זה עניין סובייקטיבי כאן) והיא מכונה "כלל קרמר". הכלל מסתמך על שני מושגים לא פשוטים – מטריצה מצורפת (Adjugate) ודטרמיננטה של מטריצה, ולכן עבור מי שאינו מכיר את המושגים הללו הנוסחה תיראה פשוט כמו אוסף של סימנים חסרי משמעות – אבל זה לא חשוב כל כך לבינתיים. הנקודה היא ששני היצורים הללו ניתנים לחישוב יחסית באופן פשוט. כעת, כלל קרמר אומר כי \(B^{-1}=\frac{\mbox{Adj}B}{\det B}\) (כאן אנו מחלקים מטריצה – \(\mbox{Adj}B\) – בסקלר – \(\det B\)). לכן \(\left[B^{-1}\right]_{ij}=\frac{\left[AdjB\right]_{ij}}{\det B}\). אם רוצים לפשט את הביטוי עוד יותר צריך לחפור בהגדרה של \(\mbox{Adj}B\): הכניסה ה-\(ij\) של \(\mbox{Adj}B\) מוגדרת בתור \(\left(-1\right)^{i+j}M_{ji}\), כאשר \(M_{ji}\) הוא המינור ה-\(ji\)-י של \(B\) – הדטרמיננטה של המטריצה שמתקבלת ממחיקת השורה ה-\(j\) והעמודה ה-\(i\) של \(B\). כאן כנראה וויל משתעמם ומשתמש בסימונים שאיני מכיר, כי הנוסחה הסופית שהוא כותב על הלוח היא \(\frac{\det\left(B_{ij}\right)}{\det B}\) – אני משער שכוונתו זהה לכוונה שלי (למעשה, הוא לא כותב \(B\) אלא \(I-Ax\) כמו שכתבתי קודם – ולמעשה, אפילו לא את זה, אלא \(I-zA\), שכמובן אומר את אותו הדבר בדיוק).

חידת וויל האנטיג - הפתרון

לסיכום, מדובר בשאלה חביבה והפתרון שלה נאה ביותר בכך שהוא מצביע על הקשר שבין תורת הגרפים ובין האלגברה הלינארית; אבל זו בהחלט לא שאלה שפרופסור למתמטיקה צריך להשתאות מכך שמישהו הצליח לפתור.

בהמשך הסרט מציב הפרופסור שאלה נוספת לתלמידיו, כזו ש"לקח לנו יותר משנתיים לפתור". לרוע המזל, השאלה הזו לא מוצגת בסרט. כל מה שנשאר לנו הוא מה שוויל צועק על כל מה שהפרופסור זורק עליו – "זו בדיחה מזויינת". אם הכל דומה לחידה הזו, אולי הוא לא כל כך מגזים.

איך מוצאים את נוסחת פיבונאצ'י?

בדומה לפוסטים אחרים, גם המוטיבציה לפוסט הזה היא שאילתת חיפוש שראויה לתשובה רצינית ולא בת שתי שורות – במקרה הזה, "איך מוכיחים נוסחת פיבונאצ'י". איני בטוח אם הכוונה היא רק להוכחה שהנוסחה נכונה, או גם למציאת הנוסחה; לדעתי מציאת הנוסחה היא העיקר ואז ההוכחה (באינדוקציה, או באמצעות כלים כבדים מאלגברה לינארית שמטפלים במקרה כללי בהרבה) היא די אלמנטרית, ולכן אתמקד בשאלת מציאת הנוסחה. התשובה טמונה בשיטה סטנדרטית לפתרון נוסחאות נסיגה, שזכורה לי בתור אחד מהדברים היפים ביותר שבהם נתקלתי כשרק התחלתי ללמוד מתמטיקה. ההתלהבות שלי מכך שאפשר למצוא את הנוסחה בפחות או יותר שלוש שורות של חשבון ברמת בית ספר תיכון נבעה מכך שהייתה זו פחות או יותר הפעם הראשונה שבה ראיתי איך ניתוח מתמטי רציני של בעיה שגם אני תהיתי לגביה "מחסל" אותה בקלי קלות – ההמחשה הטובה ביותר לטענת "מתמטיקאים הם עצלנים" של פוליה.

אבל ראשית יש להציג את הבעיה. תחילתה באחד מהמתמטיקאים האירופאים הבולטים הבודדים של ימי הביניים, שהיו תקופה חשוכה במיוחד עבור המתמטיקה, בין הפריחה האדירה לה היא זכתה ביוון העתיקה, והפריחה האדירה שלה החל מימי הרנסנס והלאה. בימי הביניים עיקר המתמטיקה השתמר ופותח בידי המוסלמים, וגם ליאונרדו מפיזה המוכר יותר בשם פיבונאצ'י, איטלקי, למד מתמטיקה אצל מורים מוסלמים כשגדל באלג'יר. בשנת 1202 פרסם פיבונאצ'י ספר – "ספר החשבוניה" – שהקיף את הידע המתמטי על אלגברה של אותה תקופה (בתקופת היוונים עסקו בעיקר בגאומטריה, וגם בעיות מספריות, דוגמת מציאת מחלק משותף מקסימלי – "האלגוריתם האוקלידי" – נוסחו באופן גאומטרי; בשלהי תקופת יוון העתיקה ובתקופת המוסלמים עיקר הדגש עבר לאלגברה, והמילה "אלגברה" עצמה הגיעה משם ספר של המתמטיקאי המוסלמי המפורסם ביותר, אל-ח'ואריזמי). הספר הכיל כמה מהחידושים המסעירים בתחום – למשל, השיטה העשרונית ושימוש באפס. הוא גם הכיל חידה חביבה שעסקה בארנבים.

אציג כאן את אחד מהניסוחים של הבעיה – איני מתחייב לניסוח המקורי של פיבונאצ'י, שכן אני מעדיף את הניסוח שנראה לי הכי פשוט להבנה. נניח שאוכלוסיית ארנבים מתרבה באופן המשונה הבא: זוג בוגר של ארנבים מביא לעולם, תוך חודש, זוג צעיר של ארנבים, וכך בכל חודש. לזוג צעיר של ארנבים לוקח חודש לגדול ולהפוך לזוג בוגר בעצמו, ואז גם הוא מתחיל להוליד. הארנבים כולם בני אלמוות. כעת, נניח שאנחנו מתחילים עם זוג של ארנבים צעירים – כמה זוגות (שימו לב – זוגות, לא ארנבים בודדים; הזוגות הם תמיד של זכר ונקבה, באופן קסום) של ארנבים בוגרים יהיו לנו בחודש ה-\(n\)-י?

ובכן, בחודש הראשון יש 0 זוגות של ארנבים בוגרים – יש זוג אחד של ארנבים צעירים ותו לא. בחודש שלאחר מכן יש זוג אחד של ארנבים בוגרים (הזוג הצעיר שלנו התבגר), ואפס זוגות של ארנבים צעירים. בחודש לאחר מכן יש את אותו הזוג של ארנבים בוגרים, וזוג חדש של ארנבים צעירים שהם הולידו; ובחודש שלאחר מכן הארנבים שהיו צעירים התבגרו, כך שיש לנו שני זוגות של ארנבים בוגרים, ובנוסף יש זוג צעיר אחד חדש. אם תמשיכו את המשחק הזה עוד ועוד, בוודאי תקבלו את סדרת הערכים הבאה, עבור מספר הארנבים הבוגרים בכל חודש: \(0,1,1,2,3,5,8,13,\dots\). מה שפיבונאצ'י רצה לעשות הוא למצוא חוקיות בסדרה הזו.

נסמן את אברי הסדרה בתור \(F_{n}\), כאשר \(n\) הוא מספר החודש המתאים. לצורך נוחות, החודש הראשון יסומן ב-0, ולכן הסדרה היא \(F_{0}=0,F_{1}=1,F_{2}=1,F_{3}=2\) וכן הלאה. החוקיות שפיבונאצ'י הצביע עליה היא פשוטה במיוחד: \(F_{n}=F_{n-1}+F_{n-2}\). כלומר, כל איבר בסדרה (לאחר שני האיברים הראשונים) שווה לסכום שני האיברים שקדמו לו. מעט מחשבה מראה מדוע זה כך במקרה של הארנבונים. מהו \(F_{n}\), בעצם? הוא מספר זוגות הארנבונים שהיו בוגרים בחודש שלפני כן, ועוד מספר זוגות הארנבונים שהיו צעירים בחודש שלפני כן, והתבגרו. מספר זוגות הארנבונים שהיו בוגרים בחודש שלפני כן הוא בדיוק \(F_{n-1}\) – זה מה שמספר זה סופר. אבל כמה זוגות ארנבונים צעירים היו? ובכן, הכלל הוא שארנבון צעיר בחודש מסויים הוא ה"תוצר" הישיר של זוג ארנבונים שהיו מבוגרים בחודש שלפני כן. כלומר, אם אנחנו רוצים לספור כמה ארנבונים צעירים היו בחודש \(n-1\), התשובה היא שמספר זה שווה למספר הארנבונים המבוגרים בחודש \(n-2\). כלומר, \(F_{n-2}\) הוא בדיוק מספר הארנבונים שהיו צעירים בחודש \(n-1\), ומכאן נובעת הנוסחה. הנוסחה הזו, שבה איבר בסדרה מתואר באמצעות איברים מוקדמים יותר בסדרה, נקראת נוסחה רקורסיבית (רקורסיה היא הגדרה של דבר מה באמצעות הסתמכות על מופעים יותר פשוטים שלו – במקרה שלנו, איבר בסדרה מוגדר באמצעות איברים קטנים יותר בסדרה, עד לאיברים \(F_{0},F_{1}\) שמוגדרים בצורה ישירה) או בעברית, נוסחת נסיגה.

סדרת פיבונאצ'יהייתה מוכרת זמן רב לפני פיבונאצ'י וחידת הארנבים שלו, אך פיבונאצ'י זכה בכבוד שבקריאת הסדרה על שמו. קשה להתחיל ולתאר בכמה מקומות במתמטיקה מופיעה הסדרה – החל בניתוח הסיבוכיות של האלגוריתם האוקלידי, וכלה בהוכחה שהבעיה העשירית של הילברט היא בלתי כריעה. מכיוון שהפוסט הזה אינו מיועד לתיאור סדרת פיבונאצ'י ואני רחוק מלהכיר אפילו מקצת משימושיה, לא אכנס לכך כעת. תחת זאת אתמקד בבעיה שעדיין נותרה פתוחה – מציאת נוסחה סגורה לאברי הסדרה.

מה הבעיה כרגע? נניח שאני רוצה מסיבה כלשהי לחשב את \(F_{137}\). איך אני עושה זאת? אם כל מה שיש לי הוא הנוסחה הרקורסיבית, עלי לחשב את \(F_{136}\) ואת \(F_{135}\), כלומר הצטצמתי לבעיה יותר פשוטה, ועדיין גם היא דורשת עבודה – כדי לחשב את \(F_{136}\) אני צריך את \(F_{135}\) (שאמנם, אני ממילא צריך) אבל גם את \(F_{134}\) וכן הלאה וכן הלאה – כלומר, כדי לחשב את \(F_{137}\) אצטרך לחשב את כל \(F_{n}\) עבור \(n<137\). חייבים להודות שזה לא נשמע יעיל במיוחד. האם אין דרך לחשב את \(F_{n}\) בלי לחשב את כל האיברים הקודמים בסדרה?

התשובה חיובית, וכדי להבהיל אתכם גם אתן אותה במפורש עכשיו – מתקיים ש-\(F_{n}=\frac{1}{\sqrt{5}}\left[\left(\frac{1+\sqrt{5}}{2}\right)^{n}-\left(\frac{1-\sqrt{5}}{2}\right)^{n}\right]\). הנוסחה הזו נראית מבעיתה לגמרי – משום מקום צץ לו שורש 5, שהוא בכלל לא מספר רציונלי, ומעלים דברים בחזקת \(n\) ולך תחשב את זה בכלל והצילו. ובכן, אתם מוזמנים לבדוק עבור ערכים קטנים של \(n\) שהנוסחה עובדת, וכל השורשים של חמש מצטמצמים והכל טוב ויפה; ומחשב מסוגל להשתמש בנוסחה הזו כדי לחשב את \(F_{n}\) בקלות רבה יחסית, הרבה יותר מאשר שימוש בנוסחה הרקורסיבית וחישוב כל הערכים הקודמים בסדרה (למעשה, לא חייבים לחשב את הנוסחה שמוצגת בנוסחה כמות שהיא ואפשר לבצע כל מני שיפורים אך לא אכנס לכך).

אם כן, איך מגיעים לנוסחה הזו? מה ההגיון שבה? מאיפה צץ השורש? והאם הפתרון הוא אד-הוקי ומתאים רק לפיבונאצ'י? אענה על הכל, ואתחיל מהשאלה האחרונה – לגמרי לא. השיטה שאציג עובדת לכל נוסחה רקורסיבית שהיא לינארית במקדמים קבועים והומוגנית – ובמילים המפוצצות הללו אני מתכוון לכך שנוסחת הנסיגה היא באופן כללי מהצורה \(a_{n}=c_{1}a_{n-1}+c_{2}a_{n-2}+\dots+c_{k}a_{n-k}\), כלומר שהאיבר ה-\(n\) בסדרה הוא סכום של \(k\) האיברים הקודמים בסדרה, כשהם מוכפלים במספרים קבועים \(c_{1},\dots,c_{k}\). למשל, \(a_{n}=3a_{n-1}+5a_{n-4}\) היא דוגמה נוספת לסדרה שמתאימה לנוסחה הזו. השיטה שאציג תקפה לכל המשוואות הללו, אך אציג אותה עבור הדוגמה הספציפית של פיבונאצ'י כדי לא להסתבך יותר מדי עם הסימונים.

לאלו מכם שמכירים משוואות דיפרנציאליות, המילים "משוואה לינארית במקדמים קבועים והומוגנית" עשויה להיות מוכרת מאוד – בעיות דומות יש גם במשוואות דיפרנציאליות. גם "תנאי ההתחלה" של הנוסחה הרקורסיבית (במקרה של פיבונאצ'י, \(F_{0}=0,F_{1}=1\); במקרה של סדרה שבה איבר תלוי ב-\(k\) הקודמים, תנאי ההתחלה צריך להיות \(k\) האיברים הראשונים בסדרה) מזכירים את המושג המקביל ממשוואות דיפרנציאליות, וגם שיטת הפתרון היא דומה – מתחילים מ"ניחוש מוצלח" של איך בערך הפתרון אמור להיראות, מציבים אותו במשוואה, ומקבלים מההצבה הזו את הפתרון המדוייק. זה לא מוכיח מיידית שהפתרון נכון, אלא צריך להוכיח זאת – אלא שההוכחה אינה קשה ומספיק לבצע אותה פעם אחת, עבור נוסחת הנסיגה ה"כללית" (הלינארית-מקדמים קבועים-הומוגנית), ואז מספיק יהיה להשתמש בשיטה כדי למצוא את הפתרון (שהוא הדבר שמעניין אותנו, בסופו של דבר).

כבר אגלה מראש שהניחוש הבסיסי שלנו הוא שפתרון נוסחת נסיגה "כללית" הוא מהצורה \(a_{n}=\lambda^{n}\) עבור מספר ממשי כלשהו \(\lambda\). כלומר, שהאיבר ה-\(n\)-י בסדרה הוא העלאה בחזקה \(n\)-ית של מספר קבוע כלשהו, שתלוי רק בנוסחת הנסיגה הספציפית ולא ב-\(n\). בוודאי תצעקו כעת שהפתרון של פיבונאצ'י אינו בדיוק כזה – אני יודע, ונגיע לכך. לפני כן צריך להבין איך בכלל הגענו לניחוש הזה – למה שזה יהיה משהו בחזקת \(n\)? למה לא \(n^{t}\), למשל? (שימו לב להבדל – כעת \(n\) הוא בסיס החזקה ולא המעריך שלה, כמקודם). התשובה לכך היא שניתן להעריך את קצב הגידול של הפונקציה לא רע. אדגים זאת על פיבונאצ'י. מכיוון ש-\(F_{n}=F_{n-1}+F_{n-2}\) וכל האיברים (פרט ל-\(F_{0}\)) הם חיוביים, אז \(F_{n}>F_{n-1}\) לכל \(n>1\). מכאן בפרט שמתקיים \(F_{n}=F_{n-1}+F_{n-2}<2F_{n-1}\), כלומר \(F_{n}\) לא גדול יותר מאשר פי 2 האיבר שקדם לו, \(F_{n-1}\), ולכן קצב הגידול שלו אינו גדול מדי: מתקיים ש-\(F_{n}<2^{n}\) (כי אם האיבר \(F_{1}\) הוא 1, השני הוא לא יותר מאשר 2, והשלישי לא יותר מאשר 4, והרביעי לא יותר מאשר 8, וכן הלאה).

מצד שני, \(F_{n}=F_{n-1}+F_{n-2}>2F_{n-2}\). כלומר, \(F_{n}\) הוא לפחות גדול פי 2 מאשר \(F_{n-2}\), ולכן קצב הגידול שלו אינו יכול להיות קטן מדי: מתקיים ש-\(F_{n}>2^{\left\lfloor \frac{n}{2}\right\rfloor }\). שוב, לדוגמה – אם \(F_{1}=1\) אז האיבר השלישי בסדרה הוא לפחות 2, והאיבר החמישי הוא לפחות 4, והשביעי הוא לפחות 8 וכן הלאה. כלומר, קיבלנו שקצב הגידול של \(F_{n}\) הוא אקספוננציאלי – הוא חסום הן מלמעלה והן מלמטה על ידי חזקה \(n\)-ית של מספר כלשהו (שימו לב ש-\(2^{\frac{n}{2}}=\left(\sqrt{2}\right)^{n}\) ומכאן שזה ש-\(n\) מופיע במעריך כשהוא מוכפל במשהו לא באמת משנה עבורו, אלא רק עבור הבסיס של החזקה). מכאן שבדיקת מועמד לפתרון שהוא מהצורה \(\lambda^{n}\) היא מתבקשת; הוא מסדר הגודל הנכון. מי שלא עלה בידו לעקוב אחרי כל האסימפטוטיקה הזו – לא נורא. מטרתה לתת מוטיבציה לפתרון ולהמחיש שלא מדובר בניחוש ממוזל בלבד אלא בבחירה מושכלת, אך אין זה הכרחי להמשך הפתרון.

כעת אנו מגיעים לשאלה המרכזית. נניח כי \(F_{n}=\lambda^{n}\) הוא אכן פתרון לנוסחת הנסיגה; מהו \(\lambda\)? לצורך כך ניתן להציב את הפתרון בנוסחה \(F_{n}=F_{n-1}+F_{n-2}\) ולקבל את המשוואה \(\lambda^{n}=\lambda^{n-1}+\lambda^{n-2}\). ברור כי \(\lambda=0\) פותר את נוסחת הנסיגה (פתרון כזה פותר גם את הנוסחה ה"כללית" שלעיל) אבל זה אינו פתרון מעניין, אז נניח כי \(\lambda\ne0\), ולכן אפשר לחלק את המשוואה שקיבלנו ב-\(\lambda^{n-2}\) ולקבל \(\lambda^{2}=\lambda+1\), או, אחרי העברת אגפים, \(\lambda^{2}-\lambda-1=0\). זוהי משוואה ריבועית פשוטה ואנו יודעים לפתור אותה בעזרת הנוסחה הכללית. נקבל \(\lambda=\frac{1\pm\sqrt{1+4}}{2}=\frac{1\pm\sqrt{5}}{2}\). כלומר, קיבלנו שני פתרונות, ובשניהם צץ לו ה-\(\sqrt{5}\) המבהיל. מכאן זה מגיע.

כדי לעשות לעצמי את החיים פשוטים יותר מעתה והלאה, אשתמש בסימון סטנדרטי: \(\phi_{+}=\frac{1+\sqrt{5}}{2}\), ו-\(\phi_{-}=\frac{1-\sqrt{5}}{2}\). המספר \(\phi_{+}\) הוא "יחס הזהב" המפורסם. אם כן, הגענו למסקנה ש-\(F_{n}=\phi_{+}^{n}\) ו-\(F_{n}=\phi_{-}^{n}\) הם פתרונות של נוסחת הנסיגה \(F_{n}=F_{n-1}+F_{n-2}\). מדוע זה לא הפתרון שהצגתי לעיל ומה עוד לא עשינו?

הבעיה בשני הפתרונות שמצאנו היא שהם אינם עונים ל"תנאי ההתחלה". צריך, למשל, שיתקיים \(F_{0}=0\). מיידית ברור שהייתי אידיוט גמור אם חשבתי שפתרון מהצורה \(\lambda^{n}\) יקיים זאת – חזקה של מספר שאינו 0, אינה 0. כמו כן צריך שיתקיים \(F_{1}=1\), ולכן הפתרון העלוב \(\lambda=0\) גם כן לא טוב לנו. בקיצור, האם צריך לזרוק לזבל את כל הרעיון שהפתרון הוא מהצורה \(\lambda^{n}\)? לא, צריך רק להרחיב מעט את אוסף הפתרונות שלנו – משני פתרונות, לאינסוף.

באופן כללי, אם \(f\left(n\right)\) הוא פתרון של נוסחת הנסיגה של פיבונאצ'י (ושוב, מה שאני אומר תקף גם לנוסחה ה"כללית"), כלומר אם \(f\left(n\right)=f\left(n-1\right)+f\left(n-2\right)\) אז גם \(h\left(n\right)=\alpha\cdot f\left(n\right)\), כאשר \(\alpha\) הוא מספר ממשי, הוא פתרון, כי הרי \(h\left(n\right) = \alpha f\left(n\right)=\alpha\left(f\left(n-1\right)+f\left(n-2\right)\right)=\alpha f\left(n-1\right)+\alpha f\left(n-2\right) = h\left(n-1\right)+h\left(n-2\right)\) באופן דומה, אם \(f\left(n\right),g\left(n\right)\) שניהם פתרונות, אז גם \(h\left(n\right)=f\left(n\right)+g\left(n\right)\) הוא פתרון, כי

\(h\left(n\right) = f\left(n\right)+g\left(n\right)=\left(f\left(n-1\right)+f\left(n-2\right)\right)+\left(g\left(n-1\right)+g\left(n-2\right)\right) = \left(f\left(n-1\right)+g\left(n-1\right)\right)+\left(f\left(n-2\right)+g\left(n-2\right)\right)=h\left(n-1\right)+h\left(n-2\right)\)

אם כן, אוסף הפתרונות של המשוואה סגור לפעולות של "כפל בסקלר" (כפל במספר ממשי, במקרה שלנו) ושל חיבור שני פתרונות. אלו מכם שמכירים אלגברה לינארית ודאי רואים כעת כי אוסף הפתרונות של נוסחת הנסיגה (אם לא דורשים את קיום תנאי ההתחלה) מהווה מרחב וקטורי. הבסיס של המרחב הזה הם בדיוק שני הפתרונות שמצאנו בהתחלה – \(\phi_{+}^{n},\phi_{-}^{n}\). מי שאינו מכיר אלגברה לינארית עדיין יכול לראות, משתי התכונות שהדגמתי לעיל, שאם \(f\left(n\right),g\left(n\right)\) הם שני פתרונות לנוסחת הנסיגה, אז גם \(\alpha f\left(n\right)+\beta g\left(n\right)\) הוא פתרון, עבור כל \(\alpha,\beta\) ממשיים שנבחר. לכן הגדלנו בצורה משמעותית את אוסף הפתרונות האפשריים שלנו – אולי אחד מהם כן עונה לתנאי ההתחלה?

אם כן, נכתוב פתרון "כללי" לנוסחת הנסיגה בתור \(F_{n}=\alpha\phi_{+}^{n}+\beta\phi_{-}^{n}\). אנו רוצים לגלות מהם \(\alpha,\beta\) שעבורם יתקיימו תנאי ההתחלה, אז נשתמש בכך שידוע ש-\(F_{0}=0\) ונקבל את הנוסחה \(0=\alpha\phi_{+}^{0}+\beta\phi_{-}^{0}=\alpha+\beta\), כלומר אנחנו כבר יודעים שבהכרח מתקיים \(\alpha=-\beta\). לכן נכתוב את הפתרון בתור \(F_{n}=\alpha\left(\phi_{+}^{n}-\phi_{-}^{n}\right)\). כעת נשתמש במשוואה הנוספת שנותרה לנו – \(F_{1}=1\). נקבל ממנה כי \(1=\alpha\left(\phi_{+}-\phi_{-}\right)\), אבל את \(\phi_{+}-\phi_{-}\) קל לנו לחשב: \(\phi_{+}-\phi_{-}=\frac{1+\sqrt{5}}{2}-\frac{1-\sqrt{5}}{2}=\sqrt{5}\). מכאן נקבל ש-\(1=\alpha\sqrt{5}\), ובמילים אחרות – \(\alpha=\frac{1}{\sqrt{5}}\). לכן הפתרון הנכון לנוסחת פיבונאצ'י, זה שמתאים גם לתנאי ההתחלה, הוא \(F_{n}=\frac{1}{\sqrt{5}}\left(\phi_{+}^{n}-\phi_{-}^{n}\right)\) (וזו גם המפלצת שהצגתי לעיל, עם סימונים מעט יותר ידידותיים). ושוב, מה שעשיתי כאן, עם המרחב הלינארי והכל, זהה למה שעושים כאשר פותרים משוואות דיפרנציאליות לינאריות.

מה שעשיתי נראה אולי מעט אד-הוקי בשל הצורה שבה מצאתי את \(\alpha,\beta\), אבל זה רק כי נמנעתי מלהשתמש בשיטת הפתרון הכללית למשוואות לינאריות, שהייתה נותנת את אותה התוצאה. באופן כללי, כשיש לנו משוואה מהצורה \(a_{n}=c_{1}a_{n-1}+c_{2}a_{n-2}+\dots+c_{k}a_{n-k}\), הצבה של \(\lambda^{n}\) מניבה את המשוואה \(\lambda^{k}-c_{1}\lambda^{k-1}-\dots c_{k-1}\lambda-c_{k}=0\). עבור \(k\ge5\) כבר אין נוסחה סגורה פשוטה עבור פתרונות המשוואה (ניתן להראות זאת באמצעות תורת גלואה, וזה עניין לסדרת פוסטים בפני עצמה), ויכולות להיות בעיות נוספות עם הפתרונות (הם יהיו מרוכבים, או שאותו פתרון יופיע מספר פעמים, בדומה לכך שהפתרון היחיד של \(x^{2}-2x+1\) הוא \(x=1\)) אבל למרות כל הבעיות הללו ניתן לבנות \(k\) פתרונות שונים למשוואה שיהוו בסיס למרחב הפתרונות שלה, וניתן להראות שלכל בחירה של תנאי ההתחלה נקבל פתרון יחיד. כל זה דורש אלגברה לינארית שלא אוכל להיכנס אליה כעת, אבל בעתיד אולי ארחיב על כך (בפוסט שיהיה בהכרח טכני יותר מזה הנוכחי). ושוב – גם במשוואות דיפרנציאליות כל הסיפור הזה מתרחש באופן זהה.

הפתרון שהצגתי אולי נראה ארוך למדי כי הכברתי הסברים, אך מבחינה מעשית הוא פשוט בצורה יוצאת דופן – פותרים משוואה ריבועית, ואז פותרים עוד מערכת של שתי משוואות בשני נעלמים. הכל חומר של תיכון, ודורש שלוש שורות חישוב – והנוסחה לפיבונאצ'י בהישג יד. קשה לי להסביר עד כמה מצער אותי שנמנעים מלהציג את הנוסחה הזו בתיכון – לשם מה בכלל לדעת איך פותרים משוואות, אם לא בשביל דברים כאלו?

מדריך מקוצר לחשיבה ב-n מימדים

דוק בראון אומר למרטי "לחשוב במימד הרביעי". פיזיקאים מתעסקים בעולמות עם 26 מימדים, או 11, או 10. גם אנשי העידן החדש קופצים על מושגי המימדים הללו כמוצאי שלל רב וטוענים שמגוון חייזרים חיים בהם. אבל מה זה בעצם מימד, מבחינה מתמטית? יש הגדרות שונות לאותו מושג אינטואיטיבי, שמנסות להשיג מטרות שונות; בפוסט הזה אדבר על ההגדרה הפשוטה והבסיסית ביותר, שנלמדת על ידי סטודנטים למתמטיקה כבר בסמסטר הראשון, במסגרת הקורס שעוסק באלגברה לינארית.

באופן אינטואיטיבי, מימד מייצג חופש תנועה מסויים. בכל מימד ניתן "לנוע" באופן בלתי תלוי באחרים. הדרך לתאר מיקום של אובייקט היא באמצעות תיאור המיקום שלו בכל אחד מהמימדים האחרים. אחת מהדרכים האהובות עלי לאפיין ממדים היא באמצעות משחקי מחשב ורמת השליטה שיש לך בדמות שאותה אתה משחק. במשחק דוגמת Space Invaders, שבו אתה מייצג תותח שיורה בחייזרים פולשים, התנועה שלך מוגבלת לימינה-שמאלה בלבד – אתה נע רק במימד אחד. לעומת זאת, במשחקי פלטפורמות עם "מבט מהצד" כדוגמת  Prince of Persia, יש לדמות שלך יכולת לנוע ימינה ושמאלה, אך גם למעלה ולמטה. השינוי מורגש לא רק בצורה שבה הדמות נעה במשחק, אלא גם בכמות המקשים שצריך כדי לשלוט בה – כדי לשלוט בתותח של Space Invaders צריך רק שני מקשי חצים, ואילו כדי לשלוט בנסיך יש צורך בארבעה (כדי לומר לו אם ללכת ימינה או שמאלה, או שדווקא ינסה לעלות או לרדת). יש משחקים דו ממדיים אחרים, שבהם נקודת המבט איננה מהצד, אלא מלמעלה, למשל Diablo: הדמות מסוגלת לזוז ימינה, שמאלה, קדימה ואחורה (בעזרת העכבר, אבל אם היו משתמשים במקשים – שוב, היה צורך בארבעה).

נעבור למשחק תלת ממדי דוגמת Portal. בפורטל אפשר לזוז ימינה, שמאלה, קדימה ואחורה, אבל גם לקפוץ למעלה וליפול למטה (אין מקש מיוחד עבור "למטה" כי נפילה למטה מתרחשת באופן טבעי; אבל במשחקים שבהם אתה חללית ורוצים לאפשר לך תנועה מלאה דווקא כן יש במקש כזה צורך). זוהי דוגמה "קלאסית" למשחק בשלושה ממדים שבו נקודת המבט של השחקן היא מבעד לעיני הדמות. עם זאת, לפעמים שלושה ממדים יכולים לבוא לידי ביטוי בצורה שונה לחלוטין, ואפילו במשחק פלטפורמה "שטוח" לחלוטין. במשחק כרונוטרון שבו ניתן לנוע ימינה/שמאלה ולמעלה/למטה, המימד השלישי הוא בכלל מימד הזמן – אפשר לנוע אחורה בזמן, ויש חשיבות רבה לשאלה מתי אתה נמצא במיקום מסויים, ביחס לזמנים שבהם אתה נמצא במיקומים אחרים. לא שבמשחקי פלטפורמות רגילים אין את זה; אבל בכרונוטרון זה מורגש ומודגש הרבה יותר.

כעת בואו ונחשוב על המשחקים הללו מנקודת המבט של המתכנת. כשהוא בא לייצג את הדמות של השחקן, הוא יצטרך להקצות משתנים כדי שישמרו את המיקום שלה. כמה משתנים צריך במקרה של משחק חד-ממדי כמו Space Invaders? רק אחד, עבור המיקום של התותח בציר האופקי (ציר x). לעומת זאת ב-Prince צריך שניים – אחד לגובה הנוכחי (ציר y), ואחד לציר x. ב-Portal יש את ציר x ו-y וציר נוסף, z, עבור "קדימה/אחורה" (שימו לב שאלו מילים מטעות, כי הדמות של השחקן יכולה להסתובב ואז המשמעות של "קדימה/אחורה" בשבילה תשתנה) ולכן צריך שלושה משתנים. בכרונוטרון אין צורך בציר z, אלא בציר "זמן" t – שוב, שלושה משתנים. באופן אינטואיטיבי אפשר להגיד שהמימד של המשחק בא לידי ביטוי במספר המשתנים הזה.

כעת נעבור למתמטיקה. אפשר לחשוב על ציר המספרים הממשיים \(\mathbb{R}\) כעל קו ישר אינסופי, כך ש"מיקום" על הקו מתואר על ידי מספר ממשי בודד. באופן דומה אפשר לחשוב על ייצוג מקום במישור האוקלידי באמצעות זוג של מספרים ממשיים, \((x,y)\). על מקומות במרחב האוקלידי אפשר לחשוב באמצעות שלשות של מספרים, \((x,y,z)\) ואם רוצים להגיד "החללית הייתה בנקודה הזו והזו בזמן t" אפשר להכניס גם משתנה ממשי רביעי, של זמן, ולקבל רביעייה \((x,y,z,t)\). בהכללה, המתמטיקאים מדברים על n-יה (על משקל "שליש-יה, רביעי-יה וכו') – ובאנגלית tuple – של \(n\) מספרים ממשיים. על היצורים הללו ניתן להגדיר פעולת חיבור (\((x,y)+(a,b)=(x+a,y+b\) – חיבור "רכיב רכיב"), ופעולה של כפל במספר ממשי (\(\lambda\cdot(x,y)=(\lambda x,\lambda y)\)). הקבוצה שמתקבלת מההגדרות הללו היא הדוגמה הארכיטיפית למושג המתמטי המרכזי והחשוב של מרחב וקטורי. בפשטות, מרחב וקטורי הוא אוסף איברים שיש עליהם פעולת חיבור בעלת תכונות מסויימות (פורמלית, היא חבורה חיבורית אבלית), שמגדירים עליהם פעולה של כפל באיבר מתוך שדה (כפי שהגדרנו שדה בפוסט הקודם) שגם היא מקיימת תכונות מסויימות שלא ניכנס אליהן כרגע, ומכונה "כפל בסקלר" ("סקלר" כאן פירושו "איבר מהשדה שמעליו מוגדר המרחב הוקטורי). שימו לב שאברי המרחב הוקטורי לא צריכים להיות איברים בשדה; ה-n-יות אינן מספרים ממשיים, למרות שהן נבנות "מתוך" המספרים הממשיים.

מרחבים וקטוריים מסוגלים לתאר אובייקטים רבים ושונים. בדרך כלל מתחילים את לימודי האלגברה הלינארית בעיסוק במערכות של משוואות לינאריות (משוואות ממעלה ראשונה), שכן ניתן לחשוב על אוסף הפתרונות שלהן כעל מרחב וקטורי, וגם על המשוואות עצמן ניתן לחשוב כעל איברים במרחב וקטורי (משוואה ב-n נעלמים ללא איבר חופשי ניתנת לייצוג בעזרת n-יה של מקדמים). עוד אובייקטים טיפוסיים הם נקודות במרחב (כמו אלו שעליהן דיברתי במבוא), פונקציות, מטריצות, וגם שדות הרחבה מהסוג שהזכרתי בפוסט הקודם. בכל המקרים הללו צריך רק מושג של "חיבור" ושל "כפל בסקלר". היופי כאן (ובכלל במתמטיקה) הוא שהתיאוריה של המרחבים הוקטוריים תקפה לכל המקרים הללו באותו האופן.

כבר כאשר עוסקים בפתרון משוואות לינאריות, מתגלה מהר מאוד שנוח לייצר איברים חדשים מתוך איברים קיימים על ידי כך שכופלים את האיברים הקיימים בסקלר מסויים, ומחברים אותם. מהתוצאה שמתקבלת אפשר ללמוד משהו על המרחב עצמו. כך למשל אם יש לנו מערכת משוואות לינאריות, בעזרת הכפלה שלהם וחיבור שלהם אפשר לקבל משוואות נוספות, אולי פשוטות יותר, שיש להן בדיוק את אותם פתרונות; בצורה הזו אפשר להגיע ממערכת מסובכת למערכת פשוטה שאפשר לפתור מיידית. לכן הפעולה הזו של "הכפלה בסקלר וחיבור" זכתה לשם משל עצמה – "צירוף לינארי". אם \(v_1,\dots,v_n\) הם איברים של מרחב וקטורי ו-\(\lambda_1,\dots,\lambda_n\) הם סקלרים מתוך השדה, אז האיבר \(\lambda_1v_1+\dots+\lambda_nv_n\) הוא צירוף לינארי של הוקטורים הללו. שימו לב שיש לי כאן מספר סופי של מחוברים – באופן כללי, מסיבות טכניות (כלומר, בלי זה רוב המשפטים פשוט לא עובדים) נהוג לעסוק באלגברה לינארית רק בצירופים לינאריים של מספר סופי של איברים, או של מספר אינסופי של איברים כך שתמיד המקדמים של כולם פרט למספר סופי מתוכם הוא 0. האנליזה הפונקציונלית, שמרחיבה את האלגברה הלינארית באמצעות רעיונות מהחשבון האינפיניטסימלי, מציעה אפשרות לעבוד גם עם סכומים אינסופיים, אבל זה נושא נרחב בפני עצמו ולא אכנס אליו כעת.

הנה דוגמה פשוטה. נתבונן במערכת המשוואות הלינארית הבאה:

\(x+y=0\)

\(x-y=0\)

אפשר לייצג את המשוואות בעזרת הוקטורים \((1,1),(1,-1)\). חיבור הוקטורים הללו יניב את הוקטור \((2,0)\) שמייצג את המשוואה \(2x=0\). אם רוצים לקבל תוצאה "יפה" יותר אפשר גם לכפול כל אחד מהוקטורים בסקלר \(\frac{1}{2}\) לפני שסוכמים אותם, ואז נקבל את הוקטור \((1,0)\) כצירוף לינארי של שניהם, כלומר את המשוואה \(x=0\) שנותנת לנו מיידית חצי מהפתרון למערכת; על ידי כפל בחצי וחיסור שני הוקטורים (או אם תרצו, חיבור שני הוקטורים לאחר שגם כפלנו את השני במינוס 1) נקבל את הוקטור \((0,1)\) שמייצג את המשוואה \(y=0\). בסופו של דבר קיבלנו שהפתרון היחיד למערכת המשוואות הוא הפתרון ה"טריוויאלי", \(x=y=0\). הטכניקה שהצגתי כאן נראית אד-הוקית משהו, אבל יש אלגוריתם מדוייק ויעיל שעוסק בפתרון משוואות בדרך דומה, ונלמד כבר בקורס הבסיסי באלגברה לינארית – לא אציג אותו כעת.

עד כאן טוב ויפה, אבל אפשר לקבל אינטואיציה עוד יותר טובה למה שהלך כאן. אם אני יכול לבנות את \((1,0)\) ואת \((0,1)\) אני אוכל לבנות גם כל צירוף לינארי שלהם (איך?) ולכן אוכל לקבל כל וקטור \((a,b)\) כצירוף לינארי של שני הוקטורים המקוריים (איך?) ולכן בעצם מה שאני אומר כאן הוא "כל פתרון למערכת המשוואות המקורית פותר גם את המשוואה \(ax+by=0\), לכל \(a,b\)". אינטואיטיבית קל להבין למה זה מכריח את הפתרון להיות הטריוויאלי – מה עוד יוכל לפתור כל משוואה לינארית אחרת?

על קבוצת וקטורים בעלת התכונה המיוחדת שאפשר לקבל כל וקטור במרחב הוקטורי כצירוף לינארי שלהם אומרים שהיא פורשת את המרחב. בוודאי שלכל מרחב אפשר למצוא קבוצה שפורשת אותו – קבוצת כל הוקטורים במרחב, למשל (כל וקטור ניתן להצגה כצירוף לינארי שבו המקדם שלו הוא 1 והמקדם של כל שאר האיברים הוא 0). עם זאת, ככל שיש יותר איברים בקבוצה הפורשת שלנו, כך פחות נוח לעבוד איתה. לכן שואפים תמיד למצוא למרחב קבוצה פורשת מינימלית.

איך אפשר למצוא קבוצה פורשת מינימלית? באופן לא פורמלי, אפשר לחשוב על זה כך: נתחיל עם קבוצה גדולה של איברים שפורשת את המרחב. כעת נתחיל לסלק מתוכה וקטורים "מיותרים". מהו וקטור מיותר? וקטור שגם אם מעיפים אותו מהקבוצה, עדיין אפשר לבנות אותו כצירוף לינארי של מי שנשאר (ולכן אפשר להחליף כל מקום שבו הוא מופיע בבנייה של איברים אחרים בצירוף הלינארי שנותן אותו). וקטורים מיותרים בקבוצה שלנו פירושם לא רק שהקבוצה גדולה מדי, אלא גם שיש איברים במרחב הוקטורי שניתן לייצג בכמה דרכים שונות כצירוף של איברים מהקבוצה – ולעתים קרובות, אנחנו רוצים דווקא שהייצוג יהיה יחיד (יותר קל להוכיח כל מני דברים על איברים כאשר הייצוג שלהם הוא יחיד). מסתבר שיש קריטריון יפה להכרעה מתי יש בקבוצה וקטורים מיותרים שכאלו – אם אפשר לקבל את אפס כצירוף לינארי לא טריוויאלי של אברי הקבוצה, כלומר צירוף לינארי שלא כל מקדמיו הם אפס (אינטואיטבית קל להבין למה זה קורה – אם אני יכול לייצג איבר כלשהו בשתי דרכים שונות כצירוף לינארי, אז נחסר את שני הצירופים הללו זה מזה ונקבל אפס, אבל מכיוון ששני הצירופים היו לפחות עם מקדם שונה אחד, נקבל צירוף לינארי לא טריוויאלי).

למשל, בקבוצה \((1,0),(0,1)\) אין וקטור מיותר. אם נכתוב צירוף לינארי "כללי" של שני האיברים הללו נקבל את האיבר \((\lambda_1,\lambda_2)\). הדרך היחידה שבה האיבר הזה יהיה אפס הוא ששני הסקלרים יהיו אפס, כלומר שהצירוף הלינארי יהיה טריוויאלי. לעומת זאת אם נוסיף לקבוצה את האיבר \((2,0)\) הרי שעכשיו צירוף לינארי "כללי" של אברי הקבוצה יתן לנו את האיבר \((\lambda_1+2\lambda_3,\lambda_2)\), וכאן בבירור יש אפשרות לקבל את אפס בדרך נוספת: אם נבחר \(\lambda_1=2,\lambda_2=0,\lambda_3=-1\), למשל.

לקבוצת וקטורים כזו, שיש בה צירוף לינארי לא טריוויאלי שנותן את אפס, קוראים קבוצה תלויה לינארית. ה"תלות" מתבטאת בדיוק בכך שאפשר לקבל וקטור כלשהו מהקבוצה הזו כצירוף לינארי של היתר. כעת אפשר להגדיר במדוייק מה הכוונה בקבוצה פורשת "מינימלית" – קבוצה פורשת שהיא גם בלתי תלויה לינארית (שימו לב שקבוצה שכזו היא גם קבוצה בלתי תלויה מקסימלית – מדוע?). וכאן מגיעה אחת מהתוצאות היפות במתמטיקה, לדעתי: ראשית, לכל מרחב וקטורי באשר הוא קיימת קבוצה שכזו (הוכחתי זאת בפוסט קודם), ולמעשה – בהינתן כל קבוצה בלתי תלויה של וקטורים, ניתן להרחיב אותה לקבוצה פורשת בלתי תלויה; ושנית, כל הקבוצות הפורשות המינימליות הן מאותו הגודל, כלומר מכילות בדיוק אותה כמות של וקטורים. נסו לחשוב רגע על ההגדרות שנתתי כדי לקבל תחושה מדוע זה לא מובן מאליו שהן יהיו מאותו הגודל – אולי יש וקטור ש"פורש הרבה מאוד את המרחב", כך שאם הוא נמצא בקבוצה פורשת, צריך עוד מעט מאוד וקטורים אחרים, ואילו אם לוקחים קבוצה אחרת שבה כל וקטור "פורש מעט את המרחב" נצטרך יותר וקטורים? מה שהמשפט שציטטתי מראה הוא שהסיטואציה איננה כזו.

לקבוצה פורשת ובלתי תלויה קוראים בסיס של המרחב. החשיבות של בסיסים היא עצומה – אם יש לנו בסיס, יש לנו תיאור קומפקטי של המרחב כולו. כדי לחקור איך פונקציות שמשמרות את הלינאריות של המרחב ("טרנספורמציות לינאריות") פועלות על המרחב כולו, מספיק לדעת כיצד הן פועלות על בסיס. אי אפשר להפריז בחשיבות של התוצאה הזו.

וכעת הגענו חזרה לנושא השרשור – לגודל של בסיס (שכזכור, הוא זהה לכל הבסיסים) קוראים המימד של המרחב. השם אינו מקרי, אלא מתאים בדיוק לתיאור האינטואיטיבי שנתתי קודם, של "דרגות חופש" – במרחב ממימד \(n\) אפשר לתאר כל איבר במרחב באופן יחיד באמצעות צירוף לינארי של \(n\) וקטורי בסיס, כלומר אפשר לחשוב עליו כאילו הוא מתואר על ידי \(n\) סקלרים, ששינוי בכל אחד מהם ישנה את האיבר המתקבל. אם כן, המרחב הארבע-ממדי שדיברתי עליו בהתחלה מיוצג באמצעות וקטורי בסיס של "ציר x", "ציר y", "ציר z" ו"ציר t", למשל.

הכנסתי כאן די הרבה חומר שהעיכול שלו אינו מיידי; למי שלא הצליח לעקוב אחרי הפוסט אני ממליץ על קריאת כל ספר באלגברה לינארית (ספר סטנדרטי הוא זה של Hoffman ו-Kunze) – מכיוון שזה נושא שנמצא בבסיס המתמטיקה המודרנית, לרוב אין צורך כמעט בשום ידע מוקדם עבורו (רק ידע בית ספרי).

בפוסט הבא נחזור לעסוק בהרחבת שדות ונראה איך המימד ומושג הבסיס באים לידי ביטוי גם שם – מסתבר שיש להם תפקיד חשוב ביותר.

אז איך פותרים משוואה ריבועית?

אחת מהשאלות שהביאה נפשות תועות לבלוג הייתה "איך פותרים משוואה ריבועית". תכננתי לענות עליה במסגרת מדור "שאלות ותשובות", תשובה שהייתה בערך זו: "הפתרון של המשוואה \(ax^2+bx+c=0\) הוא \(x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\)", אבל אז הבנתי שזו אולי תשובה נכונה ומדוייקת, אבל התחמקות גמורה מהשאלה. אנסה להסביר מדוע.

לא מזמן ראיתי הרצאה של מתמטיקאי שעסקה בשאלת המבחנים האמריקאיים אל מול המבחנים הפתוחים. מהר מאוד ההרצאה התגלגלה למערכת החינוך המוצלחת שלנו ושיטות אי-הוראת המתמטיקה בה. המרצה סיפר את סיפור הזוועה הבא על בנו: הבן, שמתכונן לבחינות הבגרות, היה צריך לפתור את המשוואה הבאה: \((x-6)^2=900\). מה עשה הבן? פתח את הסוגריים, קיבל \(x^2-12x+36=900\). העביר אגף, קיבל את המשוואה \(x^2-12x-864=0\) שמתאימה ל"צורה הכללית", ופתר באמצעות הנוסחה. על פניו, פתרון כשר ותקין לחלוטין, אז מה הבעיה? שאני נתקף חלחלה רק מעצם המחשבה על ביצוע החישובים שנדרשים להצבת הערכים הללו בנוסחה הכללית, ועם זאת אני מסוגל לפתור את המשוואה המקורית בשניות, רק מהסתכלות עליה, ולדעת שהפתרונות הם 36 ומינוס 24. לא כי אני מחשבון אנושי, חלילה; פשוט מכיוון שאני רואה שאפשר להוציא מייד שורש משני האגפים ולחבר 6 לשניהם כדי לקבל את הפתרונות.

מה הבעיה כאן? שהבן התרגל לפתור משוואות בצורה מכנית, כאילו היה מחשב. רואים משוואה? מייד להביא אותה ל"צורה הכללית" שמכירים, ומשם לפתור עם הנוסחה. החישובים אולי יהיו קקי, אבל ממילא מחשבון הוא סטנדרט בכל בחינה תיכונית במתמטיקה (לצורך ההשוואה – יש רק קורס מתמטי אחד שלמדתי אי פעם באוניברסיטה שבו הורשינו להשתמש במחשבון; וגם בו הוא היה מיותר לגמרי. זה היה הקורס שעסק בשיטות שבהן מחשבים משתמשים כדי לבצע חישובים נומריים). האירוניה כאן היא שכל הרעיון שמאחורי הנוסחה ("נוסחת השורשים") הוא הבאה של המשוואה הכללית לצורה של "משהו בריבוע שווה מספר", כמו זו שממנה הבן התחיל.

אלא מה? אני די בספק אם רבים מהתלמידים בבית הספר זוכרים את ההוכחה של נוסחת השורשים – אם בגלל שלא לימדו אותם, ואם בגלל שלא לימדו אותם למה לדעת את ההוכחה חשוב. כשכל מה שצריך לדעת הוא התוצר הסופי (הנוסחה), למי אכפת ממה שקרה בדרך? וכך מתעלמים מהסיבה האמיתית שבגללה לומדים הוכחות (גם את זה המרצה אמר, כציטוט של מישהו אחר…) – לא בשביל לדעת שמשהו הוא נכון, אלא כדי לדעת למה הוא נכון. וכשיודעים את ה"למה", קל גם לזהות מצבים שבהם אין צורך בנוסחה הכללית ויש "דרך קיצור" נוחה.

אם כן, איך הגיעו לנוסחה הכללית? מה השיטה שעומדת בבסיסה? השיטה היא שיטה עתיקת יומין, שקיימת לפחות מימי הבבלים – שיטת ה"השלמה לריבוע". אציג אותה כאן ראשית כל בניסוח "אלגברי" מודרני – בתור משהו שמושג על ידי מניפולציה של סמלים. עם זאת, הדבר המעניין בשיטה הזו, לטעמי, הוא דווקא הצורה שבה הבבלים הבינו אותה. הבבלים לא עסקו כלל באלגברה. הם לא ייצגו ערכים על ידי משתנים. מה שהם כן עשו היה לפתור בעיות ספציפיות בעזרת אלגוריתמים כלליים, והשלמה לריבוע היא דוגמה לאלגוריתם שכזה. בפרט, ממש רואים בה את ה"ריבוע" פיזית. לכן אציג גם את מה שאני מכיר בתור השיטה הבבלית (כמובן, ייתכן שזו לא באמת השיטה שבה הבבלים השתמשו; אני לא היסטוריון של המתמטיקה אלא רק מסתמך על כאלו).

אם כן, משוואה ריבועית "כללית" מסומנת ב-\(Ax^2+Bx+C=0\) כאשר \(A,B,C\) הם מספרים ממשיים (אבל לא רק; כפי שתראו, מה שאציג עובד בכל שדה – כלומר, בכל קבוצה שיש בה פעולות של חיבור, חיסור, כפל וחילוק שמקיימות את התכונות שאנו מכירים ואוהבים) ואנו מעוניינים לגלות מספר שכאשר מציבים אותו במקום \(x\) המשוואה מתקיימת. הדבר הראשון שעושים הוא להעביר את המשוואה לצורה פשוטה קצת יותר: \(x^2+\frac{B}{A}x+\frac{C}{A}\) – כלומר, חילקתי ב-\(A\). אי אפשר לחלק ב-\(A\) אם הוא 0; אבל במקרה כזה, אין לנו את \(x^2\) בשום מקום במשוואה ולכן זו לא משוואה ריבועית. אסמן \(b=\frac{B}{A}, c=\frac{C}{A}\) ומעכשיו ועד עולם אפשר לדבר על הדרך התיאורטית הכללית לפתור את המשוואה \(x^2+bx+c=0\). כפי שתראו, חיסול אחד מהמקדמים פשוט מקל על החישובים (ועל הצגת השיטה הבבלית).

מה כעת? מבחינה אלגברית, השאיפה שלנו תמיד בפתרון משוואות הוא לרכז את כל ה-\(x\)-ים בצד אחד, ואת כל המספרים שאינם \(x\) בצד השני. על כן, מעבירים אגף ומקבלים \(x^2+bx=-c\). כעת, היינו רוצים להוציא את \(x\) כגורם משותף, אבל אז היינו מקבלים \(x(x+b)=c\). מכיוון שיש \(x\) גם בסוגריים אין הרבה תועלת בפעולה הזו – קשה "לבודד" את \(x\). לכן משתמשים בתעלול.

התעלול הוא כדלהלן: ידוע שמתקיים \((x+t)^2=x^2+2tx+t^2\) וזאת לכל \(x,t\). מה שטוב בכך הוא שזה מאפשר לנו להפוך סכום של \(x^2\) שמופיע בו גם \(x\) למשהו שמכיל רק \(x\). אם כן, רוצים לחשוב על \(x^2+bx\) בתור ביטוי מהצורה שלעיל, אבל לעת עתה הם ממש לא דומים; בביטוי שלמעלה יש שלושה מחוברים, וכאן יש רק שניים. הפתרון לכך פשוט – נחבר את אותו המספר לשני אגפי המשוואה (נשלים את אגף שמאל של המשוואה כך שיהיה ריבוע של מספר כלשהו). המספר אמור להיות \(t^2\), אבל לא ברור לנו עדיין מהו \(t\). כדי להבין מה הוא אמור להיות, נשווה את המקדמים של \(x\) בשתי המשוואות; נקבל \(b=2t\), כלומר \(t=\frac{b}{2}\). אם כן, מה שיש לחבר לשתי המשוואות הוא \(t^2=\frac{b^2}{4}\). נעשה זאת ונקבל את המשוואה:

\(x^2+bx+\frac{b^2}{4}=\frac{b^2}{4}-c\)

כעת אפשר "לסגור" את אגף שמאל על פי הנוסחה שכבר ראינו:

\(\left(x+\frac{b}{2}\right)^2=\frac{b^2}{4}-c\)

כדי להקל לעצמי על החיים אני "מעלה" את \(c\) אל השבר באגף ימין על ידי טריק נפוץ נוסף – אני כופל ומחלק אותו ב-4:

\(\left(x+\frac{b}{2}\right)^2=\frac{b^2-4c}{4}\)

וכעת אני מוציא שורש מאגף שמאל, ולכן גם מאגף ימין. זה, כאמור, לב העניין כולו וזו הייתה המטרה המרכזית שלי:

\(x+\frac{b}{2}=\pm\sqrt{\frac{b^2-4c}{4}}\)

לא תמיד אפשר להוציא שורש לאגף ימין – למשל, כשאנו עוסקים במספרים ממשיים בלבד, מה שמופיע באגף ימין חייב להיות מספר לא שלילי. לכן לא לכל משוואה יש פתרון מאותו השדה (תמיד יש לה פתרון בשדה רחב יותר, כמו למשל במקרה של המרוכבים, אך לא ניכנס לזה). חשוב גם לשים לב לכך שקיבלנו שני פתרונות במקרה הכללי, כי הוצאת שורש אינה פעולה חד ערכית.

כעת מעבירים את \(\frac{b}{2}\) אגף, ובאותה הזדמנות אפשר להשאיר את השורש על המונה של אגף ימין בלבד, כי להוציא שורש למכנה אנו יודעים:

\(x=\frac{\pm\sqrt{b^2-4c}}{2}-\frac{b}{2}\)

ובצורת כתיבה אחרת מקבלים את הנוסחה המוכרת לנו:

\(x=\frac{-b\pm\sqrt{b^2-4c}}{2}\)

אם מציבים \(b=\frac{B}{A}, c=\frac{C}{A}\) במשוואה הזו מקבלים את הנוסחה הכללית ביותר (הטריק היחיד שיש לבצע כאן הוא לכפול ולחלק את \(C\) שבתוך השורש ב-\(A\), ואז ניתן להוציא את \(\frac{1}{A^2}\) מחוץ לשורש):
\(x=\frac{-B\pm\sqrt{B^2-4AC}}{2A}\)

הגרסה הזו נוחה במקרים שבהם לא כיף לחלק ב-\(A\) ואז לחשב כל מני דברים מעצבנים, כמו את הריבוע של \(\frac{B}{A}\).

אם כן, זו הגישה ה"אלגברית" לכל זה. אבל מה הבבלים עשו? האם יש אינטואיציה לפתרון שהיא מעבר ל"אם נעשה את המניפולציה הזו והזו על הסמלים הזה והזה, יצא לנו משהו נחמד"?

הבבלים עוסקים בשאלה שבמבט ראשון נראית קשורה רק למחצה, במקרה הטוב: נתון להם מלבן. הם יודעים את שטח המלבן ואת ההפרש בין אורך צלעותיו של המלבן. המטרה: לגלות את אורך הצלעות. ראשית אציג את הדרך שבה פותרים את הבעיה הזו; אחר כך אסביר מדוע עבור מקרים רבים זו הבעיה שלנו, בתחפושת. נתחיל בתמונה אחת ששווה אלף מילים – תיאור התהליך כולו.
Completion

כעת להסבר. אנחנו מתחילים ממלבן A שאורך צלעותיו הוא הנעלמים \(x,y\). מה אנחנו כן יודעים? את שטחו \(xy\) ואת הערך \(y-x\).

הרעיון הכללי בבנייה הוא להפוך את המלבן לריבוע. לשם כך יהיה צורך "להשלים" אותו על ידי הוספת פיסה נוספת – זו ה-D שמופיעה בשלב האחרון. את התהליך מתחילים כך: A הוא מלבן, ולכן יש בו צלע ארוכה וצלע קצרה יותר. אפשר להעביר מקביל בתוך המלבן לצלע הקצרה יותר כדי לחלק את A לריבוע (B) ולמלבן קטן יותר, C. אורך הצלע של הריבוע B הוא \(x\), ואילו אורך הצלעות של C הוא \(x\) ו-\(y-x\) (כי "גזרנו" מהצלע שאורכה \(y\) קטע שאורכו \(x\)). מה שחשוב במלבן החדש הוא שאנו יודעים את אורך הצלע \(y-x\) – זה חלק מהנתון.

כעת, מחלקים את המלבן הזה לשני חלקים – C1,C2. את C1 משאירים במקומו, אבל עם C2 יוצאים לטיולים. לוקחים אותו, מסובבים אותו ב-90 מעלות, ומדביקים אותו בחלק התחתון של הריבוע B. זה יוצר לנו צורה שהיא "כמעט ריבוע" – אורך צלעה הוא \(x+\frac{y-x}{2}\), אך חסר בה חלק. את החלק הזה – D – "משלימים", ומקבלים ריבוע תקין.

מה שטח הריבוע הזה? את זה אפשר לדעת מהנתונים. זה שווה לשטח המלבן המקורי, ועוד שטח D. את שטח D יודעים, כי D הוא ריבוע שאורך צלעו \(\frac{y-x}{2}\), ושטח D הוא פשוט ריבוע האורך הזה. אם כן, את השטח הכולל, שאסמן ב-\(S\), אפשר לחשב באמצעות חיבור שטח A לשטח D. בנוסף, ידוע ששטח זה הוא הריבוע של אורך הצלע של הריבוע שיצרנו: \(S=\left(x+\frac{y-x}{2}\right)^2\). זהו מקורה ה"היסטורי" של המילה "ריבוע" (באנגלית Square; וכאשר מדברים על חזקה שלישית, זה Cube – אני מניח שכעת ברור למה). אם כן, כל מה שנשאר לעשות הוא להוציא שורש לשטח הריבוע, שאותו כאמור אנו יודעים, וקיבלנו את \(x+\frac{y-x}{2}\). מכיוון שאנחנו יודעים את \(\frac{y-x}{2}\), קל לגלות את \(x\), ולכן גם את \(y\).

את כל זה הצגתי, שוב, בגישה אלגברית יחסית, תוך שימוש במשתנים. הבבלים פשוט הציגו את זה בעזרת דוגמאות. למשל, נניח ששטח המלבן הוא 7 וההפרש בין אורכי הצלעות הוא 6: אז אורך C יהיה 6, ולכן חצי מאורך C יהיה 3. לכן שטח D יהיה 9, ולכן השטח הכולל של הריבוע הגדול יהיה 16 – לכן אורך צלעו של הריבוע הגדול הוא 4, ולכן אורך צלע אחת של הריבוע המקורית הוא \(4-3=1\) (ה-3 הגיע מ"חצי מאורך C"). לכן אורך הצלע השנייה הוא 7, וגמרנו.

לדעתי השיטה הזו נאה מאוד גם בקני המידה של ימינו. הנה הצורה שבה אני לפחות, כתוצר משובח של מערכת החינוך שלנו, הייתי ניגש לבעיה הזו אם היו מציגים לי אותה בניסוח אלגברי טהור, כלומר מציגים בפני את שתי המשוואות \(xy=7, y-x=6\): הייתי מחלץ מהמשוואה השנייה \(y=6+x\), מציב במשוואה הראשונה \(x(6+x)=7\). פותח סוגריים ומקבל \(x^2+6x-7=0\), וכאן משתמש בנוסחת השורשים ומקבל \(x=\frac{-6\pm\sqrt{36+28}}{2}=\frac{-6\pm 8}{2}\) ובסופו של דבר, את התוצאות \(x=1\) ו-\(x=-7\) (שלא מתאים לתיאור הגאומטרי, שבו אורכים הם תמיד חיוביים). כמות החישובים שהגישה הזו דרשה ממני היא גדולה יותר, ואני מבצע אותה לאט יותר (מחשב, כמובן, יעדיף את הגישה האלגברית…).

טרם סיימתי. טענתי קודם שהשיטה הזו של הבבלים היא (לא תמיד, אבל במקרים רבים) השיטה לפתרון משוואה ריבועית שאנו מכירים, פשוט בתחפושת. על פניו, לא נראה שיש קשר ישיר ביניהן; הרי כאמור, השיטה הזו פותרת את מערכת המשוואות \(xy=t_1,y-x=t_2\) (כש-\(t_1,t_2\) הם מספרים כלשהם). כדי להבין איך זה מתקשר למשוואות ריבועיות "רגילות", צריך להיזכר במה שמכונה "נוסחאות וייטה".

נניח שיש לנו את המשוואה הריבועית \(x^2+bx+c=0\). אפשר לחשוב על בעיית הפתרון שלה כעל בעיית מציאת השורשים של הפולינום \(x^2+bx+c\). נניח שהשורשים הם \(\alpha,\beta\). היכרות עם תכונות של פולינומים מראה שקיים פולינום יחיד ממעלה שנייה שאלו הם שורשיו, וניתן לכתוב אותו בתור \((x-\alpha)(x-\beta)\). לאחר פתיחת סוגריים מקבלים \(x^2+(-\alpha-\beta)x+\alpha\beta\). אם כן, קיבלנו \(b=-\alpha-\beta\) ו-\(c=\alpha\beta\). אלו הן נוסחאות וייטה עבור משוואה ריבועית – הן מראות שמקדמי המשוואה הם פשוט מינוס הסכום והמכפלה של הפתרונות. במקרה שלנו, זה עוזר לנו "להנדס" בעיית מלבן שתפתור לנו את המשוואה הריבועית. הבעיה המרכזית כאן היא שפתרון בעיית המלבן מבוסס על הכרת ההפרש בין שני המספרים שאנו מחפשים, ואילו כאן נתון לנו דווקא מינוס הסכום שלהם. לכן נשתמש בתעלול הבא: אם \(\alpha,\beta\) הם הפתרונות של המשוואה, אז \(b=-\beta-\alpha\). אם נסמן \(x=\alpha, y=-\beta\) (סליחה על השימוש הכפול ב-x – אני מנסה להיות קונסיסטנטי עם השימוש בו בבעיית המלבן) נקבל \(b=y-x\), בדיוק כמו בבעיית המלבן. לכן, אם נפתור את בעיית המלבן ונמצא \(x,y\), הפתרונות למשוואה הריבועית יהיו \(x,-y\).

מה עוד נשאר כדי לקבל בעיית מלבן? צריך לדעת גם את \(xy=-\alpha\beta=-c\) – וכאמור, אנו יודעים אותו. אם כן, כדי לפתור את המשוואה הריבועית אנו פותרים בעיית מלבן עם שטח \(-c\) והפרש צלעות \(b\) ואז מתרגמים את פתרונות בעיית המלבן חזרה לפתרונות של המשוואה הריבועית.

כמובן, השיטה הזו תקפה רק אם \(c\) שלילי, אחרת נקבל בעיית מלבן לא הגיונית, עם שטח שלילי; לכן לא ניתן לטפל במשוואות כמו \(x^2+1=0\) בעזרת השיטה הזו. עם זאת, אני חושב שבהתחשב בכך שהמתמטיקה הבבלית הייתה קיימת למעלה מאלף וחמש מאות שנים לפני הספירה, אני חושב ששיטת ההשלמה לריבוע היא הישג מרשים ונאה ביותר לזמנו.

בסיס מוצק מי ימצא

אין מנוס מדוגמה מתמטית "קלאסית" להוכחה לא קונסטרוקטיבית, ולכן אביא אותה כעת. כדי להבין את הדוגמה יש צורך להכיר אלגברה לינארית בסיסית – מהו מרחב וקטורי ומהו בסיס. לא ארחיב כאן על המושגים הללו, אלא אקפוץ ישר לטענה: לכל מרחב וקטור \(V\) קיים בסיס – והדבר נכון גם למרחב ממימד אינסופי. כלומר, מרחב שבו אין חסם על גודל הקבוצות הבלתי תלויות האפשריות. בקורסי המבוא של האלגברה הלינארית כמעט ולא עוסקים במרחבים כאלו, ועיקר העיסוק בהם הוא במסגרת האנליזה הפונקציונלית, שמטפלת בהם בגישה מעט שונה מזו האלגברית ה"טהורה". בפרט, מושג ה"בסיס" המקובל (קבוצה שכל איבר במרחב יכול להיכתב כצירוף לינארי של מספר סופי מאיבריה) מתגלה כשימושי פחות ביחס לסוגים אחרים של "בסיסים" (כאלו שבהם כל איבר במרחב נכתב כצירוף אינסופי, אך מתכנס, של איברים – כמובן שלצורך כך יש להגדיר מושג כלשהו של התכנסות על המרחב). אם שמעתם על טורי פורייה, הרי שהם דוגמה לבסיס "אחר" שכזה (במקרה זה – של מרחב פונקציות אינסופי).

עבור מרחב ממימד סופי המשפט טריוויאלי, והטכניקה פשוטה: לוקחים איבר \(a_1\). מחפשים איבר נוסף במרחב שאינו תלוי לינארית ב-\(a_1\). אם אין כזה – מה טוב, \(\{a_1\}\) הוא בסיס למרחב. אחרת, יש איבר \(a_2\) שכזה, ולכן נוסיף אותו לקבוצת ה"בסיס הפוטנציאלי" שלנו, ונמשיך הלאה. מכיוון שאנחנו במרחב ממימד סופי, יש חסם על גודל הקבוצה הבלתי תלויה המקסימלית, ולכן התהליך יהיה חייב לעצור – כלומר, נגיע לאיזו קבוצה \(\{a_1, a_2,\dots, a_n\}\) שכל איבר במרחב תלוי לינארית בה – כלומר, ניתן לכתיבה כצירוף לינארי של איבריה, וזהו. באותה צורה אפשר להרחיב כל קבוצה בלתי תלויה לבסיס – פשוט נתחיל מאיברי הקבוצה, ונוסיף להם איברים כל עוד אפשר.

במרחב אינסוף ממדי ההוכחה נכשלת מכיוון שתהליך הוספת האיברים עלול לא להסתיים לעולם. לכן יש לנקוט בגישה שונה. הרעיון הבסיסי נותר זהה – אנחנו רוצים למצוא קבוצה בלתי תלויה שהיא מקסימלית במובן זה שכל איבר שנוסיף לה יהפוך אותה לתלויה (ולכן האיבר הזה שנוסיף ניתן לכתיבה כצירוף לינארי של איברים שכבר קיימים בקבוצה), אבל בשביל למצוא קבוצה מקסימלית שכזו יש להשתמש בלמה של צורן. המילה "למצוא" היא כמובן שקר גמור; כל הרעיון כאן הוא שלא נמצא שום דבר, אלא רק נוכיח קיום.

הניסוח של הלמה של צורן הוא מעט טכני אך אינו מסובך בצורה יוצאת דופן. נניח שיש לנו קבוצה שמוגדר עליה יחס סדר (כלומר, אפשר להגיד על איברים "א' גדול מב'", ופירוש הדבר יהיה שלא ייתכן ש-ב' גדול מא', ושאם ב' גדול מג' אז גם א' גדול מג'). אז אם לכל "שרשרת" של איברים שמסודרים לפי גודל – \(A_1<A_2<\dots\) (שימו לב – השרשרת לא בהכרח סופית) יש איזה שהוא איבר \(A\) בקבוצה שלנו שהוא גדול מכל איברי השרשרת ("חסם מלעיל" של השרשרת), אז יש איבר מקסימלי בקבוצה שלנו – כזה שאף איבר אחר אינו גדול ממנו.

הבלבול העיקרי בשימוש בלמה במקרה שלנו עשוי לנבוע מכך שהאיברים שעליהם מוגדר יחס הסדר יהיו בעצמן קבוצות, ויחס הסדר יוגדר באמצעות הכלה: הקבוצה \(A_1\) קטנה מהקבוצה \(A_2\) אם ורק אם היא מוכלת בה: \(A_1 \subseteq A_2\).

עכשיו, נניח שנתונה לנו קבוצה בלתי תלויה \(A\) של וקטורים. נגדיר את אוסף הקבוצות שעליו נרצה להפעיל את הלמה של צורן בתור אוסף הקבוצות הבלתי תלויות של איברים שמכילות את \(A\). אם נמצא איזו שהיא קבוצה בלתי תלויה "מקסימלית" \(B\) מבין כל הקבוצות הללו, נסיים. למה? כי מהמקסימליות נובע שכל איבר שנוסיף לה יהפוך אותה לתלויה לינארית (כי אם כשמוסיפים את האיבר \(x\) לקבוצה \(B\) מקבלים שוב קבוצה בלתי תלויה זו סתירה למקסימליות של \(B\), שכן \(B\subseteq B\cup\{x\}\).

כדי להשתמש בלמה של צורן, אם כן, יש צורך לקחת "שרשרת", להראות שיש לה חסם מלעיל. נניח ש-\(A_\Lambda\) היא שרשרת שכזו (האינדקס המשונה – האות היוונית למבדא – בא לציין שהשרשרת אינה בהכרח מכילה מספר בן מניה בלבד של איברים. מי שזה לא מסתדר לו עם קיום יחס הסדר יכול להיזכר שגם על המספרים הממשיים מוגדר יחס סדר). התעלול המקובל הוא להגדיר את חסם המלעיל בתור איחוד כל הקבוצות הללו: \(C=\cup A_\Lambda\). ברור שהוא חסם מלעיל לשרשרת (כי הוא מכיל כל איבר באיחוד), וכל מה שצריך להראות הוא שגם הוא איבר באוסף כל הקבוצות הבלתי תלויות שמכילות את \(A\).

טוב, ברור שהוא מכיל את \(A\) (למה?) אבל פחות ברור שהוא בלתי תלוי. כדי להראות את זה מניחים בשלילה שהוא תלוי ולכן יש מספר סופי של וקטורים \(a_1,\dots,a_n\in C\) שיוצרים את 0 בצירוף לינארי לא טריוויאלי. כאן נכנס העוקץ לתמונה: אמרנו ש-\(C\) היא איחוד של כל ה-\(A_\Lambda\), ולכןכל איבר \(a_i\) שייך לאיזו שהיא קבוצה \(A_i\) מהשרשרת. מכיוון שכולן מקיימות יחס סדר, פשוט בוחרים את הקבוצה הגדולה ביותר מתוך \(n\) הקבוצות הללו ומובטח שהיא תכיל את כל \(n\) האיברים \(a_1,\dots, a_n\) (למה?) אבל הקבוצה הזו היא קבוצה בלתי תלויה, על פי הגדרת השרשרת… ולכן לא ייתכן שהצירוף של \(a_1,\dots, a_n\) נותן 0 בצורה לא טריוויאלית, וזה מסיים את ההוכחה.

בכל ההוכחה הזו לא הצבענו על שום דרך לגילוי הבסיס המבוקש. שורש כל הרוע הוא בכך שהלמה של צורן מבטיחה קיום של משהו, אבל לא אומרת כלום על הדרך למצוא אותו או על המראה שלו. ככה זה. אלו מכם שכבר נתקלו בלמה של צורן לא ימצאו בהוכחה שום ייחוד – זה יישום סטנדרטי לחלוטין שלה, ועם זאת אפקטיבי וחזק להפתיע.

ואיך אקסיומת הבחירה נכנסת לכל זה? היא שקולה ללמה של צורן. כלומר, אם נניח את אקסיומת הבחירה נוכל להוכיח את הלמה של צורן, וההפך – אם נניח אקסיומטית שהלמה של צורן נכונה (דבר הרבה פחות אינטואטיבי מההנחה שאקסיומת הבחירה נכונה), נוכל להוכיח מכך את אקסיומת הבחירה.

אקסיומת הבחירה גוררת עוד משפטים חזקים רבים נוספים, שלא אתעכב עליהם. רק אציין משפט חשוב אחד שכבר דיברתי עליו בעבר (או לפחות, על דברים קרובים מאוד אליו): לכל שדה יש סגור אלגברי (כלומר, שדה שמכיל אותו ובו לכל פולינום יש שורש).

לסיום, חידה נחמדה (וקשה), שגם בה יש צורך באקסיומת הבחירה (לפחות עד כמה שהבנתי מגעת) לצורך הפתרון: יש לנו קבוצה אינסופית של אנשים, שכל אחד מהם חובש כובע על ראשו, ורואה את הכובעים של כל האנשים (כן, כל האינסוף) מלבד זה של עצמו. כל כובע הוא או שחור או לבן – אין מידע נוסף על ההתפלגות שלהם.

בהינתן אות, כל האנשים חייבים להגיד תכף ומייד מה צבע הכובע שיש להם על הראש. הם אינם רשאים לדבר או להעביר אינפורמציה זה לזה בשום צורה שהיא. המידע היחיד שיש להם הוא הכובעים שהם רואים על הראש של האנשים האחרים, וההסכמות שהם הגיעו אליהן לפני שהמשחק התחיל והכובעים הושמו.

המטרה: שלכל היותר מספר סופי של אנשים יטעו בתשובה שיתנו.

בהצלחה!