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); }
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); }
public static Polynomial3D operator +(Polynomial3D p2, Polynomial3D p1) { var coefficients = addArrays(p2.coefficients, p1.coefficients); var p3 = new Polynomial3D(coefficients); return(p3); }
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); }
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); }
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); }
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); }