最优化实验之变尺度法
double f (double coe[], double x[])//返回函数值待求函数的函数值
{
return coe[0]*pow(x[0],2)+coe[1]*pow(x[1],2)+coe[2]*x[0]*x[1]+coe[3]*x[0]+coe[4]*x[1]+coe[5];
}
void grads (double coe[], double x[],double grads_x[]) //二维函数梯度函数定义
{
grads_x[0] = 2*coe[0]*x[0]+coe[2]*x[1]+coe[3];
grads_x[1] = 2*coe[1]*x[1]+coe[2]*x[0]+coe[4];
}
void SD(double h[],double grads_x[],double s[])//定义搜索方向向量函数
{
s[0]=-(h[0]*grads_x[0]+h[1]*grads_x[1]);
s[1]=-(h[2]*grads_x[0]+h[3]*grads_x[1]);
}
double findlambda (double coe[], double x[], double s[]) //求解lambda
{
return(-(2*coe[0]*x[0]*s[0]+2*coe[1]*x[1]*s[1]+coe[2]*x[0]*s[1]+coe[2]*x[1]*s[0]+coe[3]*s[0]+coe[4]*s[1])/(2*coe[0]*s[0]*s[0]+2*coe[1]*s[1]*s[1]+2*coe[2]*s[0]*s[1]));
}
void H (double h[],double x[],double temp_x[],double grads_x[],double temp_g[] )//求解变化矩阵H
2023-02-07 09:12:19
3KB
变尺度法
1