package jsci.maths.wavelet.splines;

import jsci.maths.*;
import jsci.maths.wavelet.*;

/****************************************
* This class is used to generate quadratic
* splines to be used as wavelets or related
* functions. It can also be used for basic
* interpolation.
* @author Daniel Lemire
*****************************************/
public class QuadraticSpline extends Spline implements Filter, Cloneable  {
	protected final static int filtretype=2;
	private double[] vecteur;
	static final double[] vg={1/4d,3/4d,3/4d,1/4d};
	static final double[] v0={3/4d,1/4d};

  /*******************************
  * Return a String representation
  * of the object
  ********************************/
  public String toString() {
    return(ArrayMath.toString(vecteur));
  }
	/****************************************
  * This method is used to compute
  * how the number of scaling functions
  * changes from on scale to the other.
  * Basically, if you have k scaling
  * function and a Filter of type t, you'll
  * have 2*k+t scaling functions at the
  * next scale (dyadic case).
  * Notice that this method assumes
  * that one is working with the dyadic
  * grid while the method "previousDimension"
  * define in the interface "Filter" doesn't.
	******************************************/
	public int getFilterType () {
				return(filtretype);
	}

  /*****************************************
  * Check if another object is equal to this
  * QuadraticSpline object
  ******************************************/
  public boolean equals(Object a) {
    if(a!=null && (a instanceof QuadraticSpline) && vecteur.length==((QuadraticSpline)a).dimension()) {
      QuadraticSpline iv=(QuadraticSpline)a;
        for(int i=0;ivecteur.length-1)) {
			throw new IllegalArgumentException("Parameter incorrect : "+i+", "+vecteur.length);
		}
		return(vecteur[i]);
	}

   /*********************************************
   * Set a particular value
   * @param i position (knot)
   * @param d value
   * @exception IllegalArgumentException if the parameter i is negative
   **********************************************/
   public void setValue(int i, double d) {
		if (i<0) {
			throw new IllegalArgumentException("The parameter must be positive : "+i);
		}
		vecteur[i]=d;
	}

   /*********************************************
   * Set the sampled values of the function
   * to the specified array 
   **********************************************/
	public void setValues(double[] v) {
		vecteur=v;
	}

	/*********************************************
  * compute the derivative of the function -
  * useful for numerical analysis
	**********************************************/
	public LinearSpline derive() {
		return(this.derive(0,1));
    }

	/*********************************************
  * compute the derivative of the function -
  * useful for numerical analysis
  * @param a left boundary of the interval
  * @param b right boundary of the interval
	**********************************************/
  public LinearSpline derive(double a, double b) {
		double[] v=new double[vecteur.length-1];
		for(int i=0;i 

Ads help maintain this website.