/* Matrix * * Takes the dot product of 2 1D arrays or multiplies 2 2D arrays. * * * javac Matrix.java * ----------Just Tests--------- * java Matrix * ----------End Tests---------- * * ---------1D Arrays(Dot)-------- * ###################### * #####example.txt###### * ###################### * #4 # * #1 2 3 4 # * #4 # * #5 6 7 8 # * ###################### * java Matrix 1 < example.txt * --------END 1D Arrays(Dot)----- * * ---------2D Arrays(Multiply)------- * ###################### * #####example.txt###### * ###################### * #3 3 # * #9 8 7 # * #6 5 4 # * #3 2 1 # * #3 3 # * #1 2 3 # * #4 5 6 # * #7 8 9 # * ###################### * java Matrix 2 < example.txt * -------END 2D Arrays(Multiply------ * * * CIS201-L UAB SUMMER 2014 Dr. Sloan * @author * Dan Latham * * @version 0.0.1 * */ public class Matrix { public static double dot(double[] a, double[] b) { //dot = a ** b = a1*b1 + a2*b2 + a3*b3... //System.out.println("dot_Test"); //check assert (a.length == b.length); //counter double c = 0; for (int i = 0; i <= a.length-1; i+=1) { double d = a[i]*b[i]; c += d; } return c; } public static double[][] multiply(double[][] firstarray, double[][] secondarray) { /* Create another 2d array to store the result * using the original arrays' lengths on row and column respectively. */ double [][] result = new double[firstarray.length][secondarray[0].length]; /* Loop through each and get product, then sum up and store * the value */ for (int i = 0; i < firstarray.length; i++) { for (int j = 0; j < secondarray[0].length; j++) { for (int k = 0; k < firstarray[0].length; k++) { result[i][j] += firstarray[i][k] * secondarray[k][j]; } } } return result; } public static void test() { System.out.println("--------------------TESTS------------------"); //DOT tests double[] a0 = {1,2,3,4,5}; double[] b0 = {6,7,8,9,10}; System.out.println("DOT test #0: " + dot(a0,b0)); double[] a1 = {8,3,5,2,4,6,7}; double[] b1 = {1.2,33.5,5,8,9,1,2}; System.out.println("DOT test #1: " + dot(a1,b1)); //Multiply tests double[][] a2 = { {1,2,3}, {4,5,6}, {7,8,9} }; double[][] b2 = { {9,8,7}, {6,5,4}, {3,2,1} }; double zzz[][] = multiply(a2,b2); StdArrayIO.print(zzz); double[][] a3 = { {1,2,3}, {4,5,6} }; double[][] b3 = { {7,8}, {9,10}, {11,12} }; double zzz1[][] = multiply(a3,b3); StdArrayIO.print(zzz1); System.out.println("------------------END TESTS----------------"); } public static void main(String[] args) { if (args.length == 0) { test(); System.exit(1); } int c = Integer.parseInt(args[0]); if (c == 1) { double[] a = StdArrayIO.readDouble1D(); double[] b = StdArrayIO.readDouble1D(); System.out.println("Dot is: "+dot(a,b)); } else if (c == 2) { double[][] a = StdArrayIO.readDouble2D(); double[][] b = StdArrayIO.readDouble2D(); StdArrayIO.print(multiply(a,b)); } else System.out.println("Options are 1 for 1D arrays(dot) and 2 for 2D arrays(multiply)"); } }