|
a/MatLib.mod.m2pp |
|
b/MatLib.mod.m2pp |
|
... |
|
... |
64 |
(* 25.10.17, MRi: Einfuegen von TransposeMN aus Testumgebung *)
|
64 |
(* 25.10.17, MRi: Einfuegen von TransposeMN aus Testumgebung *)
|
65 |
(* 07.12.17, MRi: Einfuegen von StuerzMN,NeumaierSum & NeumaierProdSum *)
|
65 |
(* 07.12.17, MRi: Einfuegen von StuerzMN,NeumaierSum & NeumaierProdSum *)
|
66 |
(* aus Testumgebung *)
|
66 |
(* aus Testumgebung *)
|
67 |
(* 30.05.18, MRi: Einfuegen von TriInfNorm *)
|
67 |
(* 30.05.18, MRi: Einfuegen von TriInfNorm *)
|
68 |
(* 10.06.18, MRi: ZufallMat um den nicht-quadratischen Fall ergaenzt *)
|
68 |
(* 10.06.18, MRi: ZufallMat um den nicht-quadratischen Fall ergaenzt *)
|
|
|
69 |
(* 12.09.18, MRi: CMatVekProd erweitert und an MatVekProd angepasst *)
|
69 |
(*------------------------------------------------------------------------*)
|
70 |
(*------------------------------------------------------------------------*)
|
70 |
(* Offene Punkte *)
|
71 |
(* Offene Punkte *)
|
71 |
(* *)
|
72 |
(* *)
|
72 |
(* - Nachsehen ob InitMat nicht "gelitten" hat *)
|
73 |
(* - Nachsehen ob InitMat nicht "gelitten" hat *)
|
73 |
(* - Komplexe Typen auf ISO M2 umstellen *)
|
74 |
(* - Komplexe Typen auf ISO M2 umstellen *)
|
|
... |
|
... |
940 |
END;
|
941 |
END;
|
941 |
END;
|
942 |
END;
|
942 |
END;
|
943 |
END;
|
943 |
END MatVekProd;
|
944 |
END MatVekProd;
|
944 |
|
945 |
|
945 |
PROCEDURE CMatVekProd(VAR X : ARRAY OF LONGCOMPLEX;
|
946 |
PROCEDURE CMatVekProd(VAR Y : ARRAY OF LONGCOMPLEX;
|
946 |
VAR Mat : ARRAY OF ARRAY OF LONGCOMPLEX;
|
947 |
VAR A : ARRAY OF ARRAY OF LONGCOMPLEX;
|
947 |
Vek : ARRAY OF LONGCOMPLEX;
|
948 |
X : ARRAY OF LONGCOMPLEX;
|
948 |
dim : CARDINAL); (* Dim d. Matrix *)
|
949 |
M,N : CARDINAL;
|
|
|
950 |
trans : CHAR);
|
949 |
|
951 |
|
950 |
VAR i,j : CARDINAL;
|
952 |
VAR i,j : CARDINAL;
|
951 |
CSum : LONGCOMPLEX;
|
953 |
Xi,Yi : LONGCOMPLEX;
|
952 |
BEGIN
|
954 |
BEGIN
|
953 |
FOR i:=0 TO dim-1 DO
|
955 |
IF (CAP(trans) = "N") THEN (* y = A*x *)
|
954 |
CSum:=CMPLX(0.0,0.0);
|
|
|
955 |
FOR j:=0 TO dim-1 DO
|
956 |
FOR i:=0 TO M-1 DO
|
956 |
CSum:=CSum + Mat[i,j]*Vek[j];
|
957 |
Yi := zero;
|
|
|
958 |
FOR j:=0 TO N-1 DO Yi:=Yi + A[i,j]*X[j]; END;
|
|
|
959 |
Y[i]:=Yi;
|
|
|
960 |
END;
|
|
|
961 |
ELSIF (CAP(trans) = "T") THEN (* y = A^{tr}*x *)
|
|
|
962 |
FOR j:=0 TO N-1 DO Y[j]:=zero; END;
|
|
|
963 |
FOR i:=0 TO M-1 DO
|
|
|
964 |
IF (X[i] # zero) THEN
|
|
|
965 |
Xi := X[i];
|
|
|
966 |
FOR j:=0 TO N-1 DO Y[j]:=Y[j] + A[i,j]*Xi; END;
|
957 |
END;
|
967 |
END;
|
958 |
X[i]:=CSum;
|
968 |
END;
|
959 |
END; (* FOR i *)
|
969 |
ELSIF (CAP(trans) = "C") THEN (* y = conj(A^{tr})*x *)
|
|
|
970 |
FOR j:=0 TO N-1 DO Y[j]:=zero; END;
|
|
|
971 |
FOR i:=0 TO M-1 DO
|
|
|
972 |
IF (X[i] # zero) THEN
|
|
|
973 |
Xi := X[i];
|
|
|
974 |
FOR j:=0 TO N-1 DO
|
|
|
975 |
Y[j]:=Y[j] + LongComplexMath.conj(A[i,j])*Xi;
|
|
|
976 |
END;
|
|
|
977 |
END;
|
|
|
978 |
END;
|
|
|
979 |
ELSE
|
|
|
980 |
Errors.FatalError("trans # CAP({N|T|C}) (CMatVekProd)");
|
|
|
981 |
END;
|
960 |
END CMatVekProd;
|
982 |
END CMatVekProd;
|
961 |
|
983 |
|
962 |
PROCEDURE SvVekProd(VAR Y : ARRAY OF LONGREAL; (* ==> *)
|
984 |
PROCEDURE SvVekProd(VAR Y : ARRAY OF LONGREAL; (* ==> *)
|
963 |
VAR A : ARRAY OF LONGREAL; (* <== SUPERVEKTOR *)
|
985 |
VAR A : ARRAY OF LONGREAL; (* <== SUPERVEKTOR *)
|
964 |
VAR X : ARRAY OF LONGREAL; (* <== *)
|
986 |
VAR X : ARRAY OF LONGREAL; (* <== *)
|