矩阵求逆(200分)

  • 主题发起人 主题发起人 maginnn
  • 开始时间 开始时间
M

maginnn

Unregistered / Unconfirmed
GUEST, unregistred user!
用数组代替了矩阵,现在要求逆矩阵
数组的维数(i,4)
即:动态的i行(看用户的输入),4列
怎么求逆矩阵?
 
根据线性代数的
 
不是方阵可以求逆吗,还是看看书吧.概念都没搞清楚.
逆矩阵定义:
对于矩阵A,有一个唯一的矩阵B,满足
AB = E, BA = E.E为单位阵.
则称B是A的逆矩阵.
 
??也许是概念不同,期待进一步说明!
 
sorry没有说清楚
例如:有了矩阵a;
先求求a的转置阵,
然后求a×a'最后求(a×a')的逆矩阵
实际上我是算
b=(a*a')的逆×a’*c(二乘法)
 
请各位高手就那 4×4的矩阵举例说明吧!!
 
老兄,我会用matlab可是现在要求用delphi!
 
这里有算法
http://www.delphibbs.com/delphibbs/dispq.asp?lid=427103

 
我不看書的記不住那些公式的
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=173581
 
比较简单,利用初等行变化,这是本人在毕业设计时用到的求逆矩阵的代码,
当然还有矩阵的可逆条件等的判断,现在就只核心算法代码贴上

//以下利用初等变化对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;
//矩阵求逆完毕
 
to maginnn:
我这代码是经过测试的,你还没用上吗?是不是不上网了?
 
to maginnn:
我知道你是南京的富翁,我已经替你解答,你却不给我分,不够意思!你这个人怎么这么差劲?
 
to luyear:
版主,我可以不要分,你能否帮忙把我在此贴上的解答删除?拜托,谢谢
 
to:南京男生
多谢你了,这个问题我已经解决了!
我虽然没有用你的思路但是我相信应该是正确的!
(不过我认为,在你的程序中如果分解出现0后,在计算时候,有可能分母为0了)
我参考了'常用算法'一书,其中讲了矩阵求逆的算法,有效(经过了matlab的验证!)
希望有空联系一下
QQ:88411153
 
多人接受答案了。
 
后退
顶部