matlab求逆矩阵以及行列式,求矩阵行列式和逆,手写的MATLAB程序

行列式:

%Aij = (-1)^(i+j)*Mij

%D = a11*A11 + a12*A12 + a13*A13 + ... + a1n*A1n

%H = [1 2 3;7 9 7;5 6 1;];det(H) = 14

function H_Det =  Matrix_Det(H,N)  %输入矩阵 阶数

H_Det = 0;

if N==1

H_Det = H(1,1);

return;

end

temp = zeros(N-1,N-1);

for i=1:N

for j=2:N  %第二行开始

for k=1:N-1

if k>=i

cln = k+1;

else

cln = k;

end

temp(j-1,k) = H(j,cln);

end

end

t = Matrix_Det(temp,N-1);  %递归

if rem(1+i,2)==0   %(-1)^(1+i)

H_Det = H_Det+H(1,i)*t;

else

H_Det = H_Det-H(1,i)*t;

end

end

end

伴随阵:

%伴随阵A* = |Aij|(nxn)

%Aij = (-1)^(i+j)*Mij

%H = [1 2 3;7 9 7;5 6 1;];det(H)*inv(H) = [-33 16 -13;28 -14 14;-3 4 -5];

function H_Adjoint = Matrix_Adjoint(H,N)

H_Adjoint = zeros(N,N);

if N==1

%    H_Adjoint = [H(2,2) H(2,1);H(1,2) H(1,1)];

H_Adjoint = 1;

return;

end

temp = zeros(N-1,N-1);

for i=1:N   %逐行扫描

for j=1:N  %逐列扫描

for k=1:N-1  %行组合

if k>=j

row = k+1;

else

row = k;

end

for t=1:N-1  %列组合

if t>=i

cln = t+1;

else

cln = t;

end

temp(k,t) = H(row,cln);

end

end

if rem(i+j,2)==0

H_Adjoint(i,j) = Matrix_Det(temp,N-1);   %求代数余子式

else

H_Adjoint(i,j) = -Matrix_Det(temp,N-1);

end

end

end

end

逆:

%A^(-1) = 1/|A|*(A*)

%H = [1 2 3;7 9 7;5 6 1;];inv(H) = [-2.3571 1.1429 -0.9286;2.0000 -1.0000 1.0000;-0.2143 0.2857 -0.3571];

function H_Inv = Matrix_Inverse(H,N)

H_Det = Matrix_Det(H,N);

H_Adjoint = Matrix_Adjoint(H,N);

H_Inv = H_Adjoint/H_Det;

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值