Überbestimmte Gleichungssysteme mittels Householder Transformation

Neue Frage »

maytze Auf diesen Beitrag antworten »
Überbestimmte Gleichungssysteme mittels Householder Transformation
Meine Frage:
Hallo Leute,

ich habe folgendes Problem: Es soll mittels Householder Transformation (A=Q*R) ein überbestimmtes lineares Gleichungssystem gelöst werden! Ich verwende dafür Matlab und habe schon einen Lösungsansatz erstellt, aber irgendwie komme ich nicht weiter. Bisher funktioniert dies leider nur für 3x3 oder 4x4 Matrizen, nicht aber für z.B. eine 10x2 Matrix!

A = [1 12.6; 1 14; 1 18.1; 1 23.2; 1 25; 1 26.4; 1 30.5; 1 32.5; 1 36.6; 1 40.1]

b = [8.6; 11.5; 12.4; 15.6; 15.1; 17.7; 18.9; 18.6; 21.3; 24.3]

Es soll nun nach A*x=b "x" berechnet werden...

Meine Ideen:
Das ist mein Ansatz:
***********************************************************************

disp('Berechnung des Lösungsvektors "x" für ein überbestimmtes LGS mit Hilfe der Householder-Transformation (A =Q*R)')


A = input('Bitte eine überbestimmte Matrix A vom Typ [m,n] mit m > n eingeben: ')
b = input('Nun den Vektor "b" der rechten Seite des LGS eingeben: ')


% Berechnung von Q und R

[m,n]=size(A); % Bestimmen der Größe von A, m Zeilen & n Spalten

if m < n % Start einer If-Schleife

('Falsche Dimension. Die Anzahl der Zeilen muss größer oder gleich der Dimension der Spalten sein.')

else

Q = eye(m); % Q als m x m Einheitsmatrix initialisieren

for i=1unglücklich m-1) % Initialisierung einer Schleife mit der Zählvariablen i,
% die von 1 bis m-1 (Anzahl Zeilen - 1) läuft

x = A(i:m,i); % Festlegen des jeweiligen Spaltenvektors auf den Vektor x

v = x; % Duplizieren von x auf v (Householder Vektor)

v(1) = x(1) + sign(x(1)) * norm(x); % Bestimmen des jeweiligen Householder Vektors
% dabei ändert sich nur das erste Element v(1) des Vektors v % = 1

Q(i:m,smile = Q(i:m,smile - 2 / (v' * v) * (v * v') * Q(i:m,smile ; % Folgematrix Q aus ihrem Vorgänger bestimmen

A(i:m,smile = A(i:m,smile - 2 / (v' * v) * (v * v') * A(i:m,smile ; % A(neu) = Q * A(alt)

end % Schleifenende

disp('Die Householdermatrix Q lautet: ')
Q


disp('Die obere Dreiecksmatrix R lautet: ')
R = A % die im (m-1)-ten Schritt erzeugte Matrix A ist die gesuchte obere rechte
% Dreiecksmatrix R

end

disp('Der Lösungsvektor "x" für das überbestimmte LGS lautet: ')
f = Q*b; % Q*b=f; "f" ist die neue rechte Seite des LGS
x = R\f % R*x=f => x=R\f; "x" ist der gesuchte Lösungsvektor des LGS

disp('Zum Beenden eine beliebige Taste drücken...')
pause
disp('Fertig!')
************************************************************************

Ich habs auch nochmal als Bild hochgeladen...

Über Verbesserungen wäre ich sehr dankbar!
smile
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »