我有一个要解决的matlab问题。有两个限制我的空间的vectores,x_low和x_high。矩阵pos需要在此空间内具有值,并且矩阵的每列具有由两个矢量给出的不同边界。现在我的问题是randi在两个整数之间给出了valus但我需要更改每列的边界。有另一种方法可以使用randi或不同的matlab函数来做到这一点吗? 我知道有更好的代码可以做到这一点,但我开始使用matlab,我知道这样做,欢迎任何帮助
x_low = [Io_low, Iirr_low, Rp_low, Rs_low, n_low]; % vector of constant values
x_high = [Io_high, Iirr_high, Rp_high, Rs_high, n_high]; % vector of constant values
pos = rand(particles, var);
var = length(x_high);
for i = 1: particles % rows
for k = 1: var %columns
if pos(i, k) < x_low(k) || pos(i, k) > x_high(k) % if the position is out of bounder
pos(i, k) = randi(x_low(k), x_high(k), 1); % fill it with a particle whithin the bounderies
end
end
end
答案 0 :(得分:0)
您可以使用cellfun
。类似的东西:
x_low = [Io_low, Iirr_low, Rp_low, Rs_low, n_low];
x_high = [Io_high, Iirr_high, Rp_high, Rs_high, n_high];
pos = cell2mat(cellfun(@randi, mat2cell([x_low' x_high'], ones(numel(x_low),1), 1), repmat({[particles 1]}, [numel(x_low) 1)])))';
最佳,