Download this file

PMatLib.def    131 lines (116 with data), 8.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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.