Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача: Нахождение ранга матрицы!

Автор: BDS 6.10.2003 17:37

Кто-нибудь знает, как написать алгоритм нахождения ранга матрицы?
Если сможете, помогите!  ???

Автор: Gremlin 6.10.2003 19:44

Помоему там определенного алгоритма не существует как то надо строки комбинировать а когда останов не знаю вобще ненавижу находить ранг матрицы это мое больное место в алгебре

Автор: Fire_Rage 8.10.2003 7:33

А что это такое?

Автор: BDS 25.10.2003 16:00

Алгоритм нахождения ранга матрицы я нашел по этому адресу:
http://slava.users.otts.ru/work/articles/mrang/index.htm,
там же располагается фаил:
http://slava.users.otts.ru/work/articles/matrix.rar,
в котором реализован этот алгоритм, но он написан на C++ :-[ ,
кто нибудь может из Си в Пас переделать? ??? Если кто может, то помогите пожалуйста!

Автор: BDS 25.10.2003 16:13

А еще нашел модуль для работы с матрицами, там тоже это есть, но не знаю как оттуда вытащить. ???

Это только функция вычисления ранга, а сам модуль 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

Автор: Леша 28.10.2003 23:09

Зайди сюда http://slava.users.otts.ru/work/articles/mrang/index.htm