ChebyshevInterpolation.Interpolate.Newton C# (CSharp) Method

Newton() public method

public Newton ( int n, Array x, Array f ) : void
n int
x Array
f Array
return void
        public void Newton(int n, double[] x, double[] f)
        {
            int k, i, im1;
            double xim1, fim1;

            im1 = 0;
            for (i = 1; i <= n; i++)
            {
                fim1 = f[im1];
                xim1 = x[im1];
                for (k = i; k <= n; k++) f[k] = (f[k] - fim1) / (x[k] - xim1);
                im1 = i;
            }
        }
    }

Usage Example

Example #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            method = comboBox1.SelectedIndex;
            number = int.Parse((string)comboBox2.SelectedItem);

            if (method == 2 || method == 3 && number > 5)
            {
                number = 5;
            }

            if (method == 1)
            {
                if (number > 11)
                {
                    number = 11;
                }

                series = new Series(1.6, number, f);
            }

            else if (method == 0)
            {
                double[] fy = new double[number + 1];
                double   h  = 3.2 / number;
                double   x  = -1.6;

                for (int i = 0; i <= number; i++)
                {
                    fy[i] = f(x);
                    x    += h;
                }

                inter = new Interpolate();
                coeff = inter.ChebyshevCalculateCoefficients(number, fy);
            }

            else if (method == 2)
            {
                lx = new double[Split, number + 1];
                ly = new double[Split, number + 1];
                double[] y = new double[number + 1];
                double[] z = new double[number + 1];
                double   h = 3.2 / (number * Split);
                double   x = -1.6;
                inter = new Interpolate();

                for (int i = 0; i < Split; i++)
                {
                    for (int j = 0; j <= number; j++)
                    {
                        z[j] = lx[i, j] = x;
                        y[j] = ly[i, j] = f(x);
                        x   += h;
                    }
                }

                inter = new Interpolate();
            }

            else if (method == 3)
            {
                nx = new double[Split, number + 1];
                ny = new double[Split, number + 1];
                double[] y = new double[number + 1];
                double[] z = new double[number + 1];
                double   h = 3.2 / (number * Split);
                double   x = -1.6;
                inter = new Interpolate();

                for (int i = 0; i < Split; i++)
                {
                    for (int j = 0; j <= number; j++)
                    {
                        z[j] = nx[i, j] = x;
                        y[j] = f(x);
                        x   += h;
                    }

                    inter.Newton(number, z, y);

                    for (int j = 0; j <= number; j++)
                    {
                        ny[i, j] = y[j];
                    }
                }
            }

            else if (method == 4)
            {
                double h = 3.2 / number;
                double x = -1.6;
                complex = new Complex();
                cy      = new Complex[number + 1];
                tx      = new double[number + 1];
                ty      = new double[number + 1];

                for (int j = 0; j <= number; j++)
                {
                    tx[j] = x;
                    ty[j] = f(x);
                    x    += h;
                }

                cy = complex.DFT(ty);
            }

            panel1.Invalidate();
        }