资源描述:
《一为搜索法程序说明》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一维搜索方法求极小点的程序说明一、程序编写的基本思想打开VC++6.0,文件——新建——文件一一C卄SourceFile——输入文件名——创建一个简单的程序。在所建立的程序下编写所需要的程序,用switch分别将牛顿法、黄金分割法、二次插值法(抛物线法)编写程序计算函数函数f(x)=sinx的极小点x*,迭代次数,以及每次迭代时近似极小点。各种一维搜索方法的具体过程(1)用switch语句选择搜索方法while(l){switch(getchar()){case'A':{牛顿法};break;case'B':{黄金
2、分割法};break;case'C':{二次插值法};break;casevDf:jieshu=l;break;}(2)各种方法流程图A、牛顿法:①牛顿法流程图:结束B、黄金分割法①黄金分割法程序框图:结束C.二次插值法:①二次差值法流程图:①根据流程图编写程序://shejixpp:Definestheentrypointfortheconsoleapplication.//includeMstdafx.hH#include#include#definef(x)sin(x)//宏
3、定义函数g(x)=sinxvoidmain()floatr,e=0・00001,min;〃定义初始变量while(l){printf(n选择方法:A牛顿法,B黄金分割法,C二次插值法D,结束「);intjieshu=0;switch(getchar())floatdl,d2,d,fl,f2,h;intp=l;printfC*输入初始值j;scanf(M%r&dl);//^j入初始区间fl二cos(dl);/////////////////////////////////////改公式,求公式的导数f2=-s
4、in(dl);d2=dl-(fl/f2);while(fabs(dl-d2)>=e){P++;dl=d2;fl=cos(dl);f2=-sin(dl);d2=dl-(fl/f2);r=d2;printf(n%hn,r);//////^出极小点}r=d2;min=f(r);printfC迭代次数=%dH,p);///输出迭代次数printf("函数的极小点二%fH?r);////僦出极小点printf(n极小值min=%f”,min);////////〃瀚出极小值};break;//continue;ca
5、se'B*:{floatal,a2,yl,y2,k;floata,b;inti=l;printfL输入初始搜索区间[a,b]H);scanf(M%f%&b);/隔入初始区间e=0.00001;al=b-0.618*(b-a);a2=a+0.618*(b-a);yl=f(al);y2=f(a2);while((fabs((b-a)/b)>e&&fabs((y2-yl)/y2)>e))i=i+l;if(yl>=y2)a=al;al=a2;yi=y2;a2=a+0.618*(b-a);y2=sin(a2);}else
6、{b=a2;a2=al;y2=yi;al=b-0.618*(b-a);yl=sin(al);}r=a;printf(H%foi,r);/////瀚出极小点a=(a+b)/2;r=a;min=f(r);printf(n^代次数=%d”,i);〃触出迭代次数printf(n函数的极小点二%fn,r);//////^g出极小点printf(n极小值min=%fM?min);////////////^出极小值};break;//continue;case'C*:floatml,m2,m3;//////////
7、////////////////////////////////////取值范围floatw=1;floathl,h2,h3,h,cl,c2,m;intn=0;print"输入初始搜索区间[ml,m3]iT);scanf(n%f%fn,&ml,&m3);/隔入初始区间m2=(ml+m3)/2;don++;hl=f(ml);h2=f(m2);h3=f(m3);cl=(h3-hl)/(m3-ml);c2=((h2-hl)/(m2-ml)-cl)/(m2-m3);m=(ml+m3・cl/c2)/2;h=f(m);if(
8、(m・m2)*v>0){if(h2>=h){ml=m2;hl=h2;m2=m;h2=h;}else{m3=m;h3=h;}elseif(h2>=h)m3=m2;h3=h2;m2=m;h2=h;}else{ml=m;hl=h;printf(H%AnH,r);///////输出极小点}while(fabs(m3-ml)>=e);r=m;min=f(r);pri