Chebyshev.java
- /*
- * Created on 2004/12/22
- * Copyright (C) 2004 Koga Laboratory. All rights reserved.
- *
- */
- package org.mklab.cga.polynomial;
- import org.mklab.nfc.matrix.DoubleMatrix;
- import org.mklab.nfc.scalar.DoublePolynomial;
- /**
- * チェビシェフ補間を行うクラスです。
- *
- * @author hiroki
- * @version $Revision: 1.8 $.2004/12/22
- */
- public class Chebyshev {
- /** */
- private String var;
- /**
- * コンストラクタ
- *
- */
- public Chebyshev() {
- this.var = "x"; //$NON-NLS-1$
- }
- /**
- * コンストラクタ
- *
- * @param var 変数
- */
- public Chebyshev(String var) {
- this.var = var;
- }
- /**
- * n次のチェビシェフ多項式を返します。
- *
- * @param n 次数。
- * @return n次チェビシェフ多項式。
- */
- public DoublePolynomial interpolate(int n) {
- DoublePolynomial p = null;
- if (n == 0) {
- p = new DoublePolynomial(1, this.var);
- } else if (n == 1) {
- p = new DoublePolynomial(new double[] {0, 1}, this.var);
- } else {
- DoubleMatrix t1 = new DoubleMatrix(1, n + 1);
- t1.setElement(1, 1);
- DoubleMatrix t2 = new DoubleMatrix(1, n + 1);
- t2.setElement(2, 1);
- DoubleMatrix t = new DoubleMatrix(1, n + 1);
- DoubleMatrix t3 = null;
- for (int i = 3; i <= n + 1; i++) {
- t.setSubMatrix(1, 1, 2, n + 1, t2.getSubMatrix(1, 1, 1, n).multiply(2.0));
- t3 = t.subtract(t1).createClone();
- t1 = t2.createClone();
- t2 = t3.createClone();
- }
- p = new DoublePolynomial(t3, this.var);
- }
- return p;
- }
- /**
- * メインメソッド
- *
- * @param args コマンドライン引数
- */
- public static void main(String[] args) {
- Chebyshev c = new Chebyshev();
- DoublePolynomial p = c.interpolate(500);
- p.print();
- System.out.println(p.evaluate(0));
- }
- }