from sympy import MatrixEspacios vectoriales
En este documento ilustraremos cómo usar Python para resolver los problemas tipo propuestos por L. Merino y E. Santos en página de resolución de ejercicios tipo correspondientes al bloque “Espacios Vectoriales”.
Coordenadas. Dependencia lineal
Ejercicio
Se considera en el espacio vectorial \({\mathbb{R}}^3\) la base \(B=\{(1,0,1), (0,2,0) , (0,0,3)\}\). Determinar el vector \(x\) cuyas cordenadas respecto de \(B\) son \(x=(2,1,2)_{B}\).
Nuestro vector tiene coordenadas \((2,1,2)_B\), por lo que \(x=2\times(1,0,1)+1\times(0,2,0)+2\times (0,0,3)\). Ponemos por tanto los vectores de \(B\) como columnas en un matriz y multiplicamos por el vector \((2,1,2)\).
B=Matrix([(1,0,1),(0,2,0),(0,0,3)]).T
B\(\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 2 & 0\\1 & 0 & 3\end{matrix}\right]\)
B*Matrix([2,1,2])\(\displaystyle \left[\begin{matrix}2\\2\\8\end{matrix}\right]\)
Con lo que nuestro vector es \((2,2,8)\).
Ejercicio
Se considera en el espacio vectorial \({\mathbb{R}}^3\) la base \(B=\{(1,0,1), (0,2,0) , (0,0,3)\}\). Determinar coordenadas respecto de \(B\) del vector \(x=(5,4,2)\).
Tenemos que encontrar \(a,b,c\in \mathbb{R}\) tales que \((5,4,2)=a(1,0,1)+b(0,2,0)+c(0,0,3)\), y esto equivale a resolver el sistema
\[ \left\{ \begin{array}{rcl} a&=&5,\\ 2b&=&4,\\ a+3c&=&2. \end{array} \right. \]
Aprovechamos que ya tenemos definida la matriz \(B\) del ejercicio anterior.
from sympy import linsolvelinsolve((B,Matrix([5,4,2])))\(\displaystyle \left\{\left( 5, \ 2, \ -1\right)\right\}\)
Por lo que \(x=(5,2,-1)_B\).
B.inv()*Matrix([5,4,2])\(\displaystyle \left[\begin{matrix}5\\2\\-1\end{matrix}\right]\)
Ejercicio
En el espacio vectorial \(\mathcal{P}_3(\mathbb{R})\) se consideran los vectores \(p(x) = x^3+x^2+x+1\), \(q(x)= 2x^2+1\) y \(r(x)= x^3+2x^2\). Estudiar si son linealmente dependientes o independientes.
Consideramos la base estándar de \(\mathcal{P}_3(\mathbb{R})\), \(B=\{1,x,x^2, x^3 \}\). Respecto de esta base, las coordenadas de los vectores que nos dan son: \[p(x)=(1,1,1,1)_B, q(x)=(1,0,2,0)_B, r(x)=(0,0,2,1)_B.\] De esta forma, si ponemos esos vectores en una matriz y vemos su forma reducida por filas, podremos ver si son linealmente dependientes o no. Para ello haremos uso de rref.
A=Matrix([(1,1,1,1),(1,0,2,0),(0,0,2,1)])
A\(\displaystyle \left[\begin{matrix}1 & 1 & 1 & 1\\1 & 0 & 2 & 0\\0 & 0 & 2 & 1\end{matrix}\right]\)
A.rref(pivots=False)\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & -1\\0 & 1 & 0 & \frac{3}{2}\\0 & 0 & 1 & \frac{1}{2}\end{matrix}\right]\)
Vemos que la matriz tiene rango máximo, por lo que los vectores del enunciado son linealmente independientes.
Ejercicio
En el espacio vectorial \({\mathfrak M}_2(\mathbb{R})\) se consideran los vectores \(a=\begin{pmatrix} 1 & 2 \\ 2 & 1 \end{pmatrix}\), \(b=\begin{pmatrix} 1 & 1 \\ 2 & 0 \end{pmatrix}\), \(c=\begin{pmatrix} 0 & 1 \\ 2 & 1 \end{pmatrix}\) y \(b=\begin{pmatrix} 1 & 2 \\ 3 & 1 \end{pmatrix}\). Estudiar si son linealmente dependientes o independientes.
Consideramos la base estándar de \({\mathfrak M}_2(\mathbb{R})\), \(B=\left\{ \begin{pmatrix} 1 & 0 \\ 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 1 \\ 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 \\ 1 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 \\ 0 & 1 \end{pmatrix} \right\}\). Respecto de esta base los vectores dados tienen coordenadas \((1,2,2,1)_B\), \((1,1,2,0)_B\), \((0,1,2,1)_B\) y \((1,2,3,1)_B\), respectivamente. Procedemos como antes poniendo esos vectores por filas en una matriz y calculamos su forma reducida por filas.
A=Matrix([(1,2,2,1),(1,1,2,0),(0,1,2,1),(1,2,3,1)])
A\(\displaystyle \left[\begin{matrix}1 & 2 & 2 & 1\\1 & 1 & 2 & 0\\0 & 1 & 2 & 1\\1 & 2 & 3 & 1\end{matrix}\right]\)
A.rref(pivots=False)\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & -1\\0 & 1 & 0 & 1\\0 & 0 & 1 & 0\\0 & 0 & 0 & 0\end{matrix}\right]\)
Como podemos observar, hay una fila de ceros, por lo que a lo sumo tres de ellos son linealmente independientes, y los cuatro son linealmente dependientes.
from sympy import eyeAI=A.row_join(eye(4))
rAI=AI.rref(pivots=False)
rAI\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & -1 & 0 & 1 & -1 & 0\\0 & 1 & 0 & 1 & 0 & -2 & -1 & 2\\0 & 0 & 1 & 0 & 0 & 1 & 1 & -1\\0 & 0 & 0 & 0 & 1 & 1 & 1 & -2\end{matrix}\right]\)
Q=rAI[:,4:]
Q\(\displaystyle \left[\begin{matrix}0 & 1 & -1 & 0\\0 & -2 & -1 & 2\\0 & 1 & 1 & -1\\1 & 1 & 1 & -2\end{matrix}\right]\)
Q*A\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & -1\\0 & 1 & 0 & 1\\0 & 0 & 1 & 0\\0 & 0 & 0 & 0\end{matrix}\right]\)
Al ser la última fila todo ceros, ya tenemos la relación de dependencia lineal.
Q[3,:]*A\(\displaystyle \left[\begin{matrix}0 & 0 & 0 & 0\end{matrix}\right]\)
Por lo que \(a+b+c-2d=0\).
Cambio de base
Ejercicio
En el espacio vectorial \(\mathcal{P}_3(\mathbb{R})\) de los polinomios de grado menor o igual que \(3\), se consideran las bases estándar \(B=\{1,x,x^2, x^3 \}\) y \(B'=\{x^3+x^2+x+1, x^3+x^2+x, x^3+x^2, x^3\}\). Determinar la ecuación del cambio de base de \(B\) a \(B'\) y las coordenadas respecto de \(B'\) del vector \(p(x)=x^3+2x\).
Tenemos que los vectores de \(B'\) tienen coordenadas \[ \begin{array}{lcl} x^3+x^2+x+1 &= & (1,1,1,1)_B, \\ x^3+x^2+x &= & (0,1,1,1)_B, \\ x^3+x^2 &= & (0,0,1,1)_B, \\ x^3 &= & (0,0,0,1)_B. \end{array} \]
Por lo que la matriz de cambio de base de \(B'\) a \(B\) es \[ P= \begin{pmatrix} 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 0 \\ 1 & 1 & 1 & 1 \end{pmatrix}. \] Y la de \(B\) a \(B'\) será su inversa.
P=Matrix([(1,1,1,1),(0,1,1,1),(0,0,1,1),(0,0,0,1)]).T
P\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & 0\\1 & 1 & 0 & 0\\1 & 1 & 1 & 0\\1 & 1 & 1 & 1\end{matrix}\right]\)
P.inv()\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & 0\\-1 & 1 & 0 & 0\\0 & -1 & 1 & 0\\0 & 0 & -1 & 1\end{matrix}\right]\)
El polinomio \(p(x)\) tiene coordenadas \((0,2,0,1)_B\), por lo que sus coordenadas respecto de \(B'\) son
P.inv()*Matrix([0,2,0,1])\(\displaystyle \left[\begin{matrix}0\\2\\-2\\1\end{matrix}\right]\)
esto es, \(p(x)=(0,2,-2,1)_{B'}\)
Ejercicio
En el espacio vectorial \(\mathbb{R}^3\) se consideran las bases \(B'=\{ (1,1,0), (0,1,2), (1,0,1) \}\) y \(B''=\{(1,0,0), (2,1,0), (1,1,1)\}\). Determinar la ecuación del cambio de base de \(B'\) a \(B''\).
Vamos a determinar la matriz de cambio de base \(P\) de \(B'\) a la base estándar \(B\), y luego la de \(B\) a \(B''\), \(Q\). Multiplicando \(Q\) y \(P\), tendremos la matriz de cambio de base de \(B'\) a \(B''\).
P=Matrix([(1,1,0),(0,1,2),(1,0,1)]).T
Q=Matrix([(1,0,0),(2,1,0),(1,1,1)]).T.inv()P\(\displaystyle \left[\begin{matrix}1 & 0 & 1\\1 & 1 & 0\\0 & 2 & 1\end{matrix}\right]\)
Q\(\displaystyle \left[\begin{matrix}1 & -2 & 1\\0 & 1 & -1\\0 & 0 & 1\end{matrix}\right]\)
Q*P\(\displaystyle \left[\begin{matrix}-1 & 0 & 2\\1 & -1 & -1\\0 & 2 & 1\end{matrix}\right]\)
Espresiones de un subespacio
Ejercicio
En el espacio vectorial \(\mathcal{P}_3(\mathbb{K})\) de los polinomios de grado menor o igual que \(3\), se considera el subespacio \(U\) generado por \(2x^3+2x+1, 2x^3+x^2+3x+1, x^3+x^2+2x, 2x^2+2x+1\). Determinar una base de \(U\), unas ecuaciones paramétricas y unas cartesianas.
Consideramos la base estándar \(B=\{1,x,x^2,x^3\}\) de \(\mathcal{P}_3(\mathbb{K})\), entonces \[ \begin{array}{rcl} 2x^3+2x+1 & = & (1,2,0,2)_B, \\ 2x^3+x^2+3x+1 & = & (1,3,1,2)_B, \\ x^3+x^2+2x & = & (0,2,1,1)_B, \\ 2x^2+2x+1 & = & (1,2,2,0)_B. \end{array} \] Para encontrar una base, calculamos la forma normal reducida de la matriz cuyas filas son esas coordenadas.
A=Matrix([(1,2,0,2),(1,3,1,2),(0,2,1,1),(1,2,2,0)])
A\(\displaystyle \left[\begin{matrix}1 & 2 & 0 & 2\\1 & 3 & 1 & 2\\0 & 2 & 1 & 1\\1 & 2 & 2 & 0\end{matrix}\right]\)
rA=A.rref(pivots=False)
rA\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & 0\\0 & 1 & 0 & 1\\0 & 0 & 1 & -1\\0 & 0 & 0 & 0\end{matrix}\right]\)
Por lo que una base de \(U\) es \(\{(1,0,0,0),(0,1,0,1),(0,0,1,-1)\}\). Las ecuaciones paramétricas serán \[ \left\{ \begin{array}{rcl} x_1 &=& \lambda, \\ x_2 &=& \mu, \\ x_3 &=& \gamma, \\ x_4 &=& \mu - \gamma. \end{array} \right. \]
Para encontrar las ecuaciones implícitas, vamos a colocar los vectores de la base que hemos elegido de \(U\) por columnas.
U=rA[0:3,:].T
U\(\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\\0 & 1 & -1\end{matrix}\right]\)
Le añadimos la identidad.
UI=U.row_join(eye(4))
UI \(\displaystyle \left[\begin{matrix}1 & 0 & 0 & 1 & 0 & 0 & 0\\0 & 1 & 0 & 0 & 1 & 0 & 0\\0 & 0 & 1 & 0 & 0 & 1 & 0\\0 & 1 & -1 & 0 & 0 & 0 & 1\end{matrix}\right]\)
Eliminar parámetros (tres primeras columnas) se corresponde con encontrar la forma reducida por filas, y ver en qué filas dejan de haber parámetros.
UI.rref(pivots=False)\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & 1 & 0 & 0 & 0\\0 & 1 & 0 & 0 & 0 & 1 & 1\\0 & 0 & 1 & 0 & 0 & 1 & 0\\0 & 0 & 0 & 0 & 1 & -1 & -1\end{matrix}\right]\)
De la última fila se deduce que una ecuación implícita de \(U\) es \(x_2-x_3-x_4=0\).
from sympy import symbolsx,y,z,t=symbols("x y z t")UX=U.row_join(Matrix([x,y,z,t]))
UX\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & x\\0 & 1 & 0 & y\\0 & 0 & 1 & z\\0 & 1 & -1 & t\end{matrix}\right]\)
sympy no considera las variables como parámetros sujetos a condiciones, por lo que si calculamos la forma escalonada reducida por filas nos dará la identidad.
UX.rref(pivots=False)\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & 0\\0 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]\)
Podemos hacer la reducción a mano.
UX[3,:]=UX[3,:]-UX[1,:]
UX\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & x\\0 & 1 & 0 & y\\0 & 0 & 1 & z\\0 & 0 & -1 & t - y\end{matrix}\right]\)
UX[3,:]=UX[3,:]+UX[2,:]
UX\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & x\\0 & 1 & 0 & y\\0 & 0 & 1 & z\\0 & 0 & 0 & t - y + z\end{matrix}\right]\)
Ejercicio
En \(\mathfrak{M}_2(\mathbb{R})\) se considera el subespacio \(U\) que tiene ecuaciones cartesianas respecto de la base estándar \[ \left\{ \begin{array}{rcl} x+y+t&=& 0, \\ 2x-y+t&=& 0. \end{array} \right. \] Determinar una base de \(U\).
A=Matrix([(1,1,0,1),(2,-1,0,1)])A.rref(pivots=False)\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & \frac{2}{3}\\0 & 1 & 0 & \frac{1}{3}\end{matrix}\right]\)
Por lo que nuestro sistema original es equivalente a \[ \left\{ \begin{array}{rcl} x+\frac{2}{3} t&=& 0, \\ y+\frac{1}{3}t&=& 0. \end{array} \right. \]
Tomando como parámetros \(z\) y \(t\), y pasando a paramétricas obtenemos que una base de \(U\) es \(\{(0,0,1,0)_B, (-2/3,-1/3,0,1)_B\}\), esto es, \[ \left\{\begin{pmatrix} -\frac{2}{3} & -\frac{1}{3} \\ 0 & 1 \end{pmatrix} , \; \begin{pmatrix} 0 & 0 \\ 1 & 0 \end{pmatrix} \right\}. \]
Esto también lo podemos obtener calculando la forma reducida por filas de la traspuesta de \(A\) añadiéndole la identidad.
rtA=A.col_join(eye(4)).T.rref(pivots=False)
rtA\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & \frac{1}{2} & 0 & \frac{1}{2}\\0 & 1 & 0 & - \frac{1}{2} & 0 & \frac{1}{2}\\0 & 0 & 1 & \frac{1}{2} & 0 & - \frac{3}{2}\\0 & 0 & 0 & 0 & 1 & 0\end{matrix}\right]\)
La matriz de paso es
Q=rtA[:,2:]
Q\(\displaystyle \left[\begin{matrix}0 & \frac{1}{2} & 0 & \frac{1}{2}\\0 & - \frac{1}{2} & 0 & \frac{1}{2}\\1 & \frac{1}{2} & 0 & - \frac{3}{2}\\0 & 0 & 1 & 0\end{matrix}\right]\)
Al ser las dos últimas filas de la forma reducida de t(A) cero, esto nos dice que las dos últimas filas de \(Q\) son una base para \(U\), pues son linealmente independientes y verifican las ecuaciones de \(U\).
Q[2:4,:]\(\displaystyle \left[\begin{matrix}1 & \frac{1}{2} & 0 & - \frac{3}{2}\\0 & 0 & 1 & 0\end{matrix}\right]\)
Lo que nos dice que otra posible base es \(\{(0,0,1,0)_B,(1,1/2,0,-3/2)_B\}\) (nótese que el último vector es \(-2/3\) por el segundo vector que obtuvimos antes).
Paso de generadores a implícitas y viceversa
Vamos a escribir una función que nos permita calcular las ecuaciones implícitas de un subespacio vectorial a partir de un sistema de generadores de dicho subespacio, y viceversa.
Supongamos que nuestro subespacio vectorial \(U\subseteq \mathbb{R}^n\) está generado por \(\{v_1,\dots,v_k\}\). Supongamos que la dimensión de \(U\) es \(d\), que además coincide con el rango de la matriz \(A\) cuyas columnas son \(v_1,\dots, v_k\). Supongamos que \(H\) es la forma normal reducida por columnas de \(A\), y que \(Q\) es tal que \(Q A=H\). Tenemos entonces que las últimas \(n-d\) columnas de \(H\) son cero. Esto quiere decir que las últimas \(d-n\) filas de \(Q\) cuando las multiplicamos por \(A\) dan cero, o dicho de otra forma, esas últimas \(d-n\) filas son los coeficientes de ecuaciones que verifican todos los generadores de \(U\), y por tanto son unas ecuaciones implícitas de \(U\).
Si, en lugar de generadores, partimos de \(k\) ecuaciones implícitas de \(U\), el proceso es dual, por lo que si en \(A\) almacenamos (por filas) los coeficientes de dichas ecuaciones y tomamos su transpuesta, podemos calcular nuevamente la forma normal de hermite de \(A^t\), \(H\), y \(Q\) tal que \(QA^t=H\). Si de esas \(k\) ecuaciones, \(d\) de ellas son independientes, entonces las últimas \(n-d\) columnas de \(H\) serán nulas. De esta forma las últimas \(n-d\) filas de \(Q\) conforman una base de \(U\).
Escribamos este proceso en python.
def gensec(A):
"""
A es una matriz cuyas filas son los generadores o los coeficientes del subespacio
La salida son las ecuaciones implícitas o los generadores (por filas)
"""
c=A.cols # número de columnas de A
f=A.rows # número de filas
r=A.rank() # rango
rtAI=A.T.row_join(eye(c)).rref(pivots=False) # añadimos la identidad calculamor forma reducida por columnas
ecs=rtAI[r:,f:]# nos quedamos con la parte que corresponde a ceros (ecuaciones o generadores según la entrada)
return ecsTenemos que tener presente al usar esta función que estamos escribiendo los generadores del subespacio por filas en la matriz de entrada; y si la entrada son ecuaciones, los coeficientes también van por filas.
Veamos su uso con los dos ejemplos de antes.
Ejemplo 1
Sea \(U=\mathcal{L}(\{(1,2,0,2),(1,3,1,2),(0,2,1,1),(1,2,2,0) \})\subseteq\mathbb{R}^4\). Calculemos sus ecuaciones implícitas.
A=Matrix([(1,2,0,2),(1,3,1,2),(0,2,1,1),(1,2,2,0)])
A\(\displaystyle \left[\begin{matrix}1 & 2 & 0 & 2\\1 & 3 & 1 & 2\\0 & 2 & 1 & 1\\1 & 2 & 2 & 0\end{matrix}\right]\)
gensec(A)\(\displaystyle \left[\begin{matrix}0 & 1 & -1 & -1\end{matrix}\right]\)
Por lo tanto la ecuación de \(U\) es \(x_2-x_3-x_4=0\).
Ejemplo 2
Sea ahora el subespacio vectorial de \(\mathbb{R}^4\) con ecuaciones \(x_1+x_2+x_4=0\), \(2x_1-x_2+x_4=0\).
B=Matrix([[1,1,0,1],[2,-1,0,1]])
gensec(B)\(\displaystyle \left[\begin{matrix}1 & \frac{1}{2} & 0 & - \frac{3}{2}\\0 & 0 & 1 & 0\end{matrix}\right]\)
Por lo que nuestro subespacio es \(\mathcal{L}(\{(1,1/2,0,-3/2),(0,0,1,0)\})\).
Suma e intersección de subespacios
Ejercicio
Determinar bases de la suma y la intersección de los subespacios \(U=\mathcal{L}((1,1,0,0), (0,0,1,1))\) y \(W=\mathcal{L}((1,1,1,0), (1,1,1,1))\) de \(\mathbb{R}^4\).
Para calcular la suma, basta con calcular una base del espacio vectorial generado por la unión de los generadores de \(U\) y \(V\).
U=Matrix([[1,1,0,0],[0,0,1,1]])
V=Matrix([[1,1,1,0],[1,1,1,1]])
U.col_join(V).rref(pivots=False)\(\displaystyle \left[\begin{matrix}1 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\\0 & 0 & 0 & 0\end{matrix}\right]\)
Luego la suma está generada por \(\{(1,1,0,0),(0,0,1,0),(0,0,0,1)\}\).
Para la intersección, calculamos las ecuaciones implícitas de \(U\) y \(V\), y luego las juntamos.
ecU=gensec(U)
ecU\(\displaystyle \left[\begin{matrix}1 & -1 & 0 & 0\\0 & 0 & 1 & -1\end{matrix}\right]\)
Las ecuaciones de \(U\) son \(x-y=0\), \(z-t=0\).
ecV=gensec(V)
ecV\(\displaystyle \left[\begin{matrix}1 & 0 & -1 & 0\\0 & 1 & -1 & 0\end{matrix}\right]\)
Las de \(V\) son \(x-z=0\), \(y-z=0\). Las de la intersección por tanto se obtienen juntando estas ecuaciones y reduciendo.
ecUiV=ecU.col_join(ecV).rref(pivots=False)
ecUiV[:ecUiV.rank(),:]\(\displaystyle \left[\begin{matrix}1 & 0 & 0 & -1\\0 & 1 & 0 & -1\\0 & 0 & 1 & -1\end{matrix}\right]\)
Por tanto las ecuaciones de la intersección son \[ \left\{ \begin{array}{rcl} x - t &=& 0, \\ y - t &=& 0, \\ z - t &=& 0. \end{array} \right. \]
gensec(ecUiV)\(\displaystyle \left[\begin{matrix}1 & 1 & 1 & 1\end{matrix}\right]\)
Teniendo así que \(U\cap V\) está generado por \((1,1,1,1)\).
Suma directa de subespacios
Ejercicio
Dado el subespacio \(U\) de \(\mathbb{R}^4\) de ecuaciones cartesianas \[ \left\{ \begin{array}{ccc} x+y & = & 0, \\ t & = & 0. \end{array} \right. \] Obtener un subespacio complementario de \(U\).
ecU=Matrix([[1,1,0,0],[0,0,0,1]])
U=gensec(ecU)
U\(\displaystyle \left[\begin{matrix}1 & -1 & 0 & 0\\0 & 0 & 1 & 0\end{matrix}\right]\)
U.col_join(ecU).rank()4
Un complementario es por tanto \(\mathcal{L}(\{(1,1,0,0),(0,0,0,1)\})\) (los vectores cuyas coordenadas son los coeficientes de las ecuaciones de \(U\)).
Ejercicio
Se consideran los subespacios de \(\mathcal{P}_2(\mathbb{R})\) \(U=\mathcal{L}(1+x^2)\) y \(W\) con ecuación cartesiana respecto de base estándar \(x_1 + x_3= 0\). Comprobar que \(\mathcal{P}_2(\mathbb{R})=U\oplus W\) y descomponer el vector \(1+3x+3x^2\) como suma de un vector de \(U\) y uno de \(W\).
Respecto a la base estándar \(B=\{1,x,x^2\}\), \(U\) está generado por \((1,0,1)\). Encontremos una base para \(W\).
U=Matrix([[1,0,1]])
ecW=Matrix([[1,0,1]])
W=gensec(ecW)
W\(\displaystyle \left[\begin{matrix}1 & 0 & -1\\0 & 1 & 0\end{matrix}\right]\)
Como
U.col_join(W).rank()3
Tenemos que \(U+W=\mathcal{P}_2(\mathbb{R})\). Además, como \(U\) tiene dimensión uno y \(W\) tiene dimensión dos, la intersección debe tener dimensión cero, pues \(\dim(U\cap W) = \dim(U) + \dim(W) -\dim(U+W)= 1 +2 -3 =0\). Por tanto, \(\mathcal{P}_2(\mathbb{R})=U\oplus W\). Esto también queda claro por el hecho de que la ecuación cartesianda de \(W\) tiene como coeficientes el vector que genera a \(U\).
El polinomio \(1+3x+3x^2\) tiene coordenadas \((1,3,3)\) respecto de la base estándar. Calculemos sus coordenadas respecto de la base formada por la unión de las bases de \(U\) y \(W\), \(B'=\{(1,0,1),(1,0,-1),(0,1,0)\}\).
cb=U.col_join(W)
cb\(\displaystyle \left[\begin{matrix}1 & 0 & 1\\1 & 0 & -1\\0 & 1 & 0\end{matrix}\right]\)
linsolve((cb,Matrix([1,3,3])))\(\displaystyle \left\{\left( 2, \ 3, \ -1\right)\right\}\)
Luego \(1+3x+3x^2=(2,-1,3)_{B'}=2(1+x^2)-(1-x^2)+3x\), con \(2+2x^2\in U\) y \(-1+3x+x^2\in W\).
Matriz de Gram
Ejercicio
En el espacio vectorial \(\mathcal{P}_2(\mathbb{K})\) de los polinomios de grado menor o igual que \(2\), calcular la matriz de Gram del producto escalar definido por \[ \langle p(x),q(x)\rangle = \int_{0}^{1} p(x)q(x)dx \] respecto de la base estándar \(B=\{1,x,x^2 \}\).
from sympy import Symbolx=Symbol("x")
x\(\displaystyle x\)
B=[1,x,x**2]from sympy import integrateintegrate(B[0]*B[1],(x,0,1))\(\displaystyle \frac{1}{2}\)
G=Matrix(3,3,lambda i,j:integrate(B[i]*B[j],(x,0,1)))
G\(\displaystyle \left[\begin{matrix}1 & \frac{1}{2} & \frac{1}{3}\\\frac{1}{2} & \frac{1}{3} & \frac{1}{4}\\\frac{1}{3} & \frac{1}{4} & \frac{1}{5}\end{matrix}\right]\)
Ejercicio
Con el producto escalar anterior y los polinomios \(p(x)= 1+6x-10x^2\) y \(q(x)=1+2x+4x^2\), calcular 1. \(\langle p(x), q(x) \rangle\), 2. \(|| p(x)||\), \(||q(x) ||\),
3. el ángulo que determinan \(p(x)\) y \(q(x)\).
Podemos usar la matriz de Gram antes calculada
p=1+6*x-10*x**2
q=1+2*x+4*x**2integrate(p*q,(x,0,1))\(\displaystyle 0\)
O bien usando las coordenadas de \(p(x)\) y \(q(x)\) en la base estándar.
Matrix([[1,6,-10]])*G*Matrix([1,2,4])\(\displaystyle \left[\begin{matrix}0\end{matrix}\right]\)
En particular esto implica que son ortogonales (el ángulo que forman es \(\pi/2\)).
En cuanto a las normas
from sympy import sqrtMatrix([[1,6,-10]])*G*Matrix([1,6,-10])\(\displaystyle \left[\begin{matrix}\frac{7}{3}\end{matrix}\right]\)
sqrt(_[0])\(\displaystyle \frac{\sqrt{21}}{3}\)
from sympy import simplifysimplify(sqrt(integrate(q**2,(x,0,1))))\(\displaystyle \frac{\sqrt{355}}{5}\)
Cálculo de una base ortogonal usando el método de Gram-Schmidt
Ejercicio
En \(\mathbb{R}^3\) con el producto escalar usual, calcular una base ortogonal a partir de los vectores \(\{u_1=(1,1,-1), u_2=(1,-1,1),u_3=(-1,1,1) \}\).
GramSchmidt ortogonaliza.
from sympy import GramSchmidtPero no admite matrices como argumentos, sino listas de vectores (matrices con una sola columna).
U.tolist()[[1, 0, 1]]
B=[Matrix([1,1,-1]),Matrix([1,-1,1]),Matrix([-1,1,1])]
B[Matrix([
[ 1],
[ 1],
[-1]]),
Matrix([
[ 1],
[-1],
[ 1]]),
Matrix([
[-1],
[ 1],
[ 1]])]
gmB=GramSchmidt(B)
gmB
for v in gmB:
print(v.T.tolist())[[1, 1, -1]]
[[4/3, -2/3, 2/3]]
[[0, 1, 1]]
Veamos que efectivamente es una base ortogonal.
Matrix(3,3,lambda i,j: gmB[i].dot(gmB[j]))\(\displaystyle \left[\begin{matrix}3 & 0 & 0\\0 & \frac{8}{3} & 0\\0 & 0 & 2\end{matrix}\right]\)
Si queremos ortonormalizar, debememos pasar el argumento True a GramSchmidt.
for v in GramSchmidt(B,True):
print(v.T.tolist())[[sqrt(3)/3, sqrt(3)/3, -sqrt(3)/3]]
[[sqrt(6)/3, -sqrt(6)/6, sqrt(6)/6]]
[[0, sqrt(2)/2, sqrt(2)/2]]
gmB=GramSchmidt(B,True)
gmB[Matrix([
[ sqrt(3)/3],
[ sqrt(3)/3],
[-sqrt(3)/3]]),
Matrix([
[ sqrt(6)/3],
[-sqrt(6)/6],
[ sqrt(6)/6]]),
Matrix([
[ 0],
[sqrt(2)/2],
[sqrt(2)/2]])]
Uo=Matrix(3,3,[0]*9)
for i in range(3):
Uo[:,i]=gmB[i]
Uo\(\displaystyle \left[\begin{matrix}\frac{\sqrt{3}}{3} & \frac{\sqrt{6}}{3} & 0\\\frac{\sqrt{3}}{3} & - \frac{\sqrt{6}}{6} & \frac{\sqrt{2}}{2}\\- \frac{\sqrt{3}}{3} & \frac{\sqrt{6}}{6} & \frac{\sqrt{2}}{2}\end{matrix}\right]\)
Uo*Uo.T\(\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]\)
Ejercicio
En \(\mathbb{R}^3\) se considera el producto escalar que, con respecto de la base canónica, viene dado por la matriz de Gram
\[ G=\begin{pmatrix} 2 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \end{pmatrix}. \]
Calcular una base ortogonal a partir de los vectores \(\{(1,-1,0),(0,1,1),(0,0,1)\}\).
G=Matrix([(2,1,1),(1,2,1),(1,1,2)])
U=[Matrix([1,-1,0]),Matrix([0,1,1]),Matrix([0,0,1])]Definimos nuestra función que implementa el proceso de Gram-Schmidt.
def gmm(U,G):
n=U[0].rows
m=len(U)
E=Matrix(n,m,[0]*n*m)
E[:,0]=U[0]
for j in range(1,m):
lmbd=[0]*j
for i in range(j):
lmbd[i]=-(U[j].T*G*E[:,i])[0]/(E[:,i].T*G*E[:,i])[0]
E[:,j]=U[j]+E[:,:j]*Matrix(lmbd)
return Egmm(U,G)\(\displaystyle \left[\begin{matrix}1 & \frac{1}{2} & - \frac{3}{11}\\-1 & \frac{1}{2} & - \frac{3}{11}\\0 & 1 & \frac{5}{11}\end{matrix}\right]\)
Complemento ortogonal, proyecciones
Ejercicio
Se considera en \(\mathbb{R}^3\) el producto escalar cuya matriz de Gram respecto de la base canónica es
\[\begin{pmatrix}1& 0 & 0\\ 0& 1 & 1 \\ 0 &1 & 2\end{pmatrix}.\]
Para el subespacio \(U: x+y=0\), determinar una base de \(U^{\perp}\).
Empezamos calculando una base para \(U\) a partir de sus ecuaciones.
ecU=Matrix([[1,1,0]])
U=gensec(ecU)
U\(\displaystyle \left[\begin{matrix}1 & -1 & 0\\0 & 0 & 1\end{matrix}\right]\)
Llamamos \(P\) a la matriz de Gram del producto escalar.
P=Matrix([(1,0,0),(0,1,1),(0,1,2)])
P\(\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 1 & 1\\0 & 1 & 2\end{matrix}\right]\)
El espacio ortogonal a \(U\) tendrá de ecuaciones \((-1,1,0)P(x,y,z)^t=0\), \((0,0,1)P(x,y,z)^t=0\).
from sympy import symbolsx,y,z=symbols("x,y,z")U*P*Matrix([x,y,z])\(\displaystyle \left[\begin{matrix}x - y - z\\y + 2 z\end{matrix}\right]\)
Los coeficientes de esas ecuaciones son
ecUo=U*P
ecUo\(\displaystyle \left[\begin{matrix}1 & -1 & -1\\0 & 1 & 2\end{matrix}\right]\)
gensec(ecUo)\(\displaystyle \left[\begin{matrix}1 & 2 & -1\end{matrix}\right]\)
Por lo que una base para \(U^\perp\) es \(\{(1,2,-1)\}\).
linsolve((ecUo,Matrix([0,0])))\(\displaystyle \left\{\left( - \tau_{0}, \ - 2 \tau_{0}, \ \tau_{0}\right)\right\}\)
Ejercicio
Se considera en \(\mathbb{R}^3\) el producto escalar cuya matriz de Gram respecto de la base canónica es
\[\begin{pmatrix}1& 0 & 0\\ 0& 1 & 1 \\ 0 &1 & 2\end{pmatrix}.\]
Determinar la proyección del vector \((1,2,1)\) sobre el subespacio \(U: x+y=0\).
Sabemos que una base para \(U\) es \(\{(-1,1,0),(0,0,1)\}\) y una para \(U^\perp\) es \(\{(1,2,-1)\}\). Por tanto, su unión es una base de \(\mathbb{R}^3\). Escribamos \((1,2,1)\) en función de esa base.
B=Matrix([(-1,1,0),(0,0,1),(1,2,-1)]).T
B\(\displaystyle \left[\begin{matrix}-1 & 0 & 1\\1 & 0 & 2\\0 & 1 & -1\end{matrix}\right]\)
v=Matrix([1,2,1])linsolve((B,v))\(\displaystyle \left\{\left( 0, \ 2, \ 1\right)\right\}\)
Por lo que \((1,2,1)=2(0,0,1)+(1,2,-1)\), y de esta forma la proyección de \((1,2,1)\) en \(U\) es \((0,0,2)\).
Una forma alternativa es usar los coeficientes de Fourier respecto a una base ortogonal. Como la \((1,2,1)\) es la suma de las proyecciones de ese vector en \(U\) y \(U^\perp\), basta calcular la proyección en \(U^\perp\) y luego restarle a \((1,2,1)\) lo que obtengamos.
El coeficiente de Fourier respecto a \((1,2,-1)\) es
(v.T*P*Matrix([1,2,-1]))[0]/(Matrix([1,2,-1]).T*P*Matrix([1,2,-1]))[0]\(\displaystyle 1\)
Así la proyección en \(U\) se calcula como
v-Matrix([1,2,-1])\(\displaystyle \left[\begin{matrix}0\\0\\2\end{matrix}\right]\)