比较简单,利用初等行变化,这是本人在毕业设计时用到的求逆矩阵的代码,
当然还有矩阵的可逆条件等的判断,现在就只核心算法代码贴上
//以下利用初等变化对JJ矩阵求逆,逆矩阵为为J_J矩阵
//total_Node为矩阵维数
for i:=1 to total_Node do
begin
for j:=1 to total_Node do
begin
J_J[i,j]:=0;
end;
end;
for i:=1 to total_Node do
J_J[i,i]:=1;
//先把J_J矩阵设为单位矩阵
//求逆上下三角计算,使之为零
for i:=1 to total_Node do
//对第i列操作
begin
for j:=1 to total_Node do
//对第i列的第j行操作
begin
if JJ[i,i]=0 then
begin
sign1:=0;
for h:=1 to total_Node do
begin
if (JJ[h,i]<>0)and(sign1=0) then
begin
//h行与第i行互换,使JJ[i,i]不为零
sign1:=1;
for m:=1 to total_Node do
begin
f1:=JJ[h,m];
JJ[h,m]:=JJ[i,m];
JJ[i,m]:=f1;
f1:=J_J[h,m];
J_J[h,m]:=J_J[i,m];
J_J[i,m]:=f1;
end;
end;
end;
end ;
//开始计算零元素
if j<>i then
begin
f1:=-JJ[j,i]/JJ[i,i];
for m:=1 to total_Node do
//对第j行的各列计算零元素
begin
J_J[j,m]:=f1*J_J[i,m]+J_J[j,m];
JJ[j,m]:=f1*JJ[i,m]+JJ[j,m];
end;
end;
end;
end;
//算零完毕
//使JJ矩阵的对角线元素置1,即求逆最后一步
for i:=1 to total_Node do
begin
for h:=1 to total_Node do
begin
J_J[i,h]:=J_J[i,h]/JJ[i,i];
end;
//JJ[i,i]:=JJ[i,i]/JJ[i,i];
end;
//矩阵求逆完毕