我将x设置为包含多个变量的数组,这些变量是评估函数的输入。每
 变量具有在xBoundary[index][min,max]中定义的限制。每个可能的变量值的步长为xStep[]

例如由于x[0]010xBoundary[0][0]=0xBoundary[0][1]=10之间。 xStep[0]=0.5,则x可能具有值0,0.5,1,1.5,.....9.5,10
如何获得x的所有可能值?我认为这是一个n维数组,其中n = length of x

以下是我的代码。这是无限循环。

#include <stdio.h>

#define nx_SIZE 2                   // dimension of x

double x[nx_SIZE] = {0};                     // Initialize x
double xBoundary[nx_SIZE][2]={{0,5},{2,5}};  //Contains lower and upper boundary of x.
                                             //xBoundary[][0]=min
                                             //xBoundary[][1]=max
double xStep[nx_SIZE]={1};                   //Step size for variable in x.

void iterate(int dimension) {


  int i = dimension - 1;
  double currentX, upperLimit;

  if (i == -1){

    printf("x: %f %f \n", x[0], x[1]);
    //evaluate();

  } else {

    currentX = xBoundary[i][0];
    upperLimit = xBoundary[i][1];

    while (currentX < upperLimit){
      x[i] = currentX;
      iterate(i);
      currentX = currentX + xStep[i];
    } //End of while

  }
}

int main (){

  iterate(nx_SIZE);

  return 1;
}

最佳答案

根据您的要求,这只是nxSize次的示例循环。尝试下面的代码(我没有对其进行测试,您可能需要对其进行一些更新)

int i;
for (i = 0; i < nx_SIZE; i++) {
    int v;
    for (v = xBoundary[i][0]; v <= xBoundary[i][1]; v += xStep[i]) {
        printf("%f", v);
    }
    printf("\n");
}


上面的代码基于nx_SIZE = 2(在您的示例中),如果nxSIZE是另一个值,则应正确初始化xBoundary使其生效。

07-24 19:24