特定权重分配的Matlab图论

时间:2012-11-02 15:55:50

标签: matlab graph-theory weighted

我想为边缘分配权重,使得(来自节点的权重)和它自己的权重之和加到一。

这是我试过的:

    clear all;
    close all;
    clc;
    %% building the graph
    g=graph;
    for k=1:6

     add(g,k,k+1)
     add(g,1,4)
     add(g,5,7)
    end
    %%assigining the statuses 0 and 1
    %label(g,1,'0');
    %label(g,2,'1');
    %label(g,3,'1');
    %label(g,4,'1');
    %label(g,5,'1');
    %label(g,6,'0');
    %label(g,7,'0');
    figure,ldraw(g);
    %x=rand(1,1);
    %y=rand(1,1)
    %% get line info from the figure
    lineH = findobj(gca, 'type', 'line');
    xData = cell2mat(get(lineH, 'xdata')); % get x-data
    yData = cell2mat(get(lineH, 'ydata')); % get y-data

    %% if an edge is between (x1,y1)<->(x2,y2), place a label at
    %%the center of the line, i.e. (x1+x2)/2 (y1+y2)/2 etc
    labelposx=mean(xData');
    labelposy=mean(yData');

    %% generate some random weights vectori.e. the probability matrix
    weights=rand(1,1,length(labelposx)) 

    % plot the weights on top of the figure
    text(labelposx,labelposy,mat2cell(weights), 'HorizontalAlignment','center',... 
                                        'BackgroundColor',[.7 .9 .7]);
    %%Transition matrix or markov matrix
    % Transition=[0 (1,2) 0 (1,4) 0 0 0;
    %    (2,1) 0 (2,3) 0 0 0 0;
    %    0 (3,2) 0 (3,4) 0 0 0;
    %    0 0 (4,3) 0 (4,5) 0 0;
    %    0 0 0 (5,4) 0 (5,6) (5,7);
    %    0 0 0 0 (6,5) 0 (6,7);
    %    0 0 0 0 (7,5) (7,6) 0];

    Transition= [0 weights(:,:,8) 0 weights(:,:,6) 0 0 0;
    weights(:,:,8) 0 weights(:,:,7) 0 0 0 0;
    0 weights(:,:,7) 0 weights(:,:,5) 0 0 0;
    weights(:,:,6) 0 weights(:,:,5) 0 weights(:,:,4) 0 0;
    0 0 0 weights(:,:,4) 0 weights(:,:,3) weights(:,:,2);
    0 0 0 0 weights(:,:,3) 0 weights(:,:,1);
    0 0 0 0 weights(:,:,2) weights(:,:,1) 0]
    %set_matrix
    %%dij-- Probability matrix
    sparse(Transition);
    d=[weights(:,:,8);weights(:,:,7);weights(:,:,5);weights(:,:,4);
     weights(:,:,3);weights(:,:,1);weights(:,:,1)]
    %%Si[k]-- matrix of the statuses(labels)
    %S=[0 1 1 1 1 0 0]

Graph

例如:来自节点4的权重加上其自身的权重应该等于1

1 个答案:

答案 0 :(得分:0)

查看这个不错的random vectors generator with fixed sum FEX文件。我想这会回答你的问题。 另请参阅此SO链接Non biased return a list of n random positive numbers (>=0) so that their sum == total_sum