由图可知最优解为4.711130,函数值为-0.999999.这和精确最优值-1已十分接近。可见二次插值法效果很好。
实验三DFP变尺度法
一、实验目的
1、掌握无约束优化问题DFP算法的数值求解思路;
2、训练分析DFP算法的运算存储量及收敛速度的能力,了解算法的优缺点; 3、通过运用DFP算法求解实际无约束优化问题的意义; 4、熟悉应用C语言求解无约束最优化问题的编程方法.
二、实验内容
编写DFP计算程序,并计算书上例4-5
三、实验原理
四、程序编制
#include
double fny(double *x) { }
double * iterate(double *x,double a,double *s) {
double *x1; int i;
double x1=x[0],x2=x[1]; double f;
f=x1*x1+2*x2*x2-4*x1-2*x1*x2; return f;
}
x1=(double *)malloc(n*sizeof(double)); for(i=0;i x1[i]=x[i]+a*s[i]; } return x1; double func(double *x,double a,double *s) { } void finding(double a[3],double f[3],double *xk,double *s) { double t=tt; int i; double a1,f1; a[0]=0;f[0]=func(xk,a[0],s); for(i=0;;i++) { double *x1; double f; x1=iterate(x,a,s); f=fny(x1); return f; a[1]=a[0]+t; f[1]=func(xk,a[1],s); if(f[1] 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])
机械优化设计实验报告 - 图文



