最优化方法之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的表类型查找分析和并发效率
