最优化方法之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; } }
运行结果
下一篇:
ETS的表类型查找分析和并发效率