Sei sulla pagina 1di 5

Sesiones 1 y 2 de Prcticas de MAD

(Resumen de los comandos de Scilab)

Introduccin

Para empezar, vamos a crear una carpeta llamada MAD dentro de nuestra unidad de red
w: donde guardaremos todos los ficheros con los que vamos a trabajar.
A partir de ahora, cada vez que ejecutemos el programa Scilab, cambiaremos el directorio
de trabajo a esa carpeta:
--> d w:\MAD
(otra opcin, es entrar en Propiedades del acceso directo a Scilab y en la opcin Iniciar en
poner esa ruta. De esta forma, no necesitaremos cambiar el directorio de trabajo cada vez).
A continuacin, vamos a descargarnos de PoliformaT (carpeta prcticas) un paquete llamado
MD_graph.s i. En este paquete hemos introducido algunas funciones nuevas que incluyen
alguna mejora respecto de las funciones originales de Scilab.
Lo guardamos dentro de la carpeta MAD que hemos creado en w: y para ejecutarlo tecleamos
la siguiente instruccin:
-->exe ('MD_graph.s i');
(el punto y coma (;) al final de una instruccin de Scilab permite que el resultado se ejecute o
se almacene en memoria pero no se muestre por pantalla).

Introduccin de grafos con Scilab


Los grafos se pueden introducir en Scilab de diversas maneras.

2.1

Introduccin de grafos con MD_make_graph

Scilab dispone de un comando propio para definir un grafo (make_graph). No obstante,


para poder visualizar el grafo, una vez introducido, es necesario introducir tambin la ubicacin
de los vrtices en el plano con los comandos g .node_x y g .node_y (para ms informacin
ver el boletn completo de Scilab).
1

Para facilitar la introduccin de grafos, hemos programado una funcin que ya incluye la
ubicacin de los vrtices (en disposicin circular). Es la funcin MD_make_graph. La sintaxis
de esta funcin es la siguiente:
g =MD_make_graph(nom , dir , nv , listaaristas );
donde:
g es el nombre de variable que queremos darle al grafo para referirnos a l,
nom es una cadena con el nombre dado al grafo (este dato es opcional),
dir vale 1 si el grafo es dirigido y 0 si no lo es,
nv es el nmero de vrtices del grafo,
listaaristas es una matriz de dos columnas que contiene una lista de los extremos de
las aristas.
Para visualizar el grafo, utilizaremos el comando siguiente:

edit_graph(g )
En la siguiente subseccin se indica qu se puede hacer con este comando.

2.2

Introduccin y edicin de grafos con edit_graph

Nota: Esta opcin no funciona correctamente en algunas versiones de Scilab.


El comando

edit_graph()

sirve para crear interactivamente un grafo, por defecto, dirigido. Al ejecutar este comando se
abre una ventana grfica vaca donde podemos dibujar el grafo dirigido.
Podemos cambiarlo a grafo no dirigido a travs del men Graph-Settings. Si esta opcin
no funciona (en alguna versin de Scilab), tendremos primero que introducir un grafo sencillo,
con dos vrtices y una arista entre ellos con el comando MD_make_graph y despus visualizarlo
con edit_graph:
-->g=MD_make_graph(0,2,[1,2);
-->edit_graph(g);
A partir de este dibujo, podemos utilizar las opciones del men Edit para modificarlo y crear
el grafo (no dirigido) que queramos. Entre otras, estn las opciones NewNode, para aadir
un vrtice y NewArc, para aadir una arista (tenis ms opciones comentadas en el boletn
completo de Scilab).
Para identificar ms fcilmente los vrtices y las aristas del grafo en su representacin
grfica, puede ser interesante numerarlos seleccionando en el men Graph/Options la opcin
Number en Nodes y/o Arcs.
2

El grafo modificado o creado puede grabarse en un fichero con los comandos Save o Save
as. Importante:
antes de guardar el grafo con Save es imprescindible haber asignado nombre a todos los
vrtices y aristas con Edit/Give default names
cuando se va a guardar el grafo dibujado con Save as es necesario aadir al nombre el
sufijo .graph

2.3

Carga de grafos con load_graph

Si tenemos un fichero de grafo (fichero de tipo .graph, generado con Save as a partir del
comando edit_graph), podemos cargarlo con el comando
g =load_graph('nombrefichero.graph ')
Eso crea una nueva estructura de grafo g .

2.4

Matrices de adyacencia e incidencia: clculo e introduccin de


grafos a partir de ellas

La estructura que utiliza Scilab para representar las matrices de adyacencia y de incidencia
es la de matriz dispersa. Una matriz dispersa es una matriz grande en la que la mayor parte
de sus elementos son cero. En estas matrices nicamente hace falta indicar el tamao de la
matriz, sus entradas no nulas y los valores respectivos de estas entradas.
Para calcular la matriz de adyacencia de un grafo g usaremos la siguiente funcin:
m =MD_graph_2_mat(g ,'node-node')
La matriz m que devuelve este comando es una matriz dispersa. Para convertirla en una
matriz ordinaria utilizaremos la funcin full:

full(m )
Para calcular la matriz de incidencia de un grafo g usaremos la siguiente funcin:
m =MD_graph_2_mat(g ,'node-ar ')
De nuevo, la matriz m es una matriz dispersa. Para ponerla en forma de matriz ordinaria,
hay que aplicarle la funcin full.

Tambin podemos crear un grafo a partir de su matriz de adyacencia o de su matriz de


incidencia. Para ello utilizaremos los comandos de tipo MD_mat_2_graph.
Para generar un grafo a partir de su matriz de adyacencia, utilizaremos la siguiente
funcin:
g =MD_mat_2_graph(mat , 0, 'node-node');
donde
g es el nombre de la nueva estructura de grafo que se crea,
mat es una matriz dispersa, que puede crearse a partir de una matriz ordinaria
mediante la funcin sparse,
0 indica que el grafo es no dirigido (en caso de grafos dirigidos se pondra 1) y
'node-node' indica que es una matriz de adyacencia.
Para generar un grafo a partir de su matriz de incidencia, utilizaremos la siguiente
funcin:
g =MD_mat_2_graph(mat , 0, 'node-ar ');
donde
g es el nombre de la nueva estructura de grafo que se crea,
mat es una matriz dispersa, que puede crearse a partir de una matriz ordinaria
mediante la funcin sparse,
0 indica que el grafo es no dirigido (en caso de grafos dirigidos se pondra 1 y
entonces el grafo ha de ser sin bucles) y
'node-ar ' indica que es una matriz de incidencia.
Ejemplo 1. Vamos a generar un grafo a partir de su matriz de adyacencia. En primer lugar,
introducimos la matriz aplicndole la funcin sparse para convertirla en una matriz dispersa:
-->ma=sparse([0
-->
1
-->
1
-->
0
-->
1

1
0
1
0
0

1
1
0
1
0

0
0
1
0
1

1
0
0
1
0);

El grafo cuya matriz de adyacencia es la anterior se genera como sigue:


-->g1=MD_mat_2_graph(ma, 0, 'node-node');
Podemos visualizarlo con
-->edit_graph(g1)
4

Grados de los vrtices de un grafo


Para obtener la lista de los grados de los vrtices de un grafo g utilizaremos la funcin:

nodes_degrees(g )

Grafos simples y sin bucles

Para determinar si un grafo g es simple (es decir, no tiene aristas paralelas), podemos
utilizar

MD_is_simple_graph(g )
que devuelve 1 si el grafo es simple y 0 si no lo es.
De la misma forma, para identificar si un grafo g no tiene bucles, podemos utilizar

MD_is_loop_free_graph(g )
que devuelve 1 si el grafo no tiene bucles y 0 si tiene.

Grafos especiales
Para construir un grafo completo simple y sin bucles con n vrtices (Kn ) utilizaremos
la funcin:
g =MD_ ompl_graph(n );
Para construir un grafo bipartido completo simple de m y n vrtices (Km,n ) utilizaremos la funcin:
g =MD_ ompl_bipartite_graph(m ,n );
El paquete MD_graph.sci contiene tambin una funcin para construir un grafo de
rueda:
g =MD_wheel_graph(n );
Aqu n es un entero mayor que 3 y el grafo resultante tiene n 1 vrtices formando un
polgono regular, cada uno de ellos adyacente al siguiente, y un vrtice central adyacente
a todos los dems.

Potrebbero piacerti anche