解决方案 »
- ACCESS取随机记录问题
- 集思广义,关于TStringGrid/TDrawGrid的滚动条问题。
- fastreport 能从左到右打印记录吗?
- 没有装Vista, TRegistry类读写vista的注册表和在XP下有相异的地方吗?
- 如何拦截系统底层API文件操作
- 怎样获取远程Linux系统主机的网卡MAC地址?
- 高手帮忙看一下,代码为什么会报错?
- 数码防伪怎么做?有谁做过,给点意见。
- 有关Rave的问题:制作主从报表时说至少要引入2个DataView
- 读取ini文件中某个section的全部value 大概有2000条写到TRicheidt中,如何做速度更快!!!
- delphi中怎样储存超过255长度的字符串?
- 图像背景和前景如何处理,能使背景不变、前景合并?
//AX=B,结果 A=A逆,B=A逆*B
var
IPIV,INDXR,INDXC:array[1..50] of integer;
I,J,K,L,LL:integer;
BIG,PIVINV,DUM:real;
IROW,ICOL:integer;
temp:array[1..50] of real;
begin
for J:=1 to N do
temp[J]:=B[J-1]; for J:=1 to N do
IPIV[J]:=0; for I:=1 tO N do
BEGIN
BIG:=0;
for j:=1 to N do
begin
if IPIV[J] <> 1 then
BEGIN
for K:=1 to N do
begin
if IPIV[K] = 0 then
BEGIN
IF Abs(A[J,K]) >= BIG then
begin
BIG:=Abs(A[J,K]);
IROW:=J;
ICOL:=K;
end;
END
ELSE
BEGIN
if IPIV[K] > 1 then
begin
ShowMessage('系数矩阵不可逆!');
exit;
end;
END; end;
END;
end;
IPIV[ICOL]:=IPIV[ICOL]+1;
If IROW <> ICOL then
begin
for L:=1 to N do
BEGIN
DUM:=A[IROW,L];
A[IROW,L]:=A[ICOL,L];
A[ICOL,L]:=DUM;
END;
DUM:=B[IROW];
B[IROW]:=B[ICOL];
B[ICOL]:=DUM;
end;
INDXR[I]:=IROW;
INDXC[I]:=ICOL;
if A[ICOL,ICOL] = 0 then
begin
ShowMessage('系数矩阵不可逆!');
exit;
end;
PIVINV:=1/A[ICOL,ICOL];
A[ICOL,ICOL]:=1;
for L:=1 to N do
A[ICOL,L]:=A[ICOL,L]*PIVINV;
B[ICOL]:=B[ICOL]*PIVINV;
for LL:=1 tO N do
begin
if LL <> ICOL then
BEGIN
DUM:=A[LL,ICOL];
A[LL,ICOL]:=0;
for L:=1 to N DO
A[LL,L]:=A[LL,L]-A[ICOL,L]*DUM;
B[LL]:=B[LL]-B[ICOL]*DUM;
END;
end;
END;
for L:=N Downto 1 do
begin
if INDXR[L] <> INDXC[L] then
BEGIN
for K:=1 TO N do
begin
DUM:=A[K,INDXR[L]];
A[K,INDXR[L]]:=A[K,INDXC[L]];
A[K,INDXC[L] ]:=DUM;
end;
END;
end; for i:=1 to N do
begin
B[i-1]:=0;
for j:=1 to N do
B[i-1]:=B[i-1]+A[i,j]*temp[j];
end;
end;