在mata中,我用下述代码生成了一个1行2列的随机行向量。我想要验证它是否在设置的解空间内,于是用if-else语句进行判断。其中x_lb是下界,x_ub是上界。注意在(x_new > x_lb)比较中,是这两个行向量对应位置的每一个值都满足>关系才返回1 。因而在这种情况下,if(x_new > x_lb返回1时),我无需做任何修改,而在else之下才需要修改。请问为什么会报错“'if' found where almost anything else expected“呢?
代码如下:
mata:
T = 1000
x_lb = J(1,2,-15) //(解空间的下界)
x_ub = J(1,2,25) //(解空间的上界)
o = uniform(1,1) //(生成一个随机数,注意mata中1行1列的矩阵是标量)
randomm = uniform(1,2) //(生成一个随机行向量,用于生成初始解)
a = randomm*randomm' //求(a_1^2+a_2^2+a_3^2+···)
z = randomm/sqrt(a) //(用于生成初始解)
x00 = x_lb + (x_ub - x_lb) * o //(用于生成初始解)
x_new = x00 + T*z //(生成初始解)
*---------------------------------------------------*
///比较初始解是否位于解空间下界之上 if(x_new > x_lb){
x_new = x_new
}
else {
x_new = o*x_lb + (1-o)*x00
}
*---------------------------------------------------*
///比较初始解是否位于解空间上界之下 if(x_new < x_ub){
x_new = x_new
}
else {
x_new = o*x_ub + (1-o)*x00
}