[El OP está respondido, pero me gustaría incluir un recordatorio rápido y conciso de cierta observación sobre simetrías...]
1. Espacio nulo izquierdo:
A=[13121−121]
En lenguaje estadístico R,
A = matrix(c(1,1,1,2,3,2,-1,1), ncol = 2)
r = qr(A)$rank # Rango 2
SVD.A = svd(A, nu = nrow(A))
SVD.A$u # Extrayendo la matriz U de él...
U=[−0.73038560−0.27428549−0.1764270−0.6001482−0.52378089−0.031873090.73033870.43731350.096033220.695364110.4362937−0.5629335−0.427747670.66349102−0.49510270.3628841]
t.U.A = t(SVD.A$u)
(left_null = t.U.A[(r + 1):nrow(t.U.A),])
[,1] [,2] [,3] [,4]
[1,] -0.1764270 0.7303387 0.4362937 -0.4951027
[2,] -0.6001482 0.4373135 -0.5629335 0.3628841
colSums(left_null) %*% A
Por lo tanto,
[α[−0.17642700.73033870.4362937−0.4951027]⊤+β[−0.60014820.4373135−0.56293350.3628841]⊤][13121−121]=0
con α y β siendo escalares.
2. Espacio nulo derecho:
Definiendo la matriz B como la transpuesta de A,
B=[111232−11]
B = t(A)
r = qr(B)$rank # Naturalmente también tendrá rango 2.
SVD.B = svd(B, nv = ncol(B))
SVD.B$v # Extrayendo la matriz V de él...
V=[−0.73038560−0.27428549−0.1764270−0.6001482−0.52378089−0.031873090.73033870.43731350.096033220.695364110.4362937−0.5629335−0.427747670.66349102−0.49510270.3628841]
(right_null = SVD.B$v[ ,(r + 1):ncol(B)])
[,1] [,2]
[1,] -0.1764270 -0.6001482
[2,] 0.7303387 0.4373135
[3,] 0.4362937 -0.5629335
[4,] -0.4951027 0.3628841
B %*% rowSums(right_null)
Por lo tanto,
[111232−11][α[−0.17642700.73033870.4362937−0.4951027]+β[−0.60014820.4373135−0.56293350.3628841]].
En Matlab:
% Null izquierdo:
A = [1 3; 1 2; 1 -1; 2 1];
rank(A);
[U,S,V] = svd(A);
left_null_A = transpose(U);
rows = (rank(A) + 1): size(left_null_A,1);
left_null_A = left_null_A(rows,:)
(left_null_A(1,:) + left_null_A(2,:)) * A
% Null derecho:
B = transpose(A);
rank(B);
[U,S,V] = svd(B);
right_null_B = transpose(V);
rows = (rank(B) + 1): size(right_null_B,1);
right_null_B(rows,:)
right_null_B = transpose(right_null_B(rows,:))
B * (right_null_B(:,1) + right_null_B(:,2))
---
En Python:
Python:
# Null izquierdo:
import numpy as np
A = np.matrix([[1,3], [1,2], [1, -1], [2,1]])
rank = np.linalg.matrix_rank(A)
U, s, V = np.linalg.svd(A, full_matrices = True)
t_U_A = np.transpose(U)
nrow = t_U_A.shape[0]
left_null_A = t_U_A[rank:nrow,:]
left_null_A
np.dot((left_null_A[0,:] + left_null_A[0,:]), A)
# Null derecho:
B = np.transpose(A)
rank = np.linalg.matrix_rank(B)
U, s, V = np.linalg.svd(B, full_matrices = True)
t_V_B = np.transpose(V)
ncols = t_V_B.shape[1]
right_null_B = t_V_B[:,rank:ncols]
right_null_B
np.dot(B, (right_null_B[:,0] + right_null_B[:,1]))