А еще нашел модуль для работы с матрицами, там тоже это есть, но не знаю как оттуда вытащить. ???
Это только функция вычисления ранга, а сам модуль 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;