samer@0
|
1 /*
|
samer@0
|
2 * Copyright (c) 2000, Samer Abdallah, King's College London.
|
samer@0
|
3 * All rights reserved.
|
samer@0
|
4 *
|
samer@0
|
5 * This software is provided AS iS and WITHOUT ANY WARRANTY;
|
samer@0
|
6 * without even the implied warranty of MERCHANTABILITY or
|
samer@0
|
7 * FITNESS FOR A PARTICULAR PURPOSE.
|
samer@0
|
8 */
|
samer@0
|
9
|
samer@0
|
10 package samer.maths;
|
samer@0
|
11 import samer.tools.*;
|
samer@0
|
12
|
samer@0
|
13 public class MatrixTransposeTimesVector extends VectorFunctionOfVector
|
samer@0
|
14 implements SafeTask
|
samer@0
|
15 {
|
samer@0
|
16 int m, n;
|
samer@0
|
17 double [][] a;
|
samer@0
|
18 double [] x, y, arow;
|
samer@0
|
19
|
samer@0
|
20 public MatrixTransposeTimesVector( Vec out, Matrix matrix, Vec in) {
|
samer@0
|
21 this(out.array(),matrix,in.array());
|
samer@0
|
22 }
|
samer@0
|
23 public MatrixTransposeTimesVector(Matrix matrix) {
|
samer@0
|
24 m = matrix.getRowDimension();
|
samer@0
|
25 n = matrix.getColumnDimension();
|
samer@0
|
26 a = matrix.getArray();
|
samer@0
|
27 }
|
samer@0
|
28
|
samer@0
|
29 public MatrixTransposeTimesVector( double[] out, Matrix matrix, double[] in) {
|
samer@0
|
30 this(matrix); x = in; y = out;
|
samer@0
|
31 }
|
samer@0
|
32
|
samer@0
|
33 public void dispose() {}
|
samer@0
|
34 public void starting() {}
|
samer@0
|
35 public void stopping() {}
|
samer@0
|
36 public void run() {
|
samer@0
|
37 java.util.Arrays.fill(y,0);
|
samer@0
|
38 for (int j=0; j<m; j++) {
|
samer@0
|
39 double t=x[j];
|
samer@0
|
40 arow=a[j];
|
samer@0
|
41 for (int i=0; i<n; i++) y[i]+=arow[i]*t;
|
samer@0
|
42 }
|
samer@0
|
43 }
|
samer@0
|
44
|
samer@0
|
45
|
samer@0
|
46 public void apply(double [] x, double [] y) {
|
samer@0
|
47 java.util.Arrays.fill(y,0);
|
samer@0
|
48 for (int j=0; j<m; j++) {
|
samer@0
|
49 double t=x[j];
|
samer@0
|
50 arow=a[j];
|
samer@0
|
51 for (int i=0; i<n; i++) y[i]+=arow[i]*t;
|
samer@0
|
52 }
|
samer@0
|
53 }
|
samer@0
|
54 }
|