我设置x是包含几个变量的数组,它们是评估函数的输入。每
变量具有xBoundary[index][min,max]
中定义的限制。每个可能的变量值都具有步长xStep[]
。
e.g。自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;
}
答案 0 :(得分:0)
根据您的要求,这只是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以使其工作。
答案 1 :(得分:0)
我发现问题是由double xStep[nx_SIZE]={1};
引起的。这仅将xStep[0]
值分配给1
,其余为0
。零增量导致无限循环。
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,1}; //Step size for variable in x.
int counter = 0; //Number of possible x
void iterate(int dimension) {
int i = dimension - 1;
double currentX;
if (i == -1){
printf("x: %f %f \n", x[0], x[1]);
counter++;
} else {
for (currentX = xBoundary[i][0]; currentX <= xBoundary[i][1]; currentX += xStep[i]) {
x[i] = currentX;
iterate(i);
}
} //End of if
} // End of iterate
int main (){
iterate(nx_SIZE);
printf("counter: %d", counter);
getchar();
return 1;
}