由图可知由程序求出来的极值解为x*=x2=(4 2)T函数值为-8,符合要求。与精确值相同,可见DFP算法在无约束优化方法中的优越性。
实验四 鲍威尔法
一、实验目的
1、掌握无约束优化问题鲍威尔算法的数值求解思路; 2、训练分析鲍威尔算法作为共轭方向法的特点; 3、通过运用鲍威尔算法求解实际无约束优化问题的意义; 4、熟悉应用C语言求解无约束最优化问题的编程方法.
二、实验内容
编写鲍威尔法计算程序,并计算书上例4-6。
三、实验原理
四、程序编制
#include
double objf(double x[]) { }
void jtf(double x0[ ],double h0,double s[ ],int n,double a[ ],double b[ ]) {
int i; double ff;
ff=250+11*x[0]*x[0]+11*x[1]*x[1]+18*x[0]*x[1]-100*x[0]-100*x[1]; return(ff);
double *x[3],h,f1,f2,f3; for (i=0;i<3;i++) {
} {
*(x[0]+i)=x0[i]; f1=objf(x[0]); h=h0;
for(i=0;i x[i]=(double *)malloc (n*sizeof(double)); } for(i=0;i *(x[1]+i)=*(x[0]+i)+h*s[i]; f2=objf(x[1]); } if(f2>=f1) { { } f3=f1; for(i=0;i *(x[0]+i)= *(x[1]+i); *(x[1]+i)= *(x[2]+i); *(x[2]+i)=*(x[0]+i); h= -h0; for (i=0;i f1=f2; } for(;;) { h=2. *h; f2=f3; for(i=0;i *(x[2]+i)=* (x[1]+i) +h*s[i]; f3= objf(x[2]); if(f2 break; else { for(i=0;i if(h<0. ) for(i=0;i { a[i]=*(x[2]+i); b[i]=*(x[0]+i); } else for(i=0;i a[i]=*(x[0]+i); b[i]=*(x[2]+i); } for(i=0;i<3;i++) free(x[i]);