Skip to main content
Вернуться к руководствам
6 min read4 Шаги

How to Calculate Gram-Schmidt Orthogonalization: Step-by-Step Guide

Learn to manually perform Gram-Schmidt orthogonalization. This guide covers the formula, a worked example, common pitfalls, and when to use a calculator.

Оставьте математику — воспользуйтесь калькулятором

Пошаговые инструкции

1

Gather Your Inputs and Understand the Goal

Begin by identifying the set of linearly independent vectors `{v1, v2, ..., vk}` that you wish to orthogonalize. Your goal is to transform this set into an orthogonal set `{u1, u2, ..., uk}` and optionally an orthonormal set `{e1, e2, ..., ek}`.

2

Initialize the First Orthogonal Vector

The first vector in your orthogonal set, `u1`, is simply equal to your first input vector, `v1`. `u1 = v1`

3

Calculate Orthogonal Vectors Successively Using Projections

For each subsequent input vector `vk` (where `k > 1`), calculate the corresponding orthogonal vector `uk` by subtracting its projections onto all previously determined orthogonal vectors (`u1, u2, ..., u(k-1)`). Use the formula: `uk = vk - proj_{u1} vk - proj_{u2} vk - ... - proj_{u(k-1)} vk` Remember that `proj_u v = ((v · u) / (u · u)) * u`. Perform these calculations step-by-step for each `uk`, ensuring accuracy in dot products and vector subtractions.

4

Normalize to Form an Orthonormal Basis (Optional)

If an orthonormal basis is required, normalize each orthogonal vector `uk` to produce a unit vector `ek`. This is done by dividing `uk` by its magnitude `||uk||`. `ek = uk / ||uk||` Calculate the magnitude of each `uk` using `||uk|| = sqrt(u_k1^2 + u_k2^2 + ... + u_kn^2)` and then perform the division.

The Gram-Schmidt process is a fundamental algorithm in linear algebra for constructing an orthogonal or orthonormal basis from a set of linearly independent vectors in an inner product space. This process is iterative, building each new orthogonal vector by subtracting its projection onto the previously constructed orthogonal vectors. Understanding this manual calculation is crucial for grasping the underlying principles of vector spaces and projections.

Prerequisites

Before diving into the Gram-Schmidt process, a firm understanding of the following concepts is essential:

  • Dot Product (Scalar Product): For two vectors a = [a1, a2, ..., an] and b = [b1, b2, ..., bn], their dot product is a · b = a1*b1 + a2*b2 + ... + an*bn. The dot product is used to determine the scalar projection of one vector onto another.
  • Vector Magnitude (Norm): The magnitude (or length) of a vector v = [v1, v2, ..., vn] is denoted as ||v|| = sqrt(v1^2 + v2^2 + ... + vn^2). This is used for normalization.
  • Vector Normalization: A unit vector e in the direction of v is e = v / ||v||. This creates a vector with a magnitude of 1.
  • Vector Projection: The projection of vector v onto vector u is given by the formula: proj_u v = ((v · u) / (u · u)) * u. This calculates the component of v that lies in the direction of u.

The Gram-Schmidt Process Formula

Given a set of linearly independent vectors {v1, v2, ..., vk}, the Gram-Schmidt process constructs an orthogonal set {u1, u2, ..., uk} as follows:

  1. For the first vector: u1 = v1

  2. For subsequent vectors (k > 1): uk = vk - proj_{u1} vk - proj_{u2} vk - ... - proj_{u(k-1)} vk

    In expanded form, this is: uk = vk - ((vk · u1) / (u1 · u1)) * u1 - ((vk · u2) / (u2 · u2)) * u2 - ... - ((vk · u(k-1)) / (u(k-1) · u(k-1))) * u(k-1)

To obtain an orthonormal basis {e1, e2, ..., ek}, each orthogonal vector uk is then normalized:

ek = uk / ||uk||

Worked Example: Orthogonalizing Three Vectors in R^3

Let's orthogonalize the following set of linearly independent vectors: v1 = [1, 1, 0] v2 = [1, 0, 1] v3 = [0, 1, 1]

Step 1: Initialize the First Orthogonal Vector

The first orthogonal vector u1 is simply v1. u1 = v1 = [1, 1, 0]

Step 2: Calculate the Second Orthogonal Vector

To find u2, we subtract the projection of v2 onto u1 from v2.

  • Calculate v2 · u1: [1, 0, 1] · [1, 1, 0] = (1*1) + (0*1) + (1*0) = 1
  • Calculate u1 · u1: [1, 1, 0] · [1, 1, 0] = (1*1) + (1*1) + (0*0) = 2
  • Calculate proj_{u1} v2: (1 / 2) * [1, 1, 0] = [0.5, 0.5, 0]
  • Calculate u2: u2 = v2 - proj_{u1} v2 = [1, 0, 1] - [0.5, 0.5, 0] = [0.5, -0.5, 1]

Step 3: Calculate the Third Orthogonal Vector

To find u3, we subtract the projections of v3 onto u1 and u2 from v3.

  • Calculate proj_{u1} v3:

    • v3 · u1: [0, 1, 1] · [1, 1, 0] = (0*1) + (1*1) + (1*0) = 1
    • u1 · u1: (already calculated) 2
    • proj_{u1} v3 = (1 / 2) * [1, 1, 0] = [0.5, 0.5, 0]
  • Calculate proj_{u2} v3:

    • v3 · u2: [0, 1, 1] · [0.5, -0.5, 1] = (0*0.5) + (1*-0.5) + (1*1) = 0 - 0.5 + 1 = 0.5
    • u2 · u2: [0.5, -0.5, 1] · [0.5, -0.5, 1] = (0.5*0.5) + (-0.5*-0.5) + (1*1) = 0.25 + 0.25 + 1 = 1.5
    • proj_{u2} v3 = (0.5 / 1.5) * [0.5, -0.5, 1] = (1/3) * [0.5, -0.5, 1] = [1/6, -1/6, 1/3]
  • Calculate u3: u3 = v3 - proj_{u1} v3 - proj_{u2} v3 u3 = [0, 1, 1] - [0.5, 0.5, 0] - [1/6, -1/6, 1/3] u3 = [-0.5, 0.5, 1] - [1/6, -1/6, 1/3] u3 = [-3/6, 3/6, 1] - [1/6, -1/6, 1/3] u3 = [-4/6, 4/6, 2/3] = [-2/3, 2/3, 2/3]

So, the orthogonal basis is {u1 = [1, 1, 0], u2 = [0.5, -0.5, 1], u3 = [-2/3, 2/3, 2/3]}.

Step 4: Normalize for an Orthonormal Basis

To obtain an orthonormal basis, we normalize each u vector.

  • For e1: ||u1|| = sqrt(1^2 + 1^2 + 0^2) = sqrt(2) e1 = u1 / ||u1|| = [1/sqrt(2), 1/sqrt(2), 0]

  • For e2: ||u2|| = sqrt(0.5^2 + (-0.5)^2 + 1^2) = sqrt(0.25 + 0.25 + 1) = sqrt(1.5) e2 = u2 / ||u2|| = [0.5/sqrt(1.5), -0.5/sqrt(1.5), 1/sqrt(1.5)] (Can be written as [1/sqrt(6), -1/sqrt(6), 2/sqrt(6)] after multiplying by 2/2 and simplifying sqrt(1.5) = sqrt(3/2) = sqrt(6)/2)

  • For e3: ||u3|| = sqrt((-2/3)^2 + (2/3)^2 + (2/3)^2) = sqrt(4/9 + 4/9 + 4/9) = sqrt(12/9) = sqrt(4/3) = 2/sqrt(3) e3 = u3 / ||u3|| = [-2/3 / (2/sqrt(3)), 2/3 / (2/sqrt(3)), 2/3 / (2/sqrt(3))] e3 = [-1/sqrt(3), 1/sqrt(3), 1/sqrt(3)]

The orthonormal basis is {e1 = [1/sqrt(2), 1/sqrt(2), 0], e2 = [1/sqrt(6), -1/sqrt(6), 2/sqrt(6)], e3 = [-1/sqrt(3), 1/sqrt(3), 1/sqrt(3)]}.

Common Pitfalls to Avoid

  • Calculation Errors: The Gram-Schmidt process involves numerous dot products, scalar multiplications, and vector subtractions. A single arithmetic error can propagate and invalidate subsequent calculations. Double-check each step.
  • Incorrect Projection Formula: Ensure you are correctly applying proj_u v = ((v · u) / (u · u)) * u. A common mistake is using ||u|| instead of u · u in the denominator, or multiplying by v instead of u at the end.
  • Forgetting Previous Orthogonal Vectors: When calculating uk, remember to subtract the projections onto all previously found orthogonal vectors (u1, ..., u(k-1)), not just the immediately preceding one.
  • Not Starting with Linearly Independent Vectors: The Gram-Schmidt process assumes the input vectors are linearly independent. If they are not, one of the uk vectors might become the zero vector, which cannot be normalized.
  • Precision Issues: When dealing with decimals, rounding too early can lead to inaccuracies, especially in higher dimensions. Keep fractions or carry sufficient decimal places until the final step.

When to Use a Gram-Schmidt Calculator

While performing manual calculations is excellent for understanding, a Gram-Schmidt calculator offers significant advantages for practical applications:

  • Efficiency for Large Sets: Manually processing more than three vectors or vectors in higher dimensions (e.g., R^4, R^5) becomes extremely tedious and error-prone.
  • Accuracy: Calculators eliminate arithmetic mistakes, ensuring precise results, especially with complex numbers or irrational values.
  • Verification: Use a calculator to quickly verify your manual calculations and identify where potential errors might have occurred.
  • Time-Saving in Professional Settings: In fields like engineering, computer graphics, or data science, where orthonormal bases are frequently required, a calculator or software tool is indispensable for speed and reliability.

Готовы рассчитать?

Откажитесь от ручной работы и получите мгновенные результаты.

Открыть калькулятор

Сопутствующий смарт-контент

Настройки