Example #1
0
        public static Polynomial3D operator *(Polynomial3D p2, Polynomial3D p1)
        {
            var p3 = new Polynomial3D(p2.xOrder + p1.xOrder, p2.yOrder + p1.yOrder, p2.zOrder + p1.zOrder);

            for (int i1 = 0; i1 <= p1.xOrder; i1++)
            {
                for (int i2 = 0; i2 <= p2.xOrder; i2++)
                {
                    for (int j1 = 0; j1 <= p1.yOrder; j1++)
                    {
                        for (int j2 = 0; j2 <= p2.yOrder; j2++)
                        {
                            for (int k1 = 0; k1 <= p1.zOrder; k1++)
                            {
                                for (int k2 = 0; k2 <= p2.zOrder; k2++)
                                {
                                    p3.coefficients[i1 + i2, j1 + j2, k1 + k2] += p2.coefficients[i2, j2, k2] * p1.coefficients[i1, j1, k1];
                                }
                            }
                        }
                    }
                }
            }
            return(p3);
        }
Example #2
0
        public Polynomial3D Convert_3D(int Dim)
        {
            Polynomial3D p3d;

            if (Dim == 0)
            {
                p3d = new Polynomial3D(order, 0, 0);
            }
            else if (Dim == 1)
            {
                p3d = new Polynomial3D(0, order, 0);
            }
            else if (Dim == 2)
            {
                p3d = new Polynomial3D(0, 0, order);
            }
            else
            {
                throw new Exception("Dim must be 0, 1, or 2");
            }
            int idx = 0;

            for (int i = 0; i <= p3d.xOrder; i++)
            {
                for (int j = 0; j <= p3d.yOrder; j++)
                {
                    for (int k = 0; k <= p3d.zOrder; k++)
                    {
                        p3d.coefficients[i, j, k] = coefficients[idx];
                        idx++;
                    }
                }
            }
            return(p3d);
        }
Example #3
0
        public static Polynomial3D operator +(Polynomial3D p2, Polynomial3D p1)
        {
            var coefficients = addArrays(p2.coefficients, p1.coefficients);
            var p3           = new Polynomial3D(coefficients);

            return(p3);
        }
Example #4
0
        public Polynomial3D Differentiate(int Dim)
        {
            int xOrderNew;
            int yOrderNew;
            int zOrderNew;

            if (Dim == 0)
            {
                xOrderNew = Math.Max(xOrder - 1, 0);
                yOrderNew = yOrder;
                zOrderNew = zOrder;
            }
            else if (Dim == 1)
            {
                yOrderNew = Math.Max(yOrder - 1, 0);
                xOrderNew = xOrder;
                zOrderNew = zOrder;
            }
            else if (Dim == 2)
            {
                zOrderNew = Math.Max(zOrder - 1, 0);
                xOrderNew = xOrder;
                yOrderNew = yOrder;
            }
            else
            {
                throw new Exception("Dimension must be 0 or 1 or 2");
            }
            var pDiff = new Polynomial3D(xOrderNew, yOrderNew, zOrderNew);

            for (int i = 0; i <= xOrderNew; i++)
            {
                for (int j = 0; j <= yOrderNew; j++)
                {
                    for (int k = 0; k <= zOrderNew; k++)
                    {
                        if (Dim == 0)
                        {
                            pDiff.coefficients[i, j, k] = coefficients[i + 1, j, k] * (i + 1);
                        }
                        else if (Dim == 1)
                        {
                            pDiff.coefficients[i, j, k] = coefficients[i, j + 1, k] * (j + 1);
                        }
                        else // Dim == 2
                        {
                            pDiff.coefficients[i, j, k] = coefficients[i, j, k + 1] * (k + 1);
                        }
                    }
                }
            }
            return(pDiff);
        }
Example #5
0
        public Polynomial3D Integrate(int Dim)
        {
            int xOrderNew;
            int yOrderNew;
            int zOrderNew;

            if (Dim == 0)
            {
                xOrderNew = Math.Max(xOrder + 1, 1);
                yOrderNew = yOrder;
                zOrderNew = zOrder;
            }
            else if (Dim == 1)
            {
                yOrderNew = Math.Max(yOrder + 1, 1);
                xOrderNew = xOrder;
                zOrderNew = zOrder;
            }
            else if (Dim == 2)
            {
                zOrderNew = Math.Max(zOrder + 1, 1);
                xOrderNew = xOrder;
                yOrderNew = yOrder;
            }
            else
            {
                throw new Exception("Dimension must be 0 or 1 or 2");
            }
            var pInt = new Polynomial3D(xOrderNew, yOrderNew, zOrderNew);

            for (int i = 0; i <= xOrderNew; i++)
            {
                for (int j = 0; j <= yOrderNew; j++)
                {
                    for (int k = 0; k <= zOrderNew; k++)
                    {
                        if (Dim == 0 && i > 0)
                        {
                            pInt.coefficients[i, j, k] = coefficients[i - 1, j, k] / ((double)i);
                        }
                        else if (Dim == 1 && j > 0)
                        {
                            pInt.coefficients[i, j, k] = coefficients[i, j - 1, k] / ((double)j);
                        }
                        else if (Dim == 2 && k > 0)
                        {
                            pInt.coefficients[i, j, k] = coefficients[i, j, k - 1] / ((double)k);
                        }
                    }
                }
            }
            return(pInt);
        }
Example #6
0
        public static Polynomial3D operator *(Polynomial3D p1, double Scalar)
        {
            var p2 = new Polynomial3D(p1.xOrder, p1.yOrder, p1.zOrder);

            for (int i = 0; i <= p2.xOrder; i++)
            {
                for (int j = 0; j <= p2.yOrder; j++)
                {
                    for (int k = 0; k <= p2.zOrder; k++)
                    {
                        p2.coefficients[i, j, k] = Scalar * p1.coefficients[i, j, k];
                    }
                }
            }
            return(p2);
        }
Example #7
0
        public Polynomial3D Evaluate(double Val, int Dim) // turn a 2d polynomial into a regular one
        {
            Polynomial3D pAns;

            if (Dim == 0)
            {
                pAns = new Polynomial3D(0, yOrder, zOrder);
            }
            else if (Dim == 1)
            {
                pAns = new Polynomial3D(xOrder, 0, zOrder);
            }
            else if (Dim == 2)
            {
                pAns = new Polynomial3D(xOrder, yOrder, 0);
            }
            else
            {
                throw new Exception("Dimension must be 0 or 1");
            }
            for (int i = 0; i <= xOrder; i++)
            {
                for (int j = 0; j <= yOrder; j++)
                {
                    for (int k = 0; k <= zOrder; k++)
                    {
                        if (Dim == 0)
                        {
                            pAns.coefficients[0, j, k] += pAns.coefficients[i, j, k] * Math.Pow(Val, i);
                        }
                        else if (Dim == 1)
                        {
                            pAns.coefficients[i, 0, k] += pAns.coefficients[i, j, k] * Math.Pow(Val, j);
                        }
                        else // Dim == 2
                        {
                            pAns.coefficients[i, j, 0] += pAns.coefficients[i, j, k] * Math.Pow(Val, k);
                        }
                    }
                }
            }
            return(pAns);
        }