Function Repository Resource:

ProjectOnSubspace

Source Notebook

Project a vector onto a subspace

Contributed by: Dennis M Schneider

ResourceFunction["ProjectOnSubspace"][u,v]

finds the projection of the vector u onto the vector v.

ResourceFunction["ProjectOnSubspace"][u,v,ip]

finds the projection using the inner product ip.

ResourceFunction["ProjectOnSubspace"][u,{v1,v2,}]

finds the projection of u onto the subspace spanned by {v1,v2,}.

ResourceFunction["ProjectOnSubspace"][u,{v1,v2,},ip]

finds the projection onto the subspace using the inner product ip.

Examples

Basic Examples (3) 

The projection of one vector onto a 1D subspace:

In[1]:=
ResourceFunction["ProjectOnSubspace"][{1, 1}, {{2, 1}}]
Out[1]=

This is the same as Mathematica’s Projection command, which projects one vector onto another:

In[2]:=
Projection[{1, 1}, {2, 1}]
Out[2]=

The projection of a vector onto a subspace spanned by a list of vectors:

In[3]:=
ResourceFunction[
 "ProjectOnSubspace"][{-1, -1, 1, 1}, {{1, 0, 1, 1}, {0, 1, 1, 2}, {2, -2, 0, -2}}]
Out[3]=

The projection using a weighted inner product:

In[4]:=
ResourceFunction[
 "ProjectOnSubspace"][{-1, -1, 1, 1}, {{1, 0, 1, 1}, {0, 1, 1, 2}, {2, -2, 0, -2}}, ({1, 2, 3, 4} #1) . #2 &]
Out[4]=

Scope (3) 

Vectors with symbolic entries are assumed to represent complex numbers:

In[5]:=
ResourceFunction[
  "ProjectOnSubspace"][{a, b}, {{c, d}}] // FullSimplify
Out[5]=

By using Dot as the inner product, Mathematica will assume all symbolic entries are real:

In[6]:=
ResourceFunction["ProjectOnSubspace"][{a, b}, {c, d}, Dot]
Out[6]=

Project a vector in onto a subspace of :

In[7]:=
ResourceFunction[
 "ProjectOnSubspace"][{I, 1 + I, 3 - 2 I, -2}, {{2 - 2 I, 2 - 2 I, -2, -2 + I}, {-I, -2 + I, -2 + 2 I, I}}]
Out[7]=

Project a vector in onto a subspace of having an orthogonal basis:

In[8]:=
ResourceFunction[
 "ProjectOnSubspace"][{1, 1 + I, 3 - 2 I}, {{-((1 - I)/Sqrt[11]), (2 + I)/Sqrt[
   11], -((2 I)/Sqrt[11])}, {(2 - I/3)/Sqrt[11], (1/3 - I)/Sqrt[11], (
   2 - (4 I)/3)/Sqrt[11]}}]
Out[8]=

Verify that the basis is orthonormal:

In[9]:=
Outer[Conjugate[#1] . #2 &, {{-((1 - I)/Sqrt[11]), (2 + I)/Sqrt[
   11], -((2 I)/Sqrt[11])}, {(2 - I/3)/Sqrt[11], (1/3 - I)/Sqrt[11], (
   2 - (4 I)/3)/Sqrt[11]}}, {{-((1 - I)/Sqrt[11]), (2 + I)/Sqrt[
   11], -((2 I)/Sqrt[11])}, {(2 - I/3)/Sqrt[11], (1/3 - I)/Sqrt[11], (
   2 - (4 I)/3)/Sqrt[11]}}, 1]
Out[9]=

Since the basis is orthonormal, the projection is the sum of the projections of the vector onto the orthonormal basis vectors:

In[10]:=
Total[Map[
  ResourceFunction[
    "ProjectOnSubspace"][{1, 1 + I, 3 - 2 I}, #] &, {{-((1 - I)/Sqrt[
     11]), (2 + I)/Sqrt[11], -((2 I)/Sqrt[11])}, {(2 - I/3)/Sqrt[
    11], (1/3 - I)/Sqrt[11], (2 - (4 I)/3)/Sqrt[11]}}]]
Out[10]=

Projections in spaces of matrices (2) 

The projection of one matrix onto another using the standard matrix inner product:

In[11]:=
ResourceFunction[
 "ProjectOnSubspace"][{{1, 2}, {3, 4}}, {{0, 1}, {1, 0}}, Tr[Transpose[#1] . #2] &]
Out[11]=

The projection of a matrix onto a subspace of the space of 2×2 symmetric matrices using the standard matrix inner product:

In[12]:=
ResourceFunction[
 "ProjectOnSubspace"][{{1, 1}, {2, 2}}, {{{1, 2}, {2, 0}}, {{3, 1}, {1, 5}}}, (Tr[
    Transpose[#1] . #2] &)]
Out[12]=

Projections in function spaces (1) 

The projection of x2 onto the subspace of trigonometric polynomials of degree 1 with the inner product Integrate[#1#2,{x,0,2π}]& gives the least-squares approximation to x2 by a function in the subspace of C[0,2π] spanned by 1,Sin[x],Cos[x]:

In[13]:=
ResourceFunction["ProjectOnSubspace"][x^2, {1, Sin[x], Cos[x]}, Integrate[#1 #2, {x, 0, 2 \[Pi]}] &]
Out[13]=

Publisher

Dennis M Schneider

Version History

  • 1.0.0 – 12 August 2019

License Information