C-Programmierung der QR-Zerlegung mittels Givens-Rotation

Neue Frage »

Anfänger101 Auf diesen Beitrag antworten »
C-Programmierung der QR-Zerlegung mittels Givens-Rotation
Meine Frage:
Hallo Leute,

ich versuche zurzeit, die QR-Zerlegung einer mxn Matrix A (mit m größer gleich n) in C zu programmieren. Als Vorlage habe ich dabei den Algorithmus benutzt, den man hier finden kann http://www.matheboard.de/thread.php?postid=548589#post548589 (7c. Implementierung)


Meine Ideen:
Meine Funktion, welche die QR-Zerlegung durchführen soll sieht in C Code wie folgt aus (wenn das zu unübersichtlich ist, Screenshot befindet sich im Anhang)

void givens(double **A, int m, int n)
{
int i, j, l, k;
double t, v, c, s;

if(m-2<n-1) l=m-2;
else l=n-1;

for(j=0;j<=l;j++)
for(i=j+1;i<m;i++)
if(A[i][j] != 0)
{
t = fabs(A[j][j]) + fabs(A[i][j]);
v = t* sqrt((A[j][j]/t)*(A[j][j]/t) + (A[i][j]/t)*(A[i][j]/t));
c = A[j][j]/v;
s = A[i][j]/v;

A[j][j] = v;
A[i][j] = 0;

for(k=j+1;k<n;k++)
{
t = A[j][k];
A[j][k] = c*t +s*A[i][k];
A[i][k] = c*A[i][k] - s*t;
}


}

}


(Da Die Matrix A bei A[0][0] anfängt, habe ich die Grenzen für die Indizies dementsprechend angepasst)

Jetzt habe ich allerdings zwei Probleme:

1. Bei rechteckigen (also nicht-quadratischen) Matrizen mit m größer n stürzt das Programm ab.

2. Bei quadratischen Matrizen wird das Programm zwar ausgeführt und liefert auch eine obere Dreiecksmatrix. In manchen Einträgen befindet sich aber leider das falsche Vorzeichen.

Da ich noch ziemlich unbeholfen in Sachen Programmierung bin, wäre es nett, wenn mir da jemand helfen könnte.

Liebe Grüße

Anfänger
Anfänger101 Auf diesen Beitrag antworten »
RE: C-Programmierung der QR-Zerlegung mittels Givens-Rotation
Hallo,

auch wenn mir scheinbar niemand konkret weiterhelfen kann, kann mir jemand erklären, wieso das Tau in "7.c Implementierung" so gewählt wird?
Werd daraus absolut nicht schlau, ich dachte immer, das Tau muss das Vorzeichen von ajj sein.

Liebe Grüße
Neue Frage »
Antworten »



Verwandte Themen

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