文档介绍:.
运
筹
学
实<br****br/>报
告
口
姓名:XXXXXXXXXX
学号:XXXXXXXXXXX专业班级:XXXXXXXXXXXX
2013年7月04日
题目:用最速下降法求解无约束非线性规划问题摘要:
无约束最优化问第3
步;
第3步取pkf(xk);kkkk、
第4步进行一维搜索,求k,使得f(xkP)mnf(xp),令
kkP,k=k+1。转第2步
由以上计算步骤可知,最速下降法迭代终止时,求得的是目标函数驻点的一个近似点。依据以上步骤就可以用C++编程实现最速下降法求解最优解的算法
算法流程图取x(0),
冬
三、程序代码o
#include<>#include<>
[2],doublep[2
],doublea[计算p(k)
doublelamda(doublex
{
doublelam1,lam2
lam1=(pow(a[0],3
lam2=-(pow(a[0]*x[0],2)+pow(a[1]*x[1],2));doubles;
s=-lam2/(2*lam1)
returns;
}
voidmain()
{
求(k)
f(x(k))
是
)*x[0]*x[0]+pow(a[1],3)*x[1]*x[1]);
停
最速下降法求解最优解程序运行结果
k:=k+1
@@"<<endl;
cout<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"<<endl;cout<<"@***@cout<<"@@@@@@@@@@@@@@@@@***@i@@***@k@@@@@@@@@@@@"<<endl;cout<<endl;
doublelamd,x[3],a[6];
doublep[2],g[2],e,y,m,n;
inti=0;
cout<<"请输入精度e"<<endl;
cin>>e;
cout<<"请输入初始点x[0],x[1]的值:\n"<<endl;
cin»m;
cin»n;
x[0]=m;
x[1]=n;
cout<<"函数通式为f(x)=a[0]x1*x1+a[1]x2*x2+a[2]x1*x2+a[3]x1+a[4]x2+a[5]"<<endl;
cout<<"请依次输入函数的系数:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]:"<<endl;
for(i=0;i<6;i++)
cin>>a[i];
p[0]=(2*a[0]*x[0]+a[2]*x[1]+a[3]);
p[1]=(2*a[1]*x[1]+a[2]*x[0]+a[4]);
g[0]=-p[0];
g[1]=-p[1];
i=0;
cout<<endl;
while(sqrt(g[0]*g[0]+g[1]*g[1])>e&&i<=200)
{lamd=lamda(x,g,a);
x[0]=x[0]+lamd*g[0];x[1]=x[1]+lamd*g[1];p[0]=2*a[0]*x[0];p[1]=2*a[1]*x[1];g[0]=-p[0];g[1]=-p[1];
i++;cout<<"
cout<<"
*************************