0

I am working in a research laboratory and my tutor asked me to draw the langerman statistic function with GNUPlot.

Hi gave me this code, that should be able to generate the cordinate.

#include "stdafx.h"
#include "fitness.h"
#include "function.h"
double temp1(double d1, double d0);
double temp2(double d0);
//double RozenBrock(double *x, int n);
double RozenBrock(vector<GeneType> a, int n);
double langerman(vector<GeneType> x,int nn);

double Share_Com_Fitness(GANode<GeneType> Node)
{
 double r=0.0;

 /*for(int i=0;i!=Node.Show_Gene_Num();i++)
 {

 }*/
 r=RozenBrock(Node.gene,Node.Show_Gene_Num());

 //r=langerman(Node.gene,Node.Show_Gene_Num());

 return r;
}

//RozenBrock 函数
double temp1(double d1, double d0)
{
   return (d1 - d0*d0);
}

double temp2(double d0)
{
     return (1. - d0);
}

//double RozenBrock(double *x, int n)
double RozenBrock(vector<GeneType> x, int n)
{ 
   double t0, tt, t1, d=0;
   int i;

   t0=x[0];
   for ( i=1; i < n; i++) 
   {
      t1 = x[i];
      tt = temp2(t0);
      d += tt*tt;
      tt = temp1(t1,t0);
      d += 100*tt*tt;

      t0 = t1;
   }

   return(-d);
}
//end RozenBrock 函数

//Langerman  函数
double a[30][10] = {
 {9.681, 0.667, 4.783, 9.095, 3.517, 9.325, 6.544, 0.211, 5.122, 2.020},
 {9.400, 2.041, 3.788, 7.931, 2.882, 2.672, 3.568, 1.284, 7.033, 7.374},
 {8.025, 9.152, 5.114, 7.621, 4.564, 4.711, 2.996, 6.126, 0.734, 4.982},
 {2.196, 0.415, 5.649, 6.979, 9.510, 9.166, 6.304, 6.054, 9.377, 1.426},
 {8.074, 8.777, 3.467, 1.863, 6.708, 6.349, 4.534, 0.276, 7.633, 1.567},
 {7.650, 5.658, 0.720, 2.764, 3.278, 5.283, 7.474, 6.274, 1.409, 8.208},
 {1.256, 3.605, 8.623, 6.905, 0.584, 8.133, 6.071, 6.888, 4.187, 5.448},
 {8.314, 2.261, 4.224, 1.781, 4.124, 0.932, 8.129, 8.658, 1.208, 5.762},
 {0.226, 8.858, 1.420, 0.945, 1.622, 4.698, 6.228, 9.096, 0.972, 7.637},
 {7.305, 2.228, 1.242, 5.928, 9.133, 1.826, 4.060, 5.204, 8.713, 8.247},
 {0.652, 7.027, 0.508, 4.876, 8.807, 4.632, 5.808, 6.937, 3.291, 7.016},
 {2.699, 3.516, 5.874, 4.119, 4.461, 7.496, 8.817, 0.690, 6.593, 9.789},
 {8.327, 3.897, 2.017, 9.570, 9.825, 1.150, 1.395, 3.885, 6.354, 0.109},
 {2.132, 7.006, 7.136, 2.641, 1.882, 5.943, 7.273, 7.691, 2.880, 0.564},
 {4.707, 5.579, 4.080, 0.581, 9.698, 8.542, 8.077, 8.515, 9.231, 4.670},
 {8.304, 7.559, 8.567, 0.322, 7.128, 8.392, 1.472, 8.524, 2.277, 7.826},
 {8.632, 4.409, 4.832, 5.768, 7.050, 6.715, 1.711, 4.323, 4.405, 4.591},
 {4.887, 9.112, 0.170, 8.967, 9.693, 9.867, 7.508, 7.770, 8.382, 6.740},
 {2.440, 6.686, 4.299, 1.007, 7.008, 1.427, 9.398, 8.480, 9.950, 1.675},
 {6.306, 8.583, 6.084, 1.138, 4.350, 3.134, 7.853, 6.061, 7.457, 2.258},
 {0.652, 2.343, 1.370, 0.821, 1.310, 1.063, 0.689, 8.819, 8.833, 9.070},
 {5.558, 1.272, 5.756, 9.857, 2.279, 2.764, 1.284, 1.677, 1.244, 1.234},
 {3.352, 7.549, 9.817, 9.437, 8.687, 4.167, 2.570, 6.540, 0.228, 0.027},
 {8.798, 0.880, 2.370, 0.168, 1.701, 3.680, 1.231, 2.390, 2.499, 0.064},
 {1.460, 8.057, 1.336, 7.217, 7.914, 3.615, 9.981, 9.198, 5.292, 1.224},
 {0.432, 8.645, 8.774, 0.249, 8.081, 7.461, 4.416, 0.652, 4.002, 4.644},
 {0.679, 2.800, 5.523, 3.049, 2.968, 7.225, 6.730, 4.199, 9.614, 9.229},
 {4.263, 1.074, 7.286, 5.599, 8.291, 5.200, 9.214, 8.272, 4.398, 4.506},
 {9.496, 4.830, 3.150, 8.270, 5.079, 1.231, 5.731, 9.494, 1.883, 9.732},
 {4.138, 2.562, 2.532, 9.661, 5.611, 5.500, 6.886, 2.341, 9.699, 6.500}};


double c[] = {
        0.806,
 0.517,
 0.1,
 0.908,
 0.965,
 0.669,
 0.524,
 0.902,
 0.531,
 0.876,
 0.462,
 0.491,
 0.463,
 0.714,
 0.352,
 0.869,
 0.813,
 0.811,
 0.828,
 0.964,
 0.789,
 0.360,
 0.369,
 0.992,
 0.332,
 0.817,
 0.632,
 0.883,
 0.608,
 0.326};


//double RozenBrock(vector<GeneType> x, int n)
//double langerman(double x[],int nn)
double langerman(vector<GeneType> x,int nn)  /* Langerman's function */
{

     int  i,j;

     double   Sum,d,
                 PI,
                 dist,
   temp1,
   temp2,
   temp20,temp21 ;


 PI  = 3.141592653; 
 Sum = 0.0;




 for ( i = 0; i < 5; i++ )
 { 
  dist = 0.0;
  for ( j= 0; j<nn; j++ )
    {
       d =x[j] - a[i][j];
   temp1=(d*d);
       dist =dist +temp1;
   //printf("%1f*%1f|",x[j],a[i][j]);
    }

      //dist = SqrDst(x, a[i], nn);
  temp20=exp(-dist/PI);
  temp21=cos( PI * dist ) ;
      temp2=c[i] * (temp20*temp21);
  //printf("\n dist=%1f ++ %1f,%1f,%1f \n",dist,temp20,temp21,temp2);

      Sum -= temp2;
  //printf("\nSum=*%1f**",-Sum);

 }
 //printf("\n E Sum=*%1f**",Sum);
     return (-(double)(Sum/5.0));
}

//end Langerman  函数

http://www.siteduzero.com/uploads/fr/files/192001_193000/192917.png

Do you have any idea. Of how I could do that ? I was thinking maybe by using GNU/Octave to generate the coordinate and startploting from octave with GNUPlot.

Best regards,

Natim

1 Answer 1

3

Run the code for a range of X values and dump them (plus the function result) into a file. See the gnuplot documentation how that file must be formatted and how to plot it.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.