001 002 /** 003 * Performs a subtraction operation between two vectors sequentially. 004 * @author Heinz Kredel. 005 */ 006 public class VSMult { 007 008 /** 009 * Performs a subtraction operation between two vectors sequentially. 010 * @param C double array. 011 * @param A double array. 012 * @param B double array. 013 */ 014 public void seqdiff(double[] C, double[] A, double[] B) { 015 for (int i=0; i < C.length; i++) { 016 C[i] = A[i] - B[i]; 017 } 018 } 019 020 021 /** 022 * Generates a vector. 023 * The method <CODE>random</CODE> returns a 024 * random number within the intervall [0,1]. 025 * @param n dimension of vector. 026 */ 027 public double[] vecgen(int n) { 028 029 /** 030 * Creates a 1 dimensional array <CODE>A</CODE> with the dimension n. 031 */ 032 double A[] = new double[n]; 033 for (int i=0; i < n; i++) { 034 A[i] = Math.random(); 035 } 036 return A; 037 } 038 039 /** 040 * Generates the null-vector. 041 * @param n dimension of vector. 042 */ 043 public double[] vecgen0(int n) { 044 double A[] = new double[n]; 045 for (int i=0; i < n; i++) { 046 A[i] = 0.0; 047 } 048 return A; 049 } 050 051 052 /** 053 * Prints out the vector. 054 * @param A vector. 055 */ 056 public void vecprint(double[] A) { 057 for (int i=0; i < A.length; i++) { 058 System.out.print(A[i] + " "); 059 } 060 System.out.println(); 061 } 062 063 /** 064 * Checks if the vector is approximatly zero. 065 * Checks if the absolut value of the vectors's elements are less than 066 * the production of the smallest positive value and 1000. 067 * @param A double vector. 068 */ 069 public boolean veccheck0(double[] A) { 070 double eps = Double.MIN_VALUE*1000.0; 071 for (int i=0; i < A.length; i++) { 072 if ( Math.abs(A[i]) > eps) return false; 073 } 074 return true; 075 } 076 077 078 /** 079 * main. 080 */ 081 public static void main(String[] args) { 082 083 int n = 2; 084 boolean prnt = false; 085 086 try { n = Integer.parseInt(args[0]); } 087 catch (Exception e) { } 088 try { prnt = Boolean.valueOf(args[1]).booleanValue(); } 089 catch (Exception e) { } 090 091 VSMult x = new VSMult(); 092 093 VSMInf seq = new SeqVSMult(); 094 095 VSMInf par = new ParVSMult(4); 096 097 double[] A = x.vecgen(n); 098 double[] B = null; //x.vecgen(n); 099 double C = 0.0; 100 double D = 0.0; 101 102 System.out.println("A = "); 103 if (prnt) x.vecprint(A); 104 System.out.println(""); 105 106 System.out.println("B = "); 107 if (prnt) x.vecprint(B); 108 System.out.println(""); 109 110 System.out.println("C = "); 111 long tm; 112 tm = System.currentTimeMillis(); 113 C = seq.norm(A); 114 tm = System.currentTimeMillis() - tm; 115 System.out.println(tm + "ms"); 116 117 tm = System.currentTimeMillis(); 118 D = par.norm(A); 119 tm = System.currentTimeMillis() - tm; 120 System.out.println(tm + "ms"); 121 122 if (prnt) System.out.println(""+C); 123 if (prnt) System.out.println(""+D); 124 125 double eps = Double.MIN_VALUE*1000.0; 126 if ( Math.abs(C-D) > 10.0e-7) { 127 System.out.println("C-D != 0.0: " + (C-D) ); 128 } else { 129 System.out.println("C-D == 0.0: " + (C-D) ); 130 } 131 } 132 133 134 /** 135 * main1. 136 */ 137 public static void main1(String[] args) { 138 139 int n = 2; 140 boolean prnt = false; 141 142 try { n = Integer.parseInt(args[0]); } 143 catch (Exception e) { } 144 try { prnt = Boolean.valueOf(args[1]).booleanValue(); } 145 catch (Exception e) { } 146 147 VSMult x = new VSMult(); 148 149 VSMInf seq = new SeqVSMult(); 150 151 VSMInf par = new ParVSMult(4); 152 153 double[] A = x.vecgen(n); 154 double[] B = x.vecgen(n); 155 double C = 0.0; 156 double D = 0.0; 157 158 System.out.println("A = "); 159 if (prnt) x.vecprint(A); 160 System.out.println(""); 161 162 System.out.println("B = "); 163 if (prnt) x.vecprint(B); 164 System.out.println(""); 165 166 System.out.println("C = "); 167 long tm; 168 tm = System.currentTimeMillis(); 169 C = seq.multiply(A,B); 170 tm = System.currentTimeMillis() - tm; 171 System.out.println(tm + "ms"); 172 173 tm = System.currentTimeMillis(); 174 D = par.multiply(A,B); 175 tm = System.currentTimeMillis() - tm; 176 System.out.println(tm + "ms"); 177 178 if (prnt) System.out.println(""+C); 179 if (prnt) System.out.println(""+D); 180 181 double eps = Double.MIN_VALUE*1000.0; 182 if ( Math.abs(C-D) > 10.0e-7) { 183 System.out.println("C-D != 0.0: " + (C-D) ); 184 } else { 185 System.out.println("C-D == 0.0: " + (C-D) ); 186 } 187 } 188 189 }