5.5

מרחבים ותתי־מרחבים

ארבעת תתי־המרחבים היסודיים

The Four Fundamental Subspaces

ממקמים את מרחב השורות ומרחב האפס ב־ℝⁿ, ואת מרחב העמודות ומרחב האפס השמאלי ב־ℝᵐ, עם ממדים משלימים וזוגות אורתוגונליים.

יחידת לימוד עצמאיתשיעור 5 מתוך 6כ־70 דקות כולל תרגול4 מטרות למידה
  1. 1
    נקודת פתיחהמה כבר ידוע ומה השאלה?
  2. 2
    ניבוימה יקרה במקרה הפשוט?
  3. 3
    המחשהמה באמת משתנה בתמונה?
  4. 4
    ניסוח והצדקהשם, נוסחה ולמה היא נכונה
  5. 5
    בדיקהדוגמה, תרגול ומשוב
  6. 6
    העברהמקרה חדש והמשך המסלול

שאלה לפני נוסחה

מה אנחנו מנסים לראות?

לארגן את כל מה שלמדנו לתמונה אחת: למקם ולחשב את ארבעת המרחבים היסודיים של A, לקשר ביניהם באמצעות אורתוגונליות וממדים ולהפיק תעודת עקביות או סתירה ל־Ax=b.

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

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

לראות לפני שמחשבים · המקרה הפשוט ביותר

ארבעה מרחבים, שתי סביבות ושני זוגות ניצבים

ארבעת תתי־המרחבים מחלקים את מרחבי הקלט והפלט לזוגות אורתוגונליים עם ממדים משלימיםתחום ℝⁿטווח ℝᵐC(Aᵀ) · מרחב השורותdim=rN(A)dim=n−rשני המרחבים מאונכיםC(A) · מרחב העמודותdim=rN(Aᵀ) · האפס השמאליdim=m−rשני המרחבים מאונכיםA0Ar+(n−r)=n · r+(m−r)=mממד שווה אינו אומר שזה אותו מרחב: הסביבה קובעת
עקבו מהצורה הראשונית אל התוצאה

התרשים מציב ב־ℝⁿ את C(Aᵀ) מול N(A), וב־ℝᵐ את C(A) מול N(Aᵀ). החץ A מעביר את צד השורות אל מרחב העמודות ומוחק את N(A).

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

אחרי שראינו

בסוף השיעור תוכלו

  • למקם נכון את C(A),‏ N(A),‏ C(Aᵀ) ו־N(Aᵀ) במרחבי הקלט והפלט.
  • לחשב בסיס וממד לכל אחד מארבעת המרחבים ממטריצה אחת.
  • להוכיח את זוגות האורתוגונליות C(Aᵀ)⊥N(A) ו־C(A)⊥N(Aᵀ).
  • להשתמש בווקטור במרחב האפס השמאלי כתעודה לכך שאגף ימין אינו עקבי.

נותנים שמות למה שראינו

מושגים שנשתמש בהם

מרחב השורות C(Aᵀ)
ה־span של שורות A, כתובות כווקטורים ב־ℝⁿ; זהו החלק במרחב הקלט שהשורות מודדות.
מרחב האפס N(A)
הכיוונים ב־ℝⁿ שכל שורות A מודדות בהם אפס.
מרחב העמודות C(A)
כל הפלטים האפשריים Ax ב־ℝᵐ.
מרחב האפס השמאלי N(Aᵀ)
כל y∈ℝᵐ שמקיימים Aᵀy=0; הם מאונכים לכל עמודת A.
מכפלה פנימית
uᵀv=Σuᵢvᵢ; היא אפס כאשר הווקטורים מאונכים.
משלים אורתוגונלי V⊥
אוסף כל הווקטורים המאונכים לכל וקטור ב־V.
טרנספוז Aᵀ
המטריצה שמחליפה שורות בעמודות וממפה מ־ℝᵐ אל ℝⁿ.
תעודת אי־עקביות
וקטור y∈N(Aᵀ) שעבורו yᵀb≠0; הוא מוכיח ש־b∉C(A).
המשפט היסודי של האלגברה הלינארית
הקשרים הממדיים והאורתוגונליים בין ארבעת המרחבים של A.

מהמילים אל הסימנים

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

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

להצגת נוסחת המפתחקראו כל סימן כפעולה, לא כמשהו שצריך לשנןC(Aᵀ)=N(A)⊥; C(A)=N(Aᵀ)⊥

מרכיבים את הפעולות

מהתמונה אל הנוסחה — הגזירה, בלי לדלג על הצעדים

  1. מציירים את שתי סביבות המגורים

    A היא m×n ולכן מקבלת x∈ℝⁿ ומחזירה Ax∈ℝᵐ. מרחב השורות ומרחב האפס חיים בקלט; מרחב העמודות ומרחב האפס השמאלי חיים בפלט.

    ℝⁿ: C(Aᵀ),N(A) | ℝᵐ: C(A),N(Aᵀ)
  2. מחלצים ארבעה בסיסים

    עמודות pivot מקוריות נותנות C(A); שורות RREF הלא־אפסיות נותנות C(Aᵀ); פתרונות מיוחדים של Ax=0 נותנים N(A); ופתרונות Aᵀy=0 נותנים N(Aᵀ).

    RREF(A) for three spaces; RREF(Aᵀ) for left nullspace

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

  3. סופרים את ארבעת הממדים

    לשני המרחבים הנראים יש אותו ממד r. האפסויות משלימות את ממדי סביבת הקלט והפלט.

    dim C(A)=dim C(Aᵀ)=r; dim N(A)=n−r; dim N(Aᵀ)=m−r
  4. מוכיחים אורתוגונליות בצד הקלט

    אם x∈N(A), כל רכיב של Ax הוא מכפלה פנימית של שורה ב־x ושווה אפס. לכן x מאונך לכל שורה ולכל צירוף שלהן.

    Ax=0 ⇒ C(Aᵀ)⊥N(A)
  5. מוכיחים אורתוגונליות בצד הפלט

    אם y∈N(Aᵀ), אז aⱼᵀy=0 לכל עמודה aⱼ. לכן y מאונך לכל C(A).

    Aᵀy=0 ⇒ C(A)⊥N(Aᵀ)
  6. הממדים הופכים אורתוגונליות להשלמה

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

    C(Aᵀ)=N(A)⊥, C(A)=N(Aᵀ)⊥
  7. מפיקים מבחן עקביות ותעודה

    b שייך ל־C(A) בדיוק כאשר הוא מאונך לכל y∈N(Aᵀ). אם מוצאים y עם Aᵀy=0 אך yᵀb≠0, קיבלנו הוכחה קצרה שאין פתרון.

    Ax=b solvable ⇔ yᵀb=0 for every y∈N(Aᵀ)
  8. קושרים גם את AᵀA למרחב האפס

    אם AᵀAx=0, כפל משמאל ב־xᵀ נותן נורמה בריבוע השווה לאפס, ולכן Ax=0. הכיוון ההפוך מיידי.

    xᵀAᵀAx=‖Ax‖² ⇒ N(AᵀA)=N(A)

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

עכשיו רואים את השיטה בפעולה

דוגמאות פתורות, צעד אחר צעד

דוגמה 1

ארבעת המרחבים של מטריצה מדרגה אחת

חשבו את ארבעת המרחבים של A=[[1,2,1],[2,4,2]].

  1. השורה השנייה היא פי 2 מהראשונה, ולכן r=1 ו־RREF(A)=[[1,2,1],[0,0,0]].

  2. C(A)=span{(1,2)} מעמודת ה־pivot המקורית; C(Aᵀ)=span{(1,2,1)} מן השורה הלא־אפסית.

  3. x₁+2x₂+x₃=0 נותנת N(A)=span{(−2,1,0),(−1,0,1)}.

  4. Aᵀy=0 נותנת y₁+2y₂=0, ולכן N(Aᵀ)=span{(−2,1)}.

  5. הממדים הם 1,1,2,1 ומתאימים ל־r, r, n−r, m−r.

התוצאה ומה היא אומרת

כל וקטור במרחב השורות מאונך לשני כיווני האפס, וכל עמודה מאונכת ל־(−2,1).

C(Aᵀ)⊥N(A), C(A)⊥N(Aᵀ)
דוגמה 2

וקטור אחד מוכיח שאין פתרון

עבור אותה A בדקו b=(1,2) ו־c=(0,1).

  1. b הוא העמודה הראשונה, ולכן Ax=b פתירה מיד.

  2. ווקטור האפס השמאלי הוא y=(−2,1), ואכן yᵀb=−2+2=0.

  3. עבור c מתקבל yᵀc=1≠0.

  4. אילו Ax=c היה פתיר, היינו מקבלים yᵀAx=(Aᵀy)ᵀx=0, בסתירה ל־yᵀc=1.

התוצאה ומה היא אומרת

y הוא תעודת אי־עקביות: הוא מאפס כל פלט אפשרי של A אך אינו מאפס את c.

Aᵀy=0, yᵀc≠0 ⇒ c∉C(A)

איפה זה פוגש את העולם

יישום

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

מלכודת נפוצה

מה כדאי לבדוק

פעולות שורה שומרות על מרחב השורות ועל N(A), אך לא על C(A) או על N(Aᵀ). שוויון ממדי מרחב השורות והעמודות גם אינו אומר שהם אותו מרחב; במטריצה מלבנית הם אפילו חיים במרחבים שונים.

בודקים שהרעיון יושב

תרגול ומשוב

בדיקת הבנה

בחרו תשובה ורק אז בדקו את עצמכם

A היא 3×5 ו־rank(A)=2. מהו ממד N(Aᵀ)?

בחרו אחת מהאפשרויות כדי להמשיך.

עכשיו אתם

אתגר קצר

השלימו את תמונת מטריצת העוגן A=[[2,4,6,4],[2,5,7,6],[2,3,5,2]]: מצאו בסיס וממד לכל אחד מארבעת המרחבים, והשתמשו ב־N(Aᵀ) כדי לבדוק את b=(4,3,5) ואת c=(4,3,4).

רמז ראשון

שלושה בסיסים כבר הופיעו בשיעורים הקודמים. עבור המרחב הרביעי בדקו ש־y=(−2,1,1) מקיים Aᵀy=0.

הצגת דרך הפתרון
  1. rank(A)=2. בסיס ל־C(A) הוא {(2,2,2),(4,5,3)}, ובסיס ל־C(Aᵀ) הוא {(1,0,1,−2),(0,1,1,2)}.
  2. בסיס ל־N(A) הוא {(−1,−1,1,0),(2,−2,0,1)}. מכיוון ש־m−r=1 והווקטור (−2,1,1) מקיים Aᵀy=0, הוא בסיס ל־N(Aᵀ).
  3. הממדים הם 2,2,2,1 בהתאמה ל־C(A),‏ C(Aᵀ),‏ N(A),‏ N(Aᵀ). בצד הקלט 2+2=4 ובצד הפלט 2+1=3.
  4. ל־b מתקבל yᵀb=−8+3+5=0 ולכן b∈C(A); אכן b=4a₁−a₂.
  5. ל־c מתקבל yᵀc=−8+3+4=−1≠0. זהו אישור קצר לכך שאין x עם Ax=c.

מימוש הנושא

קוד שאפשר לקחת לניסוי

הקוד מיישם את אותו רעיון מתמטי. ב־JavaScript אפשר להריץ אותו כאן; גרסת Python זמינה להשוואה ולהעתקה.

הקשר למתמטיקה

fourSubspaces מפעילה RREF על A ועל Aᵀ, שואבת כל בסיס מן המקור הנכון ומחשבת שגיאות מכפלה פנימית בין זוגות המרחבים שאמורים להיות מאונכים.

פלט צפוי

באתגר תתקבל דרגה 2, ממדים 2,2,2,1 ושגיאות אורתוגונליות קרובות לאפס. וקטור האפס השמאלי (−2,1,1) יפסול את c.

ניסוי המשך

החליפו את c ב־c−((yᵀc)/(yᵀy))y. בדקו שהווקטור המתוקן מאונך ל־N(Aᵀ) ולכן נכנס ל־C(A).

מהרעיון אל הקוד

מימוש חישובי

function transpose(A) {
  return A[0].map((_, j) => A.map((row) => row[j]));
}

function rref(input, relativeTolerance=1e-12) {
  const matrix = input.map((row) => row.map(Number));
  const rowScales = matrix.map((row) => Math.max(...row.map(Math.abs)));
  const pivots = [];
  let pivotRow = 0;
  for (let column = 0;
       column < matrix[0].length && pivotRow < matrix.length;
       column += 1) {
    let best = -1;
    let bestRatio = 0;
    for (let row = pivotRow; row < matrix.length; row += 1) {
      const ratio = rowScales[row] === 0
        ? 0
        : Math.abs(matrix[row][column])/rowScales[row];
      if (ratio > bestRatio) {
        bestRatio = ratio;
        best = row;
      }
    }
    if (best === -1 || bestRatio <= relativeTolerance) continue;
    [matrix[pivotRow], matrix[best]] = [matrix[best], matrix[pivotRow]];
    [rowScales[pivotRow], rowScales[best]] = [rowScales[best], rowScales[pivotRow]];
    const scale = matrix[pivotRow][column];
    matrix[pivotRow] = matrix[pivotRow].map((value) => value/scale);
    for (let row = 0; row < matrix.length; row += 1) {
      if (row === pivotRow) continue;
      const factor = matrix[row][column];
      matrix[row] = matrix[row].map(
        (value, j) => value - factor*matrix[pivotRow][j],
      );
    }
    pivots.push(column);
    pivotRow += 1;
  }
  return { matrix, pivots };
}

function nullspaceFromRref(matrix, pivots) {
  const columns = matrix[0].length;
  const free = Array.from({ length: columns }, (_, j) => j)
    .filter((j) => !pivots.includes(j));
  return free.map((freeColumn) => {
    const vector = Array(columns).fill(0);
    vector[freeColumn] = 1;
    pivots.forEach((pivot, row) => {
      vector[pivot] = -matrix[row][freeColumn];
    });
    return vector;
  });
}

function fourSubspaces(A) {
  const reduced = rref(A);
  const reducedTranspose = rref(transpose(A));
  const rank = reduced.pivots.length;
  return {
    rowSpace: reduced.matrix.slice(0, rank),
    columnSpace: reduced.pivots.map(
      (column) => A.map((row) => row[column]),
    ),
    nullspace: nullspaceFromRref(reduced.matrix, reduced.pivots),
    leftNullspace: nullspaceFromRref(
      reducedTranspose.matrix,
      reducedTranspose.pivots,
    ),
    dimensions: {
      row: rank,
      column: rank,
      nullspace: A[0].length - rank,
      leftNullspace: A.length - rank,
    },
  };
}

const dot = (u, v) =>
  u.reduce((sum, value, i) => sum + value*v[i], 0);

function maxPairDot(first, second) {
  const values = first.flatMap((u) => second.map((v) => Math.abs(dot(u, v))));
  return values.length ? Math.max(...values) : 0;
}

const A = [
  [2, 4, 6, 4],
  [2, 5, 7, 6],
  [2, 3, 5, 2],
];
const spaces = fourSubspaces(A);
console.log({
  ...spaces,
  rowNullError: maxPairDot(spaces.rowSpace, spaces.nullspace),
  columnLeftError: maxPairDot(spaces.columnSpace, spaces.leftNullspace),
});

לפני שממשיכים

מה לוקחים מהשיעור

  • ארבעת המרחבים מתחלקים לשניים ב־ℝⁿ ושניים ב־ℝᵐ; תמיד בודקים קודם היכן הווקטורים חיים.
  • ממדיהם נקבעים כולם מן r:‏ r, n−r, r, m−r.
  • מרחב השורות הוא המשלים האורתוגונלי של N(A), ומרחב העמודות הוא המשלים האורתוגונלי של N(Aᵀ).
  • וקטור y∈N(Aᵀ) עם yᵀb≠0 הוא תעודה מיידית לכך ש־Ax=b אינה עקבית.

משימת מעבדה לשיעור הזה

תחנה 3 — מפת ארבעת המרחבים

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

לפתיחת התחנה
מקורות להעמקה בלבד — השיעור עומד בפני עצמו

מדריך המרצים: עמ׳ 155–158

ספר הלימוד: עמ׳ 300–312