【问题标题】:Drazin inverse of a matrix矩阵的逆矩阵
【发布时间】:2015-03-06 22:26:56
【问题描述】:

是否有计算奇异矩阵的Drazin inverse 的算法?我想在MATLABMathematica 中应用它。

【问题讨论】:

  • This question 上 MathOverflow 可能很有趣。
  • 是的,我见过它,但由于它似乎很旧,我假设现在会有一个 MATLAB 或 Mathematica 代码,它可以非常有效地计算奇异矩阵的 Drazin inverse .
  • @thanasisdr 根据矩阵的大小和时间限制,您可以使用Jordan Decomposition 来计算它。
  • @TroyHaskin 好的,我去看看。谢谢。

标签: matlab matrix linear-algebra


【解决方案1】:

阅读这篇文章:

Fanbin Bu 和 Yimin Wei,The algorithm for computing the Drazin inverses of two-variable polynomial matrices应用数学与计算 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,我已经添加了主体代码。证明很长,剪切和粘贴不正确。
猜你喜欢
  • 2019-02-08
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
相关资源
最近更新 更多