Ранг матрицы

 

Гамарджоба! Сегодня мы будем говорить о рангах матрицы. Ранг матрицы - это наибольший из определителей ее миноров (отличных от нуля), который нужен для доказывания теорем и решения задач. Для человека вычислить ранг матрицы 1-5-го порядка ничего не стоит. Но найти ранг матрицы n-го порядка - дело компьютера :-) Алгоритм приблизительно такой:

 

1. Задать q равное 1

2. Посмотреть, если q<= минимальному из i и j тогда продолжить, если нет - перейти к пункту 6

3. Посмотреть все детерминанты матрицы q-го порядка. Если среди них есть отличные от нуля, то задать r = q

4. Добавить к q 1

5. Перейти к пункту 2

6. Записать результат

 

Вот блок-схема:

 

 

Рис. 1

 

Тут использована функция det_mat из алгоритма о детерминанте. А вот С++ код:

 

int rang_mat(float* A[], int i, int j)

{
int r = 0;
int q = 1;

while(q<=l_min(i,j))
// проверка: порядок матрицы меньше или равен минимальному из размеров матрицы?
{
// если да
    float **B = new float*[q];
// создаем новую матрицу размера q
    for(int w=0;w<q;w++) B[w] = new float[q];

    for(int a=0;a<(i-(q-1));a++)
// тут начинается перебор матриц q-го порядка
    {
        for(int b=0;b<(j-(q-1));b++)
        {
            for(int c=0;c<q;c++)
            {
                for(int d=0;d<q;d++)
                {
                    B[c][d] = A[a+c][b+d];
                }
            }

            if(!(det_mat(B,q)==0))
// если определитель матрицы отличен от нуля
            {
// то
                r = q;
// присваиваем рангу значение q
            }
        }
    }
q++;
// прибавляем 1
}

return r;

}

Функция l_min вот:

 

int l_min(int a, int b)
{
    if(a>=b)return b;else return a;
}

Тут все понятно.

 

Вот и все! Кто заинтересовался, предлагаю скачать модуль с указанной функцией (тут для Linux, тут для Windows).

НАЗАД

Hosted by uCoz