【问题标题】:Create a relation matrix from a sequence (Matlab)从序列创建关系矩阵(Matlab)
【发布时间】:2015-12-21 01:44:21
【问题描述】:

我有一个序列 S:

  S= 'ABCD' % which means A<B<C<D

我想将 S 转换为必须满足这些条件的矩阵 M[i,j]:

   M[i,j] , M[j,i] are random
   M[i,i] =0.5
   M[i,j] + M[j,i] = 1
   M[i,j] < M[j,i] % For example: if A<B then M[A,B] < M[B,A]

例如:如果我们有 S = 'ABCD',那么 M 矩阵将如下所示:

      A      B    C    D
   A  o.5  0.25  0.2   0.1
   B  0.75 0.5   0.35  0.15
   C  0.8  0.65  0.5   0.4
   D  0.9  0.85  0.6   0.5

如何根据给定的序列创建上述矩阵?

【问题讨论】:

  • 你有什么问题?
  • 这是一个相当不受约束的问题。可能的答案不止一种。
  • 我根本看不到S 是如何使用的。您是否有任何代码尝试过(即使它不能正常工作)?
  • S 是 {A,B,C,D} 的序列(表示 A

标签: matlab matrix random sequence


【解决方案1】:

从你的问题看来你想要

  • 用均匀分布在区间 (0,0.5) 上的随机条目填充矩阵的下部(以便满足您问题中的条件 4);
  • 然后根据条件 3 计算上半部分;和
  • 对角线由条件 2 确定。

你可以这样做:

n = 4; %// size
M = NaN(n); %// preallocate
M(1:n+1:end) = 0.5; %// fill diagonal
ind_lower = tril(true(n), -1); %// logical index for lower part
M(ind_lower) = 0.5*rand(n*(n-1)/2, 1); %// fill lower part
M_aux = NaN(n); %// auxiliary variable to fill upper part
M_aux(ind_lower) = 1-M(ind_lower).';
M_aux = M_aux.';
M(ind_lower.') = M_aux(ind_lower.'); %// fill upper part

示例结果:

M =
    0.5000    0.5214    0.7573    0.5999
    0.4786    0.5000    0.9291    0.7891
    0.2427    0.0709    0.5000    0.5421
    0.4001    0.2109    0.4579    0.5000

【讨论】:

  • 我想你把上下三角形部分互换了,但为什么M(1,4)+M(4,1) != 1?你的代码说它应该。 :D
  • 还有M(3,2), M(2,3)。对角线好像有问题。
  • @beaker 谢谢!现在修好了。问题是上半部分的填充顺序
  • @beaker 更正我的答案后,我看到了你的答案,它使用了类似的方法,只是更简单(+1)
  • 还有一个问题:当我有一个包含许多序列的单元格数组时: Cell= { 'ABCD' , 'BDEG' , 'ABDF' } 。如何生成与上述具有相同属性的矩阵 M1 、 M2 、 M3 ?
【解决方案2】:

这是另一种类似的方法:

n = 4;
M = tril(rand(n)*0.5, -1);
P = triu(1-M.', 1);
M = M + P + eye(n)*0.5;

结果:

M =

   0.500000   0.987433   0.711005   0.944642
   0.012567   0.500000   0.782633   0.902365
   0.288995   0.217367   0.500000   0.783708
   0.055358   0.097635   0.216292   0.500000

【讨论】:

  • 但是,基于以上条件,S='ABCD'的矩阵与S='BADC'生成的矩阵不同。如何获得正确序列的正确矩阵?
  • @kgk 我仍然不知道这些序列是什么意思。它们与生成的矩阵有什么关系? 如何 矩阵应该是不同的。一遍又一遍地重复“base [sic] on the above conditions”对我们毫无帮助。
  • 我上面提到的序列是字符串'ABCD'或'BADC'。感谢您的评论!
  • @kgk 这没有给我关于这些序列意思的新信息。
  • @kgk 如果您告诉我们A, B, C and D 对应的内容(它们是行还是列,两者都不是?),然后使用字符串 ABCD 的相同数据,然后是其他一些字符串,它们准确地告诉我们每个新矩阵发生了什么变化以及原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多