Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача: Нахождение ранга матрицы!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
BDS
Кто-нибудь знает, как написать алгоритм нахождения ранга матрицы?
Если сможете, помогите!  ???
Gremlin
Помоему там определенного алгоритма не существует как то надо строки комбинировать а когда останов не знаю вобще ненавижу находить ранг матрицы это мое больное место в алгебре
Fire_Rage
А что это такое?
BDS
Алгоритм нахождения ранга матрицы я нашел по этому адресу:
http://slava.users.otts.ru/work/articles/m...mrang/index.htm,
там же располагается фаил:
http://slava.users.otts.ru/work/articles/matrix.rar,
в котором реализован этот алгоритм, но он написан на C++ :-[ ,
кто нибудь может из Си в Пас переделать? ??? Если кто может, то помогите пожалуйста!
BDS
А еще нашел модуль для работы с матрицами, там тоже это есть, но не знаю как оттуда вытащить. ???

Это только функция вычисления ранга, а сам модуль 600 с лишним строк и почти 13Кб (в zip.-е ок.3.5Кб), так что если нужно могу или сюда положить, или на e-mail кому-нибудь прислать.


Код
function Matr.Rg:byte;           {------- Вычисление ранга матрицы }
var
  l,j,k,min,rang:byte;
  sz:extended;
  tmp:Mp;
begin
  min:=m;

  new(tmp,Init(n,m));
  Move(ar^,tmp^.ar^,n*m*SizeOf(extended));

  if n<m then begin
    min:=n;
    SetM(tmp,tmp^.T)
  end;

  with tmp^ do begin
    for k:=1 to min do
      for l:=1 to n do
        if l<>k then begin
          if e(k,k)^=0 then continue else sz:=e(l,k)^/e(k,k)^;
          for j:=1 to m do e(l,j)^:=e(l,j)^-sz*e(k,j)^
        end;
    rang:=0;
    for l:=1 to min do if e(l,l)^<>0 then inc(rang);
  end;
  Dispose(tmp,Done);
  Rg:=rang
end;

!help.gif
Леша
Зайди сюда http://slava.users.otts.ru/work/articles/m...mrang/index.htm
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.