当前位置:首页 > 最优化实验报告
void Cnewton(float &x1,float &x2,float e){
while(sqrt((8*x1+9)*(8*x1+9)+(4*x2-3)*(4*x2-3))>=e) x1=x1-(x1+9/8.0);x2=x2-(x2-3/4.0); }
Void main(){
float x1,x2,e;
cout<<\请输入初始点(x1,x2):\
cout<<\请输入精确度:\cout<<\极小点为:(\
cout<<\ 项目四 (1) //共轭梯度法算min(x1^2+4x2^2) void Tidu1(double &a,double &b,double e){ int k=0; double g=4*a*a+8*b*b; double s=-2*a,q=-8*b; again1: double m=-(s*a+4*q*b)/(s*s+4*q*q); a=a+s*m; b=b+q*m; double g1=4*a*a+8*b*b; if(sqrt(g1) double n=g1/g; s=-2*a+n*s; q=-8*b+n*q; k=k+1; goto again1;} else Tidu1(a,b,e); } } //主函数 void main(){ double x1,x2,e; cout<<\请输入初始点(x1,x2):\cout<<\请输入精确度:\Tidu1(x1,x2,e); cout<<\极小点为x=(\cout<<\ (2) //共轭梯度法算minf(x)=2x1^2+x2^2-x1*x2 void Tidu2(double &a,double &b,double e){ int k=0; double g=(4*a-b)*(4*a-b)+(2*b-a)*(2*b-a); double s=b-4*a,q=a-2*b; again2: double m=(a*q+s*b-4*a*s-2*b*q)/(4*s*s+2*q*q-2*s*q); a=a+s*m; b=b+q*m; double g1=(4*a-b)*(4*a-b)+(2*b-a)*(2*b-a); if(sqrt(g1) double n=g1/g; s=b-4*a+n*s; q=a-2*b+n*q; k=k+1; goto again2;}else Tidu2(a,b,e);} } //主函数 void main(){ double x1,x2,e;cout<<\请输入初始点(x1,x2):\cout<<\请输入精确度:\Tidu2(x1,x2,e); cout<<\极小点为x=(\cout<<\ } (3) //DEP法 void DEP(double &a,double &b,double e){ int k=0; double s=40-8*a,q=12-2*b; again: double m=(6*q+20*s-b*q)/(4*s*s+q*q); double a1=a+m*s,b1=b+m*q; double g=(8*a1-40)*(8*a1-40)+(2*b-12)*(2*b-12); if(sqrt(g) b=b1;return; } else{if(k<1){ double x=a1-a,y=b1-b; double c=8*(a1-a),d=2*(b1-b); double h1=1+x*x/(x*c+y*d)-c*c/(c*c+d*d); double h2=x*y/(x*c+y*d)+c*d/(c*c+d*d); double h3=h2; double h4=1+y*y/(x*c+y*d)-d*d/(c*c+d*d); double g1=8*a1-40,g2=2*b1-12; s=-h1*g1-h2*g2; q=-h3*g1-h4*g2; k=k+1; goto again;}else DEP(a1,b1,e);} } //主函数 void main(){ double x1,x2,e;cout<<\请输入初始点(x1,x2):\cout<<\请输入精确度:\cout<<\极小点为x=(\ cout<<\ } 项目五 (1) void waidian(double &a,double &b,double e){ int M=4; do{ a=1/2*M; b=M/(M-1); M=100*M; }while(fabs(a+b-1)>=e); } void main(){ double x1,x2,e; cout<<\请输入精确度:\waidian(x1,x2,e); cout<<\极小点为x=(\cout<<\ } (2) void neidian(double &a,double &b,double e){ double u1=10; double c=0.1; do{ a=(1+sqrt(1+2*u1))/2; b=u1;u1=u1*c; }while(a-1>=e&&b>=e); } void main(){ double x1,x2,e; cout<<\请输入精确度:\neidian(x1,x2,e); cout<<\极小点为x=(\ cout<<\ }
共分享92篇相关文档