如何在有向图函数中使用非正整数作为数字节点ID?

时间:2016-05-01 11:17:34

标签: matlab digraphs

对于 digraph ,我想将非正整数用作 数字节点ID。 e.g;

java.lang.IllegalStateException: Request.getPart is called without multipart configuration. Either add a @MultipartConfig to the servlet, or a multipart-config element to web.xml

如果我这样做,我会收到:

  

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

     

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

1 个答案:

答案 0 :(得分:0)

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

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

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

现在,请使用以下代码,而不是使用digraph's documentation的方法,而不是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])找到矩阵AB的最小值。
  2. 它与-1相乘,结果与+1相加。即-min([A,B])+1。因此,在上面的示例中,由于[A,B]的最小值为-1,因此会将-1乘以+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转换为字符串resulting string is then converted into a cell array这是设置节点标签的要求。
  7. 输出: -

    Output