Chebyshev.java

  1. /*
  2.  * Created on 2004/12/22
  3.  * Copyright (C) 2004 Koga Laboratory. All rights reserved.
  4.  *
  5.  */
  6. package org.mklab.cga.polynomial;

  7. import org.mklab.nfc.matrix.DoubleMatrix;
  8. import org.mklab.nfc.scalar.DoublePolynomial;


  9. /**
  10.  * チェビシェフ補間を行うクラスです。
  11.  *
  12.  * @author hiroki
  13.  * @version $Revision: 1.8 $.2004/12/22
  14.  */
  15. public class Chebyshev {

  16.   /** */
  17.   private String var;

  18.   /**
  19.    * コンストラクタ
  20.    *
  21.    */
  22.   public Chebyshev() {
  23.     this.var = "x"; //$NON-NLS-1$
  24.   }

  25.   /**
  26.    * コンストラクタ
  27.    *
  28.    * @param var 変数
  29.    */
  30.   public Chebyshev(String var) {
  31.     this.var = var;
  32.   }

  33.   /**
  34.    * n次のチェビシェフ多項式を返します。
  35.    *
  36.    * @param n 次数。
  37.    * @return n次チェビシェフ多項式。
  38.    */
  39.   public DoublePolynomial interpolate(int n) {
  40.     DoublePolynomial p = null;
  41.     if (n == 0) {
  42.       p = new DoublePolynomial(1, this.var);
  43.     } else if (n == 1) {
  44.       p = new DoublePolynomial(new double[] {0, 1}, this.var);
  45.     } else {
  46.       DoubleMatrix t1 = new DoubleMatrix(1, n + 1);
  47.       t1.setElement(1, 1);

  48.       DoubleMatrix t2 = new DoubleMatrix(1, n + 1);
  49.       t2.setElement(2, 1);

  50.       DoubleMatrix t = new DoubleMatrix(1, n + 1);
  51.       DoubleMatrix t3 = null;
  52.       for (int i = 3; i <= n + 1; i++) {
  53.         t.setSubMatrix(1, 1, 2, n + 1, t2.getSubMatrix(1, 1, 1, n).multiply(2.0));
  54.         t3 = t.subtract(t1).createClone();
  55.         t1 = t2.createClone();
  56.         t2 = t3.createClone();
  57.       }

  58.       p = new DoublePolynomial(t3, this.var);
  59.     }

  60.     return p;
  61.   }

  62.   /**
  63.    * メインメソッド
  64.    *
  65.    * @param args コマンドライン引数
  66.    */
  67.   public static void main(String[] args) {
  68.     Chebyshev c = new Chebyshev();
  69.     DoublePolynomial p = c.interpolate(500);
  70.     p.print();
  71.     System.out.println(p.evaluate(0));
  72.   }
  73. }