Primero necesitamos una base del subespacio vectorial. Procedemos a obtener los vectores de la base haciendo las sustituciones habituales:

(%i4) m : matrix([ 3 * a + 2 * b, - 2 * a - b],[ b, a]) $
s1 : ev( m, a = 1, b = 0) $
s2 : ev( m, a = 0, b = 1) $
print( "S", "=", "Gen", "{", s1, s2, "}") $
S = Gen { [ 3 2 0 1 ] , [ 2 1 1 0 ] }

Ahora, ortogonalizamos la base, pues la necesitamos ortogonal para calcular la proyección:

(%i6) u1 : s1 ;
u2 : s2 -( mat_trace( transpose( s2). u1) / mat_trace( transpose( u1). u1)) * u1 ;
(u1) [ 3 2 0 1 ] 0 errores, 0 advertencias (u2) [ 2 7 1 7 1 4 7 ]

Ya estamos en condiciones de aplicar: \[\textbf{proy}_S(\vec{v})=\sum_{i=1}^m\frac{\vec{v}\bullet\vec{u}_i}{\parallel\vec{u}_i\parallel^2}\vec{u}_i.\]

(%i9) v : matrix([ - 1, 0],[ 2, 1]) $
p :( mat_trace( transpose( v). u1) / mat_trace( transpose( u1). u1)) * u1 +
( mat_trace( transpose( v). u2) / mat_trace( transpose( u2). u2)) * u2 ;
sqrt(( mat_trace( transpose( p). p)), numer ;
(p) [ 1 5 2 5 4 5 3 5 ] (%o9) 1.095445115010332

Created with wxMaxima.