สองขั้นตอนแรกของกระบวนการแกรม-ชมิดท์ ในทางคณิตศาสตร์ โดยเฉพาะอย่างยิ่งในพีชคณิตเชิงเส้น และการวิเคราะห์เชิงตัวเลข กระบวนการ แกรม-ชมิดท์ หรืออัลกอริทึมแกรม-ชมิดท์ เป็นวิธีการค้นหาเซตของเวกเตอร์สองตัวขึ้นไปที่ตั้งฉากกัน
ตามคำจำกัดความทางเทคนิค กระบวนการแกรม-ชมิดท์ (Gram–Schmidt process) คือวิธีการสร้างฐานเชิงตั้ง ฉากปกติ (orthonormal basis ) จากเซตของเวกเตอร์ ในปริภูมิผลคูณภายใน (inner product space) ซึ่งโดยทั่วไปแล้ว จะเป็นปริภูมิ ยุคลิด (Euclidean space ) ที่มีผลคูณภายในมาตรฐาน กระบวนการแกรม-ชมิดท์จะรับ เซตของเวกเตอร์ที่มีจำนวนจำกัด และเป็นอิสระเชิงเส้น สำหรับk ≤ n และสร้างเซตเชิงตั้งฉาก (orthogonal set) ที่ครอบคลุมปริภูมิย่อยมิติเดียวกันกับเซตของเวกเตอร์นั้น อาร์ n {\displaystyle \mathbb {R} ^{n}} เอส = { วี 1 , … , วี เค } {\displaystyle S=\{\mathbf {v} _{1},\ldots ,\mathbf {v} _{k}\}} เอส ′ = { คุณ 1 , … , คุณ เค } {\displaystyle S'=\{\mathbf {u} _{1},\ldots ,\mathbf {u} _{k}\}} เค {\displaystyle k} อาร์ n {\displaystyle \mathbb {R} ^{n}} เอส {\displaystyle S}
วิธีการนี้ตั้งชื่อตามJørgen Pedersen Gram และErhard Schmidt แต่Pierre-Simon Laplace คุ้นเคยกับวิธีการนี้มาก่อน Gram และ Schmidt [ 1 ] ในทฤษฎีการแยกกลุ่ม Lie วิธี การนี้ได้รับการขยายความโดยการแยกกลุ่ม Iwasawa
การนำกระบวนการ Gram–Schmidt ไปใช้กับเวกเตอร์คอลัมน์ของเมทริกซ์ ที่มีอันดับ คอลัมน์เต็ม จะได้การแยกส่วน QR (โดยแยกออกเป็นเมทริกซ์เชิงตั้งฉาก และเมทริกซ์สามเหลี่ยม )
คำอธิบาย กระบวนการ Gram-Schmidt ที่ได้รับการดัดแปลงจะถูกดำเนินการกับเวกเตอร์สามตัวที่เป็นอิสระเชิงเส้นและไม่ตั้งฉากกันของฐานสำหรับคลิกที่ภาพเพื่อดูรายละเอียด การดัดแปลงอธิบายไว้ในส่วนความเสถียรเชิงตัวเลขของบทความนี้อาร์ 3 {\displaystyle \mathbb {R} ^{3}} การฉายเวกเตอร์ ของเวกเตอร์บนเวกเตอร์ที่ไม่ใช่ศูนย์ถูกกำหนดดังนี้[ หมายเหตุ 1 ] โดยที่หมายถึงผลคูณดอท ของเวกเตอร์และซึ่งหมายความว่าคือการฉายเชิงตั้งฉาก ของบนเส้นตรงที่เกิดจากถ้าคือเวกเตอร์ศูนย์ แล้วจะถูกกำหนดให้เป็นเวกเตอร์ศูนย์ วี {\displaystyle \mathbf {v} } คุณ {\displaystyle \mathbf {u} } โครงการ คุณ ( วี ) = ⟨ วี , คุณ ⟩ ⟨ คุณ , คุณ ⟩ คุณ , {\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )={\frac {\langle \mathbf {v} ,\mathbf {u} \rangle }{\langle \mathbf {u} ,\mathbf {u} \rangle }}\,\mathbf {u} ,} ⟨ วี , คุณ ⟩ {\displaystyle \langle \mathbf {v} ,\mathbf {u} \rangle } คุณ {\displaystyle \mathbf {u} } วี {\displaystyle \mathbf {v} } โครงการ คุณ ( วี ) {\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )} วี {\displaystyle \mathbf {v} } คุณ {\displaystyle \mathbf {u} } คุณ {\displaystyle \mathbf {u} } โครงการ คุณ ( วี ) {\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )}
เมื่อกำหนดเวกเตอร์ที่ไม่เป็นศูนย์และเป็นอิสระเชิงเส้นกระบวนการแกรม-ชมิดท์จะกำหนดเวกเตอร์ดังต่อไปนี้: เค {\displaystyle k} วี 1 , … , วี เค {\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{k}} คุณ 1 , … , คุณ เค {\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{k}} คุณ 1 = วี 1 , อี 1 = คุณ 1 ‖ คุณ 1 ‖ คุณ 2 = วี 2 − โครงการ คุณ 1 ( วี 2 ) , อี 2 = คุณ 2 ‖ คุณ 2 ‖ คุณ 3 = วี 3 − โครงการ คุณ 1 ( วี 3 ) − โครงการ คุณ 2 ( วี 3 ) , อี 3 = คุณ 3 ‖ คุณ 3 ‖ คุณ 4 = วี 4 − โครงการ คุณ 1 ( วี 4 ) − โครงการ คุณ 2 ( วี 4 ) − โครงการ คุณ 3 ( วี 4 ) , อี 4 = คุณ 4 ‖ คุณ 4 ‖ ⋮ ⋮ คุณ เค = วี เค − ∑ เจ = 1 เค − 1 โครงการ คุณ เจ ( วี เค ) , อี เค = คุณ เค ‖ คุณ เค ‖ . {\displaystyle {\begin{aligned}\mathbf {u} _{1}&=\mathbf {v} _{1},&\!\mathbf {e} _{1}&={\frac {\mathbf {u} _{1}}{\|\mathbf {u} _{1}\|}}\\\mathbf {u} _{2}&=\mathbf {v} _{2}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{2}),&\!\mathbf {e} _{2}&={\frac {\mathbf {u} _{2}}{\|\mathbf {u} _{2}\|}}\\\คณิตศาสตร์ {u} _{3}&=\คณิตศาสตร์ {v} _{3}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{3})-\operatorname {proj} _{\mathbf {u} _{2}}(\mathbf {v} _{3}),&\!\mathbf {e} _{3}&={\frac {\mathbf {u} _{3}}{\|\mathbf {u} _{3}\|}}\\\mathbf {u} _{4}&=\mathbf {v} _{4}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{4})-\operatorname {proj} _{\คณิตศาสตร์ {u} _{2}}(\mathbf {v} _{4})-\operatorname {proj} _{\mathbf {u} _{3}}(\mathbf {v} _{4}),&\!\mathbf {e} _{4}&={\mathbf {u} _{4} \over \|\mathbf {u} _{4}\|}\\&{}\ \ \vdots &&{}\ \ \vdots \\\mathbf {u} _{k}&=\mathbf {v} _{k}-\sum _{j=1}^{k-1}\ชื่อผู้ดำเนินการ {proj} _{\mathbf {u} _{j}}(\mathbf {v} _{k}),&\!\mathbf {e} _{k}&={\frac {\mathbf {u} _{k}}{\|\mathbf {u} _{k}\|}}.\end{aligned}}}
ลำดับดังกล่าวเป็นระบบเวกเตอร์ตั้งฉากที่ต้องการ และเวกเตอร์ที่ถูกทำให้เป็นมาตรฐานจะก่อให้เกิดเซตเวกเตอร์ตั้งฉากปกติ การคำนวณลำดับนี้เรียกว่า การทำให้เป็น เวกเตอร์ตั้งฉาก แบบแกรม-ชมิดท์ และการคำนวณลำดับนี้เรียกว่า การทำให้เป็น เวกเตอร์ตั้งฉากปกติ แบบแกรม-ชมิด ท์ คุณ 1 , … , คุณ เค {\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{k}} อี 1 , … , อี เค {\displaystyle \mathbf {e} _{1},\ldots ,\mathbf {e} _{k}} คุณ 1 , … , คุณ เค {\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{k}} อี 1 , … , อี เค {\displaystyle \mathbf {e} _{1},\ldots ,\mathbf {e} _{k}}
เพื่อตรวจสอบว่าสูตรเหล่านี้ให้ลำดับเชิงตั้งฉากหรือไม่ ขั้นแรกให้คำนวณโดยแทนสูตรข้างต้นลงใน: เราจะได้ศูนย์ จากนั้นใช้ค่านี้ในการคำนวณอีกครั้งโดยแทนสูตรลงใน: เราจะได้ศูนย์ สำหรับค่า ใดๆการพิสูจน์ทำได้โดยการอุปมานทาง คณิตศาสตร์ ⟨ คุณ 1 , คุณ 2 ⟩ {\displaystyle \langle \mathbf {u} _{1},\mathbf {u} _{2}\rangle } คุณ 2 {\displaystyle \mathbf {u} _{2}} ⟨ คุณ 1 , คุณ 3 ⟩ {\displaystyle \langle \mathbf {u} _{1},\mathbf {u} _{3}\rangle } คุณ 3 {\displaystyle \mathbf {u} _{3}} เค {\displaystyle k}
ในทางเรขาคณิต วิธีนี้ดำเนินการดังนี้: ในการคำนวณจะทำการฉายภาพตั้งฉากไปยังปริภูมิย่อยที่สร้างขึ้นโดยซึ่งก็คือปริภูมิย่อยเดียวกันกับที่สร้างขึ้นโดย จาก นั้น เวกเตอร์จะถูกกำหนดให้เป็นความแตกต่างระหว่างและการฉายภาพนี้ ซึ่งรับประกันได้ว่าจะตั้งฉากกับเวกเตอร์ทั้งหมดในปริภูมิย่อยนั้น คุณ ฉัน {\displaystyle \mathbf {u} _{i}} วี ฉัน {\displaystyle \mathbf {v} _{i}} ยู {\displaystyle U} คุณ 1 , … , คุณ ฉัน − 1 {\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{i-1}} วี 1 , … , วี ฉัน − 1 {\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{i-1}} คุณ ฉัน {\displaystyle \mathbf {u} _{i}} วี ฉัน {\displaystyle \mathbf {v} _{i}} ยู {\displaystyle U}
กระบวนการ Gram–Schmidt ยังใช้ได้กับลำดับอนันต์ที่นับ ได้ซึ่งเป็นอิสระเชิงเส้น { v } ด้วย ผลลัพธ์ที่ได้คือลำดับเชิงตั้งฉาก (หรือเชิงตั้งฉากปกติ) { u } ซึ่งสำหรับจำนวนธรรมชาติn นั้น ช่วงพีชคณิตของจะเหมือนกับช่วง พีชคณิต ของ วี 1 , … , วี n {\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{n}} คุณ 1 , … , คุณ n {\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{n}}
หากนำกระบวนการ Gram–Schmidt ไปใช้กับลำดับที่มีความสัมพันธ์เชิงเส้น มันจะส่งออก เวกเตอร์ 0 ในขั้นตอนที่ th โดยสมมติว่าเป็นผลรวมเชิงเส้นของหากต้องการสร้างฐานเชิงตั้งฉากปกติ อัลกอริทึมควรตรวจสอบหาเวกเตอร์ศูนย์ในผลลัพธ์และทิ้งไป เนื่องจากไม่มีพหุคูณของเวกเตอร์ศูนย์ใดที่มีความยาวเท่ากับ 1 จำนวนเวกเตอร์ที่ส่งออกโดยอัลกอริทึมจะมีขนาดเท่ากับมิติของปริภูมิที่ครอบคลุมโดยอินพุตดั้งเดิม ฉัน {\displaystyle i} วี ฉัน {\displaystyle \mathbf {v} _{i}} วี 1 , … , วี ฉัน − 1 {\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{i-1}}
รูปแบบหนึ่งของกระบวนการ Gram–Schmidt ที่ใช้การเรียกซ้ำแบบอนันต์เชิงท รานส์ไฟไนต์กับลำดับเวกเตอร์อนันต์ (ซึ่งอาจนับไม่ได้) จะได้เซตของเวกเตอร์ตั้งฉากปกติที่มีคุณสมบัติว่า สำหรับทุกค่าการเติมเต็ม ของสแปนของจะเหมือนกับ การเติมเต็มของ โดย เฉพาะอย่างยิ่ง เมื่อนำไปใช้กับฐาน (พีชคณิต) ของปริภูมิฮิลเบิร์ต (หรือโดยทั่วไปแล้ว ฐานของปริภูมิย่อยหนาแน่นใดๆ) จะได้ฐานตั้งฉากปกติ (เชิงฟังก์ชัน-วิเคราะห์) โปรดทราบว่าในกรณีทั่วไป ความไม่เท่ากันอย่างเคร่งครัดมักจะเป็นจริงแม้ว่าเซตเริ่มต้นจะเป็นอิสระเชิงเส้น และสแปนของไม่จำเป็นต้องเป็นปริภูมิย่อยของสแปนของ(แต่เป็นปริภูมิย่อยของการเติมเต็มของมัน) ( วี α ) α < λ {\displaystyle (v_{\alpha })_{\alpha <\lambda }} ( คุณ α ) α < κ {\displaystyle (u_{\alpha })_{\alpha <\kappa }} κ ≤ λ {\displaystyle \kappa \leq \lambda } α ≤ λ {\displaystyle \alpha \leq \lambda } { u β : β < min ( α , κ ) } {\displaystyle \{u_{\beta }:\beta <\min(\alpha ,\kappa )\}} { v β : β < α } {\displaystyle \{v_{\beta }:\beta <\alpha \}} κ < λ {\displaystyle \kappa <\lambda } ( u α ) α < κ {\displaystyle (u_{\alpha })_{\alpha <\kappa }} ( v α ) α < λ {\displaystyle (v_{\alpha })_{\alpha <\lambda }}
ตัวอย่าง
ปริภูมิยูคลิด พิจารณาชุดเวกเตอร์ต่อไปนี้ใน(โดยใช้ผลคูณภายใน แบบดั้งเดิม ) R 2 {\displaystyle \mathbb {R} ^{2}} S = { v 1 = [ 3 1 ] , v 2 = [ 2 2 ] } . {\displaystyle S=\left\{\mathbf {v} _{1}={\begin{bmatrix}3\\1\end{bmatrix}},\mathbf {v} _{2}={\begin{bmatrix}2\\2\end{bmatrix}}\right\}.}
ต่อไป ให้ทำการแปลงแกรม-ชมิดต์ เพื่อให้ได้ชุดเวกเตอร์ตั้งฉากกัน: u 1 = v 1 = [ 3 1 ] {\displaystyle \mathbf {u} _{1}=\mathbf {v} _{1}={\begin{bmatrix}3\\1\end{bmatrix}}} u 2 = v 2 − proj u 1 ( v 2 ) = [ 2 2 ] − proj [ 3 1 ] [ 2 2 ] = [ 2 2 ] − 8 10 [ 3 1 ] = [ − 2 / 5 6 / 5 ] . {\displaystyle \mathbf {u} _{2}=\mathbf {v} _{2}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{2})={\begin{bmatrix}2\\2\end{bmatrix}}-\operatorname {proj} _{\left[{\begin{smallmatrix}3\\1\end{smallmatrix}}\right]}{\begin{bmatrix}2\\2\end{bmatrix}}={\begin{bmatrix}2\\2\end{bmatrix}}-{\frac {8}{10}}{\begin{bmatrix}3\\1\end{bmatrix}}={\begin{bmatrix}-2/5\\6/5\end{bmatrix}}.}
เราตรวจสอบว่าเวกเตอร์และตั้งฉากกันจริงหรือไม่ โดยสังเกตว่าถ้าผลคูณดอท ของเวกเตอร์สองตัวเท่ากับ 0 แสดงว่าเวกเตอร์ทั้งสองตั้งฉากกัน u 1 {\displaystyle \mathbf {u} _{1}} u 2 {\displaystyle \mathbf {u} _{2}} ⟨ u 1 , u 2 ⟩ = ⟨ [ 3 1 ] , [ − 2 / 5 6 / 5 ] ⟩ = − 6 5 + 6 5 = 0 , {\displaystyle \langle \mathbf {u} _{1},\mathbf {u} _{2}\rangle =\left\langle {\begin{bmatrix}3\\1\end{bmatrix}},{\begin{bmatrix}-2/5\\6/5\end{bmatrix}}\right\rangle =-{\frac {6}{5}}+{\frac {6}{5}}=0,}
สำหรับเวกเตอร์ที่ไม่เป็นศูนย์ เราสามารถทำให้เวกเตอร์เป็นเวกเตอร์หน่วยได้โดยการหารด้วยขนาดของเวกเตอร์ดังที่แสดงไว้ข้างต้น: e 1 = 1 10 [ 3 1 ] {\displaystyle \mathbf {e} _{1}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}3\\1\end{bmatrix}}} e 2 = 1 40 25 [ − 2 / 5 6 / 5 ] = 1 10 [ − 1 3 ] . {\displaystyle \mathbf {e} _{2}={\frac {1}{\sqrt {40 \over 25}}}{\begin{bmatrix}-2/5\\6/5\end{bmatrix}}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}-1\\3\end{bmatrix}}.}
คุณสมบัติ ให้ เป็นผลลัพธ์ของการใช้กระบวนการแกรม-ชมิดท์กับกลุ่มเวกเตอร์ซึ่ง จะได้แผนที่GS ( v 1 , … , v k ) {\displaystyle \operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})} v 1 , … , v k {\displaystyle \mathbf {v} _{1},\dots ,\mathbf {v} _{k}} GS : ( R n ) k → ( R n ) k {\displaystyle \operatorname {GS} \colon (\mathbb {R} ^{n})^{k}\to (\mathbb {R} ^{n})^{k}}
มีคุณสมบัติดังต่อไปนี้:
มันต่อเนื่อง เป็นการ รักษา ทิศทาง ในแง่ที่ว่า...or ( v 1 , … , v k ) = or ( GS ( v 1 , … , v k ) ) {\displaystyle \operatorname {or} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})=\operatorname {or} (\operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k}))} มันสลับการทำงานกับแผนที่ตั้งฉาก: ให้เป็นเมทริกซ์ตั้งฉาก (โดยสัมพันธ์กับผลคูณภายในที่กำหนดให้) แล้วเราจะได้ว่า g : R n → R n {\displaystyle g\colon \mathbb {R} ^{n}\to \mathbb {R} ^{n}} GS ( g ( v 1 ) , … , g ( v k ) ) = ( g ( GS ( v 1 , … , v k ) 1 ) , … , g ( GS ( v 1 , … , v k ) k ) ) {\displaystyle \operatorname {GS} (g(\mathbf {v} _{1}),\dots ,g(\mathbf {v} _{k}))=\left(g(\operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})_{1}),\dots ,g(\operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})_{k})\right)}
นอกจากนี้ เวอร์ชันแบบพาราเมตริกของกระบวนการแกรม-ชมิดท์ยังให้ผลลัพธ์เป็นการหดตัวแบบดัดงอ (อย่างรุนแรง) ของกลุ่มเชิงเส้นทั่วไปไป ยังกลุ่มเชิงตั้งฉากG L ( R n ) {\displaystyle \mathrm {GL} (\mathbb {R} ^{n})} O ( R n ) {\displaystyle O(\mathbb {R} ^{n})}
เสถียรภาพเชิงตัวเลข เมื่อนำกระบวนการนี้ไปใช้ในคอมพิวเตอร์ เวกเตอร์มักจะไม่ตั้งฉากกันอย่างสมบูรณ์เนื่องจากข้อผิดพลาด ในการปัดเศษ สำหรับกระบวนการแกรม-ชมิดท์ที่อธิบายไว้ข้างต้น (บางครั้งเรียกว่า "แกรม-ชมิดท์แบบคลาสสิก") การสูญเสียความเป็นตั้งฉากนี้ร้ายแรงเป็นพิเศษ ดังนั้นจึงกล่าวได้ว่ากระบวนการแกรม-ชมิดท์ (แบบคลาสสิก) นั้นไม่เสถียรทาง ตัวเลข u k {\displaystyle \mathbf {u} _{k}}
กระบวนการแกรม-ชมิดท์สามารถทำให้เสถียรได้ด้วยการปรับเปลี่ยนเล็กน้อย ซึ่งบางครั้งเรียกว่าแกรม-ชมิดท์แบบดัดแปลง หรือ MGS วิธีการนี้ให้ผลลัพธ์เดียวกันกับสูตรดั้งเดิมในการคำนวณเลขคณิตที่แม่นยำ และทำให้เกิดข้อผิดพลาดน้อยลงในการคำนวณเลขคณิตที่มีความแม่นยำจำกัด
แทนที่จะคำนวณเวกเตอร์u ตามที่ คำนวณไว้ u k = v k − proj u 1 ( v k ) − proj u 2 ( v k ) − ⋯ − proj u k − 1 ( v k ) , {\displaystyle \mathbf {u} _{k}=\mathbf {v} _{k}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{k})-\operatorname {proj} _{\mathbf {u} _{2}}(\mathbf {v} _{k})-\cdots -\operatorname {proj} _{\mathbf {u} _{k-1}}(\mathbf {v} _{k}),} u k ( 1 ) = v k − proj u 1 ( v k ) , u k ( 2 ) = u k ( 1 ) − proj u 2 ( u k ( 1 ) ) , ⋮ u k ( k − 2 ) = u k ( k − 3 ) − proj u k − 2 ( u k ( k − 3 ) ) , u k ( k − 1 ) = u k ( k − 2 ) − proj u k − 1 ( u k ( k − 2 ) ) , e k = u k ( k − 1 ) ‖ u k ( k − 1 ) ‖ {\displaystyle {\begin{aligned}\mathbf {u} _{k}^{(1)}&=\mathbf {v} _{k}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{k}),\\\mathbf {u} _{k}^{(2)}&=\mathbf {u} _{k}^{(1)}-\operatorname {proj} _{\mathbf {u} _{2}}\left(\mathbf {u} _{k}^{(1)}\right),\\&\;\;\vdots \\\mathbf {u} _{k}^{(k-2)}&=\mathbf {u} _{k}^{(k-3)}-\operatorname {proj} _{\mathbf {u} _{k-2}}\left(\mathbf {u} _{k}^{(k-3)}\right),\\\mathbf {u} _{k}^{(k-1)}&=\mathbf {u} _{k}^{(k-2)}-\operatorname {proj} _{\mathbf {u} _{k-1}}\left(\mathbf {u} _{k}^{(k-2)}\right),\\\mathbf {e} _{k}&={\frac {\mathbf {u} _{k}^{(k-1)}}{\left\|\mathbf {u} _{k}^{(k-1)}\right\|}}\end{aligned}}}
วิธีการนี้ถูกนำมาใช้ในแอนิเมชันก่อนหน้านี้ โดยใช้เวกเตอร์ตัวกลางเมื่อทำการตั้งฉากกับเวกเตอร์สีน้ำเงิน v 3 ′ {\displaystyle \mathbf {v} '_{3}} v 3 {\displaystyle \mathbf {v} _{3}}
ต่อไปนี้เป็นคำอธิบายเพิ่มเติมของอัลกอริธึมที่ปรับปรุงแล้วในขั้นตอนแรก เราจะสร้างเวกเตอร์โดยการลบส่วนประกอบตามทิศทางของในสูตรหลังจากขั้นตอนนี้ เราจะมีเวกเตอร์ตั้งฉากที่เราต้องการสองตัวแล้วคือแต่เรายังทำให้ตั้งฉากกับ อีกด้วยต่อไป เราจะทำให้เวกเตอร์ที่เหลือตั้งฉากกับซึ่งหมายความว่าเราคำนวณโดยการลบตอนนี้เราได้จัดเก็บเวกเตอร์ที่เวกเตอร์สามตัวแรกตั้งฉากกับ แล้วและเวกเตอร์ที่เหลือตั้งฉากกับ แล้วดังที่ควรจะชัดเจนแล้ว ขั้นตอนต่อไปคือการทำให้ ตั้งฉากกับดำเนินการในลักษณะนี้ต่อไป เราจะพบชุดเวกเตอร์ตั้งฉากทั้งหมดหากต้องการเวกเตอร์ตั้งฉากปกติ เราจะทำการทำให้เป็นเวกเตอร์หน่วยไปเรื่อยๆ เพื่อให้ตัวส่วนในสูตรการลบกลายเป็นหนึ่ง v 1 , v 2 , … , v n {\displaystyle \mathbf {v} _{1},\mathbf {v} _{2},\dots ,\mathbf {v} _{n}} v 1 , v 2 ( 1 ) , … , v n ( 1 ) {\displaystyle \mathbf {v} _{1},\mathbf {v} _{2}^{(1)},\dots ,\mathbf {v} _{n}^{(1)}} v 1 {\displaystyle \mathbf {v} _{1}} v k ( 1 ) := v k − ⟨ v k , v 1 ⟩ ⟨ v 1 , v 1 ⟩ v 1 {\displaystyle \mathbf {v} _{k}^{(1)}:=\mathbf {v} _{k}-{\frac {\langle \mathbf {v} _{k},\mathbf {v} _{1}\rangle }{\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle }}\mathbf {v} _{1}} u 1 , … , u n {\displaystyle \mathbf {u} _{1},\dots ,\mathbf {u} _{n}} u 1 = v 1 , u 2 = v 2 ( 1 ) {\displaystyle \mathbf {u} _{1}=\mathbf {v} _{1},\mathbf {u} _{2}=\mathbf {v} _{2}^{(1)}} v 3 ( 1 ) , … , v n ( 1 ) {\displaystyle \mathbf {v} _{3}^{(1)},\dots ,\mathbf {v} _{n}^{(1)}} u 1 {\displaystyle \mathbf {u} _{1}} u 2 = v 2 ( 1 ) {\displaystyle \mathbf {u} _{2}=\mathbf {v} _{2}^{(1)}} v 3 ( 2 ) , v 4 ( 2 ) , … , v n ( 2 ) {\displaystyle \mathbf {v} _{3}^{(2)},\mathbf {v} _{4}^{(2)},\dots ,\mathbf {v} _{n}^{(2)}} v k ( 2 ) := v k ( 1 ) − ⟨ v k ( 1 ) , u 2 ⟩ ⟨ u 2 , u 2 ⟩ u 2 {\displaystyle \mathbf {v} _{k}^{(2)}:=\mathbf {v} _{k}^{(1)}-{\frac {\langle \mathbf {v} _{k}^{(1)},\mathbf {u} _{2}\rangle }{\langle \mathbf {u} _{2},\mathbf {u} _{2}\rangle }}\mathbf {u} _{2}} v 1 , v 2 ( 1 ) , v 3 ( 2 ) , v 4 ( 2 ) , … , v n ( 2 ) {\displaystyle \mathbf {v} _{1},\mathbf {v} _{2}^{(1)},\mathbf {v} _{3}^{(2)},\mathbf {v} _{4}^{(2)},\dots ,\mathbf {v} _{n}^{(2)}} u 1 , u 2 , u 3 {\displaystyle \mathbf {u} _{1},\mathbf {u} _{2},\mathbf {u} _{3}} u 1 , u 2 {\displaystyle \mathbf {u} _{1},\mathbf {u} _{2}} v 4 ( 2 ) , … , v n ( 2 ) {\displaystyle \mathbf {v} _{4}^{(2)},\dots ,\mathbf {v} _{n}^{(2)}} u 3 = v 3 ( 2 ) {\displaystyle \mathbf {u} _{3}=\mathbf {v} _{3}^{(2)}} u 1 , … , u n {\displaystyle \mathbf {u} _{1},\dots ,\mathbf {u} _{n}}
อัลกอริทึม อัลกอริทึม MATLAB ต่อไปนี้เป็นการนำวิธีการสร้างเวกเตอร์ตั้งฉากปกติแบบคลาสสิกของ Gram–Schmidt มาใช้ โดยเวกเตอร์v , ..., v (คอลัมน์ของเมทริกซ์Vโดยที่V(:,j)คือเวกเตอร์ที่ th) จะถูกแทนที่ด้วยเวกเตอร์ตั้งฉากปกติ (คอลัมน์ของ) ซึ่งครอบคลุมปริภูมิย่อยเดียวกัน j {\displaystyle j} U
ฟังก์ชัน U = gramschmidt ( V ) [ n , k ] = ขนาด ( V ); U = ศูนย์ ( n , k ); U (:, 1 ) = V (:, 1 ) / ปกติ ( V (:, 1 )); สำหรับ i = 2 : k U (:, i ) = V (:, i ); สำหรับ j = 1 : i - 1 U (:, i ) = U (:, i ) - ( U (:, j ) '* U (:, i )) * U (:, j ); จบ U (:, i ) = U (:, i ) / norm ( U (:, i )); จบ จบ ต้นทุนของอัลกอริทึมนี้คือการดำเนินการจุดลอยตัวแบบอสิ มโทติก O( nk 2 ) โดยที่n คือมิติของเวกเตอร์
โดยการกำจัดแบบเกาส์เซียน ถ้าแถว{ v , ..., v } ถูกเขียนเป็นเมทริกซ์การใช้การกำจัดแบบเกาส์เซียน กับเมทริกซ์เสริมจะสร้างเวกเตอร์ตั้งฉากแทนอย่างไรก็ตาม เมทริกซ์จะต้องถูกแปลงเป็นรูปแบบขั้นบันไดแถว โดยใช้เพียงการดำเนินการแถว ของการบวกผลคูณสเกลาร์ของแถวหนึ่งกับอีกแถวหนึ่ง[ 3 ] ตัวอย่างเช่น เมื่อพิจารณาดังข้างต้น เราจะได้ A {\displaystyle A} [ A A T | A ] {\displaystyle \left[AA^{\mathsf {T}}|A\right]} A {\displaystyle A} A A T {\displaystyle AA^{\mathsf {T}}} v 1 = [ 3 1 ] , v 2 = [ 2 2 ] {\displaystyle \mathbf {v} _{1}={\begin{bmatrix}3&1\end{bmatrix}},\mathbf {v} _{2}={\begin{bmatrix}2&2\end{bmatrix}}} [ A A T | A ] = [ 10 8 3 1 8 8 2 2 ] {\displaystyle \left[AA^{\mathsf {T}}|A\right]=\left[{\begin{array}{rr|rr}10&8&3&1\\8&8&2&2\end{array}}\right]}
และการลดรูปนี้ให้เป็นรูปแบบขั้นบันไดแถว จะได้ผลลัพธ์ดังนี้ [ 1 .8 .3 .1 0 1 − .25 .75 ] {\displaystyle \left[{\begin{array}{rr|rr}1&.8&.3&.1\\0&1&-.25&.75\end{array}}\right]}
เวกเตอร์ที่ถูกทำให้เป็นหน่วยก็จะเป็น ดังตัวอย่างข้างต้น e 1 = 1 .3 2 + .1 2 [ .3 .1 ] = 1 10 [ 3 1 ] {\displaystyle \mathbf {e} _{1}={\frac {1}{\sqrt {.3^{2}+.1^{2}}}}{\begin{bmatrix}.3&.1\end{bmatrix}}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}3&1\end{bmatrix}}} e 2 = 1 .25 2 + .75 2 [ − .25 .75 ] = 1 10 [ − 1 3 ] , {\displaystyle \mathbf {e} _{2}={\frac {1}{\sqrt {.25^{2}+.75^{2}}}}{\begin{bmatrix}-.25&.75\end{bmatrix}}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}-1&3\end{bmatrix}},}
ผลลัพธ์ของกระบวนการแกรม-ชมิดท์สามารถแสดงได้ในรูปสูตรที่ไม่ใช้การเวียนเกิด โดยใช้ดีเทอร์มิแนน ต์
e j = 1 D j − 1 D j | ⟨ v 1 , v 1 ⟩ ⟨ v 2 , v 1 ⟩ ⋯ ⟨ v j , v 1 ⟩ ⟨ v 1 , v 2 ⟩ ⟨ v 2 , v 2 ⟩ ⋯ ⟨ v j , v 2 ⟩ ⋮ ⋮ ⋱ ⋮ ⟨ v 1 , v j − 1 ⟩ ⟨ v 2 , v j − 1 ⟩ ⋯ ⟨ v j , v j − 1 ⟩ v 1 v 2 ⋯ v j | {\displaystyle \mathbf {e} _{j}={\frac {1}{\sqrt {D_{j-1}D_{j}}}}{\begin{vmatrix}\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{1}\rangle \\\langle \mathbf {v} _{1},\mathbf {v} _{2}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{2}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{2}\rangle \\\vdots &\vdots &\ddots &\vdots \\\langle \mathbf {v} _{1},\mathbf {v} _{j-1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{j-1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{j-1}\rangle \\\mathbf {v} _{1}&\mathbf {v} _{2}&\cdots &\mathbf {v} _{j}\end{vmatrix}}}
u j = 1 D j − 1 | ⟨ v 1 , v 1 ⟩ ⟨ v 2 , v 1 ⟩ ⋯ ⟨ v j , v 1 ⟩ ⟨ v 1 , v 2 ⟩ ⟨ v 2 , v 2 ⟩ ⋯ ⟨ v j , v 2 ⟩ ⋮ ⋮ ⋱ ⋮ ⟨ v 1 , v j − 1 ⟩ ⟨ v 2 , v j − 1 ⟩ ⋯ ⟨ v j , v j − 1 ⟩ v 1 v 2 ⋯ v j | {\displaystyle \mathbf {u} _{j}={\frac {1}{D_{j-1}}}{\begin{vmatrix}\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{1}\rangle \\\langle \mathbf {v} _{1},\mathbf {v} _{2}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{2}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{2}\rangle \\\vdots &\vdots &\ddots &\vdots \\\langle \mathbf {v} _{1},\mathbf {v} _{j-1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{j-1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{j-1}\rangle \\\mathbf {v} _{1}&\mathbf {v} _{2}&\cdots &\mathbf {v} _{j}\end{vmatrix}}}
โดยที่และ สำหรับคือตัวกำหนดแกรม D 0 = 1 {\displaystyle D_{0}=1} j ≥ 1 {\displaystyle j\geq 1} D j {\displaystyle D_{j}}
D j = | ⟨ v 1 , v 1 ⟩ ⟨ v 2 , v 1 ⟩ ⋯ ⟨ v j , v 1 ⟩ ⟨ v 1 , v 2 ⟩ ⟨ v 2 , v 2 ⟩ ⋯ ⟨ v j , v 2 ⟩ ⋮ ⋮ ⋱ ⋮ ⟨ v 1 , v j ⟩ ⟨ v 2 , v j ⟩ ⋯ ⟨ v j , v j ⟩ | . {\displaystyle D_{j}={\begin{vmatrix}\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{1}\rangle \\\langle \mathbf {v} _{1},\mathbf {v} _{2}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{2}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{2}\rangle \\\vdots &\vdots &\ddots &\vdots \\\langle \mathbf {v} _{1},\mathbf {v} _{j}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{j}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{j}\rangle \end{vmatrix}}.}
โปรดทราบว่านิพจน์สำหรับเป็นดีเทอร์มิแนนต์ "เชิงรูปแบบ" กล่าวคือ เมทริกซ์ประกอบด้วยทั้งสเกลาร์และเวกเตอร์ ความหมายของนิพจน์นี้ถูกกำหนดให้เป็นผลลัพธ์ของการขยายโคแฟกเตอร์ ตามแนวแถวของเวกเตอร์ u k {\displaystyle \mathbf {u} _{k}}
สูตรหาค่าดีเทอร์มิแนนต์ของวิธีแกรม-ชมิดต์นั้นใช้เวลาในการคำนวณช้ากว่า (แบบเลขชี้กำลัง) เมื่อเทียบกับอัลกอริธึมแบบเรียกซ้ำที่อธิบายไว้ข้างต้น โดยส่วนใหญ่แล้วจึงมีประโยชน์ในเชิงทฤษฎีเท่านั้น
แสดงออกมาโดยใช้พีชคณิตเชิงเรขาคณิต เมื่อแสดงโดยใช้สัญลักษณ์ที่ใช้ในพีชคณิตเชิงเรขาคณิต ผลลัพธ์ที่ไม่ปกติของกระบวนการ Gram–Schmidt สามารถแสดงได้ดังนี้ ซึ่งเทียบเท่ากับนิพจน์ที่ใช้ตัวดำเนินการที่กำหนดไว้ข้างต้น ผลลัพธ์สามารถแสดงได้เทียบเท่าดังนี้[ 4 ] ซึ่งมีความเกี่ยวข้องอย่างใกล้ชิดกับนิพจน์ที่ใช้ดีเทอร์มิแนนต์ข้างต้น u k = v k − ∑ j = 1 k − 1 ( v k ⋅ u j ) u j − 1 , {\displaystyle \mathbf {u} _{k}=\mathbf {v} _{k}-\sum _{j=1}^{k-1}(\mathbf {v} _{k}\cdot \mathbf {u} _{j})\mathbf {u} _{j}^{-1}\ ,} proj {\displaystyle \operatorname {proj} } u k = v k ∧ v k − 1 ∧ ⋅ ⋅ ⋅ ∧ v 1 ( v k − 1 ∧ ⋅ ⋅ ⋅ ∧ v 1 ) − 1 , {\displaystyle \mathbf {u} _{k}=\mathbf {v} _{k}\wedge \mathbf {v} _{k-1}\wedge \cdot \cdot \cdot \wedge \mathbf {v} _{1}(\mathbf {v} _{k-1}\wedge \cdot \cdot \cdot \wedge \mathbf {v} _{1})^{-1},}
ทางเลือกอื่นๆ อัลกอริทึมการสร้างเวกเตอร์ ตั้งฉาก อื่นๆใช้การแปลง Householder หรือการหมุน Givens อัลกอริทึมที่ใช้การแปลง Householder มีเสถียรภาพมากกว่ากระบวนการ Gram–Schmidt ที่มีเสถียรภาพ ในทางกลับกัน กระบวนการ Gram–Schmidt จะสร้างเวกเตอร์ตั้งฉากที่ i หลังจากรอบการทำซ้ำที่ i ในขณะที่การสร้างเวกเตอร์ตั้งฉากโดยใช้การสะท้อน Householder จะสร้างเวกเตอร์ทั้งหมดในตอนท้ายเท่านั้น ทำให้มีเพียงกระบวนการ Gram–Schmidt เท่านั้นที่สามารถนำไปใช้กับวิธีการวนซ้ำ เช่นการวนซ้ำของ Arnoldi ได้ j {\displaystyle j} j {\displaystyle j}
อีกทางเลือกหนึ่งได้รับแรงบันดาลใจจากการใช้การแยกส่วนแบบ Cholesky เพื่อหาเมทริกซ์ผกผันของสมการปกติในวิธีการกำลังสองน้อยที่สุดเชิง เส้น ให้เป็น เมทริกซ์ที่ มีอันดับคอลัมน์เต็ม ซึ่งคอลัมน์จำเป็นต้องตั้งฉากกัน เมทริกซ์นี้เป็นเมทริกซ์เฮอร์มิเชียน และเป็นบวกแน่นอน ดังนั้นจึงสามารถเขียนได้โดยใช้การแยกส่วนแบบ Cholesky เมทริกซ์สามเหลี่ยมล่างที่มีค่าแนวทแยงเป็นบวกอย่างเคร่งครัดนั้น สามารถหาเมทริกซ์ผกผัน ได้ จากนั้นคอลัมน์ของเมทริกซ์จะเป็นออร์โทนอร์มอล และครอบคลุม ปริภูมิย่อยเดียวกันกับคอลัมน์ของเมทริกซ์ดั้งเดิมการใช้ผลคูณอย่างชัดเจน ทำให้ขั้นตอนวิธีไม่เสถียร โดยเฉพาะอย่างยิ่งหาก ค่าสภาพ ของผลคูณมีขนาดใหญ่ อย่างไรก็ตาม ขั้นตอนวิธีนี้ถูกนำไปใช้ในทางปฏิบัติและนำไปใช้ในซอฟต์แวร์บางแพ็กเกจเนื่องจากมีประสิทธิภาพสูงและเรียบง่าย V {\displaystyle V} V ∗ V {\displaystyle V^{*}V} V ∗ V = L L ∗ , {\displaystyle V^{*}V=LL^{*},} L {\displaystyle L} U = V ( L − 1 ) ∗ {\displaystyle U=V\left(L^{-1}\right)^{*}} V {\displaystyle V} V ∗ V {\displaystyle V^{*}V}
ในกลศาสตร์ควอนตัม มีแผนการตั้งฉากหลายแบบที่มีลักษณะที่เหมาะสมกับการใช้งานบางอย่างมากกว่า Gram–Schmidt ดั้งเดิม อย่างไรก็ตาม มันยังคงเป็นอัลกอริทึมที่เป็นที่นิยมและมีประสิทธิภาพแม้กระทั่งสำหรับการคำนวณโครงสร้างอิเล็กตรอนที่ใหญ่ที่สุด[ 5 ]
ความซับซ้อนของเวลาการทำงาน การตั้งฉากแบบ Gram-Schmidt สามารถทำได้ในเวลาพหุนามที่แข็งแกร่ง การวิเคราะห์เวลาการทำงานคล้ายกับการกำจัดแบบเกาส์เซียน [ 6 ] : 40
ดูเพิ่มเติม
หมายเหตุ ^ ในกรณีที่ซับซ้อนนี้ สมมติว่าผลคูณภายในเป็นเชิงเส้นในอาร์กิวเมนต์แรกและเป็นเชิงเส้นคู่ควบในอาร์กิวเมนต์ที่สอง ในทางฟิสิกส์ ธรรมเนียมที่ใช้กันทั่วไปมากกว่าคือความเป็นเชิงเส้นในอาร์กิวเมนต์ที่สอง ซึ่งในกรณีนี้เรากำหนดproj u ( v ) = ⟨ u , v ⟩ ⟨ u , u ⟩ u . {\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )={\frac {\langle \mathbf {u} ,\mathbf {v} \rangle }{\langle \mathbf {u} ,\mathbf {u} \rangle }}\,\mathbf {u} .}
แหล่งที่มา Bau III, David; Trefethen, Lloyd N. (1997), พีชคณิตเชิงเส้นเชิงตัวเลข , ฟิลาเดลเฟีย: สมาคมคณิตศาสตร์อุตสาหกรรมและประยุกต์, ISBN 978-0-89871-361-9 .Golub, Gene H. ; Van Loan, Charles F. (1996), การคำนวณเมทริกซ์ (ฉบับที่ 3), Johns Hopkins, ISBN 978-0-8018-5414-9 .เกรุบ, เวอร์เนอร์ (1975), พีชคณิตเชิงเส้น (ฉบับที่ 4), สปริงเกอร์ .Soliverez, CE; Gagliano, E. (1985), "Orthonormalization on the plane: a geometric approach" (PDF) , Mex. J. Phys. , 31 (4): 743– 758, เก็บถาวรจากต้นฉบับ(PDF) เมื่อ 2014-03-07 , เรียกดูเมื่อ2013-06-22 .
ลิงก์ภายนอก "การตั้งฉาก" , สารานุกรมคณิตศาสตร์ , EMS Press , 2001 [1994] บทเรียนคณิตศาสตร์จากวิทยาลัยฮาร์วีย์ มัดด์ เกี่ยวกับอัลกอริทึมแกรม-ชมิดต์ การใช้คำศัพท์ทางคณิตศาสตร์บางคำที่เก่าแก่ที่สุดเท่าที่ทราบ: Gบทความ "Gram-Schmidt orthogonalization" มีข้อมูลและแหล่งอ้างอิงเกี่ยวกับที่มาของวิธีการนี้ การสาธิต: กระบวนการแกรม-ชมิดท์ในระนาบและกระบวนการแกรม-ชมิดท์ในอวกาศ แอปเพล็ตการสร้างความตั้งฉากแบบแกรม-ชมิดท์ รูทีน NAG Gram–Schmidt สำหรับการสร้างเวกเตอร์ตั้งฉาก n ตัวที่มีอันดับ m หลักฐาน: Raymond Puzio, Keenan Kidwell. "หลักฐานของอัลกอริทึมการตั้งฉากแบบ Gram-Schmidt" (เวอร์ชัน 8). PlanetMath.org.