From 7f69c868c41e4b36eecf9d3b1dc22f3f3aa1540c Mon Sep 17 00:00:00 2001 From: desaicwtf Date: Fri, 9 Jul 2010 16:59:55 +0000 Subject: add optimization library source code git-svn-id: https://ws10smt.googlecode.com/svn/trunk@204 ec762483-ff6d-05da-a07a-a48fb63a330f --- .../src/optimization/util/Interpolation.java | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 gi/posterior-regularisation/prjava/src/optimization/util/Interpolation.java (limited to 'gi/posterior-regularisation/prjava/src/optimization/util/Interpolation.java') diff --git a/gi/posterior-regularisation/prjava/src/optimization/util/Interpolation.java b/gi/posterior-regularisation/prjava/src/optimization/util/Interpolation.java new file mode 100644 index 00000000..cdbdefc6 --- /dev/null +++ b/gi/posterior-regularisation/prjava/src/optimization/util/Interpolation.java @@ -0,0 +1,37 @@ +package optimization.util; + +public class Interpolation { + + /** + * Fits a cubic polinomyal to a function given two points, + * such that either gradB is bigger than zero or funcB >= funcA + * + * NonLinear Programming appendix C + * @param funcA + * @param gradA + * @param funcB + * @param gradB + */ + public final static double cubicInterpolation(double a, + double funcA, double gradA, double b,double funcB, double gradB ){ + if(gradB < 0 && funcA > funcB){ + System.out.println("Cannot call cubic interpolation"); + return -1; + } + + double z = 3*(funcA-funcB)/(b-a) + gradA + gradB; + double w = Math.sqrt(z*z - gradA*gradB); + double min = b -(gradB+w-z)*(b-a)/(gradB-gradA+2*w); + return min; + } + + public final static double quadraticInterpolation(double initFValue, + double initGrad, double point,double pointFValue){ + double min = -1*initGrad*point*point/(2*(pointFValue-initGrad*point-initFValue)); + return min; + } + + public static void main(String[] args) { + + } +} -- cgit v1.2.3