0

对于digraph,我想使用非正整数作为数字节点 ID。 例如;

A = [-1  1  3];
B = [ 3  2  0];
plot(addedge(digraph, A , B))

如果我运行它,我会收到:

使用 digraph/addedge>validateNodeIDs 时出错(第 155 行)

数字节点 ID 必须是正整数。

4

1 回答 1

0

虽然,digraph不允许节点 ID 为非正数,我认为这不是一个好的功能,但我使用以下编程方式使其工作:-

我们要制作有向图的矩阵是:

A = [-1  1  3];
B = [ 3  2  0];

现在,不要使用根据digraph文档ie的方法plot(addedge(digraph, A , B)),而是使用以下代码:

ax=plot(addedge(digraph,(-min([A,B])+1)*ones(size(A))+A,(-min([A,B])+1)*ones(size(B))+B)); 
ax.NodeLabel=strsplit(num2str(min([A,B]):max([A,B])),' ');

此代码适用于每个整数 NodeID,无论是负数、零还是正数。

这个怎么运作:-

我在这里使用的策略是操作节点值,使节点的最小值变为 1。当制作有向图时,再次操作节点值以显示实际值。

脚步:-

  1. min([A,B])A找到矩阵和的最小值B
  2. 它与 相乘,-1结果与 相加+1。即-min([A,B])+1。因此,在上面的示例中,作为 的最小值,[A,B]-1乘以-1which 给出,+1然后1添加到它给出+2
  3. 然后将结果与 相乘ones(size(A))以获得所有相同数字的矩阵,其大小与 相同A。所以,在上面的例子中,结果(-min([A,B])+1)*ones(size(A))[2 2 2]

  4. 现在将结果添加到原始A矩阵中,使 [A,B] 的最小值等于1

  5. 对矩阵 B 进行相同的操作。
  6. 现在,当最终使用操纵的节点 ID 制作有向图时,它的 ID 使用以下方法进行更正:ax.NodeLabel=strsplit(num2str(min([A,B]):max([A,B])),' '); 即,使用从 的最小值[A,B]到最大值的数字数组[A,B]生成,然后使用min([A,B]):max([A,B])将其转换为字符串num2str然后将结果字符串转换为一个单元格数组,它是设置节点标签的要求。

输出:-

输出

于 2016-07-04T20:29:49.560 回答