Ejemplo n.º 1
0
        private void Gauss_x_w()
        {
            int    i, j, m, k;
            double hx, x_a, x_b, x_c, x_old, fx_a, fx_b, fx_c, pl;

            k = n / 2; m = n - k;

            if (m != k)
            {
                x[m] = 0.0; pl = n * MyF.PL(n - 1, x[m]);
                w[m] = 2.0 / pl / pl;
            }

            hx = 0.1 / k; x_b = hx; x_old = 0.0;

            for (i = 1; i <= k; i++)
            {
                x_a = x_b; fx_a = MyF.PL(n, x_a);
                do
                {
                    x_b += hx; fx_b = MyF.PL(n, x_b);
                }while (fx_a * fx_b > 0);

                j = 0; x_a = x_b - hx;

                do
                {
                    x_c  = x_a + (x_b - x_a) * 0.5; j += 1;
                    fx_c = MyF.PL(n, x_c);
                    if ((fx_a * fx_c) < 0)
                    {
                        x_b = x_c;
                    }
                    else
                    {
                        x_a = x_c;
                    }
                }while ((Math.Abs(fx_c) > 0.5E-15) && (j < 65));

                x[m + i]     = x_c; pl = n * MyF.PL(n - 1, x_c);
                w[m + i]     = 2.0 * (1.0 - x_c * x_c) / pl / pl;
                x[k - i + 1] = -x_c; w[k - i + 1] = w[m + i];
                hx           = (x_c - x_old) / 3; x_old = x_c;
            }

            txt_xw = "";
            for (i = 1; i <= n; i++)
            {
                txt_xw += $" x[{i,2}] = {x[i], 19:F14}  w[{i,2}] = {w[i],19:F14}\r\n";
            }
        }