- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
专业课程实践论文DFP法
2011-2012(1)专业课程实践论文
DFP法
张成,,数学07.1
一、算法理论
设校正矩阵的形式为
, (1)
其中、为待定参数,,为待定向量。这种形式显然是对称的,于是再利用拟牛顿方程来确定,,,。把(1)代入拟牛顿方程有
。 (2)
简单的做法是取
,
, (3)
就能使(2)式成立。注意到和为数,因此为使(3)成立的简单做法是取
, ,
,,
因此DFP算法中的公式为
。 (4)
DFP算法的步骤为
1.任取和(一般取),,;
2.若,则停;否则令
,
由线有哪些信誉好的足球投注网站求得;
3.计算,,
,
;
4.,回2。
二、算法框图
三、算法程序
给定一个函数,提取其函数系数,写入main函数系数矩阵中。即可求出最优解与最优值。本题函数为
#includemath.h
#includestdio.h
# define eps 0.1
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
{
double Dg[2],Dx[2],temp[2],temp_h[4];
Dg[0] = temp_g[0] - grads_x[0];//求解delta g的值
Dg[1] = temp_g[1] - grads_x[1];
Dx[0] = temp_x[0] - x[0];//求解delta x的值
Dx[1] = temp_x[1] - x[1];
temp_h[0] = h[0];//将H的初值赋予辅助矩阵
temp_h[1] = h[1];
temp_h[2] = h[2];
temp_h[3] = h[3];
temp[0] = Dx[0] * Dg[0] + Dx[1] * Dg[1];
temp[1] = (Dg[0] * h[0] + Dg[1] * h[2]) * Dg[0]+ (Dg[0] * h[1] + Dg[1] * h[3]) * Dg[1]; h[0] =temp_h[0] + pow(Dx[0],2) / temp[0]- pow((temp_h[0] * Dg[0] + temp_h[1] * Dg[1]),2) / temp[1];
h[1] =temp_h[1] + (Dx[0] * Dx[1]) / temp[0]- (temp_h[0] * Dg[0] + temp_h[1] * Dg[1]) * (temp_h[2] * Dg[0]+ temp_h[3] * Dg[1]) / temp[1];
h[2] =temp_h[2] + (Dx[0] * Dx[1]) / temp[0]
文档评论(0)