DEFINITION MODULE PMatLib;
(*------------------------------------------------------------------------*)
(* Einige Matrix-Operationen f"ur den Datentyp PMATRIX *)
(* Some matrix operations for data typ Deklera.PMATRIX *)
(*------------------------------------------------------------------------*)
(* Implementation : Michael Riedl *)
(* Licence : GNU Lesser General Public License (LGPL) *)
(*------------------------------------------------------------------------*)
(* $Id: PMatLib.def,v 1.1 2015/09/15 07:05:52 mriedl Exp $ *)
FROM Deklera IMPORT PMATRIX;
PROCEDURE NormVek2(VAR X : ARRAY OF LONGREAL;
IStart,IEnd : CARDINAL;
MaxNorm : BOOLEAN);
(*---------------------------------------------------------------*)
(* Normiert den Vektor X im Bereich X[IStart] bis X[IEnd]. *)
(* Wenn MaxNorm = TRUE so, da3 das Maximale Element die Gr"o3e *)
(* 1 hat, ansonsten nach der Euklidschen Norm auf 1 *)
(*---------------------------------------------------------------*)
PROCEDURE PMatVek(VAR A : PMATRIX;
m,n : CARDINAL; (* Dimension der Matrix A *)
Alpha : LONGREAL;
VAR X : ARRAY OF LONGREAL;
Beta : LONGREAL;
VAR Y : ARRAY OF LONGREAL;
TransA : CHAR);
(*---------------------------------------------------------------*)
(* Berechnet Y = Alpha * opt(A) X + Beta Y, wobei *)
(* opt(A) = A f"ur CAP(TransA) = N *)
(* opt(A) = A' f"ur CAP(TransA) = T *)
(* *)
(* Diese Routine ist eine Adaption von BLAS dgemv *)
(*---------------------------------------------------------------*)
PROCEDURE PMatMult(VAR C : PMATRIX;
VAR A : PMATRIX;
VAR B : PMATRIX;
ma,na : CARDINAL;
mb,nb : CARDINAL;
Alpha : LONGREAL;
Beta : LONGREAL;
TransA : CHAR;
TransB : CHAR);
(*---------------------------------------------------------------*)
(* Berechnet die Matrixmultiplikation *)
(* C = Alpha (op(A) op(B)) + Beta C *)
(* *)
(* op(X) ist X fuer CAP(TransX) # "T", op(X) = X^+ sonst. *)
(* Sowohl die Matrix A als auch B k"onnen mit C identisch *)
(* sein, da diese erst im letzten Berechnungsschritt "uber- *)
(* schrieben wird. *)
(* A hat die Dimension A[1..ma][1..na]. *)
(* B hat die Dimension B[1..mb][1..nb]. *)
(* Wird eine Transpornierte bei der Berechnung gew"unscht, so *)
(* werden trotztdem die Dimensionen der untranspornierten Matrix *)
(* angegeben. *)
(* Die Dimension von C h"angt von der gew"unschten Berechnung *)
(* ab, die geforderten Bedingungen gehen aus der folgenden *)
(* Tabelle hervor. *)
(* *)
(* C[1..ma][1..nb] fuer C = Alpha (A B ) + Beta C mit (na=mb) *)
(* C[1..na][1..nb] fuer C = Alpha (A^+ B ) + Beta C mit (ma=mb) *)
(* C[1..ma][1..mb] fuer C = Alpha (A B^+) + Beta C mit (na=nb) *)
(* C[1..na][1..mb] fuer C = Alpha (A^+ B^+) + Beta C mit (ma=nb) *)
(* *)
(* Diese Routine ist eine Adaption von BLAS dgemm *)
(*---------------------------------------------------------------*)
PROCEDURE MinMaxNorm(VAR X : ARRAY OF LONGREAL;
n : CARDINAL); (* Anzahl der Datenpunkte *)
(*---------------------------------------------------------------*)
(* Normiert den Vektor X, so da3 MIN(X) = 0 und MAX(X) = 1 *)
(*---------------------------------------------------------------*)
PROCEDURE dger( m,n : CARDINAL;
Alpha : LONGREAL;
VAR X : ARRAY OF LONGREAL;
IncX : CARDINAL;
VAR Y : ARRAY OF LONGREAL;
IncY : CARDINAL;
VAR A : PMATRIX);
(*--------------------------------------------------------------*)
(* DGER performs the rank 1 operation *)
(* *)
(* A := Alpha*(x;y) + A, *)
(* *)
(* where Alpha is a scalar, x is an m element vector, y is *)
(* an n element vector and A is an m by n matrix. *)
(* (x;y) denotes a dyadic product of the vectors x and y. *)
(* *)
(* -- Written on 22-October-1986. *)
(* Jack Dongarra, Argonne National Lab. *)
(* Jeremy Du Croz, Nag Central Office. *)
(* Sven Hammarling, Nag Central Office. *)
(* Richard Hanson, Sandia National Labs. *)
(* *)
(* Anpassung an Modula-2 : M. Riedl, Aug. 1996. *)
(* *)
(* PARAMETER *)
(* ========= *)
(* *)
(* X : Array of dimension at least (1 + ( m - 1 )* IncX) . *)
(* Before entry, the incremented array X must contain *)
(* the m element vector x. *)
(* Unchanged on exit. *)
(* IncX : On entry, IncX specifies the increment for the *)
(* elements of X. *)
(* Y : Array of dimension at least ( 1 + ( n - 1 )* IncY ). *)
(* Before entry, the incremented array Y must contain *)
(* the n element vector y. *)
(* Unchanged on exit. *)
(* IncY : On entry, IncY specifies the increment for the *)
(* elements of Y. *)
(* A : Array of DIMENSION ( m, n ). *)
(* Before entry, the leading m by n part of the array A *)
(* must contain the matrix of coefficients. On exit, A *)
(* is overwritten by the updated matrix. *)
(* *)
(*--------------------------------------------------------------*)
END PMatLib.