Switch to side-by-side view

--- a/MatLib.mod.m2pp
+++ b/MatLib.mod.m2pp
@@ -66,6 +66,7 @@
   (*                aus Testumgebung                                        *)
   (* 30.05.18, MRi: Einfuegen von TriInfNorm                                *)
   (* 10.06.18, MRi: ZufallMat um den nicht-quadratischen Fall ergaenzt      *)
+  (* 12.09.18, MRi: CMatVekProd erweitert und an MatVekProd angepasst       *)
   (*------------------------------------------------------------------------*)
   (* Offene Punkte                                                          *)
   (*                                                                        *)
@@ -942,21 +943,42 @@
       END;
 END MatVekProd;
 
-PROCEDURE CMatVekProd(VAR X   : ARRAY OF LONGCOMPLEX;
-                      VAR Mat : ARRAY OF ARRAY OF LONGCOMPLEX;
-                          Vek : ARRAY OF LONGCOMPLEX;
-                          dim : CARDINAL); (* Dim d. Matrix *)
-
-          VAR  i,j  : CARDINAL;
-               CSum : LONGCOMPLEX;
-BEGIN
-      FOR i:=0 TO dim-1 DO
-        CSum:=CMPLX(0.0,0.0);
-        FOR j:=0 TO dim-1 DO
-          CSum:=CSum + Mat[i,j]*Vek[j];
-        END;
-        X[i]:=CSum;
-      END; (* FOR i *)
+PROCEDURE CMatVekProd(VAR Y     : ARRAY OF LONGCOMPLEX;
+                      VAR A     : ARRAY OF ARRAY OF LONGCOMPLEX;
+                          X     : ARRAY OF LONGCOMPLEX;
+                          M,N   : CARDINAL;
+                          trans : CHAR);
+
+          VAR  i,j   : CARDINAL;
+               Xi,Yi : LONGCOMPLEX;
+BEGIN
+      IF (CAP(trans) = "N") THEN (* y = A*x *)
+        FOR i:=0 TO M-1 DO
+          Yi := zero;
+          FOR j:=0 TO N-1 DO Yi:=Yi + A[i,j]*X[j]; END;
+          Y[i]:=Yi;
+        END;
+      ELSIF (CAP(trans) = "T") THEN (* y = A^{tr}*x *)
+        FOR j:=0 TO N-1 DO Y[j]:=zero; END;
+        FOR i:=0 TO M-1 DO
+          IF (X[i] # zero) THEN
+            Xi := X[i];
+            FOR j:=0 TO N-1 DO Y[j]:=Y[j] + A[i,j]*Xi; END;
+          END;
+        END;
+      ELSIF (CAP(trans) = "C") THEN (* y = conj(A^{tr})*x *)
+        FOR j:=0 TO N-1 DO Y[j]:=zero; END;
+        FOR i:=0 TO M-1 DO
+          IF (X[i] # zero) THEN
+            Xi := X[i];
+            FOR j:=0 TO N-1 DO
+              Y[j]:=Y[j] + LongComplexMath.conj(A[i,j])*Xi; 
+            END;
+          END;
+        END;
+      ELSE
+        Errors.FatalError("trans # CAP({N|T|C}) (CMatVekProd)");
+      END;
 END CMatVekProd;
 
 PROCEDURE SvVekProd(VAR Y   : ARRAY OF LONGREAL; (*  ==> *)