資源簡(jiǎn)介
#include
#include
#define m 10 /*數(shù)組長(zhǎng)度m >= 維數(shù)n */
float f(float x[]);
void mjtf(int n,float x0[],float h,float s[],float a[],float b[]);
void mhjfgf(int n,float a[],float b[],float flag,float x[]);
void mbwef(int n,float x0[],float h,float flag,float a[],float b[],float x[]);
float f(float x[])
{
float result;
result=(x[0]-2)*(x[0]-2)+(x[1]-3)*(x[1]-3)+(x[2]-4)*(x[2]-4);
return result;
}
/*多維進(jìn)退法子程序*/
void mjtf(int n,float x0[],float h,float s[],float a[],float b[])
{
int i;
float x1[m],x2[m],x3[m],f1,f2,f3;
for(i=0;i<n;i++) /*計(jì)算初始兩試點(diǎn)*/
代碼片段和文件信息
#include?
#include?
#define?m?10??????????????/*數(shù)組長(zhǎng)度m??>=??維數(shù)n????*/
float?f(float?x[]);
void?mjtf(int?nfloat?x0[]float?hfloat?s[]float?a[]float?b[]);
void?mhjfgf(int?nfloat?a[]float?b[]float?flagfloat?x[]);
void?mbwef(int?nfloat?x0[]float?hfloat?flagfloat?a[]float?b[]float?x[]);
float?f(float?x[])
{
?float?result;
?result=(x[0]-2)*(x[0]-2)+(x[1]-3)*(x[1]-3)+(x[2]-4)*(x[2]-4);
?return?result;
}
/*多維進(jìn)退法子程序*/
void?mjtf(int?nfloat?x0[]float?hfloat?s[]float?a[]float?b[])
{
?int?i;
?float?x1[m]x2[m]x3[m]f1f2f3;
?for(i=0;i ??{
???x1[i]=x0[i];
???x2[i]=x0[i]+h*s[i];
??}
?f1=f(x1);
?f2=f(x2);
?if(f2>=f1)???????????????/*判斷搜索方向*/
??{???????????????????????/*搜索方向?yàn)榉聪颍D(zhuǎn)身*/
???h=(-1)*h;
???for(i=0;i ????x3[i]=x1[i];
???f3=f1;
???for(i=0;i ????x1[i]=x2[i];
???f1=f2;
???for(i=0;i ????x2[i]=x3[i];
???f2=f3;
??}???????????????????????/*搜索方向?yàn)檎?/
?
?for(i=0;i ??x3[i]=x2[i]+h*s[i];
?f3=f(x3);
?while(f3 ??{???????????????????????/*未完成,繼續(xù)搜索*/
???h=2*h;
???for(i=0;i ????x1[i]=x2[i];
???f1=f2;
???for(i=0;i ????x2[i]=x3[i];
???f2=f3;
???for(i=0;i ????x3[i]=x2[i]+h*s[i];
???f3=f(x3);
??}???????????????????????/*已完成*/
?for(i=0;i ??{
?if(x1[i] ????{
?????a[i]=x1[i];
?????b[i]=x3[i];
????}
???else
????{
?????a[i]=x3[i];
?????b[i]=x1[i];
????}
??}
}
/*多維黃金分割法子程序*/
void?mhjfgf(int?nfloat?a[]float?b[]float?flagfloat?x[])
{
?int?i;
?float?x1[m]x2[m]f1f2sum;
?for(i=0;i ??x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
?f1=f(x1);
?for(i=0;i ??x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
?f2=f(x2);
?do
??{
???if(f1<=f2)??????????????????/*判斷消去區(qū)間*/
????{??????????????????????????/*消去右*/
?????for(i=0;i ??????b[i]=x2[i];
?????for(i=0;i ??????x2[i]=x1[i];
?????f2=f1;
?????for(i=0;i ??????x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
?????f1=f(x1);
????}
???else
????{??????????????????????????/*消去左*/
?????for(i=0;i ??????a[i]=x1[i];
?????for(i=0;i ??????x1[i]=x2[i];
?????f1=f2;
?????for(i=0;i ??????x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
?????f2=f(x2);
????
- 上一篇:懲罰函數(shù)法
- 下一篇:日歷管理系統(tǒng).cpp
評(píng)論
共有 條評(píng)論