MATLAB函数替换randi生成矩阵

时间:2015-05-10 20:10:30

标签: arrays matlab function matrix random

我有一个要解决的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

1 个答案:

答案 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)])))';

最佳,