鲍威尔法C++源程序.doc_第1页
鲍威尔法C++源程序.doc_第2页
鲍威尔法C++源程序.doc_第3页
鲍威尔法C++源程序.doc_第4页
鲍威尔法C++源程序.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include #include #include #include #include #include #define n1 2#define tt 0.005#define ad 0.0000001/定义常量/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,float 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;elseif (ia=1) return;t=t/2; ia=1;for (i=0;i+)a2=a1+t; f2=func(xk,a2,s);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,2)*(a0-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 *powell(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=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)0.5*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(n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论