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 MatrixTimesVector extends VectorFunctionOfVector implements SafeTask
|
samer@0
|
14 {
|
samer@0
|
15 int m, n;
|
samer@0
|
16 double [][] a;
|
samer@0
|
17 double [] x, y, arow;
|
samer@0
|
18
|
samer@0
|
19 public MatrixTimesVector( Vec out, Matrix matrix, Vec in) {
|
samer@0
|
20 this(out.array(),matrix,in.array());
|
samer@0
|
21 }
|
samer@0
|
22
|
samer@0
|
23 public MatrixTimesVector(Matrix matrix)
|
samer@0
|
24 {
|
samer@0
|
25 n = matrix.getRowDimension();
|
samer@0
|
26 m = matrix.getColumnDimension();
|
samer@0
|
27 a = matrix.getArray();
|
samer@0
|
28 }
|
samer@0
|
29
|
samer@0
|
30 public MatrixTimesVector( double [] out, Matrix matrix)
|
samer@0
|
31 {
|
samer@0
|
32 n = matrix.getRowDimension();
|
samer@0
|
33 m = matrix.getColumnDimension();
|
samer@0
|
34 a = matrix.getArray();
|
samer@0
|
35 y = out;
|
samer@0
|
36 }
|
samer@0
|
37
|
samer@0
|
38 public MatrixTimesVector( double [] out, Matrix matrix, double [] in)
|
samer@0
|
39 {
|
samer@0
|
40 n = matrix.getRowDimension();
|
samer@0
|
41 m = matrix.getColumnDimension();
|
samer@0
|
42 a = matrix.getArray();
|
samer@0
|
43 x = in;
|
samer@0
|
44 y = out;
|
samer@0
|
45 }
|
samer@0
|
46
|
samer@0
|
47 public void dispose() {}
|
samer@0
|
48 public void starting() {}
|
samer@0
|
49 public void stopping() {}
|
samer@0
|
50 public void run() {
|
samer@0
|
51 for (int i=0; i<n; i++) {
|
samer@0
|
52 double t=0;
|
samer@0
|
53 arow=a[i];
|
samer@0
|
54 for (int j=0; j<m; j++) t+=arow[j]*x[j];
|
samer@0
|
55 y[i]=t;
|
samer@0
|
56 }
|
samer@0
|
57 }
|
samer@0
|
58
|
samer@0
|
59 public void apply(double [] x, double [] y) {
|
samer@0
|
60 for (int i=0; i<n; i++) {
|
samer@0
|
61 double t=0;
|
samer@0
|
62 arow=a[i];
|
samer@0
|
63 for (int j=0; j<m; j++) t+=arow[j]*x[j];
|
samer@0
|
64 y[i]=t;
|
samer@0
|
65 }
|
samer@0
|
66 }
|
samer@0
|
67 }
|