Matlab - Dibujar grafos

   
Vista:

Dibujar grafos

Publicado por Yrina (3 intervenciones) el 13/07/2015 04:27:46
Hola ,

Tengo la siguiente duda:

Dibujar grafos a través de la matriz de adyacencia, es decir tengo la matriz:

C=[0 0 0 -1
1 0 0 0
0 -1 0 1
-1 0 1 0]

y quiero que el programa me de como resultado:

ARCHIVO ADJUNTO.

Tengo pensado lo sgte:

n=size(C,1)

1. Agregar n nodos.

2. Si C(i,j)=0, no hay aristas.

3. Si C(i,j)=1, hay arista de i a j (color azul).

4. Si C(i,j)=-1, hay arista de i a j (color rojo)

Pero el gran tema es como lo escribo en matlab

Agradezco desde ya por el tiempo de leer mi mensaje y ayudar.

Saludos.

Yrina
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel

Dibujar grafos

Publicado por Daniel (212 intervenciones) el 13/07/2015 21:41:54
Podes probar algo así

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
clc
clear all
 
C=[0 0 0 -1;
    1 0 0 0;
    0 -1 0 1;
    -1 0 1 0];
%C=randi(3,10)-2;
n=size(C,1);
p(:,1)=cos(2*pi*((0:(n-1))/n));
p(:,2)=sin(2*pi*((0:(n-1))/n));
 
 
for i=1:n
    plot(p(i,1),p(i,2),'ok','MarkerSize',20),hold on
    axis equal
    xlim([-1.2 1.2]);ylim([-1.2 1.2]);
    for j=1:n
 
        if abs(C(i,j))==1
            pm=p(i,:)/16+p(j,:)*15/16;
            ps=[p(j,2)-p(i,2),p(i,1)-p(j,1)];
            pk=pm+ps/72;pk2=pm+ps/36;
            xq=[p(i,1) pk(1) pk2(1) p(j,1) pk(1)];
            vq2 = [p(i,2) pk(2) pk2(2) p(j,2) pk(2)];
            if C(i,j)==-1
                fill(xq,vq2,'b','edgecolor','b')
            else
                fill(xq,vq2,'r','edgecolor','r')
            end
 
        end
 
    end
end



No está muy prolijo y faltan algunas cosas de estética, pero marca todo lo que queres y sirve para matrices de cualquier dimensión (cuadradas).

Te dejo a vos refinar la estética si queres.

La numeración es en la forma anti horaria y el uno es el que está mas a la derecha

Contanos después como te fue

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar