其实可以不用判断,只需要颠倒下顺序就可以了:
for g=1:G
BO(1:G,g,i)=-iEs(1:G,g,i)-x(g)/keff_old*ivEf(1:G,i);
%或者不对,冒号用法老混淆,大致这意思
B0(g,g,i)=iEr0(g,i)-x(g)/keff_old*ivEf(g,i);
end
就是说先给包含B0(g,g,i)在内的所有BO赋值,再将第g个替换掉
非要用判断的话,可以这样:
for g=1:G
B0(g,g,i)=iEr0(g,i)-x(g)/keff_old*ivEf(g,i);
for gg=1:G
if gg~=g
BO(gg,g,i)=-iEs(gg,g,i)-x(g)/keff_old*ivEf(gg,i);
end
end
end
或者用while,就比较麻烦了,不推荐
for g=1:G
B0(g,g,i)=iEr0(g,i)-x(g)/keff_old*ivEf(g,i);
gg=1;
while gg
gg=gg+1;
continue
else
BO(gg,g,i)=-iEs(gg,g,i)-x(g)/keff_old*ivEf(gg,i);
gg=gg+1
end
end
end
之所以不能用你那样表示的原因是,gg=1:g是赋值语句,而不是判断的逻辑语句
gg==g才是逻辑数
base=min(x);base2=max(x);
bei=max(x)-min(x);
bei*rand(1)+base;
生成[3,8]之间变量。
用其它分布函数的话 还可以生成其它分布函数的数。
第二步
x=(base2,x/base2);
for gg=1:G
if gg~=g
BO(gg,g,i)...
end
end
for循环的使用不同于C语言当中的条件
MATLAB中用单“&”表示并,单“|”表示或。