/*
* $Id$
*/
package edu.jas.ps;
import java.util.List;
import edu.jas.poly.ExpVector;
import edu.jas.poly.GenPolynomial;
import edu.jas.poly.PolyUtil;
import edu.jas.structure.RingElem;
/**
* Polynomial functions capable for Taylor series expansion.
* @param ring element type
* @author Heinz Kredel
*/
public class PolynomialTaylorFunction> implements TaylorFunction {
final GenPolynomial pol;
final long facul;
public PolynomialTaylorFunction(GenPolynomial p) {
this(p, 1L);
}
public PolynomialTaylorFunction(GenPolynomial p, long f) {
pol = p;
facul = f;
}
/**
* To String.
* @return string representation of this.
*/
@Override
public String toString() {
return pol.toString();
}
/**
* Get the factorial coefficient.
* @return factorial coefficient.
*/
@Override
public long getFacul() {
return facul;
}
/**
* Test if this is zero.
* @return true if this is 0, else false.
*/
public boolean isZERO() {
return pol.isZERO();
}
/**
* Deriviative.
* @return deriviative of this.
*/
@Override
public TaylorFunction deriviative() {
return new PolynomialTaylorFunction(PolyUtil. baseDeriviative(pol));
}
/*
* Partial deriviative.
* @param r index of the variable.
* @return partial deriviative of this with respect to variable r.
public TaylorFunction deriviative(int r) {
return new PolynomialTaylorFunction(PolyUtil. baseDeriviative(pol,r));
}
*/
/**
* Multi-partial deriviative.
* @param i exponent vector.
* @return partial deriviative of this with respect to all variables.
*/
public TaylorFunction deriviative(ExpVector i) {
GenPolynomial p = pol;
long f = 1L;
if (i.signum() == 0 || pol.isZERO()) {
return new PolynomialTaylorFunction(p, f);
}
for (int j = 0; j < i.length(); j++) {
long e = i.getVal(j);
if (e == 0) {
continue;
}
int jl = i.length() - 1 - j;
for (long k = 0; k < e; k++) {
p = PolyUtil. baseDeriviative(p, jl);
f *= (k + 1);
if (p.isZERO()) {
return new PolynomialTaylorFunction(p, f);
}
}
}
//System.out.println("i = " + i + ", f = " + f + ", der = " + p);
return new PolynomialTaylorFunction(p, f);
}
/**
* Evaluate.
* @param a element.
* @return this(a).
*/
@Override
public C evaluate(C a) {
return PolyUtil. evaluateMain(pol.ring.coFac, pol, a);
}
/**
* Evaluate at a tuple of elements.
* @param a tuple of elements.
* @return this(a).
*/
public C evaluate(List a) {
return PolyUtil. evaluateAll(pol.ring.coFac, pol.ring, pol, a);
}
}
Ads help maintain this website.