Die Pseudoinverse



Allgemeingültige Berechnung der Pseudoinversen: Die Matrix A wird adjungiert (also transponiert und komplex konjunngiert) und einmal invertiert. Der Rest ist dann drei Mal Matrizenmultiplikation.


{{lf code="A^{\sharp} = (A^{*} \cdot A)^{-1} \cdot A^{*}"}}


1. Test mit Octave


Generiere eine Matrix A mit 4x3 Elementen des komplexen Körpers (mit kompl. Zahlen)
A=rand(4,3)+1i*rand(4,3)


Prüfe vorher ob A aus linear unabhängigen Vektoren besteht.

Bilde die Pseudoinverse
Api = inv(A'*A)*A'


oder so ;)

Api = pinv(A)



2. Anwendung


Least-Squares-Fit mit der Pseudoinversen


Betrachtet wird die Funktion

ys= 5*x.^2 + 7*x - 50 + .5*exp(x)

im Intervall [-10,8]


clc
x=-10:.5:8;
x=x';
ys=  5*x.^2   +   7*x   -   50   +   .5*exp(x);
y = ys + randn(size(ys))*20; % Rauschen hinzufügen
plot(x,y,'x');
grid;

o=ones(size(x));

A = [ x.^2  x  o  exp(x) ];    % Die Theoretisch angenommene Funktion y=f(x)

b=pinv(A)*y %Lösungdes Gleichungsystems

yp = b(1)*x.^2 + b(2)*x + b(3) + b(4)*exp(x);   % Die Lösung
hold on
plot(x,ys,'y');
plot(x,yp,'r');
legend('Data points','Original function','Fitted function')
hold off



image


b =
	4.97414
	7.55254
  -50.54712
	0.50782





3. Vereinfachungen der Berechnung für besondere Matrizen


mit Octave-Beispielen

Allgemeingültige Berechnung der Pseudoinversen: Die Matrix A wird adjungiert (also transponiert und komplex konjunngiert) und einmal invertiert
(A* x A)-1 x A*
A=rand(4,3)+1i*rand(4,3)
Ai1 = inv(A'*A)*A' % Zu Fuß
Ai2 = pinv(A)
norm(Ai1-Ai2,2) % Vergleiche den Fahler


Vereinfachung für quadratische Matrizen NxN
(A x A)-1 x A
A=rand(4,4)+1i*rand(4,4)
Ai1 = inv(A*A)*A % Zu Fuß
Ai2 = pinv(A)
norm(Ai1-Ai2,2) % Vergleiche den Fahler


Vereinfachung für Matrizen mit rein reelen Koeffizienten
(AT x A)-1 x AT
A=rand(4,3)
Ai1 = inv(A.'*A)*A.' % Zu Fuß
Ai2 = pinv(A)
norm(Ai1-Ai2,2) % Vergleiche den Fahler






Siehe auch
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki