001    package lrs.lazyLRSEvaluators;
002    
003    import lrs.*;
004    import fp.*;
005    
006    public class LazyLambdaEval extends ALazyEval
007    {
008        double n=0.0;
009    //  double fac = 1.0;  // alternative technique to storing ncoef
010        double ncoef = 1.0; // alternative technique to storing nfac
011        
012        public final LRStruct nextLRS()
013        {
014            n++;
015    //    fac *= 2*n*(2*n+1);  // for sine
016    //    fac *= 2*n*(2*n-1);  // for cosine
017            
018            ncoef /= -2*n*(2*n+1); // for sine
019    //    ncoef /= -2*n*(2*n-1); // for cosine
020            
021            return makeLRS();
022        }
023        
024        public final LRStruct makeLRS()
025        {
026            return makeLazyLRS ( new ILambda() {
027                double power = 2*n+1; // for sine
028    //    double power = 2*n;  // for cosine
029                
030    //      double coef = Math.pow(-1.0, n)/fac;  // if fac is stored
031                
032                double coef = ncoef;  // if ncoef is stored
033                
034                public Object apply(Object ... params) {
035                    return coef*Math.pow(Math.PI*((Number) params[0]).doubleValue(),power);
036                }
037                public String toString() {
038                    return coef+"*((PI*x)^"+power+")";
039                }
040            });
041        }
042    }