拟牛顿法(变尺度法)dfp算法的cc++源码

拟牛顿法(变尺度法)dfp算法的cc++源码

ID:14438263

大小:44.00 KB

页数:16页

时间:2018-07-28

拟牛顿法(变尺度法)dfp算法的cc++源码_第1页
拟牛顿法(变尺度法)dfp算法的cc++源码_第2页
拟牛顿法(变尺度法)dfp算法的cc++源码_第3页
拟牛顿法(变尺度法)dfp算法的cc++源码_第4页
拟牛顿法(变尺度法)dfp算法的cc++源码_第5页
资源描述:

《拟牛顿法(变尺度法)dfp算法的cc++源码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、拟牛顿法(变尺度法)DFP算法的cc++源码拟牛顿法(变尺度法)DFP算法的c/c++源码#include"iostream.h"#include"math.h"voidcomput_grad(double(*pf)(double*x),intn,double*point,double*grad);//计算梯度doubleline_search1(double(*pf)(double*x),intn,double*start,double*direction);//0.618法线搜索doubleline_search(double(*pf)(double

2、*x),intn,double*start,double*direction);//解析法线搜索doubleDFP(double(*pf)(double*x),intn,double*min_point);//无约束变尺度法//梯度计算模块//参数:指向目标函数的指针,变量个数,求梯度的点,结果voidcomput_grad(double(*pf)(double*x),intn,double*point,double*grad){doubleh=1E-3;inti;double*temp;temp=newdouble[n];for(i=1;i<=n;i+

3、+){temp[i-1]=point[i-1];}for(i=1;i<=n;i++){temp[i-1]+=0.5*h;grad[i-1]=4*pf(temp)/(3*h);temp[i-1]-=h;grad[i-1]-=4*pf(temp)/(3*h);temp[i-1]+=(3*h/2);grad[i-1]-=(pf(temp)/(6*h));temp[i-1]-=(2*h);grad[i-1]+=(pf(temp)/(6*h));temp[i-1]=point[i-1];}delete[]temp;}//一维搜索模块//参数:指向目标函数的指针,变

4、量个数,出发点,搜索方向//返回:最优步长doubleline_search(double(*pf)(double*x),intn,double*start,double*direction){inti;doublestep=0.001;doublea=0,value_a,diver_a;doubleb,value_b,diver_b;doublet,value_t,diver_t;doubles,z,w;double*grad,*temp_point;grad=newdouble[n];temp_point=newdouble[n];comput_gr

5、ad(pf,n,start,grad);diver_a=0;for(i=1;i<=n;i++)diver_a=diver_a+grad[i-1]*direction[i-1];do{b=a+step;for(i=1;i<=n;i++)temp_point[i-1]=start[i-1]+b*direction[i-1];comput_grad(pf,n,temp_point,grad);diver_b=0;for(i=1;i<=n;i++)diver_b=diver_b+grad[i-1]*direction[i-1];if(fabs(diver_b)<

6、1E-10){delete[]grad;delete[]temp_point;return(b);}if(diver_b<-1E-15){a=b;diver_a=diver_b;step=2*step;}}while(diver_b<=1E-15);for(i=1;i<=n;i++)temp_point[i-1]=start[i-1]+a*direction[i-1];value_a=(*pf)(temp_point);for(i=1;i<=n;i++)temp_point[i-1]=start[i-1]+b*direction[i-1];value_b

7、=(*pf)(temp_point);do{s=3*(value_b-value_a)/(b-a);z=s-diver_a-diver_b;w=sqrt(fabs(z*z-diver_a*diver_b));//////////////////!!!!!!!!!!!!!!!!!!!!!!t=a+(w-z-diver_a)*(b-a)/(diver_b-diver_a+2*w);value_b=(*pf)(temp_point);for(i=1;i<=n;i++)temp_point[i-1]=start[i-1]+t*direction[i-1];val

8、ue_t=(*pf)(temp_point);comput_grad(pf,n,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。