// Multiplication with a vector
    public static Vector <T> operator *(NumericMatrix <T> m, Vector <T> v)
    {
        if (mulTT == null)
        {
            mulTT = GenericOperatorFactory <T, T, T, Vector <T> > .Multiply;
        }

        if (addTT == null)
        {
            addTT = GenericOperatorFactory <T, T, T, Vector <T> > .Add;
        }

        Vector <T> result = new Vector <T>(m.Rows);

        int i, j;

        for (i = m.MinRowIndex; i <= m.MaxRowIndex; i++)
        {
            result[i] = mulTT(m[i, m.MinColumnIndex], v[v.MinIndex]);
            for (j = m.MinColumnIndex + 1; j <= m.MaxColumnIndex; j++)
            {
                result[i] = addTT(result[i], mulTT(m[i, j], v[j]));
            }
        }

        return(result);
    }
Esempio n. 2
0
    public static T operator /(T t, Vector <T> v)
    {
        if (divTT == null)
        {
            divTT = GenericOperatorFactory <T, int, T, Vector <T> > .Divide;
        }

        return(divTT(t, v.Length));
    }
Esempio n. 3
0
        public static T Sum <T>(this Vector <T> v)
        {
            BinaryOperatorT <T, T, T> addTt = GenericOperatorFactory <T, T, T, Vector <T> > .Add;

            T result = default(T);

            for (int i = v.MinIndex; i < v.Length; i++)
            {
                result = addTt(result, v[i]);
            }

            return(result);
        }
Esempio n. 4
0
        public static double GeometricMean <T>(this Vector <T> v) where T : IConvertible
        {
            BinaryOperatorT <T, T, T> multiplyTt = GenericOperatorFactory <T, T, T, Vector <T> > .Multiply;

            T result = default(T);

            for (int i = v.MinIndex; i < v.Length; i++)
            {
                result = multiplyTt(result, v[i]);
            }

            return(Math.Sqrt(Convert.ToDouble(result)));
        }
Esempio n. 5
0
    //operator overloading for '*' operator. multiplying t1 with every index of v1
    public static Vector <T> operator *(Vector <T> v1, T t1)
    {
        Vector <T> result = new Vector <T>(v1.Length, v1.MinIndex);

        if (mulTT == null)
        {
            mulTT = new BinaryOperatorT <T, T, T>(GenericOperatorFactory <T, T, T, Vector <T> > .Multiply);
        }

        for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)
        {
            result[i] = mulTT(v1[i], t1);
        }
        return(result);
    }
Esempio n. 6
0
    //operator overloading for '-' operator. Substracting v1 from t1
    public static Vector <T> operator -(T t1, Vector <T> v1)
    {
        Vector <T> result = new Vector <T>(v1.Length, v1.MinIndex);

        if (subTT == null)
        {
            subTT = new BinaryOperatorT <T, T, T>(GenericOperatorFactory <T, T, T, Vector <T> > .Subtract);
        }

        for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)
        {
            result[i] = subTT(t1, v1[i]);
        }
        return(result);
    }
Esempio n. 7
0
    //Operator overloading for '+' operator. Adding v2 to v1
    public static Vector <T> operator +(Vector <T> v1, Vector <T> v2)
    {
        Vector <T> result = new Vector <T>(v1.Length, v1.MinIndex);
        int        delta  = v1.MinIndex - v2.MinIndex;

        if (addTT == null)
        {
            addTT = new BinaryOperatorT <T, T, T>(GenericOperatorFactory <T, T, T, Vector <T> > .Add);
        }

        for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)
        {
            result[i] = addTT(v1[i], v2[(i - delta)]);
        }
        return(result);
    }
    // Matrix multiplication
    public static NumericMatrix <T> operator *(NumericMatrix <T> m1, NumericMatrix <T> m2)
    {
        NumericMatrix <T> result = new NumericMatrix <T>(m1.Rows, m2.Columns, m1.MinRowIndex, m1.MinColumnIndex);

        if (mulTT == null)
        {
            mulTT = GenericOperatorFactory <T, T, T, Vector <T> > .Multiply;
        }

        if (addTT == null)
        {
            addTT = GenericOperatorFactory <T, T, T, Vector <T> > .Add;
        }

        /*  OLD int i, j, k, l;
         *
         * for( i = result.MaxRowIndex; i >= result.MinRowIndex; i-- )
         * {
         *    for( j = result.MinColumnIndex; j <= result.MaxColumnIndex; j++ )
         *    {
         *        for( k = m1.MinColumnIndex, l = m2.MaxRowIndex; k <= m1.MaxColumnIndex; k++, l-- )
         *        {
         *            result[ i, j ] = addTT( result[ i, j ], mulTT( m1[ i, k ], m2[ l, j ] ) );
         *        }
         *    }
         * }*/

        // Index variables must be declared at this scope
        int i, j, k;

        for (i = result.MinRowIndex; i <= result.MaxRowIndex; i++)
        {
            for (j = result.MinColumnIndex; j <= result.MaxColumnIndex; j++)
            {
                result[i, j] = mulTT(m1[i, m1.MinColumnIndex], m2[m2.MinRowIndex, j]);
                for (k = m1.MinColumnIndex + 1; k <= m1.MaxColumnIndex; k++)
                {
                    result[i, j] = addTT(result[i, j], mulTT(m1[i, k], m2[k, j]));
                }
            }
        }

        return(result);
    }
    // Subtraction
    public static NumericMatrix <T> operator -(NumericMatrix <T> m1, NumericMatrix <T> m2)
    {
        NumericMatrix <T> temp_matrix = new NumericMatrix <T>(m1.Rows, m1.Columns, m1.MinRowIndex, m1.MinColumnIndex);

        int i, j;

        if (subTT == null)
        {
            subTT = GenericOperatorFactory <T, T, T, Vector <T> > .Subtract;
        }

        for (i = m1.MinColumnIndex; i <= m1.MaxColumnIndex; i++)
        {
            for (j = m1.MinRowIndex; j <= m1.MaxRowIndex; j++)
            {
                //temp_matrix[ j, i ] = subTT( m1[ j, i ], m2[ j, i ] );
                temp_matrix[j, i] = subTT(m1[j, i], m2[j, i]);
            }
        }
        return(temp_matrix);
    }
    // Scalar multiplication
    public static NumericMatrix <T> operator *(T getal, NumericMatrix <T> m)
    {
        NumericMatrix <T> result = new NumericMatrix <T>(m.Rows, m.Columns, m.MinRowIndex, m.MinColumnIndex);

        int i, j;

        if (mulTT == null)
        {
            mulTT = GenericOperatorFactory <T, T, T, Vector <T> > .Multiply;
        }

        for (i = m.MinRowIndex; i <= m.MaxRowIndex; i++)
        {
            for (j = m.MinColumnIndex; j <= m.MaxColumnIndex; j++)
            {
                result[i, j] = mulTT(getal, m[i, j]);
            }
        }

        return(result);
    }
    // Operators

    // Addition
    public static NumericMatrix <T> operator +(NumericMatrix <T> m1, NumericMatrix <T> m2)
    {
        NumericMatrix <T> temp_matrix = new NumericMatrix <T>(m1.Rows, m1.Columns, m1.MinRowIndex, m1.MinColumnIndex);

        int i, j;

        if (addTT == null)
        {
            addTT = GenericOperatorFactory <T, T, T, Vector <T> > .Add;
            //  addTT = new BinaryOperatorT<T, T, T>(GenericOperatorFactory<T, T, T, Vector<T>>.Add);
        }

        for (i = m1.MinColumnIndex; i <= m1.MaxColumnIndex; i++)
        {
            for (j = m1.MinRowIndex; j <= m1.MaxRowIndex; j++)
            {
                temp_matrix[j, i] = addTT(m1[j, i], m2[j, i]);
            }
        }

        return(temp_matrix);
    }