У меня имеется некоторая матрица

Из которой мне надо отобрать

линейно независимых строк. Гарантировано, что этих строк ровно столько, и даже что их можно выбрать не единственным способом. Желательно, однако, чтобы выбираемые строки имели как можно меньший индекс, то есть предпочтение отдаётся самым верхним строкам матрицы
A (до тех пор, пока они линейно независимы, зависимые — пропускаются).
Для реализации этого я решил использовать модифицированный метод Гаусса, который заключается в следующем. В процессе работы, строится матрица
B, которая постепенно приближается к единичной матрице (с точностью до перестановки столбцов). Каждая строка характеризуется индексом некоторого ведущего элемента, который делается равным 1. Если в каком-то столбце есть ведущий элемент, то это будет единственный ненулевой элемент этого столбца. Чтобы достичь этого свойства матрицы
B, на каждом шаге из матрицы
A берётся очередная строка, для каждой её ненулевой координаты, находящейся в столбце с ведущим элементом матрицы
B из взятой строки вычитаются строки матрицы
B, помноженные на элементы строки из
A, так, чтобы эти элементы обратились в 0 в столбцах с ведущими элементами
B:

Здесь
a — очередная строка матрицы
A,
a' — её модификация,
a с индексом — элемент строки
a,
b с индексом — строки матрицы
B, у которых в позиции

находится ведущий элемент (равный единице). Число
r — это количество строк в матрице
B на начало текущей итерации. При этом теряется хорошее свойство разреженности матрицы
A, но тут уж ничего не поделаешь.
Если после этой процедуры над очередной строкой
a в модифицированной строке
a' остались ненулевые элементы, то исходная строка является линейно независимой от остальных строк матрицы
B, и её можно добавлять в список (в противном случае строка
a пропускается и переходим к следующей строке матрицы
A). Для поддержания выбранного вида матрицы
B, я выбираю в модифицированной строке
a' максимальный по модулю элемент и назначаю его ведущим. Для этого делю всю строку
a' на этот элемент и получаю новую строку матрицы
B:

Новый ведущий элемент с необходимостью будет в столбце, в котором у матрицы
B нет других ведущих. По этой причине в этом столбце матрицы
B будут ненулевые элементы. Я из зануляю, вычитая масштабированную модифицированную строку, помноженную на соотвествующий элемент строки матрицы
B:

В результате получается что-то в этом духе:
1.0000 -0.2441 0 0 0 0 0 0 -1.0000 0.2441
0 0.0849 0 0 0 0 0 1.0000 0 -1.0849
0 0.1387 0 1.0000 0 0 0 0 0 -1.1387
0 -0.0563 0 0 1.0000 0 0 0 -1.0000 0.0563
0 -0.4150 0 0 0 0 1.0000 0 -1.0000 0.4150
0 -0.6874 0 0 0 1.0000 0 0 0 -0.3126
0 -0.8487 1.0000 0 0 0 0 0 -1.0000 0.8487
В 1 и 3—8 столбцах находятся ведущие элементы, остальные столбцы (2, 9, 10) соответствуют свободным переменным.
По окончании всего этого производится проверка корректности и частенько оказывается, что одна строка была выбрана неудачно и её надо удалить и заменить какой-то другой строкой матрицы
A. В связи с этим у меня вопросы:
1. Действительно ли то, что я делаю, является разновидностью метода Гаусса?
2. Можно ли удалить неудачную строку из матрицы
B, не пересчитывая всю матрицу
B с самого начала (другими словами, за время хотя бы

, а не

)?
3. Если да, то какую дополнительную информацию для этого надо хранить?
4. Существует ли какой-нибудь другой, возможно, более рациональный подход к этой задаче?