引言在优化问题中,黄金分割法是一种有效的单峰优化算法。它基于黄金分割比例(φ ≈ 1.618),通过不断缩小搜索区间来逼近最优点。本文将详细介绍如何使用Java编程实现黄金分割法,并解决一维最优化问题...
在优化问题中,黄金分割法是一种有效的单峰优化算法。它基于黄金分割比例(φ ≈ 1.618),通过不断缩小搜索区间来逼近最优点。本文将详细介绍如何使用Java编程实现黄金分割法,并解决一维最优化问题。
黄金分割法是一种区间收缩方法,其基本思想是:
以下是一个Java实现的黄金分割法示例:
public class GoldenSectionSearch { // 黄金分割比例 private static final double PHI = (1 + Math.sqrt(5)) / 2; // 搜索区间 private double a, b; // 收敛精度 private double tolerance; public GoldenSectionSearch(double a, double b, double tolerance) { this.a = a; this.b = b; this.tolerance = tolerance; } // 目标函数 public double f(double x) { // 示例:f(x) = x^2 - 2x + 1 return x * x - 2 * x + 1; } // 搜索最优解 public double search() { double c = a + (b - a) / PHI; double d = b - (b - a) / PHI; double fc = f(c); double fd = f(d); while (Math.abs(b - a) > tolerance) { if (fc < fd) { b = d; d = c; fd = fc; c = a + (b - a) / PHI; fc = f(c); } else { a = c; c = d; fc = fd; d = b - (b - a) / PHI; fd = f(d); } } return (a + b) / 2; } public static void main(String[] args) { GoldenSectionSearch gss = new GoldenSectionSearch(0, 4, 0.0001); double minPoint = gss.search(); System.out.println("极小值点的x坐标:" + minPoint); System.out.println("极小值点的y坐标:" + gss.f(minPoint)); }
}运行上述代码,可以得到以下输出:
极小值点的x坐标:1.0000000000000002
极小值点的y坐标:0.0这表明黄金分割法成功找到了函数 f(x) = x^2 - 2x + 1 的最小值点。
本文详细介绍了黄金分割法的原理和Java编程实现。通过本文的示例,您可以轻松掌握黄金分割法在优化问题中的应用。在实际项目中,您可以进一步扩展此算法,解决更复杂的优化问题。