В этой статье Википедии описаны три метода численного расчета нулевого пространства: сокращение (исключение Гаусса), SVD и QR-разложение . Вкратце, (1) сокращение «не подходит для практического вычисления нулевого пространства из-за проблем с числовой точностью при наличии ошибок округления», (2) SVD является «современным подходом», но оно «как правило, стоит примерно столько же, сколько несколько матрично-матричных умножений с матрицами одинакового размера», и (3) численная стабильность и стоимость QR-разложения находятся «между методами SVD и редукционных подходов».
Так что, если SVD слишком медленный, вы можете дать шанс QR-разложение . Алгоритм с вашими обозначениями выглядит следующим образом: «A
- это матрица 4xN
с 4<N
. Используя QR-факторизацию A'
, мы можем найти такую матрицу, что A'*P = Q*R = [Q1 Q2]*R
, где где P
матрица перестановок Q
равна NxN
и R
равна Nx4
. Матрица Q1
равна Nx4 и состоит из первых 4 столбцов Q
. Матрица Q2
равна Nx(N-4)
и состоит из из последних N-4
столбцов Q
. Поскольку A*Q2 = 0
, столбцы Q2
охватывают нулевое пространство A
. "
Реализация Matlab: [Q, R, P] = qr(A', 'matrix');
Столбцы матрицы Q2 = Q(:, 5:end);
дают нулевое пространство A
.