For example, I have points
Y X
100  50
90   43
80   32  
need to solve for y = 50
or
Y X
1/1/2009  100
1/3/2009  97
1/4/2009  94
1/5/2009  92
1/6/2009  91
1/7/2009  89  
need to solve for y = 1/23/2009
For example, I have points
Y X
100  50
90   43
80   32  
need to solve for y = 50
or
Y X
1/1/2009  100
1/3/2009  97
1/4/2009  94
1/5/2009  92
1/6/2009  91
1/7/2009  89  
need to solve for y = 1/23/2009
I don't know about libraries but here's a simple Secant solver :
class SecantSolver
{
    private int     _maxSteps= 10;
    private double _precision= 0.1;
    public SecantSolver(int maxSteps, double precision)
    {
        _maxSteps= maxSteps;
        _precision= precision;
        if (maxSteps <= 0)
            throw new ArgumentException("maxSteps is out of range; must be greater than 0!");
        if (precision <= 0)
            throw new ArgumentException("precision is out of range; must be greater than 0!");
    }
    private double ComputeNextPoint(double p0, double p1, Func<Double,Double> f)
    {
        double r0 = f(p0);
        double r1 = f(p1);
        double p2 = p1 - r1 * (p1-p0) / (r1-r0); // the basic secant formula
        return p2;
    }
    public double Solve( double lowerBound, double upperBound, Func<Double,Double> f, out String message)
    {
        double p2,p1,p0;
        int i;
        p0=lowerBound;
        p1=upperBound;
        p2= ComputeNextPoint(p0,p1,f);
        // iterate till precision goal is met or the maximum
        // number of steps is reached
        for(i=0; System.Math.Abs(f(p2))>_precision &&i<_maxSteps;i++) {
            p0=p1;
            p1=p2;
            p2=ComputeNextPoint(p0,p1,f);
        }
        if (i < _maxSteps)
            message = String.Format("Method converges in " + i + " steps.");
        else
            message = String.Format("{0}. The method did not converge.", p2);
        return p2;
    }
}
Usage:
SecantSolver solver= new SecantSolver(200,              // maxsteps
                                      0.00000001f/100   // tolerance
                                      );
string message;
double root= solver.Solve(0.10,   // initial guess (lower)
                          1.0,    // initial guess (upper)
                          f,      // the function to solve
                          out message
                          );
See if you can find what you want at ALGLIB. Of course, you'll still have to make decisions about the appropriate type of interpolation/extrapolation for your problem.
The one I use is the numerics component of Math.NET http://numerics.mathdotnet.com/
It contains "various interpolation methods, including barycentric approaches and splines".
But as the saying goes, there are lies, damn lies and bicubic spline interpolations.