鲍威尔法c++源程序.pdf

#include iostream.h #include stdio.h #include stdlib.h #include math.h #include malloc.h #include conio.h #define n1 2 #define tt 0.005 #define ad 0.0000001 //定义常量 //tt  初始迭代步长 //ad  收敛精度 float ia; float fny(float *x) { float f; f=10*pow((x[0]+x[1]-5),2)+pow((x[0]-x[1]),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++) x1[i]=x[i]+a*s[i]; 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 a[3],float f[3],float *xk,float *s) { float t=tt; float a1,f1; a[0]=0; f[0]=func(xk,a[0],s); for (int i=0;;i++) { a[1]=a[0]+t; f[1]=func(xk,a[1],s); if (f[1]f[0]) break; if (fabs(f[1]-f[0])=ad) { t=-t; a[0]=a[1]; f[0]=f[1]; } else{ if (ia==1) return; t=t/2; ia=1; } } for (i=0;;i++) { a[2]=a[1]+t; f[2]=func(xk,a[2],s); if (f[2]f[1]) break; t=2*t; a[0]=a[1]; f[0]=f[1]; a[1]=a[2]; f[1]=f[2]; } if (a[0]a[2]) { a1=a[0]; f1=f[0]; a[0]=a[2]; f[0]=f[2]; a[2]=a1; f[2]=f1; } return; } //second insert float lagrange(float *xk,float *ft,float *s) { float a[3],f[3]; float b,c,d,aa; finding (a,f,xk,s); for (int i=0;;i++) { if (ia==1) { aa=a[1]; *ft=f[1]; break; } d=(pow(a[0],2)-pow(a[2],2))*(a[0]-a[1])-(pow(a[0],2)-pow(a[1],

文档评论(0)

1亿VIP精品文档

相关文档