חזור לתיקייה: 02340125 - אלגוריתמים נומריים

3 - אורתוגונליות ופירוק QR

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה
  • כללי
  • מטריצות אורתונומרליות
  • תהליך Gram-Schmidt
  • אלגוריתם # 1
  • אלגוריתם # 2
  • אלגוריתם #3
  • סיבוכיות האלגוריתמים
  • פירוק QR
  • פירוק QR למטריצות שאינן ריבועיות
  • שימושי הפירוק
  • שימוש ב-QR לפתרון מערכות משוואות
  • מקרה 1
  • מקרה 2
  • מקרה 3
  • שימוש בפירוק לפתרון בעיית ריבועים פחותים
  • סיבוכיות התהליך הזה
  • סדרה של בעיות ריבועים פחותים

3 - אורתוגונליות ופירוק QR

02340125

אלגוריתמים נומריים

רשימות הרצאה לקריאה בשבת

אורתוגונליות ופירוק QR

הופק מתוך תקיית התואר של שקד

uni-folder.vercel.app

אנו נעסוק במטריצות אורתונורמליות ונבין את חשיבותן. נציג את פירוק QRQRQR למטריצות ואת השימוש בו לפתרון בעיות ריבועים פחותים.
נניח שנתונה לנו המטריצה AAA בגודל n×mn\times mn×m כאשר n>mn>mn>m מדרגה מלאה ויחד עמה נתון גם וקטור שרירותי b‾\underline{b}b​.
זוהי בעיית ריבועים פחותים המוגדרת מהצמד AAA ו-b‾\underline{b}b​ ומציאת הפתרון לפי הנוסחאות הסגורות לוקח הרבה עבודה.
נניח וידוע שהעמודות אורתונורמליות? כלומר, מתקיים a‾jta‾k={1j=k0j≠k\underline{a}_{j}^t\underline{a}_{k}=\begin{cases}1 & j=k\\ 0 & j \neq k\end{cases}a​jt​a​k​={10​j=kj=k​ (פעולה כזו בין שני וקטורים נקראת מכפלה פנימית) אזי:

AtA=(−a‾1t−−a‾2t−⋮−a‾mt−)(∣∣∣a‾1a‾2…a‾m∣∣∣)=(a‾1ta‾1a‾1ta‾2a‾1ta‾3…a‾1ta‾ma‾2ta‾1a‾2ta‾2a‾2ta‾3…a‾2ta‾ma‾3ta‾1a‾3ta‾2a‾3ta‾3…a‾3ta‾m⋮⋮⋮⋱⋮a‾mta‾1a‾mta‾2a‾mta‾3…a‾mta‾m)=(100…0010…0001…0⋮⋮⋮⋱⋮000…1)\begin{align*} A^tA&=\begin{pmatrix} - & \underline{a}_{1}^t & - \\ - & \underline{a}_{2}^t & - \\ & \vdots \\ - & \underline{a}_{m}^t & - \end{pmatrix}\begin{pmatrix} \vert & \vert & & \vert \\ \underline{a}_{1} & \underline{a}_{2} & \dots & \underline{a}_{m} \\ \vert & \vert & & \vert \end{pmatrix}=\begin{pmatrix} \underline{a}_{1}^t\underline{a}_{1} & \underline{a}_{1}^t\underline{a}_{2} & \underline{a}_{1}^t\underline{a}_{3} & \dots & \underline{a}_{1}^t\underline{a}_{m} \\ \underline{a}_{2}^t\underline{a}_{1} & \underline{a}_{2}^t\underline{a}_{2} & \underline{a}_{2}^t\underline{a}_{3} & \dots & \underline{a}_{2}^t\underline{a}_{m} \\ \underline{a}_{3}^t\underline{a}_{1} & \underline{a}_{3}^t\underline{a}_{2} & \underline{a}_{3}^t\underline{a}_{3} & \dots & \underline{a}_{3}^t\underline{a}_{m} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \underline{a}_{m}^t\underline{a}_{1} & \underline{a}_{m}^t\underline{a}_{2} & \underline{a}_{m}^t\underline{a}_{3} & \dots & \underline{a}_{m}^t\underline{a}_{m} \end{pmatrix} \\ &=\begin{pmatrix} 1 & 0 & 0 & \dots & 0 \\ 0 & 1 & 0 & \dots & 0 \\ 0 & 0 & 1 & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \dots & 1 \end{pmatrix} \end{align*}AtA​=​−−−​a​1t​a​2t​⋮a​mt​​−−−​​​∣a​1​∣​∣a​2​∣​…​∣a​m​∣​​=​a​1t​a​1​a​2t​a​1​a​3t​a​1​⋮a​mt​a​1​​a​1t​a​2​a​2t​a​2​a​3t​a​2​⋮a​mt​a​2​​a​1t​a​3​a​2t​a​3​a​3t​a​3​⋮a​mt​a​3​​………⋱…​a​1t​a​m​a​2t​a​m​a​3t​a​m​⋮a​mt​a​m​​​=​100⋮0​010⋮0​001⋮0​………⋱…​000⋮1​​​

כעת המטריצה AtAA^tAAtA לא צריכה חישוב או היפוך ואז נקבל:

x‾∗=(AtA)−1Atb‾=Atb‾=(a‾1tb‾a‾2tb‾⋮a‾mtb‾)\underline{x}^*=(A^tA)^{-1}A^t\underline{b}=A^t\underline{b}=\begin{pmatrix} \underline{a}_{1}^t\underline{b} \\ \underline{a}_{2}^t\underline{b} \\ \vdots \\ \underline{a}_{m}^t\underline{b} \end{pmatrix}x​∗=(AtA)−1Atb​=Atb​=​a​1t​b​a​2t​b​⋮a​mt​b​​​

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

p(x‾∗)=b‾tb‾−(x‾∗)t(AtA)(x‾∗)=∥b‾∥22−∥Atb‾∥22p(\underline{x}^*)=\underline{b}^t\underline{b}-(\underline{x}^*)^t(A^tA)(\underline{x}^*)=\left\lVert \underline{b} \right\rVert _{2}^2-\left\lVert A^t\underline{b} \right\rVert _{2}^2p(x​∗)=b​tb​−(x​∗)t(AtA)(x​∗)=∥b​∥22​−​Atb​​22​
מסקנה

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

משפט

בהינתן סט של m‾\underline{m}m​ וקטורים a‾k\underline{a}_{k}a​k​ אורתונורמליים ממימד nnn (כך ש-n>mn>mn>m), הם בכרח בת"ל.

הוכחה:
יהיו סקלרים c1,…,cm∈Fc_{1},\dots,c_{m}\in \mathbb{F}c1​,…,cm​∈F כך ש:

∑k=1mcka‾k=0‾\sum_{k=1}^m c_{k}\underline{a}_{k}=\underline{0}k=1∑m​ck​a​k​=0​

נכפיל משוואה זו ב-a‾j\underline{a}_{j}a​j​ משוחלף משמאל עבור j=1,2,3,…,nj=1,2,3,\dots,nj=1,2,3,…,n ואז נקבל:

0=a‾jt(∑k=1mcka‾k)=∑k=1mcka‾jta‾k=↓הגדרת אורטונורמליותcj0=\underline{a}_{j}^t\left( \sum_{k=1}^m c_{k}\underline{a}_{k} \right)=\sum_{k=1}^m c_{k}\underline{a}_{j}^t \underline{a}_{k} \underset{\begin{matrix} \downarrow \\ \R{\text{הגדרת אורטונורמליות}} \end{matrix}}{=} c_{j}0=a​jt​(k=1∑m​ck​a​k​)=k=1∑m​ck​a​jt​a​k​↓הגדרת אורטונורמליות​=​cj​

לכן מתקיים: ci=0c_{i}=0ci​=0 לכל 1≤i≤n1\leq i \leq n1≤i≤n ולכן, לפי הגדרה, הוקטורים בת"ל.
∎

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

הגדרה 1 (וקטורים אורתוגונליים)

יהי VVV מ"ו מעל שדה F\mathbb{F}F בעל מכפלה פנימית. יהיו u≠v∈Vu\neq v \in Vu=v∈V.
הוקטורים u,vu,vu,v יקראו אורתוגונליים זה לזה אם ⟨u,v⟩=0\langle u,v \rangle=0⟨u,v⟩=0.

הגדרה 2 (בסיס אורתונורמלי)

יהי VVV מ"ו מעל שדה F\mathbb{F}F בעל מכפלה פנימית ויהי B={v‾1,…,v‾n}B=\left\{ \underline{v}_{1},\dots,\underline{v}_{n} \right\}B={v​1​,…,v​n​} בסיס ל-VVV.
BBB יקרא בסיס אורתונורמלי אם הוא מקיים את שני התנאים הבאים:

  1. כל שני וקטורים שונים ב-BBB אורתוגונליים. (כלומר, ∀i,j≤n:  ⟨v‾i,v‾j⟩=0\forall i,j \leq n:\; \langle \underline{v}_{i},\underline{v}_{j}\rangle =0∀i,j≤n:⟨v​i​,v​j​⟩=0)
  2. הנורמה של כל וקטור בקבוצה שווה בדיוק ל-1. (כלומר, ∀i≤n:  ⟨v‾i,v‾i⟩=1=∥v‾i∥\forall i\leq n:\; \langle \underline{v}_{i},\underline{v}_{i}\rangle=1=\left\lVert \underline{v}_{i} \right\rVert∀i≤n:⟨v​i​,v​i​⟩=1=∥v​i​∥)

הגדרה 3 (מטריצה אורתונורמלית)

מטריצה QQQ נקראת אורתונורמלית אם היא ריבועית ועמודותיה מהוות בסיס אורתונורמלי למלוא המרחב Rn\mathbb{R}^nRn.

הערה

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

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

QtQ=InQ^tQ=I_{n}QtQ=In​

זאת לפי מה שראינו ממקודם.
לכן מתקיים:

Q−1=QtQ^{-1}=Q^tQ−1=Qt

איזה יופי, הא?

משפט

לכל מטריצה אורתונורמלית QQQ מתקיים:

  1. QQQ הפיכה.
  2. ההיפוך שלה הינו השחלוף שלה: Q−1=QtQ^{-1}=Q^tQ−1=Qt.

הוכחה: ראינו הנ"ל. (אפשר לפרמל כמובן)

משפט

תהי QQQ מטריצה.

QtQ=I  ⟺   אורתונורמליתQQ^tQ=I \iff \R{\text{ אורתונורמלית}} QQtQ=I⟺ אורתונורמליתQ

הוכחה:
תהי QQQ מטריצה ריבועית שהעמודות שלה הן הווקטורים q‾1,…,q‾n\underline{q}_{1},\dots ,\underline{q}_{n}q​1​,…,q​n​.

∀1≤i,j≤n:  (QtQ)ij=q‾itq‾j=⟨q‾i,q‾j⟩\forall 1\leq i,j \leq n:\; (Q^tQ)_{ij}=\underline{q}_{i}^t\underline{q}_{j}=\langle \underline{q}_{i},\underline{q}_{j}\rangle∀1≤i,j≤n:(QtQ)ij​=q​it​q​j​=⟨q​i​,q​j​⟩

  ⟸  \impliedby⟸: ברור
  ⟹  \implies⟹: נתון כי QtQ=IQ^tQ=IQtQ=I. אזי לפי הגדרת מטריצת היחידה מתקיים:

⟨q‾i,q‾j⟩=(QtQ)ij=Iij={1i=j0i≠j\langle \underline{q}_{i},\underline{q}_{j}\rangle =(Q^tQ)_{ij}=I_{ij}=\begin{cases} 1 & i=j \\ 0 & i\neq j \end{cases}⟨q​i​,q​j​⟩=(QtQ)ij​=Iij​={10​i=ji=j​

לכן, לפי הגדרה, הוקטורים q‾i,q‾j\underline{q}_{i},\underline{q}_{j}q​i​,q​j​ אורתוגונליים לכל i,ji,ji,j ובנוסף לכל iii מתקיים כי ∥q‾i∥=1\left\lVert \underline{q}_{i} \right\rVert=1​q​i​​=1 ולכן, לפי הגדרה עמודות QQQ הינן בסיס אורתונורמלי ולכן, לפי הגדרה QQQ מטריצה אורתונורמלית.
∎

משפט

שורות מטריצה אורתונורמלית QQQ הינן גם קבוצה אורתונורמלית(קבוצה בה כל שני וקטורים אורתוגונליים)

הוכחה: (אין באמת הוכחות בקורס הזה אבל קל לראות לפי QtQ=I=QQtQ^tQ=I=QQ^tQtQ=I=QQt)

משפט

תהי QQQ מטריצה אורתונורמלית.

∣Q∣=±1|Q|=\pm 1∣Q∣=±1

הוכחה:

QQt=I  ⟹  ∣QQt∣=∣I∣=1QQ^t=I \implies |QQ^t|=|I|=1QQt=I⟹∣QQt∣=∣I∣=1

לפי משפט מאלגברה א', ∣Q∣=∣Qt∣|Q|=|Q^t|∣Q∣=∣Qt∣ ולכן:

∣QQt∣=∣Q∣2=∣I∣=1|QQ^t|=|Q|^2=|I|=1∣QQt∣=∣Q∣2=∣I∣=1 ∣Q∣=±1=±1|Q|=\pm \sqrt{ 1 }=\pm 1∣Q∣=±1​=±1

∎

משפט

יהיו Q1,Q2Q_{1},Q_{2}Q1​,Q2​ מטריצות אורתונורמליות   ⟸  \impliedby⟸ מכפלתן אורתונורמלית.

הוכחה:

(Q1Q2)t(Q1Q2)=Q2tQ1tQ1Q2=Q2tQ2=I(Q_{1}Q_{2})^t(Q_{1}Q_{2})=Q_{2}^tQ_{1}^tQ_{1}Q_{2}=Q_{2}^tQ_{2}=I(Q1​Q2​)t(Q1​Q2​)=Q2t​Q1t​Q1​Q2​=Q2t​Q2​=I

לכן, לפי משפט, Q1Q2Q_{1}Q_{2}Q1​Q2​ אורתונורמלית.
∎

משפט

תהי QQQ מטריצה אורתונורמלית.

∥Qx‾∥22=∥x‾∥22\left\lVert Q\underline{x} \right\rVert _{2}^2=\left\lVert \underline{x} \right\rVert _{2}^2∥Qx​∥22​=∥x​∥22​

הוכחה:

∥Qx‾∥22=x‾tQtQx‾=x‾tx‾=∥x‾∥22\left\lVert Q\underline{x} \right\rVert _{2}^2=\underline{x}^tQ^tQ\underline{x}=\underline{x}^t\underline{x}=\left\lVert \underline{x} \right\rVert _{2}^2∥Qx​∥22​=x​tQtQx​=x​tx​=∥x​∥22​

∎

הערה

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

דוגמה

Q=(0001001000100000010000001)  ⟹  Q−1=Qt=(0010001000000101000000001)Q=\begin{pmatrix} 0 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{pmatrix}\implies Q^{-1}=Q^t=\begin{pmatrix} 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{pmatrix}Q=​00100​01000​00010​10000​00001​​⟹Q−1=Qt=​00010​01000​10000​00100​00001​​

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

דוגמה (מטריצת סיבוב ב-2D2D2D)

∀θ∈[0,2π]:  Q=(cos⁡θ−sin⁡θsin⁡θcos⁡θ)\forall \theta \in[0,2\pi]:\; Q=\begin{pmatrix} \cos \theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}∀θ∈[0,2π]:Q=(cosθsinθ​−sinθcosθ​)

מה המטריצה הזו עושה בעצם?
​מטריצת סיבוב ב-2D - נומריים - אורתונורמליות ופירוק QR.svg

Q(10)=(cos⁡θsin⁡θ)Q(01)=(−sin⁡θcos⁡θ){\color{#DAA520} Q\begin{pmatrix} 1\\0 \end{pmatrix}=\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}} \qquad \qquad {\color{#00BFFF}Q\begin{pmatrix} 0 \\ 1 \end{pmatrix}=\begin{pmatrix} -\sin\theta \\ \cos\theta \end{pmatrix}}Q(10​)=(cosθsinθ​)Q(01​)=(−sinθcosθ​)
דוגמה (מטריצת שיקוף של הצירים ב-2D2D2D)

Q=(100−1)Q=(−1001)Q=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} \quad \qquad \quad Q=\begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix}Q=(10​0−1​)Q=(−10​01​)
דוגמה (מטריצת GivensGivensGivens)

המטריצה מציעה סיבוב בין שני צירים בוקטור במימד גבוה.
נבנה אותה: מתחילים ממטריצת היחידה. אנו באים לשורה jjj ועמודה kkk וגם לעמודה jjj ולשורה kkk וזה יוצר לנו 4 איברים שבשניים מהם גרו במקור 1 ובשניים האחרים במקור גרו 0. נחליף את הרביעיה הזו ב-cos⁡θ,sin⁡θ,−sin⁡θ,cos⁡θ\cos\theta,\sin\theta,-\sin\theta,\cos\thetacosθ,sinθ,−sinθ,cosθ ואז כאשר נכפיל את המטריצה בוקטור בגודל nnn לרוב הערכים היא לא תעשה דבר, אבל בשני צירים היא תבצע את הסיבוב הזה.

G=(1⋱cos⁡θ−sin⁡θ⋱1⋱sin⁡θcos⁡θ⋱1)G=\begin{pmatrix} 1 \\ & \ddots \\ & & \cos\theta & & & & -\sin\theta \\ & & & \ddots \\ & & & & 1 \\ & & & & & \ddots \\ & & \sin\theta & & & & \cos\theta \\ & & & & & & & \ddots \\ & & & & & & & & 1 \end{pmatrix}G=​1​⋱​cosθsinθ​⋱​1​⋱​−sinθcosθ​⋱​1​​
דוגמה (מטריצת השיקוף של HouseholderHouseholderHouseholder)

יהי v‾\underline{v}v​ וקטור כך ש-∥v‾∥=1\left\lVert \underline{v} \right\rVert=1∥v​∥=1 (כלומר, v‾tv‾=1\underline{v}^t\underline{v}=1v​tv​=1). אזי המטריצה הינה:

H=I−2v‾   ⁣v‾tH=I-2\underline{v}\;\!\underline{v}^tH=I−2v​v​t

היא אורתונורמלית, ונראה למה:

HHt=(I−2v‾   ⁣v‾t)(I−2v‾   ⁣v‾t)=I−4v‾   ⁣v‾t+4v‾   ⁣v‾tv‾   ⁣v‾t=I−4I+4I=IHH^t=(I-2\underline{v}\;\!\underline{v}^t)(I-2\underline{v}\;\!\underline{v}^t)=I-4\underline{v}\;\!\underline{v}^t+4\underline{v}\;\!\underline{v}^t\underline{v}\;\!\underline{v}^t=I-4I+4I=IHHt=(I−2v​v​t)(I−2v​v​t)=I−4v​v​t+4v​v​tv​v​t=I−4I+4I=I

כנדרש.

Hv‾=(I−2v‾   ⁣v‾t)v‾=−v‾H\underline{v}=(I-2\underline{v}\;\!\underline{v}^t)\underline{v}=-\underline{v}Hv​=(I−2v​v​t)v​=−v​

כאשר אנו מכפילים בוקטור כללי u‾\underline{u}u​ המקיים v‾tu‾=0\underline{v}^t\underline{u}=0v​tu​=0 אזי:

Hw‾=(I−2v‾   ⁣v‾t)w‾=w‾H\underline{w}=(I-2\underline{v}\;\!\underline{v}^t)\underline{w}=\underline{w}Hw​=(I−2v​v​t)w​=w​

תהליך Gram−SchmidtGram-SchmidtGram−Schmidt

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

נתון סט של וקטורי כניסה כלשהם {w‾k}k=1L∈Rn\left\{ \underline{w}_{k} \right\}_{k=1}^L \in \mathbb{R}^n{w​k​}k=1L​∈Rn מהמרחב ה-nnn מימדי.
תהליך גרם-שמיט(GSGSGS) יבנה מוקטורים אלה סדרת וקטורים אורתונורמלית עם LLL או פחות וקטורים {u‾k}k=1L∈Rn\left\{ \underline{u}_{k} \right\}_{k=1}^L \in \mathbb{R}^n{u​k​}k=1L​∈Rn.
התהליך סדרתי ומקיים בל איטרציה:

sp{w‾1,…,w‾k}=sp{u‾1,…,u‾k}sp\left\{ \underline{w}_{1},\dots,\underline{w}_{k} \right\}=sp\left\{ \underline{u}_{1},\dots,\underline{u}_{k} \right\}sp{w​1​,…,w​k​}=sp{u​1​,…,u​k​}
משפט

בהינתן סט וקטורים כלשהו בת"ל {w‾k}k=1L∈Rn\left\{ \underline{w}_{k} \right\}_{k=1}^L \in \mathbb{R}^n{w​k​}k=1L​∈Rn המגדיר ת"מ, קיים בסיס אורתונורמלי תחליפי {u‾k}k=1L∈Rn\left\{ \underline{u}_{k} \right\}_{k=1}^L \in \mathbb{R}^n{u​k​}k=1L​∈Rn אשר יפרוש את אותו ת"מ.

sp{w‾1,…,w‾k}=sp{u‾1,…,u‾k}sp\left\{ \underline{w}_{1},\dots,\underline{w}_{k} \right\}=sp\left\{ \underline{u}_{1},\dots,\underline{u}_{k} \right\}sp{w​1​,…,w​k​}=sp{u​1​,…,u​k​}

את ההוכחה נראה דרך האלגוריתם הראשון שנראה.

אלגוריתם #1\# 1#1

  1. מתקבל w‾1\underline{w}_{1}w​1​ וננרמל אותו: u‾1=1∥w‾1∥2w‾1\underline{u}_{1}=\frac{1}{\left\lVert \underline{w}_{1} \right\rVert_{2}}\underline{w}_{1}u​1​=∥w​1​∥2​1​w​1​ (אם זה 000 אז נשמיט את הוקטור שכן אין לו השפעה על התהליך)
    כעת, ברור שמתקיים sp{w‾1}=sp{u‾1}sp\left\{ \underline{w}_{1} \right\}=sp\left\{ \underline{u}_{1} \right\}sp{w​1​}=sp{u​1​}.
  2. מתקבל w‾2\underline{w}_{2}w​2​. אנו נרצה שהוקטור u‾2\underline{u}_{2}u​2​ יקיים את התכונות: הנורמה=1, אנכי ל-u‾1\underline{u}_{1}u​1​ והספאן צריך להיות זהה למקור.
    נעשה זאת באמצעות קילוף u‾1\underline{u}_{1}u​1​ מהוקטור w‾2\underline{w}_{2}w​2​ להשגת אנכיות:
    u‾2=w‾2−cu‾1.u‾1t(w‾2−cu‾1)=0  ⟹  c=u‾1tw‾2\underline{u}_{2}=\underline{w}_{2}-c\underline{u}_{1}. \qquad \underline{u}_{1}^t(\underline{w}_{2}-c\underline{u}_{1})=0\implies c=\underline{u}_{1}^t \underline{w}_{2}u​2​=w​2​−cu​1​.u​1t​(w​2​−cu​1​)=0⟹c=u​1t​w​2​
    כעת ננרמל אותו: u‾2=1∥u‾2∥2u‾2\underline{u}_{2}=\frac{1}{\left\lVert \underline{u}_{2} \right\rVert_{2}}\underline{u}_{2}u​2​=∥u​2​∥2​1​u​2​. (אם הוקטור לפני נרמול מאופס, פירוש הדבר הוא שהוא נפרש מקודמו ולכן לא חשוב ונתעלם ממנו)
    כעת, נוכל לראות כי הפרישות זהות:
    sp{u‾1,u‾2}⊆sp{w‾1,w‾2}sp\left\{ \underline{u}_{1},\underline{u}_{2} \right\}\subseteq sp\left\{ \underline{w}_{1},\underline{w}_{2} \right\}sp{u​1​,u​2​}⊆sp{w​1​,w​2​}
    ואז לפי משפט מאלגברה הם שווים כי המימדים שלהם זהים.
  3. מתקבל w‾3\underline{w}_{3}w​3​. כעת נעבוד בדרך דומה לממקודם:
    u‾3=w‾3−c1u‾1−c2u‾2\underline{u}_{3}=\underline{w}_{3}-c_{1}\underline{u}_{1}-c_{2}\underline{u}_{2}u​3​=w​3​−c1​u​1​−c2​u​2​
    כעת נדרוש: u‾1t(w‾3−c1u‾1−c2u‾2)=0\underline{u}_{1}^t(\underline{w}_{3}-c_{1}\underline{u}_{1}-c_{2}\underline{u}_{2})=0u​1t​(w​3​−c1​u​1​−c2​u​2​)=0 ואז:
    u‾1tw‾3−c1=0∧u‾2tw‾3−c2=0\underline{u}_{1}^t\underline{w}_{3}-c_{1}=0 \land \underline{u}_{2}^t\underline{w}_{3}-c_{2}=0u​1t​w​3​−c1​=0∧u​2t​w​3​−c2​=0
    הוקטור כעת לא מנורמל ולכן ננרמל אותו בדיוק כמו ממקודם. u‾3=1∥u‾3∥2u‾3\underline{u}_{3}=\frac{1}{\left\lVert \underline{u}_{3} \right\rVert_{2}}\underline{u}_{3}u​3​=∥u​3​∥2​1​u​3​.
    כעת אנו יודעים שהם פורשים את אותו הדבר במקור בדיוק מאותה סיבה כמו ממקודם.

כעת בצעד kkk נבצע:

  • מתקבל w‾k\underline{w}_{k}w​k​.
  • נגדיר: u‾k=w‾k−∑j=1k−1cju‾j\displaystyle \underline{u}_{k}=\underline{w}_{k}-\sum_{j=1}^{k-1}c_{j}\underline{u}_{j}u​k​=w​k​−j=1∑k−1​cj​u​j​
  • נדרוש: {0=u‾1tu‾k=u‾1tw‾k−c1  ⟹  c1=u‾1tw‾k0=u‾2tu‾k=u‾2tw‾k−c2  ⟹  c2=u‾2tw‾k⋮0=u‾k−1tu‾k=u‾k−1tw‾k−ck−1  ⟹  ck−1=u‾k−1tw‾k}\left\{ \begin{matrix}0=\underline{u}_{1}^t\underline{u}_{k}=\underline{u}_{1}^t\underline{w}_{k}-c_{1}\implies c_{1}=\underline{u}_{1}^t\underline{w}_{k}\\ 0=\underline{u}_{2}^t\underline{u}_{k}=\underline{u}_{2}^t\underline{w}_{k}-c_{2}\implies c_{2}=\underline{u}_{2}^t\underline{w}_{k}\\ \vdots \\ 0=\underline{u}_{k-1}^t\underline{u}_{k}=\underline{u}_{k-1}^t\underline{w}_{k}-c_{k-1}\implies c_{k-1}=\underline{u}_{k-1}^t\underline{w}_{k}\end{matrix} \right\}⎩⎨⎧​0=u​1t​u​k​=u​1t​w​k​−c1​⟹c1​=u​1t​w​k​0=u​2t​u​k​=u​2t​w​k​−c2​⟹c2​=u​2t​w​k​⋮0=u​k−1t​u​k​=u​k−1t​w​k​−ck−1​⟹ck−1​=u​k−1t​w​k​​⎭⎬⎫​
  • נבצע נרמול(כמובן אם עובד, אחרת נתעלם מהוקטור): u‾k=1∥u‾k∥2u‾k\displaystyle \underline{u}_{k}=\frac{1}{\left\lVert \underline{u}_{k} \right\rVert_{2}}\underline{u}_{k}u​k​=∥u​k​∥2​1​u​k​

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

אלגוריתם #2\# 2#2

האלגוריתם שנראה כעת הולך להישען על המשוואות הבאות שקושרות בין וקטורי הכניסה לאלו שאנו יוצרים:

w‾1=r11u‾1w‾2=r21u‾1+r22u‾2w‾3=r31u‾1+r32u‾2+r33u‾3⋮w‾L=rL1u‾1+rL2u‾2+rL3u‾3+⋯+rLLu‾L\begin{align*} & \underline{w}_{1}=r_{11}\underline{u}_{1} \\ & \underline{w}_{2}=r_{21}\underline{u}_{1}+r_{22}\underline{u}_{2} \\ & \underline{w}_{3}=r_{31}\underline{u}_{1}+r_{32}\underline{u}_{2}+r_{33}\underline{u}_{3} \\ & \vdots \\ & \underline{w}_{L}=r_{L1}\underline{u}_{1}+r_{L2}\underline{u}_{2}+r_{L3}\underline{u}_{3}+\dots+r_{LL}\underline{u}_{L} \end{align*}​w​1​=r11​u​1​w​2​=r21​u​1​+r22​u​2​w​3​=r31​u​1​+r32​u​2​+r33​u​3​⋮w​L​=rL1​u​1​+rL2​u​2​+rL3​u​3​+⋯+rLL​u​L​​

ברור שאת המקדם r11r_{11}r11​ ניתן לקבוע כמו באלגוריתם הקודם ע"י נרמול של הוקטור w‾1\underline{w}_{1}w​1​. כלומר, r112=∥w‾1∥22r_{11}^2=\left\lVert \underline{w}_{1} \right\rVert_{2}^2r112​=∥w​1​∥22​.
מהמשוואה השנייה נקבל די בקלות: u‾2=1r22(w‾2−r21u‾1)\underline{u}_{2}=\frac{1}{r_{22}}(\underline{w}_{2}-r_{21}\underline{u}_{1})u​2​=r22​1​(w​2​−r21​u​1​) נוכל למצוא את r21r_{21}r21​ בקלות בשל האנכיות של u‾1\underline{u}_{1}u​1​ של u‾2\underline{u}_{2}u​2​ כך:

u‾1tw‾2=r21u‾1tu‾1+r22u‾1tu‾2=r21\underline{u}_{1}^t\underline{w}_{2}=r_{21}\underline{u}_{1}^t\underline{u}_{1}+r_{22}\underline{u}_{1}^t\underline{u}_{2}=r_{21}u​1t​w​2​=r21​u​1t​u​1​+r22​u​1t​u​2​=r21​

את המקדם r22r_{22}r22​ נקבע על מנת לקבל נרמול של u‾2\underline{u}_{2}u​2​ כך:

∥w‾2∥22=∥r21u‾1+r22u‾2∥22=r212+r222  ⟹  r22=±∥w‾2∥22−r212\left\lVert \underline{w}_{2} \right\rVert _{2}^2 =\left\lVert r_{21}\underline{u}_{1}+r_{22}\underline{u}_{2} \right\rVert _{2}^2=r_{21}^2+r_{22}^2\implies r_{22}=\pm \sqrt{ \left\lVert \underline{w}_{2} \right\rVert_{2}^2 -r_{21}^2 }∥w​2​∥22​=∥r21​u​1​+r22​u​2​∥22​=r212​+r222​⟹r22​=±∥w​2​∥22​−r212​​

כעת, נעשה זאת באופן כללי למשוואה ה-kkk-ית:

w‾k=rk1u‾1+rk2u‾2+⋯+rkku‾k\underline{w}_{k}=r_{k1}\underline{u}_{1}+r_{k2}\underline{u}_{2}+\dots+{r}_{kk}\underline{u}_{k}w​k​=rk1​u​1​+rk2​u​2​+⋯+rkk​u​k​

נמצא את k−1k-1k−1 המקדמים הראשונים לפי אנכיות הוקטורים האורתונורמליים. יהי j=1,2,…,k−1j=1,2,\dots,k-1j=1,2,…,k−1 אזי:

u‾jtw‾k=rkj\underline{u}_{j}^t\underline{w}_{k}=r_{kj}u​jt​w​k​=rkj​

את המקדם rkkr_{kk}rkk​ נקבע כך:

rkk=±∥w‾k∥22−∑j=1k−1rkj2r_{kk}=\pm \sqrt{ \left\lVert \underline{w}_{k} \right\rVert_{2}^2-\sum_{j=1}^{k-1} r_{kj}^2 }rkk​=±∥w​k​∥22​−j=1∑k−1​rkj2​​

אלגוריתם #3\#3#3

  1. מתקבל w‾1\underline{w}_{1}w​1​. ננרמל אותו לקבלת u‾1=1∥w‾1∥2w‾1\underline{u}_{1}=\frac{1}{\left\lVert \underline{w}_{1} \right\rVert_{2}}\underline{w}_{1}u​1​=∥w​1​∥2​1​w​1​.
    ננקה את כל הוקטורים הנתונים ע"י קילוף u‾1\underline{u}_{1}u​1​ מתוכם. נעשה זאת כך:
    ∀2≤j≤L:  w‾j=w‾j−(u‾1tw‾j)u‾1\forall 2\leq j\leq L:\; \underline{w}_{j}=\underline{w}_{j}-(\underline{u}_{1}^t\underline{w}_{j})\underline{u}_{1}∀2≤j≤L:w​j​=w​j​−(u​1t​w​j​)u​1​
  2. מתקבל w‾2\underline{w}_{2}w​2​. ננרמל אותו לקבלת u‾2=1∥w‾2∥2w‾2\underline{u}_{2}=\frac{1}{\left\lVert \underline{w}_{2} \right\rVert_{2}}\underline{w}_{2}u​2​=∥w​2​∥2​1​w​2​. כעת, ננקה את שאר הוקטורים:
    ∀3≤j≤L:  w‾j=w‾j−(u‾2tw‾j)u‾2\forall 3\leq j\leq L:\; \underline{w}_{j}=\underline{w}_{j}-(\underline{u}_{2}^t\underline{w}_{j})\underline{u}_{2}∀3≤j≤L:w​j​=w​j​−(u​2t​w​j​)u​2​

בצעד ה-kkk מתקבל w‾k\underline{w}_{k}w​k​. ננרמל אותו: u‾k=1∥w‾k∥2w‾k\underline{u}_{k}=\frac{1}{\left\lVert \underline{w}_{k} \right\rVert_{2}}\underline{w}_{k}u​k​=∥w​k​∥2​1​w​k​ ואז ננקה את שאר הוקטורים: ∀k+1≤j≤L:  w‾j=w‾j−(u‾ktw‾j)u‾k\forall k+1\leq j\leq L:\; \underline{w}_{j}=\underline{w}_{j}-(\underline{u}_{k}^t\underline{w}_{j})\underline{u}_{k}∀k+1≤j≤L:w​j​=w​j​−(u​kt​w​j​)u​k​ וזה הכל.

Algorithm 2 Stable Gram-Schmidt (SGS)

Input: A set of linearly independent vectors W={w1,w2,…,wL}W = \{w_1, w_2, \dots, w_L\}W={w1​,w2​,…,wL​}

Output: An orthonormal basis U={u1,u2,…,uL}U = \{u_1, u_2, \dots, u_L\}U={u1​,u2​,…,uL​}

1:for k=1k = 1k=1 to LLL do

2:uk←wk∥wk∥2u_k \gets \frac{w_k}{\|w_k\|_2}uk​←∥wk​∥2​wk​​ // Normalization step

3:for j=k+1j = k+1j=k+1 to LLL do

4:wj←wj−(ukTwj)ukw_j \gets w_j - (u_k^T w_j) u_kwj​←wj​−(ukT​wj​)uk​ // Orthogonalization (peeling) step

5:end for

6:end for

7:return UUU

סיבוכיות האלגוריתמים

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

  • כל פעולת רנמול דורשת 2n2n2n פעולות.
  • כל פעולת קילוף דורשת 2n2n2n פעולות.

נסתכל על כל האלגוריתם:

  1. בצעד הראשון יש נרמול אחד ו-n−1n-1n−1 קילופים
  2. בצעד השני יש נרמול אחד ו-n−2n-2n−2 קילופים

וכך הלאה ולכן נקבל שמספר הפעולות הוא L+L(L−1)2L+\frac{L(L-1)}{2}L+2L(L−1)​ פעולות ולכן הסיבוכיות היא Θ(nL2)\Theta(nL^2)Θ(nL2).

פירוק QRQRQR

נסתכל שוב על האלגוריתם השני, ה-Modified Gram-Schmidt ועל המשוואות שאנו מקבלים:

w‾1=r11u‾1w‾2=r21u‾1+r22u‾2w‾3=r31u‾1+r32u‾2+r33u‾3⋮w‾L=rL1u‾1+rL2u‾2+rL3u‾3+⋯+rLLu‾L\begin{align*} & \underline{w}_{1}=r_{11}\underline{u}_{1} \\ & \underline{w}_{2}=r_{21}\underline{u}_{1}+r_{22}\underline{u}_{2} \\ & \underline{w}_{3}=r_{31}\underline{u}_{1}+r_{32}\underline{u}_{2}+r_{33}\underline{u}_{3} \\ & \vdots \\ & \underline{w}_{L}=r_{L1}\underline{u}_{1}+r_{L2}\underline{u}_{2}+r_{L3}\underline{u}_{3}+\dots+r_{LL}\underline{u}_{L} \end{align*}​w​1​=r11​u​1​w​2​=r21​u​1​+r22​u​2​w​3​=r31​u​1​+r32​u​2​+r33​u​3​⋮w​L​=rL1​u​1​+rL2​u​2​+rL3​u​3​+⋯+rLL​u​L​​

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

A=(∣∣∣∣w‾1w‾2w‾3…w‾L∣∣∣∣)A=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{w}_{1} & \underline{w}_{2} & \underline{w}_{3} & \dots & \underline{w}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}A=​∣w​1​∣​∣w​2​∣​∣w​3​∣​…​∣w​L​∣​​

נקח גם את ה-u‾\underline{u}u​-ים ונשים גם אותם במטריצה:

Q=(∣∣∣∣u‾1u‾2u‾3…u‾L∣∣∣∣)Q=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{u}_{1} & \underline{u}_{2} & \underline{u}_{3} & \dots & \underline{u}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}Q=​∣u​1​∣​∣u​2​∣​∣u​3​∣​…​∣u​L​∣​​

נרצה לראות איזה קשר יש בין QQQ ל-AAA. מהמשוואות פשוט אפשר לראות כי מתקיים:

A=Q(r11r21r31…rL10r22r32…rL2⋮⋮⋮⋱⋮000…rLL)=QRA=Q\begin{pmatrix} r_{11} & r_{21} & r_{31} & \dots & r_{L1} \\ 0 & r_{22} & r_{32} & \dots & r_{L2} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \dots & r_{LL} \end{pmatrix}=QRA=Q​r11​0⋮0​r21​r22​⋮0​r31​r32​⋮0​……⋱…​rL1​rL2​⋮rLL​​​=QR

בואו נשתכנע שזה נכון.

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

w‾1=(∣∣∣∣w‾1w‾2w‾3…w‾L∣∣∣∣)(100⋮0)=(∣∣∣∣u‾1u‾2u‾3…u‾L∣∣∣∣)(r11r21r31…rL10r22r32…rL2⋮⋮⋮⋱⋮000…rLL)(100⋮0)=(∣∣∣∣u‾1u‾2u‾3…u‾L∣∣∣∣)(r1100⋮0)=r11u‾1\begin{align*} \underline{w}_{1}=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{w}_{1} & \underline{w}_{2} & \underline{w}_{3} & \dots & \underline{w}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}\begin{pmatrix} 1 \\ 0 \\ 0 \\ \vdots \\ 0 \end{pmatrix}&=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{u}_{1} & \underline{u}_{2} & \underline{u}_{3} & \dots & \underline{u}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}\begin{pmatrix} r_{11} & r_{21} & r_{31} & \dots & r_{L1} \\ 0 & r_{22} & r_{32} & \dots & r_{L2} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \dots & r_{LL} \end{pmatrix}\begin{pmatrix} 1 \\ 0 \\ 0 \\ \vdots \\ 0 \end{pmatrix} \\ &=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{u}_{1} & \underline{u}_{2} & \underline{u}_{3} & \dots & \underline{u}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}\begin{pmatrix} r_{11} \\ 0 \\ 0 \\ \vdots \\ 0 \end{pmatrix}=r_{11}\underline{u}_{1} \end{align*}w​1​=​∣w​1​∣​∣w​2​∣​∣w​3​∣​…​∣w​L​∣​​​100⋮0​​​=​∣u​1​∣​∣u​2​∣​∣u​3​∣​…​∣u​L​∣​​​r11​0⋮0​r21​r22​⋮0​r31​r32​⋮0​……⋱…​rL1​rL2​⋮rLL​​​​100⋮0​​=​∣u​1​∣​∣u​2​∣​∣u​3​∣​…​∣u​L​∣​​​r11​00⋮0​​=r11​u​1​​

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

w‾2=(∣∣∣∣w‾1w‾2w‾3…w‾L∣∣∣∣)(010⋮0)=(∣∣∣∣u‾1u‾2u‾3…u‾L∣∣∣∣)(r11r21r31…rL10r22r32…rL2⋮⋮⋮⋱⋮000…rLL)(010⋮0)=(∣∣∣∣u‾1u‾2u‾3…u‾L∣∣∣∣)(r21r220⋮0)=r21u‾1+r22u‾2\begin{align*} \underline{w}_{2}=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{w}_{1} & \underline{w}_{2} & \underline{w}_{3} & \dots & \underline{w}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}\begin{pmatrix} 0 \\ 1 \\ 0 \\ \vdots \\ 0 \end{pmatrix}&=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{u}_{1} & \underline{u}_{2} & \underline{u}_{3} & \dots & \underline{u}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}\begin{pmatrix} r_{11} & r_{21} & r_{31} & \dots & r_{L1} \\ 0 & r_{22} & r_{32} & \dots & r_{L2} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \dots & r_{LL} \end{pmatrix}\begin{pmatrix} 0 \\ 1 \\ 0 \\ \vdots \\ 0 \end{pmatrix} \\ &=\begin{pmatrix} \vert & \vert & \vert & & \vert \\ \underline{u}_{1} & \underline{u}_{2} & \underline{u}_{3} & \dots & \underline{u}_{L} \\ \vert & \vert & \vert & & \vert \end{pmatrix}\begin{pmatrix} r_{21} \\ r_{22} \\ 0 \\ \vdots \\ 0 \end{pmatrix}=r_{21}\underline{u}_{1}+r_{22}\underline{u}_{2} \end{align*}w​2​=​∣w​1​∣​∣w​2​∣​∣w​3​∣​…​∣w​L​∣​​​010⋮0​​​=​∣u​1​∣​∣u​2​∣​∣u​3​∣​…​∣u​L​∣​​​r11​0⋮0​r21​r22​⋮0​r31​r32​⋮0​……⋱…​rL1​rL2​⋮rLL​​​​010⋮0​​=​∣u​1​∣​∣u​2​∣​∣u​3​∣​…​∣u​L​∣​​​r21​r22​0⋮0​​=r21​u​1​+r22​u​2​​

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

מה קורה אם AAA ריבועית והפיכה? אם היא תוזן לתהליך גרם-שמידט הכל ילך ללא בעיות.
נקבל גם כי A=QRA=QRA=QR כאשר QQQ תהיה מטריצה אורתונורמלית, שכן היא ריבועית ועמודותיה הן ה-u‾\underline{u}u​-ים שמצאנו בהתליך גרם-שמידט.

משפט

כל מטריצה ריבועית והפיכה AAA ניתנת לפירוק יחיד מהצורה A=QRA=QRA=QR כאשר:

  • QQQ מטריצה אורתונורמלית
  • RRR מטריצה משולשת עליונה בה איברי האלכסון הראשי כולם חיוביים.

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

פירוק QRQRQR קיים גם למטריצות שאינן הפיכות. אז יתקבלו ערכי 000 באלכסון הראשי של RRR.

דוגמה

A=(1020102111301131)A=\begin{pmatrix} 1 & 0 & 2 & 0 \\ 1 & 0 & 2 & 1 \\ 1 & 1 & 3 & 0 \\ 1 & 1 & 3 & 1 \end{pmatrix}A=​1111​0011​2233​0101​​

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

A=QR=(0.5−0.50.70700.5−0.5−0.70700.50.50−0.7070.50.500.707)(21510110000−0.7070000.707)A=QR=\begin{pmatrix} 0.5 & -0.5 & 0.707 & 0 \\ 0.5 & -0.5 & -0.707 & 0 \\ 0.5 & 0.5 & 0 & -0.707 \\ 0.5 & 0.5 & 0 & 0.707 \end{pmatrix}\begin{pmatrix} 2 & 1 & 5 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & -0.707 \\ 0 & 0 & 0 & 0.707 \end{pmatrix}A=QR=​0.50.50.50.5​−0.5−0.50.50.5​0.707−0.70700​00−0.7070.707​​​2000​1100​5100​10−0.7070.707​​

נשים לב כי נוצרו לנו 444 וקטורים אורתונורמליים - איך? הרי אחד מהוקטורים המקוריים אינו בת"ל עם האחרים.
נשים לב כי קיבלנו ב-RRR אזהרה בדמות 000 באלכסון שאומר לנו שהעמודה השלישית שלנו היא לא הכי בריאה.

נראה כעת איך פותרים את הבעיה שהוצגה בדוגמה.
נתונה המטריצה AAA ועליה אנו מבצעים גרם-שמידט.

  • בתהליך הגרם שמידט: אם נתקלת בעמודה ב-AAA תלויה בקודמיה, זרוק אותה והמשך בתהליך
  • בתהליך פירוק QRQRQR: אם נתקלת בעמודה התלויה בקודמיה, אי אפשר לזרוקה! לכן:
    1. הצג אותה כצירוף של הוקטורים שכבר נוצרו.
    2. הגרל/בחר וקטור חדש שימלא את מקומה להמשך תהליך הגרם-שמידט

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

פירוק QRQRQR למטריצות שאינן ריבועיות

פירוק QRQRQR קיים גם למטריצות מלבניות מכל צורה שהיא.
כשהמטריצה רחבה ונמוכה, עמודותיה חייבות להיות ת"ל. אם נניח ש-nnn העמודות הראשונות בת"ל, נקבל כי יתר העמודות תלויות בהן, לכן, עמודות RRR המתאימות מלאות.
​3 - אורתוגונליות ופירוק QR 2026-06-01 11.41.49.excalidraw.svg
כדי למצוא את שאר עמודות המטריצה לאחר האלגוריתם למטריצות ריבועיות שיצר את QQQ נוכל לבצע:

w‾7=Qr‾7  ⟹  r‾7=Qtw‾7\underline{w}_{7}=Q\underline{r}_{7} \implies \underline{r}_{7}=Q^{t}\underline{w}_{7}w​7​=Qr​7​⟹r​7​=Qtw​7​

כעת, המטריצה שלנו גבוהה וצרה. ניתן להציע שני מבני פירוק - האחד עם QQQ מלאה שבה מוסיפים וקטורי סרק לעמודותיה של QQQ להשלמת מטריצה אורתונורמלית.
​3 - אורתוגונליות ופירוק QR 2026-06-01 11.45.39.excalidraw.svg
הגישה האחרת קרויה Economy  QREconomy\; QREconomyQR והיא מסתפרת ב-QQQ ברוחב AAA.
​3 - אורתוגונליות ופירוק QR 2026-06-01 11.49.06.excalidraw.svg

שימושי הפירוק

שימוש ב-QRQRQR לפתרון מערכות משוואות

נתונה לנו מערכת משוואות Ax‾=b‾A\underline{x}=\underline{b}Ax​=b​ נוכל להשתמש בפירוק QRQRQR על מנת לפתורה. נדון בשלושה מקרים:

  1. AAA ריבועית והפיכה
  2. AAA מלבנית עם יותר שורות מעמודות
  3. AAA מלבנית עם יותר עמודות משורות

מקרה 1

נתחיל בפירוק AAA ל-QRQRQR:

Ax‾=QRx‾=b‾A\underline{x}=QR\underline{x}=\underline{b}Ax​=QRx​=b​

כעת, נכפיל ב-QtQ^tQt:

Rx‾=Qtb‾R\underline{x}=Q^t\underline{b}Rx​=Qtb​

כעת, באמצעות החלפה אחורית נוכל למצוא את x‾\underline{x}x​.

למה זה לא טוב? עלה לנו n3n^3n3 כדי להשיג את QRQRQR. אך פירוק LULULU כולו הוא n33\frac{n^3}{3}3n3​ ולכן הוא עדיף.
אז למה אנו רואים את זה? את זה אנו נגלה עוד מעט.

מקרה 2

נתחיל בפירוק AAA ל-QRQRQR המלא(לא EconomyEconomyEconomy) על מנת לקבל מטריצה ריבועית QQQ.
נכפיל את הוקטור b‾\underline{b}b​ ב-QtQ^tQt.
כעת עלינו לפתור את המערכת הנותרת ע"י החלפה אחורית, אלא שתחתית המטריצה RRR מאופסת ולכן החלק התחתון בוקטור Qtb‾Q^t\underline{b}Qtb​ חייב להיות 0 על מנת להבטיח פתרון.
⇐ אם החלק התחתון אינו מאופס, לא קיים פתרון למערכת.

מקרה 3

AAA מלבנית רחבה ונניח שוב כי דרגתה מלאה. נתחיל בפירוק QRQRQR ונכפיל את הוקטור b‾\underline{b}b​ ב-QtQ^tQt.
המערכת שנותרה מספרת על דרגות החופש הקיימות במערכת המקורית.

שימוש בפירוק לפתרון בעיית ריבועים פחותים

נניח כי עלינו לפתור את בעיית הריבועים הפחותים min⁡x‾∥Ax‾−b‾∥22\underset{\underline{x}}{\min}\left\lVert A\underline{x}-\underline{b} \right\rVert_{2}^2x​min​∥Ax​−b​∥22​ ונניח כי יש לבעיה הזו פתרון יחיד(כלומר, AAA ריבועית או מלבנית גבוהה ודרגתה מלאה)
נתחיל בפירוק AAA ל-QRQRQR. פירוק זה אינו ה-EconomyEconomyEconomy על מנת לקבל מטריצה QQQ ריבועית. אזי:

∥QRx‾−b‾∥22=∥Q(Rx‾−Qtb‾)∥22=↓משפט∥Rx‾−Qtb‾∥22=∥Qtb‾−Rx‾∥22\left\lVert QR\underline{x}-\underline{b} \right\rVert _{2}^2=\left\lVert Q(R\underline{x}-Q^t\underline{b}) \right\rVert _{2}^2 \underset{\begin{matrix} \downarrow \\ \R{\text{משפט}} \end{matrix}}{=}\left\lVert R\underline{x}-Q^t\underline{b} \right\rVert _{2}^2=\left\lVert Q^t\underline{b}-R\underline{x} \right\rVert _{2}^2∥QRx​−b​∥22​=​Q(Rx​−Qtb​)​22​↓משפט​=​​Rx​−Qtb​​22​=​Qtb​−Rx​​22​

[אפשר להוסיף ציור אם יהיה לי כח אחר כך]
ניתן לפצל את וקטור השגיאה לשני חלקים נפרדים והשגיאה הכוללת היא סכום שתי השגיאות הללו.

  • את הרכיב הראשון ניתן להביא לערך 000 ע"י פתרון של החלפה אחורית.
  • החלק הנותר לא ניתן לשינוי. סכום ריבועיו של החלק התחתון של Qtb‾Q^t\underline{b}Qtb​ קובעים את גובה המינימום של הבעיה הריבועית.
הערה

יכולנו להשתמש ב-Economy  QREconomy\; QREconomyQR לחישוב הפתרון.

סיבוכיות התהליך הזה

נניח שאנו פועלים עם מטריצה AAA בגודל m×nm \times nm×n.

בתהליך עם פירוק QRQRQR נקבל:

  • חישוב ה-Economy−QREconomy-QREconomy−QR חמטריצה ידרוש mn2mn^2mn2 - זהו החלק הדומיננטי במלא התהליך.
  • הכפלת הוקטור b‾\underline{b}b​ ב-QtQ^tQt תדרוש nmnmnm פעולות.
  • פעולת ההחלפה האחורית תדרוש n22\frac{n^2}{2}2n2​ פעולות.

מהי החלופה? חישוב AtAA^tAAtA ופתרון באמצעות פירוק CholeskyCholeskyCholesky.

  • חישוב AtAA^tAAtA דורש mn2mn^2mn2 פעולות
  • פירוק CholeskyCholeskyCholesky ידרוש n36\frac{n^3}{6}6n3​ פעולות
  • החלפה קדמית ואחרוית ב-n2n^2n2 פעולות

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

סדרה של בעיות ריבועים פחותים

נניח כי יצאנו לדרך לפתור סדרה של בעיות ריבועים פחותים:

{min⁡x‾k∥Akx‾k−b‾∥22}k=1L\left\{ \underset{\underline{x}_{k}}{\min}\left\lVert A_{k}\underline{x}_{k}-\underline{b} \right\rVert_{2}^2 \right\}_{k=1}^L{x​k​min​∥Ak​x​k​−b​∥22​}k=1L​

כאשר מספר עמודות AkA_{k}Ak​ הוא בדיוק kkk ו-k−1k-1k−1 העמודות הראשונות שלה הן עמודות Ak−1A_{k-1}Ak−1​.
למה זה מעניין? למשל, בקירוב פולינומיאלי, הדבר שקול לבניית סדרת קירובים עם דרגת פולינום הולכת ועולה.

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

min⁡x‾∥ALx‾−b‾∥22=min⁡x‾∥RLx‾−QLtb‾∥22\underset{\underline{x}}{\min}\left\lVert A_{L}\underline{x}-\underline{b} \right\rVert _{2}^2=\underset{\underline{x}}{\min}\left\lVert R_{L}\underline{x}-Q_{L}^t\underline{b} \right\rVert _{2}^2x​min​∥AL​x​−b​∥22​=x​min​​RL​x​−QLt​b​​22​

נשים לב כי לאור העובדה שתהליך הגרם-שמידט הוא סדרתי, פירוק ה-QRQRQR של המטריצה AL−1A_{L-1}AL−1​ מוכל בפירוק של ALA_{L}AL​.
לכן, נבצע פירוק QRQRQR יחיד ואז פשוט נשתמש בחלקים של המטריצות שאנו צריכים על מנת לפתור את הבעיה.

הערה

השימוש ב-QRQRQR נותן יתרון חדש ומעניין: אם נרצה לדעת את הפתרון לאותה בעיה אך עבור שימוש ב-k<Lk<Lk<L העמודות הראשונות של ALA_{L}AL​ בלבד, פתרון זה נגיש - לשם כך, נקח את החלק העליון של הוקטור Qtb‾Q^t\underline{b}Qtb​ ואת החלק העליון של המטריצה RRR ונפתור מערכת משוואות זו.