鲍威尔法C++源程序

上传人:m**** 文档编号:507755221 上传时间:2023-05-29 格式:DOCX 页数:11 大小:20.91KB
返回 下载 相关 举报
鲍威尔法C++源程序_第1页
第1页 / 共11页
鲍威尔法C++源程序_第2页
第2页 / 共11页
鲍威尔法C++源程序_第3页
第3页 / 共11页
鲍威尔法C++源程序_第4页
第4页 / 共11页
鲍威尔法C++源程序_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《鲍威尔法C++源程序》由会员分享,可在线阅读,更多相关《鲍威尔法C++源程序(11页珍藏版)》请在金锄头文库上搜索。

1、#define n1 2 #define tt#define ad/ 定义常量/tt初始迭代步长/ad收敛精度float ia;float fny(float *x)float f;目标函数f=10*pow(x0+x1-5),2)+pow(x0-x1),2); / return(f);float *iterate(float *x,float a, float *s)float *x1;x1=(float *)malloc(n1 * sizeof(float);for (int i=0;in1;i+)x1i=xi+a*si;return(x1);float func(float *x,floa

2、t a,float *s)float *x1;x1=iterate(x,a,s);float f=fny(x1);return(f);void finding(float a3,float f3,float *xk,float *s)float t=tt;float a1,f1;a0=0; f0=func(xk,a0,s);for (int i=0;i+)a1=a0+t; f1=func(xk,a1,s);if (f1=ad)t=-t;a0=a1; f0=f1;if (ia=1) return;t=t/2; ia=1;for (i=0;i+)a2=a1+t; f2=func(xk,a2,s);

3、if (f2f1)break;t=2*t;a0=a1; f0=f1;a1=a2; f1=f2;if (a0a2)a1=a0; f1=f0;a0=a2; f0=f2;a2=a1; f2=f1;return;/second insertfloat lagrange(float *xk,float *ft,float *s)float a3,f3;float b,c,d,aa;finding (a,f,xk,s);for (int i=0;i+)if (ia=1)aa=a1; *ft=f1;break;d=(pow(a0,2)-pow(a2,2)*(a0-a1)-(pow(a0,2)-pow(a1,

4、2)*(a 0-a2);if(fabs(d)=0)break;c=(f0-f2)*(a0-a1)-(f0-f1)*(a0-a2)/d;if(fabs(c)=0)break;b=(f0-f1)-c*(pow(a0,2)-pow(a1,2)/(a0-a1);aa=-b/(2*c);*ft=func(xk,aa,s);if (fabs(aa-a1)f1) aa=a1;break;if (aaa1)if (*ftf1)a2=aa; f2=*ft;else if (*ftf1)a0=aa; f0=*ft;else if (*ftf1)aa=a1; *ft=f1;return (aa);float *po

5、well(float *xk)float hn1n1,sn1=0,0,ffn1+1=0,0,0;float f1,f3,aa;float dkn1,*x0,xk1n1;int m=0,i,j;for (i=0;in1;i+)for(j=0;jn1;j+)hij=0;if (j=i)hij=1;for (int k=0;k+)ff0=fny(xk);x0=xk;for (i=0;in1;i+)for (j=0;jn1;j+)sj=hij;float aa=lagrange(xk,&ffi+1,s);xk=iterate(xk,aa,s);for (i=0;in1;i+)float a,b;dki

6、=xki-x0i;xk1i=2*xki-x0i;float max=fabs(ff1-ff0);for (i=1;imax)max=fabs(ffi+1-ffi);m=i;f3=fny(xk1);if(f3ff0)&(ff0+f3-2*ff2)*pow(ff0-ffn1-max),2)*max*pow(ff0-f3),2)aa=lagrange(xk,&f1,dk);xk=iterate(xk,aa,dk);for (i=m;in1-1;i+)for (j=0;jn1;j+)hij=hi+1j;for (j=0;j=f3) xk=xk1;float xq=0;for (i=0;in1;i+)xq+=pow(xki-x0i),2);if (xq=ad)break;return(xk);void main()float xkn1=0,0;/ 取初始点float *xx;xx=(float *)malloc(n1 *sizeof(float);xx=powell(xk);float ff=fny(xx);cout 优化的结果为: endl;printf(nnThe Optimal Design Result Is:n);for (int i=0;in1;i+)printf(nt x%d *=%f,i+1,xxi);printf(nt f*=%f,ff);getch();

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号