最优化算法之鲍威尔算法(java)
生活随笔
收集整理的這篇文章主要介紹了
最优化算法之鲍威尔算法(java)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最優化算法之鮑威爾算法(java)
算法原理
題目
用鮑威爾法求函數 f(x1,x2) = 10*(x1+x2-5)+(x1-x2)^2的極小值。
代碼
主類
package pwell;public class pw {double x1;double x2;double e11;double e12;double e21;double e22;double segma;double lamda;double m;double x31,x32,f3;public pw(double x1,double x2,double e11,double e12,double e21,double e22,double segma) {this.x1=x1;this.x2=x2;this.e11=e11;this.e12=e12;this.e21=e21;this.e22=e22;this.segma=segma;lamda=0;x31=0;x32=0;f3=0;//lamda2=0;}public void pwell() {int k=0;F f=new F();while(true) {k++;double f0=f.ff(x1,x2);//第一個方向搜索lamda=f.ff1(x1, e11);double x11=x1+lamda*e11;double x12=x2+lamda*e12;double f1=f.ff(x1, x2);//第二個方向搜索lamda=f.ff1(x1, e21);double x21=x11+lamda*e21;double x22=x12+lamda*e22;double f2=f.ff(x21, x22);//更新搜索方向e11=x21-x1;e12=x22-x2;//沿新方向搜索lamda=f.ff1(x21, e11);x31=x21+lamda*e11;x32=x22+lamda*e12;f3=f.ff(x1, x2);double y=Math.sqrt(Math.pow((x1-x31),2)+Math.pow(x2-x32, 2));if(y<segma) {break;}else {x1=x31;x2=x32;}}System.out.println("最優點為["+x31+","+x32+"]"+'\n'+"最優值f(x)="+f3);} }子類1
package pwell;public class pwll {public static void main(String []args) {double x1=1;double x2=1;double segma=0.001;double e11=1;double e12=0;double e21=0;double e22=1;pw f=new pw(x1,x2,e11,e12,e21,e22,segma);f.pwell();} }子類2
package pwell;public class F {public double ff(double x1,double x2) {double ff=10*Math.pow((x1+x2-5), 2)+Math.pow((x1-x2),2);return ff;}public double ff1(double x1,double e1) {return (5-2*x1)/2*e1;} }運行結果
總結
以上是生活随笔為你收集整理的最优化算法之鲍威尔算法(java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java将时间戳转换成字符串_java
- 下一篇: 活跃android手机,谁能升级2.3?