public static double SurfaceArea3D(Functionxy fxyz, Function f, Function g, Function h, Function i, double a, double b, int m, int n)// needs finishing. { Integral3 intMethod = GaussianRuleIntetration3(); //return TripleIntegration((double x, double y, double z) => //Math.Sqrt(1 + Math.Pow(PartialDifferentiationx(fxyz, x, y), 2) + Math.Pow(PartialDifferentiationy(fxyz, x, y), 2) + Math.Pow(PartialDifferentiationz(fxyz, x, z), 2) + Math.Pow(PartialDifferentiationz(fxyz, y, z), 2)), f, g, i, a, b, m, n, intMethod, intMethod); return(0); }
/// <summary> /// 4-point Gaussian rule integration of the function f, over n subintervals in the interval (a,b). /// </summary> public static Integral3 GaussianRuleIntetration3() { Integral3 integral = (f, a, b, c, n) => { var weight = new double[4]; weight[2] = 0.652145154862546; weight[1] = weight[2]; weight[3] = 0.347854845137454; weight[0] = weight[3]; var point = new double[4]; point[3] = 0.861136311594053; point[0] = -point[3]; point[2] = 0.339981043584856; point[1] = -point[2]; double sum = 0; var h = (b - a) / n; var h1 = (c - b) / n; var h2 = (c - a) / n; for (var i = 0; i < n; i++) { double s = 0; var xl = a + i * h; var xr = xl + h; var xm = (xr - xl) / 2; var xd = (xr + xl) / 2; var yl = b + i * h1; var yr = yl + h1; var ym = (yr - yl) / 2; var yd = (yr + yl) / 2; var zl = c + i * h2; var zr = zl + h2; var zm = (zr - zl) / 2; var zd = (zr + zl) / 2; for (var j = 0; j < 4; j++) { s = s + weight[j] * f(xm * point[j] + xd, ym * point[j] + yd, zm * point[j] + zd) * xm; } sum = sum + s; } return(sum); }; return(integral); }
/// <summary> /// 3D integration of a function of 3 variables. (( f(x,y,z) dxdydz )). /// </summary> /// <param name="fxyz">The fxyz.</param> /// <param name="g">The function g(x).</param> /// <param name="h">The function h(y).</param> /// <param name="i">The function i(z).</param> /// <param name="a">A.</param> /// <param name="b">The b.</param> /// <param name="m">The m.</param> /// <param name="n">The n.</param> /// <param name="inInt">The in int.</param> /// <param name="outInt">The out int.</param> /// <remarks>Inner integral dx, from x=g(y) to x=h(y), over m subintervals, using algorithm inInt. /// Outer integral dy, from y=a to y=b, over n subintervals, using algorithm outInt. /// Third integral dz, from z....</remarks> public static double TripleIntegration(Functionxyz fxyz, Function g, Function h, Function i, double a, double b, double c, int m, int n, Integral3 inInt, Integral3 outInt)// needs finishing { //return outInt((double u) => inInt((double x, double y, double z) => fxyz(x, y, z), g(u), h(u), i(u), m), a, b, c, n); return(0); }