2012-04-28 5 views
1

У меня возникли трудности с приемом метода, с помощью которого программа может найти ранг матрицы. В частности, я не совсем понимаю, как вы можете убедиться, что программа поймает все случаи линейных комбинаций, приводящих к зависимостям.C++ - Как найти ранг матрицы

Общая идея, как решить это, это то, что меня интересует. Однако, если вы хотите принять ответ на шаг дальше, я специально ищу решение только для квадратных матриц. Также код будет в C++.

Спасибо за ваше время!

+2

Функция «rank» является численно неустойчивой. Обычно вы хотите знать, является ли матрица * плохо обусловленной *, то есть она очень близка к матрице низкого ранга. Однако, если вас не беспокоит ошибка округления, вы можете использовать исключение Гаусса-Джордана, чтобы сделать треугольную матрицу с тем же рангом. –

ответ

1

Общий процесс:

матрица = 'Ваша матрица вы хотите, чтобы найти ранг'

m2 = RREF (матрица)

ранга = number_non_zero_rows (м2)

где RREF (матрица) - это функция, которая выполняет ваше гашение по умолчанию.

number_non_zero_rows (m2) - это функция, которая суммирует количество строк w с ненулевыми записями

Ваша забота обо всех случаях линейных комбинаций, приводящих к зависимостям, берется с шагом rref (гауссово исключение). Кстати, это работает независимо от размеров матрицы.