Вычисление определителя матрицы
Пишу курсовую, надо прогу для нахождения детерминанта матрици n-порядка на Бейсике или Паскале. Напишите кому не лень
Код:
det A= sum (-1)^x*a[1,s1]*a[2,s2]...a[n,sn].
где сумма распространена на всевозможные перестановки (s1..sn), элементов 1,2,...n, причем x=0, если перестановка четная и x=1 иначе.
Вот на Delphi:
Код:
function TMatrix.Det:extended;
var Size,C,R:integer; K:extended; Check:boolean;
begin
if fCols <> fRows then begin Result:=0.0; Exit end;
Result:=1.0; Size:=fCols;
while Size > 1 do begin
if abs(M[Size-1,Size-1]) <= 1e-100 then begin
Check:=false;
for R:=0 to Size-2 do if abs(M[Size-1,R]) > 1e-100 then begin
Check:=true; for C:=0 to Size-1 do M[C,Size-1]:=M[C,Size-1]+M[C,R]
end;
if not Check then begin Result:=0.0; Break end
end;
for R:=0 to Size-2 do begin
K:=-M[Size-1,R]/M[Size-1,Size-1];
for C:=0 to Size-1 do M[C,R]:=M[C,R]+K*M[C,Size-1]
end;
Result:=Result*M[Size-1,Size-1]; Dec(Size)
end;
Result:=Result*M[0,0]
end;
var Size,C,R:integer; K:extended; Check:boolean;
begin
if fCols <> fRows then begin Result:=0.0; Exit end;
Result:=1.0; Size:=fCols;
while Size > 1 do begin
if abs(M[Size-1,Size-1]) <= 1e-100 then begin
Check:=false;
for R:=0 to Size-2 do if abs(M[Size-1,R]) > 1e-100 then begin
Check:=true; for C:=0 to Size-1 do M[C,Size-1]:=M[C,Size-1]+M[C,R]
end;
if not Check then begin Result:=0.0; Break end
end;
for R:=0 to Size-2 do begin
K:=-M[Size-1,R]/M[Size-1,Size-1];
for C:=0 to Size-1 do M[C,R]:=M[C,R]+K*M[C,Size-1]
end;
Result:=Result*M[Size-1,Size-1]; Dec(Size)
end;
Result:=Result*M[0,0]
end;
Подробнее тут:
http://groups.google.com/groups?hl=ru&lr=&frame=right&th=37a5cd4af187e705&seekm=010d01c1b6ca%24a163b600%241f0c10ac%40isu.runnet.ru#s