ChebyshevInterpolation.Interpolate.ChebyshevCalculateCoefficients C# (CSharp) Method

ChebyshevCalculateCoefficients() public method

public ChebyshevCalculateCoefficients ( int n, Array u ) : double[]
n int
u Array
return double[]
        public double[] ChebyshevCalculateCoefficients(int n, double[] u)
        {
            double[] v = new double[n + 2];

            for (int k = 0; k <= n; k++)
            {
                double sum = 0.0;
                double arg = k * Math.PI / n;

                for (int j = 0; j <= n; j++)
                {
                    double dj = 1;

                    if (j % 2 == 0)
                        dj = 2.0;

                    sum += Math.Cos(j * arg) * u[j] / dj;
                }

                double dk = 1.0;

                if (k % 2 == 0)
                    dk = 2.0;

                v[k] = 2.0 * sum / (n * dk);
            }

            return v;
        }

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();
        }