减去满足一定条件的给定数组的值:

时间:2012-05-06 02:23:49

标签: matlab

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

1 个答案:

答案 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。