Vektoroperationen
Folgende Vektoroperationen werden wir häufig benötigen. Sie sollen deshalb als Funktionen oder Prozeduren implementiert werden:
-
Skalarprodukt \(\alpha \leftarrow x^T \cdot y\)
Signatur:
double ddot(int n, const double *x, int incX, const double *y, int incY);
Quick-Return: Im Fall \(n=0\) soll die Funktion mit dem Rückgabewert 0 zurückkehren.
-
Aufdatierung eines Vektors \(y \leftarrow \alpha \cdot x + y\) (Bei BLAS mit AXPY abgekürzt für Alpha-X-Plus-Y).
Signatur:
void daxpy(int n, double alpha, const double *x, int incX, double *y, int incY);
Quick-Return: Im Fall \(\alpha = 0\) soll die Funktion sofort zurückkehren.
-
Skalierung eines Vektors \(x \leftarrow \alpha x\)
Signatur:
void dscal(int n, double alpha, double *x, int incX);
-
Kopieren eines Vektors \(y \leftarrow x\)
Signatur:
void dcopy(int n, const double *x, int incX, double *y, int incY);
-
Tauschen von Vektoren \(y \leftrightarrow x\)
Signatur:
void dswap(int n, double *x, int incX, double *y, int incY);
-
Die Unendlich-Norm eines Vektors ist bekanntlich definiert durch
\[\|x\|_\infty := \text{max}\{\left|x_1\right|,\dots,\left|x_n\right|\}\]Und soll mit der Funktion damax (double-absolut-max) berechnet werden.
Signatur:
double damax(int n, const double *x, int incX);
Quick-Return: Im Fall \(n=0\) soll die Funktion mit dem Rückgabewert 0 sofort zurückkehren.
-
Die 1-Norm oder Spaltensummennorm einer Matrix ist definiert durch
\[\|A\|_1 :=\max\limits_{j=1,\dots,n}\sum\limits_{i=1}^m \left|A_{i,j}\right|\]und soll mit der Funktion dgenrm1 (double-generalmatrix-norm-1) berechnet werden.
Signatur:
double dgenrm1(int m, int n, const double *A, int incRowA, int incColA);
Quick-Return: Im Fall \(m=0\) oder \(n=0\) soll die Funktion mit dem Rückgabewert 0 sofort zurückkehren.
Aufgabe
Implementiert diese Funktionen. Verwendet das vorige Programm als Grundgerüst für folgende Tests (in der angegebenen Reihenfolge):
-
Berechnet das Skalarprodukt der ersten und zweiten Spalte.
-
Addiert das doppelte der zweiten Spalte auf die dritte Spalte.
-
Skaliert die vierte Spalte mit \(0.5\).
-
Berechnet jeweils die Unendlich-Norm der ersten Spalte und der zweiten Zeile.
-
Berechnet jeweils die 1-Norm der Matrizen A(1:4,1:5) und A(2:4,3:5).
-
Vertauscht Spalte 2 und Spalte 3.
-
Überschreibt Spalte 4 mit Spalte 3.
Führt diese Tests für eine \(5\times 5\) Matrix durch, die jeweils als Row-Major- und Col-Major-Matrix im Speicher liegt.