矩阵的Drazin逆

5

是否存在一种算法可以计算奇异矩阵的Drazin逆? 我想在MATLABMathematica中应用它。


MathOverflow上的这个问题可能会引起您的兴趣。 - eigenchris
是的,我看过了,但由于它似乎相当古老,我认为现在应该有一个MATLAB或Mathematica代码,可以有效地计算奇异矩阵的Drazin逆 - thanasissdr
@thanasissdr 根据您的矩阵大小和时间限制,您可以使用Jordan分解来计算它。 - TroyHaskin
@TroyHaskin 好的,我会看看。谢谢。 - thanasissdr
1个回答

3

阅读本文:

Fanbin Bu 和 Yimin Wei,《计算双变量多项式矩阵Drazin逆的算法》,《应用数学和计算》147.3(2004):805-836。

附录中有几个MATLAB代码。第一个代码如下:

function DrazinInverse1a = DrazinInverse1(a)
%-----------------------------------------
%Compute the Drazin Inverse of a matrix 'a' using the limited algorithm.
%Need computing the index of 'a'.
global q1 q2 s1 s2
[m,n] = size(a);
if m~= n
    disp('Matrix is must be square!')
end
%-----------------------------------------
% Computer the index of A and note r = rank(A^k).
[k,r,a1,a] = index(a);
F = eye(n);
g = -trace(a);
g = collect(g);
for i = 1:r-1
    G = g*eye(n);
    F = a*F+G;
    g = -trace(a*F)/(i+1);
    g = collect(g);
end
DrazinInverse1a = a1*F;
DrazinInverse1a = -1/g*DrazinInverse1a;
DrazinInverse1a = simplify(DrazinInverse1a);
end

function [k,r,a1,a] = index(a)
%To compute the index of 'a'.
k = 0;
n = length(a);
r = n;
a0 = a;
r1 = rank(a);
a1 = eye(n);
while r ~= r1
    r = r1;
    a1 = a;
    a = a*a0;
    r1 = rank(a);
    k = k+1;
end
r = sym2poly(r);
end

虽然这个链接可能会回答问题,但最好包括答案的关键部分,并提供参考链接。如果链接页面发生更改,则仅有链接的答案可能会失效。 - emmanuel
@emmanuel,我已经添加了主要代码。证明非常长,直接复制粘贴是不正确的。 - Giacomo Alessandroni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接