• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: C/C++
  • 标签: c;powell;  

资源简介

#include #include #define m 10 /*数组长度m >= 维数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; } /*多维进退法子程序*/ 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++) /*计算初始两试点*/

资源截图

代码片段和文件信息

#include 
#include 
#define m 10              /*数组长度m  >=  维数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;
}

/*多维进退法子程序*/
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)               /*判断搜索方向*/
  {                       /*搜索方向为反向,转身*/
   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;
  }                       /*搜索方向为正向*/
 
 for(i=0;i  x3[i]=x2[i]+h*s[i];
 f3=f(x3);
 while(f3  {                       /*未完成,继续搜索*/
   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)                  /*判断消去区间*/
    {                          /*消去右*/
     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);
    

评论

共有 条评论

相关资源