★★★矩阵求逆函数求修改-100分

happy2000wf 2003-09-11 10:20:03
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;

结果老是不正确,大虾指点指点
...全文
19 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧