【问题标题】:generating many random matrices in matlab在matlab中生成许多随机矩阵
【发布时间】:2020-04-20 17:37:16
【问题描述】:

我想使用 [0,1] 中的 matlab 生成 100 个不同的 5 by 5 随机矩阵,具有以下属性:假设所需的矩阵是 A=[a_{ij}],条件为 a_{ih}+a_{hj}-a_{ij}-0.5=0(矩阵 A 是所谓的模糊偏好矩阵(即a_{ji}=1-a_{ij} for all i,j),也是一致的)。但是,我坚持编写matlab代码。有人可以帮我吗?谢谢!

此类矩阵的示例,但不一致:

A=[.5 .5 .5 .8155 .5 .3423;...
   .5 .5 .6577 .8155 .5 .3423;...
   .5 .3423 .5 .88662 .75 .3423;...
   .1845 .8145 .1338 .5 .25 .25;...
   .5 .5 .25 .75 .5 .25;...
   .6577 .6577 .6577 .75 .75 .5]

3 by 3一致模糊偏好矩阵示例:

B=[.5 .2 .5;...
   .8 .5 .8;...
   .5 .2 .5]

【问题讨论】:

  • 所以hij 都可以在[1,5] 中有任何整数值?你能举一个有效矩阵的例子吗?我不太明白这如何适用于任何h
  • @Harry 我在上面放了一个矩阵。 a_{ih}+a_{hj}-a_{ij}-0.5=0 表示 A 是一致的。
  • 你的例子与描述不符:>> i=3;h=4;j=5; >> A(i,h)+A(h,j)-A(i,j)-.5 ans = -0.11338结果应该是0?
  • 我很确定,对于 ijh 的所有组合,唯一满足您条件的矩阵是所有条目为 0.5 的矩阵。
  • @Daniel 你是对的。这是一个不一致矩阵的例子。谢谢。

标签: matlab matrix


【解决方案1】:

要解决这个问题,我们需要找到线性方程组的解。未知数是矩阵条目,因此对于 NxN 矩阵将有 N^2 个未知数。因为ijh 的每个组合都有一个等式,所以有 N^3 个等式。这是一个超定系统,但是是一致的,很容易看出所有项为 0.5 的常数矩阵是一个解。

方程组可以写成矩阵形式,矩阵M定义如下:

N = 5; % size of resulting matrix
M = zeros(N^3,N^2); % ar = size of matrix A

t = 0;
for i = 1:N
    for j = 1:N
        for h = 1:N
            t = t+1;
            M(t,(i-1)*N+h) = M(t,(i-1)*N+h)+1;
            M(t,(h-1)*N+j) = M(t,(h-1)*N+j)+1;
            M(t,(i-1)*N+j) = M(t,(i-1)*N+j)-1;
        end
    end
end

右边是 N^3 个 0.5 的向量。矩阵的秩似乎是N^2-N+1(我认为这是因为结果的主对角线必须用0.5填充,所以实际上只有N^2-N个未知数)。增强系统的秩是相同的,因此我们确实有无限数量的解决方案,跨越 N-1 维空间。

所以我们可以将解作为 0.5 的向量加上矩阵的零空间的任何元素的和。

a = 0.5*ones(N^2,1) % solution to non-homogenous equation
nullspace = null(M) % columns form a basis for the null space

所以我们现在可以通过将零空间的基向量的倍数添加到a 来生成任意数量的解决方案,

s = a+sum(rand(1,N-1).*nullspace,2) % always a solution

最后一个问题是从这个空空间统一采样,同时要求所有条目都保持在[0,1]内。

我认为甚至很难说这个空间上的均匀采样是什么,但至少我可以通过以下方式生成随机元素:

% first check the size of the largest element
% we can't addd/subtract more than 0.5to the homogeneous solution
for p = 1:size(nullspace,2)
    mn(p) = 0.5/max(abs(nullspace(:,p)));
end

c = 0;
mat = {};
while c<5 % generate 5 matrices
    % a solution is the homogeneous part 0.5*ones(N) plus
    % some element of the nullspace sum(rand(1,size(n,2)).*mn.* nullspace,2)
    % reshaped to be a square matrix
    newM = 0.5*ones(N)+reshape(sum((2*rand(1,size(nullspace,2))-1).*mn.* nullspace,2),N,N)

    % make sure the entries are all in [0,1]
    if all(newM(:)>=0) && all(newM(:)<=1)
        c = c+1;
        mat{c} = newM;
    end
end
% mat is a cell array of 5 matrices satisfying the condition

我对结果矩阵的分布不太了解。

【讨论】:

  • @DavidThanks。但是,仍然 newM 返回负值 (out of [0,1]) 。我仍然对代码不满意。
  • NewM 不是最终结果,最终结果在mat 中(越界检查后)。
  • 现在当我在窗口命令上写 mat{:} 时它似乎工作了。非常感谢。
  • 请注意,最终的矩阵虽然是随机的,但可能不是均匀分布的(因为非对角线条目并不均匀)。我做了一些测试,这些值似乎分布得很好,但我不知道任何精确或量化的东西。
猜你喜欢
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2013-02-08
  • 2012-04-10
  • 2013-08-24
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多