MATLAB:修改了mvnrnd输出

时间:2017-05-18 19:57:47

标签: matlab normal-distribution

我有以下代码创建100x2种群向量,根据函数f评估种群,然后根据获得最低的前10名人口成员创建新种群功能评分:

N = 100;
N_elite = 0.1*N;
dim = 2;

a = 0;
b = 3;
x = (b-a).*rand(N, dim)+a;

f = @(x) x(:,1).^2 + x(:,2).^2;
cost = f(x)
population_cost = [x,cost]

x_sorted = sortrows(population_cost,dim+1)
x_elite = x_sorted(1:N_elite,:)

mu = mean(x_elite(:,[1:dim]))
sigma = cov(x_elite(:,[1:dim]))
x = mvnrnd(mu,sigma,N)

代码使用mvnrnd来创建新的人口。我希望有一个新的填充向量具有以下属性:x(:,1)<x(:,2),即第一列中的每个值必须低于第二列中的每个值。 mvnrnd中是否有属性/选项允许这样做,而不是必须使用for循环来检查每一行并执行x(i,1)>x(i,2)时的切换?

1 个答案:

答案 0 :(得分:0)

您无需为此修改mvnrnd,只需使用sort对第二维(列)x进行排序:

% sort x columns such that x(i,1) < x(i,2) for all i
x = sort(x,2,'ascend');
% check
all(x(:,1) < x(:,2)) % yes