משוואות לינאריות ומטריצות הפוכות
כפל מטריצות
Matrix Multiplication
מחשבים AB בארבע זוויות ורואים מדוע זו הרכבת פעולות שבה B פועלת ראשונה.
- 1נקודת פתיחהמה כבר ידוע ומה השאלה?
- 2ניבוימה יקרה במקרה הפשוט?
- 3המחשהמה באמת משתנה בתמונה?
- 4ניסוח והצדקהשם, נוסחה ולמה היא נכונה
- 5בדיקהדוגמה, תרגול ומשוב
- 6העברהמקרה חדש והמשך המסלול
שאלה לפני נוסחה
מה אנחנו מנסים לראות?
להחליט מתי AB מוגדרת, לחשב אותה לפי שורה מול עמודה, ולפרש את סדר הכפל כהרכבת שתי העתקות; בסוף נכיר גם שתי תצוגות נוספות של אותה מכפלה.
מטריצה היא מכונה לינארית. במכפלה AB המכונה B פועלת ראשונה ו־A מקבלת את הפלט שלה. חוק שורה־מול־עמודה אינו מתכון שרירותי: הוא בדיוק החוק שמאפשר לשתי המכונות להתנהג כמכונה אחת.
לפני ההמחשה: קראו רק את הכותרת “אותן שתי פעולות, שתי תוצאות”. מה לדעתכם ישתנה, מה יישאר קבוע, ואיזה סימן בתמונה יוכל להפריך את הניבוי?
לראות לפני שמחשבים · המקרה הפשוט ביותר
אותן שתי פעולות, שתי תוצאות
ההמחשה משווה את ריבוע היחידה תחת SR — תחילה השתקפות R ואז הטיה S — מול RS, שבו ההטיה פועלת לפני ההשתקפות.
מה כדאי לגלות: עקבו אחר e₂: SR·e₂=(−1,−1) ואילו RS·e₂=(1,−1). ההבדל החזותי מזכיר שבמכפלה AB קוראים את הפעולות מימין לשמאל.
אחרי שראינו
בסוף השיעור תוכלו
- לבדוק התאמת ממדים ולקבוע את ממדי התוצאה לפני חישוב כלשהו.
- לחשב כל איבר של AB כמכפלה פנימית של שורה מ־A ועמודה מ־B.
- להסביר מדוע ב־AB המטריצה B פועלת ראשונה ולוודא A(Bx)=(AB)x.
- להשתמש בתצוגת העמודות ובסכום מכפלות חיצוניות כדי להבין את מבנה התוצאה.
נותנים שמות למה שראינו
מושגים שנשתמש בהם
- ממדי מטריצה
- הכתיב m×n מציין m שורות ו־n עמודות; הוא קובע איזה וקטור יכול להיכנס ולאיזה ממד ייצא.
- ממדים פנימיים
- מספר העמודות של A ומספר השורות של B. המכפלה AB מוגדרת רק כאשר שני המספרים שווים.
- מכפלה פנימית
- סכום מכפלות של רכיבים תואמים, למשל (a,b)·(c,d)=ac+bd.
- מכפלת מטריצות
- המטריצה AB שאיבר (i,j) שלה הוא המכפלה הפנימית של שורה i ב־A עם עמודה j ב־B.
- הרכבה
- ביצוע שתי פעולות בזו אחר זו. ב־AB מפעילים תחילה את B ואחר כך את A.
- מטריצת היחידה I
- מטריצה ריבועית עם 1 באלכסון ו־0 מחוצה לו; היא משאירה כל וקטור ללא שינוי.
- אי־חילופיות
- העובדה שבדרך כלל AB≠BA; שינוי סדר הפעולות משנה את התוצאה ולעיתים אחד הסדרים כלל אינו מוגדר.
- מכפלה חיצונית
- עבור עמודה u ושורה vᵀ, הטבלה uvᵀ מכילה בכל תא את מכפלת רכיב מ־u ברכיב מ־v.
מהמילים אל הסימנים
כותבים את הפעולה שכבר ראינו
פתחו את הנוסחה רק אחרי שאתם יכולים לומר במילים מה כל פעולה אמורה לעשות. בשלב הבא נצדיק אותה צעד אחר צעד.
להצגת נוסחת המפתח
קראו כל סימן כפעולה, לא כמשהו שצריך לשנן(AB)ᵢⱼ = Σₖaᵢₖbₖⱼמרכיבים את הפעולות
מהתמונה אל הנוסחה — הגזירה, בלי לדלג על הצעדים
בודקים את מסלול הממדים
אם B מעבירה וקטור מ־ℝᵖ אל ℝⁿ ו־A מקבלת וקטור מ־ℝⁿ ומחזירה וקטור ב־ℝᵐ, אפשר לחבר את שתי הפעולות. לכן A היא m×n, B היא n×p והתוצאה AB היא m×p.
B: ℝᵖ→ℝⁿ, A: ℝⁿ→ℝᵐ ⇒ AB: ℝᵖ→ℝᵐמחשבים תא אחד: שורה מול עמודה
האיבר במקום (i,j) חייב לתאר כיצד עמודת הקלט j של B תורמת לרכיב הפלט i של A. מכפילים רכיבים תואמים ומחברים.
(AB)ᵢⱼ=Σₖ aᵢₖbₖⱼממלאים את כל טבלת התוצאה
לכל שורה של A ולכל עמודה של B מחשבים מכפלה פנימית אחת. מספר הזוגות הוא בדיוק m·p, ולכן מתקבלת מטריצה m×p.
A_(m×n)B_(n×p)=(AB)_(m×p)קוראים את העמודות השלמות
עמודה j של AB היא A כפול עמודה j של B. זו דרך יעילה להבין לאן ההרכבה שולחת כל עמודת קלט בלי לחשב תאים מבודדים.
B=[b₁ ⋯ bₚ] ⇒ AB=[Ab₁ ⋯ Abₚ]הכפל הוא הרכבה מימין לשמאל
כאשר מפעילים AB על x, קודם B בונה את Bx ורק אז A פועלת על התוצאה. בדיקת הממדים מסבירה גם את הסדר וגם את השוויון האסוציאטיבי.
A(Bx)=(AB)x, (AB)C=A(BC)הסדר חשוב
כפל מטריצות הוא אסוציאטיבי ודיסטריבוטיבי, אך אינו חילופי. שתי פעולות גאומטריות בסדר הפוך עשויות לתת תמונות שונות, ולעיתים BA אינו מוגדר אף ש־AB כן.
A(B+C)=AB+AC, אך בדרך כלל AB≠BAהרחבה: בונים את AB בשכבות
אפשר לחבר מכפלות חיצוניות: עמודה k של A כפול שורה k של B יוצרת שכבה אחת, וסכום השכבות הוא AB. זהו מבט מבני נוסף; המושג הפורמלי דרגה יילמד בפרק 5.
AB=Σₖ aₖrₖ
עכשיו רואים את השיטה בפעולה
דוגמאות פתורות, צעד אחר צעד
מכפלה מלבנית מלאה
חשבו AB עבור A=[[1,2,0],[−1,1,3]] ו־B=[[2,0],[1,1],[0,−2]].
A היא 2×3 ו־B היא 3×2. הממדים הפנימיים 3 מתאימים, ולכן AB מוגדרת וגודלה 2×2.
התא (1,1) הוא (1,2,0)·(2,1,0)=4; התא (1,2) הוא (1,2,0)·(0,1,−2)=2.
התא (2,1) הוא (−1,1,3)·(2,1,0)=−1; התא (2,2) הוא (−1,1,3)·(0,1,−2)=−5.
בודקים גם לפי עמודות: העמודות של AB הן A(2,1,0)ᵀ ו־A(0,1,−2)ᵀ.
כל תא הוא שורה מול עמודה, והממדים החיצוניים קובעים טבלה 2×2.
AB=[[4,2],[−1,−5]]אותן פעולות בסדר שונה
עבור S=[[1,1],[0,1]] ו־R=[[1,0],[0,−1]], השוו בין SR ובין RS על e₂=(0,1).
מחשבים SR=[[1,−1],[0,−1]] ו־RS=[[1,1],[0,−1]].
ב־SR הווקטור פוגש תחילה את R: e₂ נהפך ל־(0,−1), ואז S שולחת אותו ל־(−1,−1).
ב־RS הווקטור פוגש תחילה את S: e₂ נהפך ל־(1,1), ואז R שולחת אותו ל־(1,−1).
שתי התוצאות שונות, ולכן שינוי סדר ההרכבה משנה את הפעולה.
כפל מטריצות אינו חילופי משום שגם סדר הפעולות הגאומטריות אינו חילופי.
SR·e₂=(−1,−1), RS·e₂=(1,−1)איפה זה פוגש את העולם
יישום
בגרפיקה ממוחשבת אפשר לתת ל־B לשנות קנה מידה ול־A לסובב. עמודות AB מראות היכן נוחתים וקטורי הבסיס לאחר שתי הפעולות, ושינוי הסדר משנה את הצורה.
מלכודת נפוצה
מה כדאי לבדוק
להכפיל איבר מול איבר או להעביר את חוקי הכפל של מספרים ישירות למטריצות. כפל Hadamard הוא פעולה אחרת; בכפל מטריצות בודקים ממדים פנימיים וזוכרים שהמטריצה הימנית פועלת ראשונה.
בודקים שהרעיון יושב
תרגול ומשוב
בדיקת הבנה
בחרו תשובה ורק אז בדקו את עצמכם
בחרו אחת מהאפשרויות כדי להמשיך.
עכשיו אתם
אתגר קצר
נתונות רק המידות A: 2×3, B: 3×2 ו־C: 2×4. קבעו אילו מן הביטויים AB, BA, AC, CA, (AB)C ו־A(BC) מוגדרים, ומה מידת כל תוצאה מוגדרת.
רמז ראשון
בכל מכפלה בדקו קודם את שני הממדים שנפגשים באמצע. בביטוי תלת־מטריצי חשבו תחילה את מידת הסוגריים ואז בדקו את המכפלה השנייה.
הצגת דרך הפתרון
- AB מוגדרת: (2×3)(3×2) נותן 2×2. גם BA מוגדרת: (3×2)(2×3) נותן 3×3.
- AC אינה מוגדרת כי 3≠2; גם CA אינה מוגדרת כי 4≠2.
- (AB)C מוגדרת: AB היא 2×2, ולכן (2×2)(2×4) נותן 2×4.
- BC היא 3×4, ולכן A(BC) היא (2×3)(3×4), גם כן 2×4. כאשר הערכים עצמם נתונים, האסוציאטיביות מבטיחה ששתי דרכי הקיבוץ נותנות אותה מטריצה.
מימוש הנושא
קוד שאפשר לקחת לניסוי
הקוד מיישם את אותו רעיון מתמטי. ב־JavaScript אפשר להריץ אותו כאן; גרסת Python זמינה להשוואה ולהעתקה.
multiplicationViews מחשבת את אותה תוצאה לפי תאים, לפי עמודות, לפי שורות ולפי שכבות חיצוניות; אחר כך הקוד משווה בין הפעלה ישירה להרכבה.
כל ארבע התצוגות יחזירו [[4,2],[−1,−5]], והווקטורים direct ו־composed יהיו זהים.
החליפו בין A ל־B ובדקו את BA. השוו את הממדים ואת הערכים ל־AB והסבירו מדוע אין סיבה שיהיו שווים.
מהרעיון אל הקוד
מימוש חישובי
function shape(M, name="matrix") {
if (!Array.isArray(M) || !M.length || !Array.isArray(M[0]) || !M[0].length) {
throw new TypeError(name + " must be a nonempty matrix");
}
const columns = M[0].length;
if (!M.every((row) =>
Array.isArray(row) &&
row.length === columns &&
row.every(Number.isFinite))) {
throw new TypeError(name + " must be rectangular and numeric");
}
return [M.length, columns];
}
function matmul(A, B) {
const [m, n] = shape(A, "A");
const [rows, p] = shape(B, "B");
if (n !== rows) {
throw new RangeError(
"inner dimensions differ: " + m + "x" + n +
" times " + rows + "x" + p,
);
}
return A.map((row) =>
Array.from({ length: p }, (_, j) =>
row.reduce((sum, value, k) => sum + value*B[k][j], 0),
),
);
}
function outer(u, v) {
return u.map((x) => v.map((y) => x*y));
}
function multiplicationViews(A, B) {
const [m, n] = shape(A, "A");
const [rows, p] = shape(B, "B");
if (n !== rows) throw new RangeError("inner dimensions must agree");
const byEntries = matmul(A, B);
const productColumns = Array.from({ length: p }, (_, j) =>
matmul(A, B.map((row) => [row[j]])).map((row) => row[0]),
);
const byColumns = Array.from(
{ length: m },
(_, i) => productColumns.map((column) => column[i]),
);
const byRows = A.map((row) => matmul([row], B)[0]);
const byOuter = Array.from({ length: m }, () => Array(p).fill(0));
for (let k = 0; k < n; k += 1) {
const piece = outer(A.map((row) => row[k]), B[k]);
for (let i = 0; i < m; i += 1) {
for (let j = 0; j < p; j += 1) byOuter[i][j] += piece[i][j];
}
}
return { byEntries, byColumns, byRows, byOuter };
}
const A = [[1, 2, 0], [-1, 1, 3]];
const B = [[2, 0], [1, 1], [0, -2]];
const views = multiplicationViews(A, B);
const expected = JSON.stringify(views.byEntries);
if (!Object.values(views).every((view) => JSON.stringify(view) === expected)) {
throw new Error("the four multiplication views must agree");
}
console.log(views);
const x = [[3], [-1]];
console.log({
direct: matmul(matmul(A, B), x),
composed: matmul(A, matmul(B, x)),
});def shape(M, name="matrix"):
if not isinstance(M, list) or not M or not M[0]:
raise ValueError(f"{name} must be a nonempty matrix")
columns = len(M[0])
if any(not isinstance(row, list) or len(row) != columns for row in M):
raise ValueError(f"{name} must be rectangular")
return len(M), columns
def matmul(A, B):
m, n = shape(A, "A")
rows, p = shape(B, "B")
if n != rows:
raise ValueError(
f"inner dimensions differ: {m}x{n} times {rows}x{p}"
)
return [
[
sum(A[i][k]*B[k][j] for k in range(n))
for j in range(p)
]
for i in range(m)
]
def outer(u, v):
return [[x*y for y in v] for x in u]
def multiplication_views(A, B):
m, n = shape(A, "A")
rows, p = shape(B, "B")
if n != rows:
raise ValueError("inner dimensions must agree")
by_entries = matmul(A, B)
product_columns = [
[row[0] for row in matmul(A, [[B[k][j]] for k in range(n)])]
for j in range(p)
]
by_columns = [
[product_columns[j][i] for j in range(p)]
for i in range(m)
]
by_rows = [matmul([row], B)[0] for row in A]
by_outer = [[0 for _ in range(p)] for _ in range(m)]
for k in range(n):
piece = outer([A[i][k] for i in range(m)], B[k])
for i in range(m):
for j in range(p):
by_outer[i][j] += piece[i][j]
return {
"by_entries": by_entries,
"by_columns": by_columns,
"by_rows": by_rows,
"by_outer": by_outer,
}
A = [[1, 2, 0], [-1, 1, 3]]
B = [[2, 0], [1, 1], [0, -2]]
views = multiplication_views(A, B)
assert all(view == views["by_entries"] for view in views.values())
print(views)
x = [[3], [-1]]
print({
"direct": matmul(matmul(A, B), x),
"composed": matmul(A, matmul(B, x)),
})לפני שממשיכים
מה לוקחים מהשיעור
- בודקים ממדים לפני שמכפילים: הפנימיים חייבים להתאים והחיצוניים קובעים את התוצאה.
- כל איבר ב־AB הוא מכפלה פנימית של שורה ב־A ועמודה ב־B.
- ב־AB פועלת B ראשונה; לכן הסדר מייצג סדר הרכבה ממשי ואי אפשר להחליפו כרצוננו.
- תצוגת העמודות והמכפלות החיצוניות הן דרכים נוספות לקרוא את אותה מכפלה, לא פעולות חדשות.
משימת מעבדה לשיעור הזה
תחנה 3 — הרכבה וסדר פעולות
בחרו שתי העתקות, נבאו את מסלול הממדים ואת סדר הפעולה, והשוו חזותית בין AB, BA ובין הפעלה צעד אחר צעד.
מקורות להעמקה בלבד — השיעור עומד בפני עצמו
מדריך המרצים: עמ׳ 110–117
ספר הלימוד: עמ׳ 219–227