t0xicv4p0r

Smatrix

Feb 16th, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.32 KB | None | 0 0
  1. package learningjava;
  2.  
  3. import java.util.ArrayList;
  4.  
  5.  
  6. public class SMatrix {
  7.  
  8.     private int order;
  9.     private double[][] values;
  10.     private ComplexNumber[][] cValues;
  11.  
  12.     private final static double[][] def = { { 0 } };
  13.    
  14.     public SMatrix() {
  15.         this(1, def);
  16.     }
  17.  
  18.     public SMatrix(SMatrix m) {
  19.         this(m.order, m.values);
  20.     }
  21.    
  22.     public SMatrix(int order, double[][] values) {
  23.         this.order = order;
  24.         cValues = new ComplexNumber[order][order];
  25.         this.cValues = convert(values);
  26.        
  27.     }
  28.  
  29.     public SMatrix(int order, ComplexNumber[][] cValues) {
  30.         this.order = order;
  31.         this.cValues = cValues;
  32.     }
  33.  
  34.     public void setValues(double[][] values) {
  35.         this.cValues = convert(values);
  36.     }
  37.    
  38.     public void setValues(ComplexNumber[][] cValues) {
  39.         this.cValues = cValues;
  40.     }
  41.  
  42.     public ComplexNumber[][] getValues() {
  43.         return this.cValues;
  44.     }
  45.  
  46.     public int getOrder() {
  47.         return this.order;
  48.     }
  49.  
  50.     public void setOrder(int order) {
  51.         this.order = order;
  52.     }
  53.    
  54.     public static ComplexNumber[][] convert(double[][] values){
  55.        
  56.         ComplexNumber[][] temp = new ComplexNumber[values.length][values.length];
  57.        
  58.         for(int i=0;i<values.length;i++) {
  59.             for(int j=0;j<values.length;j++) {
  60.                 temp[i][j] = new ComplexNumber(values[i][j]);
  61.             }
  62.         }
  63.         return temp;
  64.     }
  65.    
  66.     public void multiplyRow(int row, double c) {
  67.         for (int i = 0; i < order; i++) {
  68.             this.cValues[row - 1][i] = this.cValues[row - 1][i].multiplyByC(c);
  69.         }
  70.     }
  71.    
  72.     public void addRows(int row1, int row2) { // adds row 1 TO row 2
  73.         for (int i = 0; i < order; i++) {
  74.             this.cValues[row2 - 1][i] = ComplexNumber.add(this.cValues[row2 - 1][i], this.cValues[row1 - 1][i]);
  75.         }
  76.     }
  77.  
  78.     public void switchRow(int row1, int row2) {
  79.         ComplexNumber[] temp = new ComplexNumber[order];
  80.         for (int i = 0; i < order; i++) {
  81.             temp[i] = this.cValues[row1 - 1][i];
  82.             this.cValues[row1 - 1][i] = this.cValues[row2 - 1][i];
  83.             this.cValues[row2 - 1][i] = temp[i];
  84.         }
  85.     }
  86.  
  87.     public static SMatrix addMatrix(SMatrix m1, SMatrix m2) {
  88.         ComplexNumber[][] temp = new ComplexNumber[m1.order][m1.order];
  89.         SMatrix m;
  90.         if (m1.order != m2.order) {
  91.             System.out.println("the 2 matrices have to be of the same order");
  92.             return new SMatrix();
  93.         } else {
  94.             for (int i = 0; i < m1.order; i++) {
  95.                 for (int j = 0; j < m1.order; j++) {
  96.                     temp[i][j] = ComplexNumber.add(m1.cValues[i][j], m2.cValues[i][j]);
  97.                 }
  98.             }
  99.             return new SMatrix(m1.order, temp);
  100.         }
  101.  
  102.     }
  103.  
  104.     public static SMatrix multiplyMatrix(SMatrix m1, SMatrix m2) {
  105.         ComplexNumber[][] temp = new ComplexNumber[m1.order][m1.order];
  106.         ComplexNumber sum = new ComplexNumber();
  107.         int c = 0, d = 0;
  108.  
  109.         ArrayList<ComplexNumber> row = new ArrayList<ComplexNumber>();
  110.         for (int k = 0; k < m1.order; k++) {
  111.             for (int i = 0; i < m1.order; i++) {
  112.                 for (int j = 0; j < m1.order; j++) {
  113.  
  114.                     sum = ComplexNumber.multiply(m1.cValues[d][j], m2.cValues[j][i]) ;
  115.  
  116.                 }
  117.  
  118.                 row.add(sum);
  119.  
  120.             }
  121.             d++;
  122.         }
  123.  
  124.         for (int i = 0; i < temp.length; i++) {
  125.  
  126.             for (int j = 0; j < temp.length; j++) {
  127.  
  128.                 temp[i][j] = row.get(c++);
  129.             }
  130.  
  131.         }
  132.         return new SMatrix(m1.order, temp);
  133.  
  134.     }
  135.  
  136.     public static SMatrix getIdentity(SMatrix m) {
  137.         ComplexNumber[][] identity = new ComplexNumber[m.order][m.order];
  138.         for (int i = 0; i < m.order; i++) {
  139.             for (int j = 0; j < m.order; j++) {
  140.                 if (i == j)
  141.                     identity[i][i] = ComplexNumber.ONE;
  142.                 else
  143.                     identity[i][j] = ComplexNumber.ZERO;
  144.             }
  145.         }
  146.         return new SMatrix(m.order, identity);
  147.     }
  148.     public String toString() {
  149.         String s = "";
  150.         for (int i = 0; i < order; i++) {
  151.             for (int j = 0; j < order; j++) {
  152.                
  153.                 s += this.cValues[i][j].toString() + "\t";
  154.                 if (j == order - 1) {
  155.                     s += "\n\n";
  156.  
  157.                 }
  158.             }
  159.  
  160.         }
  161.         return s;
  162.     }
  163.  
  164.  
  165.     public static void main(String[] args) {
  166.  
  167.         double[][] test = { { 1, 2, 3 }, { 3, 4, 5 }, { 5, 6, 7 } };
  168.         double[][] test2 = { { 2, 2, 5 }, { 1, 7, 5 }, { 5, 6, 7 } };
  169.         ComplexNumber[][] cTest = { { new ComplexNumber(1, 2) ,  new ComplexNumber(2, 3) , new ComplexNumber(4, 4) },
  170.                                     { new ComplexNumber(2, 1) ,  new ComplexNumber(3) , new ComplexNumber(6, 3) },
  171.                                     { new ComplexNumber(1, 9) ,  new ComplexNumber(6, 3), new ComplexNumber(1) }};
  172.                
  173.         ComplexNumber[][] cTest2 = { { new ComplexNumber(1, 2) ,  new ComplexNumber(2, 3) , new ComplexNumber(4, 4) },
  174.                 { new ComplexNumber(2, 1) ,  new ComplexNumber(3, 3) , new ComplexNumber(6, 3) },
  175.                 { new ComplexNumber(1, 9) ,  new ComplexNumber(6, 3), new ComplexNumber(1) }};
  176.        
  177.         SMatrix m = new SMatrix(3, test);
  178.         SMatrix m2 = new SMatrix(3, test2);
  179.         SMatrix cm = new SMatrix(3, cTest);
  180.         SMatrix cm2 = new SMatrix(3, cTest2);
  181.        
  182.         /*System.out.println(getIdentity(cm).toString());
  183.        
  184.         System.out.println(m.toString());
  185.         System.out.println(m2.toString());
  186.        
  187.         System.out.println(cm.toString());
  188.         m.multiplyRow(3, 3);
  189.         System.out.println(m.toString());
  190.        
  191.         m.addRows(1, 2);
  192.        
  193.         System.out.println(cm.toString());
  194.         System.out.println(cm2.toString());
  195.        
  196.         System.out.println(multiplyMatrix(cm, cm2));
  197.         m.addRows(1, 2); // add row 1 TO row 2
  198.         System.out.println(m.toString());
  199.  
  200.         m.switchRow(1, 2);
  201.         System.out.println(m.toString());
  202.  
  203.         System.out.println(m2.toString());
  204.         System.out.println(addMatrix(m, m2).toString());
  205.         System.out.println(getIdentity(m).toString());
  206.         System.out.println(multiplyMatrix(m, m2));*/
  207.  
  208.     }
  209.  
  210. }
Advertisement
Add Comment
Please, Sign In to add comment