%% Mooreova-Penroseova pseudoinverze
% A - libovolná matice, X se nazývá pseudoinverzní matice, jestliže platí Penroseovy axiomy:
% (1)\  AXA=A
% (2)\ XAX=X
% (3)\ AX je hermitovská matice
% (4)\ XA je hermitovská matice
% Pseudoinverzní matice vždy existuje a je určena jednoznačně. Označení: A^+
%% Výpočet:
% Pokud má A nezávislé sloupce, pak A^+=(A^*A)^{-1}A^*.
% Pokud má A nezávislé řádky, pak A^+=A^*(AA^*)^{-1}.
% V obecném případě je možné zkoustruovat matici A^+ pomocí skeletního rozkladu: najdeme matici B s nezávislými řádky a matici C s nezávislými sloupci, že platí A=BC. Pak A^+=C^+B^+.
%
%% Příklady:
% Pseudoinevrze vektoru:

format short
v=-2:2
vp1=v'*inv(v*v')
vp2=v'/norm(v)^2

%
% Pseudoinveze matice

A=[ones(1,5);1:5]'
AP1=inv(A'*A)*A'
AP2=pinv(A)
AP1-AP2

% Otestujte chybu Penroseových axiomů
%
% Určete pseudoinverzní matici pro následující matici:

A=[1 2 3;4 5 6;7 8 9]

%
% Určete pseudoinverzní matici pomocí skeletního rozkladu pro matici

A=[A,2*A,-A;-A,3*A,A]

%
% Pro tutéž matici použijte vztah pro "ruční výpočet" A^+=(QA^*A)^+QA^* pro regulární matici Q.