Exemplo n.º 1
0
 public static string BisectionConsoleWriteLine(theFunction1 fBisection, double x1, double x2, double eps)
 {
     System.IO.StringWriter s = new System.IO.StringWriter();
     s.WriteLine("x1=({0}) x2=({1}) iterations=({2})", x1, x2, eps);
     if (BisectionValid(fBisection, x1, x2) == true)
     {
         s.WriteLine("Bisection Valid = TRUE");
         s.WriteLine("m=({0})", BisectionMethod(fBisection, x1, x2, eps));
     }
     else { s.WriteLine("Bisection Valid = FALSE"); }
     return s.ToString();
 }
Exemplo n.º 2
0
        public static double BisectionMethod(theFunction1 fBisection, double x1, double x2, double eps)
        {
            double a = x1; double b = x2;
            //starting values for x1 and x2... only works if they are on opposite side of the equation. you also need an equation.
            double m = 0, fm;

            fm = 1000000;

            while (fm > eps)
            {
                {
                    m = (a + b) / 2;
                    fm = fBisection(m);
                    if (fBisection(a) * fm < 0) { b = m; }
                    else if (fBisection(b) * fm < 0) { a = m; }
                }

            }

            return m;
        }
Exemplo n.º 3
0
 //DIFFERENTIALXXXXXXX
 //BISECTION.......
 static bool BisectionValid(theFunction1 fBisection, double a, double b)
 {
     if (fBisection(a) * fBisection(b) < 0) return true;
     else return false;
 }
Exemplo n.º 4
0
        //ITERATIONSXXXXXXXXXX
        //SimpsonsRule
        public static double SimpRule(theFunction1 fSimpRule , double a, double b, int m)
        {
            double h = (b - a) / (2 * m);
            double[] x = new double[2 * m + 1];
            x[0] = a;

            for (int i = 1; i <= 2 * m; i++)
            { x[i] += x[i - 1] + h; }

            double sumfx1 = 0;
            for (int i = 1; i <= m; i++)
            { sumfx1 += fSimpRule(x[2 * i - 1]); }

            double sumfx2 = 0;

            for (int i = 1; i <= m - 1; i++)
            {
                sumfx2 += fSimpRule(x[2 * i]);
            }

            return (h / 3) * (fSimpRule(a) + 4 * sumfx1 + 2 * sumfx2 + fSimpRule(b));
        }
Exemplo n.º 5
0
        //VOLUME ESTIMATION
        /*

        public static double VolEstSimpRule(theFunction2 fVol, double ax, double bx, double y, int m)
        {
            double h = (bx - ax) / (2 * m);
            double[] x = new double[2 * m + 1];
            x[0] = ax;

            for (int i = 1; i <= 2 * m; i++)
            { x[i] += x[i - 1] + h; }

            double sumfx1 = 0;
            for (int i = 1; i <= m; i++)
            { sumfx1 += fVol(x[2 * i - 1], y); }

            double sumfx2 = 0;

            for (int i = 1; i <= m - 1; i++)
            {
                sumfx2 += fVol(x[2 * i], y);
            }

            return (h / 3) * (fVol(ax, y) + 4 * sumfx1 + 2 * sumfx2 + fVol(bx, y));
        }

        public static double VolEst(theFunction2 fVol, double ax, double bx, double ay, double by, int m)
        {
            double h = (by - ay) / (2 * m);
            double[] y = new double[2 * m + 1];
            y[0] = ay;

            for (int i = 1; i <= 2 * m; i++)
            { y[i] += y[i - 1] + h; }
            //y matrix

            int j = 0;
            double sumVol = 0;
            foreach (double y1 in y)
            {
                sumVol += h * VolEstSimpRule(fVol, ax, bx, y1, m);
                j++;
            }

            return sumVol;
        }

        public static double VolEstAv(theFunction2 fVol, double ax, double bx, double ay, double by, int m)
        {
            double run1 = VolEst(fVol, ax, bx, ay, by, m);
            double run2 = VolEst(fVol, ay, by, ax, bx, m);
            return (run1 + run2) / 2;
        }

        public static double VolEstTrapRule(List<Vector3D> aList)
        {
            //just consider x's and z's;

            //each x needs to be distinct.
            double[,] xys = new double[aList.Count, 2];
            double[] xs = new double[aList.Count];
            int i = 0;

            foreach (Vector3D a in aList)
            { xs[i] = a.x; i++; }

            Array.Sort(xs);

            i = 0;
            foreach (double x in xs)
            { xys[i, 0] = x; i++; }

            for (i = 1; i < xs.Length; i++)
            {
                if (xs[i] == xs[i - 1])
                {
                    Console.WriteLine("x's coordinates are not all unique");
                    return 0;
                }
            }

            for (i = 0; i < aList.Count; i++)
            {
                for (int j = 0; j < aList.Count; j++)
                {
                    if (xys[i, 0] == aList[j].x)
                    { xys[i, 1] = aList[j].z; }
                }
            }

            double sum = 0;

            for (i = 0; i < xys.GetUpperBound(0); i++)
            { sum += (xys[i + 1, 0] - xys[i, 0]) * ((xys[i, 1] + xys[i + 1, 1]) / 2); }

            return sum;
        }

        //VOLUME ESTIMATIONXXXX
        */
        //DIFFERENTIAL
        public static double Diff2Point(theFunction1 fDiff, double x, double h)
        {
            return (fDiff(x + h) - fDiff(x - h)) / (2 * h);
        }