欢迎来到天天文库
浏览记录
ID:14503972
大小:174.00 KB
页数:9页
时间:2018-07-29
《用最速下降法求解无约束非线性规划问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、运筹学实习报告姓名:xxxxxxxxxx学号:xxxxxxxxxxx专业班级:xxxxxxxxxxxx2013年7月04日题目:用最速下降法求解无约束非线性规划问题摘要:无约束最优化问题的求解方法分为解析法和直接法两大类。解析法需要计算函数的梯度,其中最速下降法就属于解析法中的一种。对于一个无约束非线性规划利用最速下降法求解,首先需要确定其优化方向,此优化方向应该选择为f在当前点处的负梯度方向,利用一维搜索法找出沿此方向上的最小值及其对应点,此后将该点作为新的出发点重复上述过程,直到达到允许的误差为
2、止。本文通过理论的计算方法,进一步分析,最后用c++编程实现求出允许误差内的最优解。此编程可用于计算符合下列形式的函数求最优解过程:f(x)=a[0]x1*x1+a[1]x2*x2+a[2]x1*x2+a[3]x1+a[4]x2+a[5]其中:a[i](i=0,1,2,3,4,5)为函数的系数。本文以“李占利主编,中国矿业大学出版社出版”的《最优化理论与方法》第五章“无约束最优化方法,5.1最速下降法”例5—1为实例,首先利用上述迭代的方法,计算出各迭代点的函数值,梯度及其模。然后应用c++语言编程
3、,得到在精度范围内的精确最优解。C++编程计算的最优解为:。即转化为分数结果为:。满足精度要求的模为:。关键词:无约束非线性规划解析法最速下降法梯度模最优解8一、算法思想无约束最优化方法中的最速下降法首先需要确定其优化方向,此优化方向应该选择为f在当前点处的负梯度方向,利用一维搜索法找出沿此方向上的最小值及其对应点,此后将该点作为新的出发点重复上述过程,直到达到允许的误差为止。主要依据解无约束非线性规划问题的最速下降法计算步骤进行设计算法。具体步骤如下:第1步选取初始点,给定终止误差>0,令k=0;
4、第2步计算,若,停止迭代,输出,否则进行第3步;第3步取;第4步进行一维搜索,求,使得,令,k=k+1。转第2步。由以上计算步骤可知,最速下降法迭代终止时,求得的是目标函数驻点的一个近似点。依据以上步骤就可以用C++编程实现最速下降法求解最优解的算法。二、算法流程图8停取,k:=0计算是否求令k:=k+1一、程序代码#include#includedoublelamda(doublex[2],doublep[2],doublea[2]){doublelam1,
5、lam2;lam1=(pow(a[0],3)*x[0]*x[0]+pow(a[1],3)*x[1]*x[1]);lam2=-(pow(a[0]*x[0],2)+pow(a[1]*x[1],2));doubles;8s=-lam2/(2*lam1);returns;}voidmain(){cout<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"<6、@@@@@@@@@@@@@@@"<>e;cout<<"请输入初始点x[0],x[1]的值:"<>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]"<7、ut<<"请依次输入函数的系数:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]:"<>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<e&&i<=200){lamd=lamda(x,g,a);x[0]=x8、[0]+lamd*g[0];x[1]=x[1]+lamd*g[1];8p[0]=2*a[0]*x[0];p[1]=2*a[1]*x[1];g[0]=-p[0];g[1]=-p[1];i++;cout<<"******************************************"<
6、@@@@@@@@@@@@@@@"<>e;cout<<"请输入初始点x[0],x[1]的值:"<>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]"<7、ut<<"请依次输入函数的系数:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]:"<>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<e&&i<=200){lamd=lamda(x,g,a);x[0]=x8、[0]+lamd*g[0];x[1]=x[1]+lamd*g[1];8p[0]=2*a[0]*x[0];p[1]=2*a[1]*x[1];g[0]=-p[0];g[1]=-p[1];i++;cout<<"******************************************"<
7、ut<<"请依次输入函数的系数:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]:"<>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<e&&i<=200){lamd=lamda(x,g,a);x[0]=x
8、[0]+lamd*g[0];x[1]=x[1]+lamd*g[1];8p[0]=2*a[0]*x[0];p[1]=2*a[1]*x[1];g[0]=-p[0];g[1]=-p[1];i++;cout<<"******************************************"<
此文档下载收益归作者所有