★★★矩阵求逆函数求修改-100分
type
A3030=array [0..29,0..29] of double;
A3016=array [0..29,0..15] of double;
A1630=array [0..15,0..29] of double;
A1616=array [0..15,0..15] of double;
A30=array [0..29] of double;
A16=array [0..15] of double;
//矩阵求逆
function MrInv(Nbb: A1616): A1616;
var
rJZ: A1616;
i,j,row,col,k: integer;
max,temp: double;
p: array of integer;
b,a: A1616;
begin
a:=Nbb;
SetLength(p, 16);
for i:=0 to 15 do
begin
p[i]:=i;
for j:=0 to 15 do
if i=j then
b[i][i]:=1
else
b[i][j]:=0;
end;
for k:=0 to 15 do
begin
max:=0;
row:=i;
col:=i;
for i:=k to 15 do
for j:=k to 15 do
begin
temp:=Abs(Nbb[i][j]);
if(max<temp) then
begin
max:=temp;
row:=i;
col:=j;
end;
end;
if(row<>k) then
begin
for j:=0 to 15 do
begin
temp:=a[row][j];
a[row][j]:=a[k][j];
a[k][j]:=temp;
temp:=b[row][j];
b[row][j]:=b[k][j];
b[k][j]:=temp;
end;
i:=p[row];
p[row]:=p[k];
p[k]:=i;
end;
if(col<>k) then
begin
for i:=0 to 15 do
begin
temp:=a[i][col];
a[i][col]:=a[i][k];
a[i][k]:=temp;
end;
end;
for j:=k+1 to 15 do
a[k][j]:=a[k][j]/a[k][k];
for j:=0 to 15 do
b[k][j]:=b[k][j]/a[k][k];
a[k][k]:=1;
for j:=k+1 to 15 do
begin
for i:=0 to k-1 do
a[i][j]:=a[i][j]-a[i][k]*a[k][j];
for i:=k+1 to 15 do
a[i][j]:=a[i][j]-a[i][k]*a[k][j];
end;
for j:=k+1 to 15 do
begin
for i:=0 to k-1 do
b[i][j]:=b[i][j]-a[i][k]*b[k][j];
for i:=k+1 to 15 do
b[i][j]:=b[i][j]-a[i][k]*b[k][j];
end;
for i:=0 to k-1 do
a[i][k]:=0;
a[k][k]:=1;
end;
for j:=0 to 15 do
for i:=0 to 15 do
a[p[i]][j]:=b[i][j];
result:=a;
end;
结果老是不正确,大虾指点指点