Exemplo n.º 1
0
        public PolynomialND Evaluate(double Val, int Dim)         // turn a ND Polynomial into a (N-1)D one
        {
            var OrderNew = (int [])Order.Clone();

            OrderNew [Dim] = 1;
            int Length = Order [Dim];
            var Id     = new Index(OrderNew);
            var IdOld  = new Index(Order);
            var ans    = new PolynomialND(OrderNew);

            for (int i = 0; i < ans.Coefficients.Length; i++)
            {
                double LocalCoeff = 0;
                var    sub        = Id.Ind2Sub(i);
                int[]  subAns     = (int[])sub.Clone();
                for (int j = 0; j < Length; j++)
                {
                    int idx = IdOld.Sub2Ind(subAns);
                    LocalCoeff = LocalCoeff + Math.Pow(Val, j) * Coefficients [idx];
                    subAns[Dim]++;
                }
                ans.Coefficients [i] = LocalCoeff;
            }
            return(ans);
        }
Exemplo n.º 2
0
        public static PolynomialND operator *(PolynomialND p2, PolynomialND p1)
        {
            var p3Extent = new int[p1.Rank];

            for (int i = 0; i < p3Extent.Length; i++)
            {
                p3Extent [i] = p1.Order [i] + p2.Order [i];
            }
            var p3  = new PolynomialND(p3Extent);
            var idA = new Index(p1.Order);
            var idB = new Index(p2.Order);
            var idC = new Index(p3.Order);

            int[] subC = new int[p3.Rank];
            for (int i = 0; i < p1.Coefficients.Length; i++)
            {
                var subA = idA.Ind2Sub(i);
                for (int j = 0; j < p2.Coefficients.Length; j++)
                {
                    var subB = idB.Ind2Sub(j);
                    for (int k = 0; k < subC.Length; k++)
                    {
                        subC [k] = subA [k] + subB [k];
                    }
                    int idx = idC.Sub2Ind(subC);
                    p3.Coefficients [idx] = p1.Coefficients [i] * p2.Coefficients [j];
                }
            }
            return(p3);
        }
Exemplo n.º 3
0
        public static PolynomialND operator *(PolynomialND p1, double Scalar)
        {
            var p2 = new PolynomialND(p1.Order);

            for (int i = 0; i < p2.Coefficients.Length; i++)
            {
                p2.Coefficients [i] = p1.Coefficients [i] * Scalar;
            }
            return(p2);
        }
Exemplo n.º 4
0
        public static PolynomialND operator +(PolynomialND p2, PolynomialND p1)
        {
            int[] extent;
            if (p1.Rank != p2.Rank)
            {
                throw new Exception("Both polynomials need to be the same number of dimensions");
            }
            var coefficients = addArrays(p2.Coefficients, p1.Coefficients, p1.Order, p2.Order, out extent);
            var p3           = new PolynomialND(extent, coefficients);

            return(p3);
        }
Exemplo n.º 5
0
        public PolynomialND Convert_ND(int Dim, int Rank = 3)
        {
            var Order = new int[Rank];

            for (int i = 0; i < Rank; i++)
            {
                Order [i] = 1;
            }
            Order [Dim] = coefficients.Length;
            var Ans = new PolynomialND(Order, coefficients);

            return(Ans);
        }
Exemplo n.º 6
0
        public PolynomialND Differentiate(int Dim)
        {
            int[] OrderNew = (int[])Order.Clone();
            OrderNew [Dim]--;
            var ans    = new PolynomialND(OrderNew);
            var Id_Old = new Index(Order);
            var Id     = new Index(ans.Order);

            for (int i = 0; i < ans.Coefficients.Length; i++)
            {
                var subAns = Id.Ind2Sub(i);
                subAns [Dim]++;
                int idx = Id_Old.Sub2Ind(subAns);
                ans.Coefficients [i] = Coefficients [idx] * subAns [Dim];
            }
            return(ans);
        }
Exemplo n.º 7
0
        public PolynomialND Integrate(int Dim)
        {
            int[] OrderNew = (int[])Order.Clone();
            OrderNew [Dim]++;
            var ans    = new PolynomialND(OrderNew);
            var Id_Old = new Index(Order);
            var Id     = new Index(ans.Order);

            for (int i = 0; i < Coefficients.Length; i++)
            {
                var subAns = Id_Old.Ind2Sub(i);
                subAns [Dim]++;
                int idx = Id.Sub2Ind(subAns);
                ans.Coefficients [idx] = Coefficients [i] * (1.0d / (double)subAns [Dim]);
            }
            return(ans);
        }