X() public static method

x の n 乗を返す。
public static X ( int n ) : Polynomial
n int 指数
return Polynomial
示例#1
0
        public static Polynomial Lagrange(DomainType[] x, DomainType[] y)
        {
            if (x.Length != y.Length)
            {
                throw new System.ArgumentException("x と y の次数は等しくなければいけません。");
            }

            int        len = x.Length;
            Polynomial p   = (Polynomial)(CoefType)0.0;
            Polynomial X   = Polynomial.X(1);

            for (int i = 0; i < len; ++i)
            {
                Polynomial q = (Polynomial)(CoefType)y[i];

                for (int j = 0; j < len; ++j)
                {
                    if (i == j)
                    {
                        continue;
                    }

                    Polynomial temp = (X - (CoefType)x[j]);
                    temp /= (x[i] - x[j]);
                    q    *= (X - (CoefType)x[j]) / (x[i] - (CoefType)x[j]);
                }
                p += q;
            }

            return(p);
        }
示例#2
0
        /// <summary>
        /// チェビシェフ多項式を計算する。
        /// </summary>
        /// <param name="n">次数</param>
        /// <returns>次数 n のチェビシェフ多項式</returns>
        public static Polynomial Chebyshev(int n)
        {
            if (n == 0)
            {
                return(Polynomial.X(0, 1));
            }
            else if (n == 1)
            {
                return(Polynomial.X(1, 1));
            }

            return(Polynomial.X(1, 2) * Polynomial.Chebyshev(n - 1) - Polynomial.Chebyshev(n - 2));
        }
示例#3
0
        /// <summary>
        /// チェビシェフ有理式(elliptic rational)を計算する。
        /// </summary>
        /// <param name="n">次数</param>
        /// <param name="l">x > 1 における極小値</param>
        /// <returns>次数 n のチェビシェフ有理式</returns>
        public static Rational Elliptic(int n, double l)
        {
            double m1  = 1 / (l * l);
            double m1p = 1 - m1;

            double Kk1  = Ellip.K(m1);
            double Kk1p = Ellip.K(m1p);

            double m  = Ellip.InverseQ(Math.Exp(-Math.PI * Kk1p / (n * Kk1)));
            double Kk = Ellip.K(m);

            Polynomial num   = Polynomial.X(0, 1);
            Polynomial denom = Polynomial.X(0, 1);

            Rational r = new Rational(Polynomial.X(0, 1), Polynomial.X(0, 1));
            double   g = 1;

            for (int i = n - 1; i > 0; i -= 2)
            {
                double u  = Kk * (double)i / n;
                double sn = Ellip.Sn(u, m);
                double w  = sn * sn;

                g     *= (m * w - 1) / (1 / w - 1);
                num   *= Polynomial.X(2, 1 / w) - 1;
                denom *= Polynomial.X(2, m * w) - 1;
            }

            if ((n & 1) == 1)
            {
                num *= Polynomial.X(1);
            }

            num *= g;

            return(new Rational(num, denom));
        }
示例#4
0
 /// <summary>
 /// x の n 乗を返す。
 /// </summary>
 /// <param name="n">指数</param>
 /// <returns>x の n 乗</returns>
 public static Polynomial X(int n)
 {
     return(Polynomial.X(n, 1));
 }