⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onevarminimizer.java

📁 Conjugate Gradient Method
💻 JAVA
字号:
public class OneVarMinimizer{  private OneVarFn fn;  public double xBest;  public double vBest;  public double xWorst;  public double vWorst;  public String oper;  public int nIter = 0;  public int nFnEval = 0;  private Object user_data;  public OneVarMinimizer( OneVarFn f )  {    fn = f;  }  public double eval( double x )  {    nFnEval++;    return fn.eval( x, user_data );  }  private void nmSort()  {    if( vBest > vWorst ) {      double tmp;      tmp = xBest;      xBest = xWorst;      xWorst = tmp;      tmp = vBest;      vBest = vWorst;      vWorst = tmp;    }  }  public void nmInit( double a, double b, Object user_data  )  {    nFnEval = 0;    nIter = 0;    this.user_data = user_data;    xBest = a;    xWorst = b;    vBest = eval( xBest );    vWorst = eval( xWorst );    nmSort();    oper = "INIT";  }  public void nmIter()  {    double r, vr, t, vt;    double displ;    displ = xBest - xWorst;    r = xBest + displ;    vr = eval( r );    if( vr < vBest ) {      /* Try Expansion */      t = r + displ;      vt = eval( t );      if( vt < vr ) {        /* Accept Expansion */        xWorst = t;        vWorst = vt;        oper = "EXPANSION";      } else {        /* Keep Reflection */        xWorst = r;        vWorst = vr;        oper = "REFLECTION";      }    } else if( vr > vWorst ) {      /* Try Inside Contraction */      t = xBest - 0.5 * displ;      vt = eval( t );      if( vt < vWorst ) {        /* Accept Inside Contraction */        xWorst = t;        vWorst = vt;        oper = "INSIDE_CONTRACTION";      } else {        /* Shrink. Shrink Coefficient = 0.25  */        t = xBest - 0.25 * displ;        vt = eval( t );        xWorst = t;        vWorst = vt;        oper = "SHRINK";      }    } else {      /* Try Outside Contraction */      t = xBest + 0.5 * displ;      vt = eval( t );      if( vt < vWorst ) {        /* Accept Outside Contraction */        xWorst = t;        vWorst = vt;        oper = "OUTSIDE_CONTRACTION";      } else {        /* Shrink. Shrink Coefficient = 0.25  */        t = xBest - 0.25 * displ;        vt = eval( t );        xWorst = t;        vWorst = vt;        oper = "SHRINK";      }    }    nmSort();    nIter++;  }  public boolean minimize( double a, double h,                     Object user_data, double tol, int max_iter  )  {    nmInit( a, a+h, user_data );    for( ; nIter < max_iter; ) {      nmIter();      if( Math.abs( xWorst - xBest ) < tol )        return true;    }    return false;  }  public boolean minimize( double a, double h, Object user_data )  {    return minimize( a, h, user_data, 1e-5, 100 );  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -