Example #1
0
        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);
        }
Example #2
0
 public TMatrix(TMatrix <Type> source) : this(source?.data)
 {
     if (source == null)
     {
         throw new ArgumentNullException("Некорректная матрица\n");
     }
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
 public int CompareTo(TMatrix <Type> other)
 => this == other ? 0 : this > other ? 1 : -1;
Example #6
0
 public static bool CheckMul(TMatrix <Type> a, TMatrix <Type> b)
 => a == null || b == null ? false : a.Cols == b.Rows;
Example #7
0
 public static bool CheckSum(TMatrix <Type> a, TMatrix <Type> b)
 => a == null || b == null ? false : a == b;