public override RrFunction Mult(RrFunction other)
        {
            var cst = other as ConstantRrFunction;

            if (cst != null)
            {
                return(ProductRrFunctions.Mult(this, cst));
            }

            return(Create(weights, functions.Map(f => f.Mult(other))));
        }
        public override RrFunction Mult(RrFunction other)
        {
            var cst = other as ConstantRrFunction;

            if (cst != null)
            {
                return(ProductRrFunctions.Mult(this, cst));
            }

            var exp = other as ExpRrFunction;

            if (exp != null)
            {
                return(ProductRrFunctions.Mult(this, exp));
            }

            return(base.Mult(other));
        }
        public override RrFunction Mult(RrFunction other)
        {
            var cst = other as ConstantRrFunction;

            if (cst != null)
            {
                return(ProductRrFunctions.Mult(this, cst));
            }

            var exp = other as ExpRrFunction;

            if (exp != null)
            {
                return(ProductRrFunctions.Mult(exp, this));
            }

            var step = other as StepFunction;

            if (step != null)
            {
                return(StepFunction.Mult(step, this));
            }

            var spline = other as SplineInterpoler;

            if (spline != null)
            {
                return(SplineInterpoler.Mult(spline, this));
            }

            var lc = other as LinearCombinationRrFunction;

            if (lc != null)
            {
                return(ProductRrFunctions.Mult(lc, this));
            }

            return(base.Mult(other));
        }