public DFun(double y)
 {
     this.d0 = y;
     Fun f = new Fun(y);
     this.d1 = f.ReVal();
     this.d2 = -2 * y * this.d1;
     this.d3 = -2 * Math.Pow(this.d1,2) - 2 * y * this.d2;
     this.d4 = -2 * (this.d0 * this.d3 + 3 * this.d1 * this.d2);
     this.d5 = -2 * (this.d0 * this.d4 + 3 * Math.Pow(this.d2, 2) + 4 * this.d3 * this.d1);
     this.d6 = -2 * (this.d0 * this.d5 + 5 * this.d4 * this.d1 + 10 * this.d3 * this.d2);
 }
 public static void Adams(double x0, double y0, double h, int n)
 {
     double[,] d = new double[2 * n, 2 * n];
     for (int i = 0; i <= 4; ++i)
     {
         d[i, 0] = xx[i];
         d[i, 1] = yy[i];
         Fun f = new Fun(yy[i]);
         d[i, 2] = h * f.ReVal();
     }
     int m = 3;
     for (int j = 3; j <= 6; ++j)
     {
         for (int i = 0; i <= m; ++i)
             d[i, j] = d[i + 1, j - 1] - d[i, j - 1];
         --m;
     }
     for (int i = 5; i <= n + 5; ++i)
     {
         d[i, 0] = d[i - 1, 0] + h;
         double yk = d[i - 1, 1] + d[i - 1, 2] + (d[i - 2, 3] / 2) + (5 * d[i - 3, 4] / 12) + (3 * d[i - 4, 5] / 8) + (251 * d[i - 5, 6] / 720);
         d[i, 1] = yk;
         Fun f = new Fun(yk);
         d[i, 2] = h * f.ReVal();
         int j = 3;
         for (int l = i - 1; l >= 0; --l)
         {
             d[l, j] = d[l + 1, j - 1] - d[l, j - 1];
             ++j;
             if (j > 7) break;
         }
     }
     Console.WriteLine("X\t   Y\t     q\t       D1\t D2\t   D3\t     D4\t");
     for (int i = 0; i <= n + 2; ++i)
     {
         for (int j = 0; j <= 6; ++j)
             if (d[i, j] < 0) Console.Write("{0:f6} ", d[i, j]); else Console.Write(" {0:f6} ", d[i, j]);
         Console.WriteLine();
     }
     Console.WriteLine("Rn = {0:f6}", Math.Abs(r[n] - d[n + 2, 1]));
 }
 public static void Runge(double x0, double y0, double h, int n)
 {
     double[] x = new double[2 * n];
     double[] y = new double[2 * n];
     x[0] = x0; y[0] = y0;
     Console.WriteLine("X        Y");
     Console.WriteLine("{0:f6} {1:f6}", x0, y0);
     for (int i = 1; i <= n; ++i)
     {
         Fun f = new Fun(y[i - 1]);
         double k1 = h * f.ReVal();
         f = new Fun(y[i - 1] + k1 / 2);
         double k2 = h * f.ReVal();
         f = new Fun(y[i - 1] + k2 / 2);
         double k3 = h * f.ReVal();
         f = new Fun(y[i - 1] + k3);
         double k4 = h * f.ReVal();
         x[i] = x[i - 1] + h;
         y[i] = y[i - 1] + (k1 + 2 * k2 + 2 * k3 + k4) / 6;
         Console.WriteLine("{0:f6} {1:f6}", x[i], y[i]);
     }
     Console.WriteLine("Rn = {0:f15}", Math.Abs(r[n] - y[n]));
 }
 public static void Ailer3(double x0, double y0, double h, int n)
 {
     double[] x = new double[2 * n];
     double[] y = new double[2 * n];
     x[0] = x0; y[0] = y0;
     for (int i = 1; i <= n; ++i)
     {
         x[i] = x[i - 1] + h;
         Fun f1 = new Fun(y[i - 1]);
         Fun f = new Fun(y[i - 1] + h * f1.ReVal());
         y[i] = y[i - 1] + h/2 * (f1.ReVal() + f.ReVal());
     }
     DFun g = new DFun(y0);
     Console.WriteLine(" X        Y        R");
     for (int i = 0; i <= n; ++i)
     {
         double ri = Math.Abs(r[i] - y[i]);
         if (x[i] < 0) Console.Write("{0:f6}", x[i]); else Console.Write(" {0:f6}", x[i]);
         if (y[i] < 0) Console.Write("{0:f6} ", y[i]); else Console.Write(" {0:f6} ", y[i]);
         Console.WriteLine("{0:f8}", ri);
     }
 }