a = [0.04 0.07 0.09 0.13 0.14 0.17 0.21 0.24
0.14 0.06 0.08 0.15 0.11 0.13 0.10 0.11
0.13 0.13 0.11 0.15 0.10 0.07 0.14 0.11
0.12 0.04 0.18 0.13 0.19 0.16 0.14 0.11
0.18 0.06 0.22 0.15 0.14 0.06 0.08 0.09
0.15 0.04 0.08 0.06 0.13 0.05 0.10 0.09]
C = cov(a)
alpha = 0.12
beta = (.20-.12)
for i = 1 : 6
for j = 1 : 8
f(i,j) = alpha + beta*rand(1)
end
% f(i,1)=f(i,1)/sum;f(i,2)=f(i,2)/sum;f(i,3)=f(i,3)/sum;
end
total = sum(f,2)
while total(i,1) > .999 & total (i,1) <.977
for i = 1:6
for i = 1:8
f(i,j) = f(i,j) - .0001
end
end
end
我一直试图从数组f
的每个元素中减去.0001,这样数组元素的每个结果元素的值应该在0.12和0.20之间,并且行和(行total
在数组f
的代码中)应该几乎等于1.几乎我的意思是总和的值(代码中的变量total
)应该小于(<
)0.999并且大于(>
)。977
答案 0 :(得分:1)
lb = 0.12;
ub = 0.20;
sensitivity = 0.02;
inc = 0.001;
f = lb + (ub-lb).*rand([6,8]); % See Note Below
total = sum(f,2);
f = f./repmat(total + sensitivity,[1,8]);
while(any(any(g<lb)) || any(any(g>ub)) || any(total>0.99) || any(total<0.97))
f(f<lb) = lb + inc;
f(f>ub) = ub - inc;
total = sum(g,2);
f = f./repmat(total + sensitivity,[1,8]);
inc = inc + 0.001;
end
注意:一般来说,当你可以进行矩阵操作时,在matlab中进行嵌套的for循环是不好的。所以这一行替换了你必须创建f或从中减少的嵌套for循环。
此代码应该为您提供一个矩阵f,其中(1)的值介于0.12(lb)和0.20(ub)之间,并且行总和大约为0.98。