Guest User

Untitled

a guest
Jun 24th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.04 KB | None | 0 0
  1. package lab1;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collection;
  6.  
  7. public class Matrix {
  8.  
  9.     private ArrayList<Vector> set = new ArrayList<Vector>();
  10.  
  11.     public Matrix() {
  12.     }
  13.  
  14.     public Matrix(Vector... vectors) {
  15.         set.addAll(Arrays.asList(vectors));
  16.     }
  17.  
  18.     public Matrix(Collection<Vector> vectors) {
  19.         set.addAll(vectors);
  20.     }
  21.  
  22.     private Matrix(Matrix x) {
  23.         set.addAll(x.set);
  24.     }
  25.  
  26.     /**
  27.      * @throws IllegalArgumentException если складываешь матрицы разных рамеров
  28.      */
  29.     public Matrix addMatrix(Matrix x) {
  30.         if (sameDimesion(this, x)) {
  31.             Matrix m = new Matrix(this);
  32.             for (int i = 0; i < rowsCount(); i++) {
  33.                 m.setRow(i, m.getRow(i).addVector(x.getRow(i)));
  34.             }
  35.             return m;
  36.         } else {
  37.             throw new IllegalArgumentException("Размерность матриц должна совпадать");
  38.         }
  39.     }
  40.  
  41.     public Matrix productScalar(double aValue) {
  42.         Matrix v = new Matrix();
  43.         for (Vector row : set) {
  44.             v.add(row.scalarProduct(aValue));
  45.         }
  46.         return v;
  47.     }
  48.  
  49.     public Matrix transpose() {
  50.         Matrix m = new Matrix();
  51.         for (int i = 0; i < columnsCount(); i++) {
  52.             m.add(getCol(i));
  53.         }
  54.         return m;
  55.     }
  56.  
  57.     public Matrix productVector(Vector v) {
  58.         Matrix m = new Matrix(v);
  59.         return productMatrix(m);
  60.     }
  61.  
  62.     /**
  63.      * @throws IllegalArgumentException если пытаешься умножить несогласованные
  64.      * матрицы
  65.      */
  66.     public Matrix productMatrix(Matrix mw) {
  67.         int a = canProduct(mw);
  68.         if (a > 0) {
  69.             if (a==2) {
  70.                 mw = mw.transpose();
  71.             }
  72.             Matrix m = new Matrix();
  73.             for (int i = 0; i < rowsCount(); i++) {
  74.                 Vector mRow = new Vector();
  75.                 Vector curRow = new Vector(getRow(i));
  76.                 for (int j = 0; j < mw.columnsCount(); j++) {
  77.                     Vector curMwCol = mw.getCol(j);
  78.                     mRow.add(curRow.scalarVectorProduct(curMwCol));
  79.                 }
  80.                 m.add(mRow);
  81.             }
  82.             return m;
  83.         } else {
  84.             throw new IllegalArgumentException("Форма матриц не согласована: " + columnsCount()
  85.                     + " : " + mw.rowsCount());
  86.         }
  87.     }
  88.  
  89.     private boolean sameDimesion(Matrix a, Matrix b) {
  90.         if ((a.columnsCount() == b.columnsCount())
  91.                 && (a.rowsCount() == b.rowsCount())) {
  92.             return true;
  93.         }
  94.         return false;
  95.     }
  96.  
  97.     private void add(Vector v) {
  98.         set.add(v);
  99.     }
  100.  
  101.     private void setRow(int i, Vector vector) {
  102.         set.set(i, vector);
  103.     }
  104.  
  105.     private Vector getRow(int i) {
  106.         return set.get(i);
  107.     }
  108.  
  109.     private double getValue(int row, int col) {
  110.         return getRow(row).valueAt(col);
  111.     }
  112.  
  113.     private Vector getCol(int column) {
  114.         Vector v = new Vector();
  115.         for (int i = 0; i < rowsCount(); i++) {
  116.             v.add(getValue(i, column));
  117.         }
  118.  
  119.         return v;
  120.     }
  121.  
  122.     public int rowsCount() {
  123.         return set.size();
  124.     }
  125.  
  126.     public int columnsCount() {
  127.         if (!set.isEmpty()) {
  128.             return set.get(0).count();
  129.         }
  130.         return 0;
  131.     }
  132.  
  133.     @Override
  134.     public String toString() {
  135.         String s = "";
  136.         for (Vector x : set) {
  137.             for (int i = 0; i < x.count(); i++) {
  138.                 s += x.valueAt(i) + " ";
  139.             }
  140.             s += "\n";
  141.         }
  142.         return s;//"Matrix{" + "set=" + set + "rows=" + rowsCount() + "cols=" + columnsCount() + '}';
  143.     }
  144.  
  145.     private int canProduct(Matrix mw) {
  146.         if (columnsCount() == mw.rowsCount())   {
  147.             return 1;
  148.         }
  149.         if (rowsCount() == mw.columnsCount()) {
  150.             return 2;
  151.         }
  152.         return 0;
  153.     }
  154. }
Add Comment
Please, Sign In to add comment