最优化方法之0.618法(java)

最优化方法之0.618法(java)

算法原理

题目

试用0.618法求目标函数f(X)=x^3-2*x+1的最优解。给定初始区间[0,2],收敛精度sgm=0.002。

代码

主类

package project;

public class main1 {
          
   
	public static void main(String []args) {
          
   
		double a=0.0;
		double b=2.0;
		double miu=0.002;
		f_618 h=new f_618(a,b,miu);
		h.SuanFa();
	}
}

子类1

package project;

public class f_618 {
          
   
	double a;
	double b;
	double miu;
	double x1;
	double x2;
	public f_618(double a,double b,double miu) {
          
   
		this.a=a;
		this.b=b;
		this.miu=miu;
		this.x1=0.0;
		this.x2=0.0;
	}
	public void SuanFa() {
          
   
		int k=0;
		fun f=new fun();
		while(true) {
          
   
			k++;
			x1=a+0.382*(b-a);
			x2=a+0.618*(b-a);
			if((b-a)<miu) break;
			else {
          
   
				if(f.F(x1)>f.F(x2)) {
          
   
					a=x1;
					x1=x2;
					x2=a+0.618*(b-a);
				}
				else {
          
   
					b=x2;
					x2=x1;
					x1=a+0.382*(b-a);
				}
			}
		}
		double f1=f.F(a);
		double f2=f.F(b);
		System.out.println("迭代了"+k+"次,最优区间[a,b]=["+a+","+b+"]"+
+"f(a)="+f1+"f(b)="+f2);
	}
}

子类2

package project;
import java.lang.Math;
public class fun {
          
   
	public double F(double x) {
          
   
		return Math.pow(x,3)-2*x+1;
	}
}

运行结果

经验分享 程序员 微信小程序 职场和发展