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