我将x设置为包含多个变量的数组,这些变量是评估函数的输入。每
变量具有在xBoundary[index][min,max]
中定义的限制。每个可能的变量值的步长为xStep[]
。
例如由于x[0]
和0
,10
在xBoundary[0][0]=0
和xBoundary[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使其生效。