public static TMatrix <Type> operator *(TMatrix <Type> a, TMatrix <Type> b) { if (!CheckMul(a, b)) { if (a?.data == null) { throw new NullReferenceException("Умножение невозможно. Объект не инициализирован\n"); } else if (b?.data == null) { throw new NullReferenceException("Умножение невозможно. Объект не инициализирован\n"); } else { throw new InvalidOperationException("Умножение невозможно. Размер объектов не соответствует условию произведения\n"); } } TMatrix <Type> result = new TMatrix <Type>(a.Rows, b.Cols); for (int i = 0; i < a.Rows; i++) { for (int j = 0; j < b.Cols; j++) { result.data[i, j] = (dynamic)a.data[i, 0] * b.data[0, j]; for (int k = 1; k < a.Cols; k++) { result.data[i, j] += (dynamic)a.data[i, k] * b.data[k, j]; } } } return(result); }
public TMatrix(TMatrix <Type> source) : this(source?.data) { if (source == null) { throw new ArgumentNullException("Некорректная матрица\n"); } }
public static TMatrix <Type> operator -(TMatrix <Type> a, TMatrix <Type> b) { if (!CheckSum(a, b)) { if (a?.data == null) { throw new NullReferenceException("Вычитание невозможно. Объект не инициализирован\n"); } else if (b?.data == null) { throw new NullReferenceException("Вычитание невозможно. Объект не инициализирован\n"); } else { throw new InvalidOperationException("Вычитание невозможно. Размер объектов не соответствует условию разности\n"); } } TMatrix <Type> result = new TMatrix <Type>(a); for (int i = 0; i < result.Rows; i++) { for (int j = 0; j < result.Cols; j++) { result.data[i, j] = (dynamic)result.data[i, j] - b.data[i, j]; } } return(result); }
public static TMatrix <Type> operator *(TMatrix <Type> a, Type b) { if (a.data == null) { throw new NullReferenceException("Умножение невозможно. Объект не инициализирован\n"); } TMatrix <Type> result = new TMatrix <Type>(a); for (int i = 0; i < result.Rows; i++) { for (int j = 0; j < result.Cols; j++) { result.data[i, j] = (dynamic)result.data[i, j] * b; } } return(result); }
public int CompareTo(TMatrix <Type> other) => this == other ? 0 : this > other ? 1 : -1;
public static bool CheckMul(TMatrix <Type> a, TMatrix <Type> b) => a == null || b == null ? false : a.Cols == b.Rows;
public static bool CheckSum(TMatrix <Type> a, TMatrix <Type> b) => a == null || b == null ? false : a == b;