Arxivat per a ‘codi i programes’

abril 2, 2013

Dibuixar hipergrafs amb Mathematica

Últimament estic treballant amb hipergrafs, i necessitava una eina per visualtizar-los fàcilment (preferentment, en Mathematica). No n’he trobat cap, així que he adaptat la funció GraphPlotHighlight, de simonjtyler. Al final del post copio les funcions necessàries, però comencem per algunes definicions matemàtiques i algun exemple.

Un hipergraph g_{\le n} és una parella de conjunts g_{\le n} = \{V,E\}, on V és el conjunt de n nodes (n=|V|) i E és el conjunt d’hiperarestes (subconjunts de V diferents del conjunt buit): E=\{e_k=\{v_1,\dots,v_k\}:v_i\in V \land 1\le k\le n\}. Un hipergraph és k-uniforme (i escrivim g_k) si totes les seves hiperarestes tenen exactament k elements. És a dir, E=E_k=\{e_k=\{v_1,\dots,v_k\}:v_i\in V\}. Amb aquestes definicions un graf normal i corrent és un hipergraf 2-uniforme.

El problema a l’hora de visualitzar un hipergraf és com dibuixar les hieprarestes. Una opció és dibuixar una àrea que inclogui els nodes continguts en l’hiperaresta. Una altra opció és dibuixar una aresta simple (és a dir, connectant només dos nodes) per cada parella de nodes dins d’una hiperaresta. En aquest cas, però, és fàcil confondre l’hipergraf amb un graf estàndard, o confondre arestes simples que corresponen a hiperarestes diferents. El que he fet amb la funció HypergraphPlotHighlight és combinar les dues opcions (dibuixant àrees i arestes simples), i a més diferenciar hiperarestes diferents amb colors diferents. El resultat encara no és òptim, però poc a poc s’hi acosta.

El següent exemple representa l’hipergraph amb E={{1, 2, 3}, {2, 3, 4}, {4, 5, 6, 9, 10}, {3, 5, 7, 8}, {1, 3, 8}, {7,  9}}:

HypergraphPlotHighlight

febrer 7, 2013

De PNG a EPS a l’Ubuntu

Des de fa poc utilitzo Ubuntu a la feina, i m’ha sorprès que no vingués directament amb un programet per transformar imatges del format PNG a l’EPS. Doncs bé, per a qui li pugui interessar, el sam2p ho fa de manera ben fàcil i eficient. N’hi ha prou amb instal·lar-lo:

$ sudo apt-get install sam2p

I cridar-lo:

$ sam2p exemple.png EPS: exemple.eps

I fet! A punt per utilitzar-la, per exemple, amb el LaTeX.

Etiquetes: , , , ,
gener 29, 2013

Vectors linealment independents

Ecco una petita funció del Mathematica per obtenir ràpidament una llista dels primers vectors linealment independents d’una certa llista de vectors, per si a algú li pot ser útil (si ja existia alguna cosa similar, digueu-m’ho als comentaris!).

Un conjunt de n vectors \{v_1,\ldots,v_n\} és linealment independent si i només si el rang de la matriu M=(v_1\dots v_n) és n. La següent funció, doncs, retorna la llista dels primers vectors linealment independents a partir d’una llista qualsevol de vectors:

FirstLinearlyIndependent[vec_List] := Module[
  {a = {}, i = 1, n = Length[vec]},

  While[i <= n,
   If[
    MatrixRank[Append[a, vec[[i]]]] == Length[a] + 1,
    a = Append[a, vec[[i]]]
    ];
   i++;
   ];
  a
  ]
gener 4, 2013

Moure la galeria de l’iPhoto a un disc extern

Amb el pas del temps, les fotos que s’arriben a acumular a l’ordinador comencen a ocupar força espai. Si fas servir l’iPhoto, pots moure fàcilment la galeria sencera a un disc extern i així estalviar espai en el teu ordinador. És molt senzill: busca la teva galeria en el Finder (segurament està dins del directori Pictures), retalla-la i enganxa-la al disc extern on la voldràs tenir (com sempre, és bo haver fet abans una còpia de seguretat). Després obre l’iPhoto mantenint premuda la tecla d’opció, i et mostrarà la llista de galeries instal·lades. Si ja veus la que vols, selecciona-la; sinó, busca-la en el disc extern on l’has enganxat. I ja està.

I recorda que, si estàs posant la galeria de fotos al mateix disc extern on fas les còpies de seguretat, és una bona idea utilitzar un segon disc dur per fer una còpia de seguretat d’aquesta galeria!

Etiquetes: , ,
setembre 8, 2012

Mathematica: línies blanques en les regions del ContourPlot, RegionPlot i similars

La funció ContourPlot del Mathematica et genera el contorn d’una funció de dues variables, f(x,y). RegionPlot fa una cosa similar. Si feu servir sovint el Mathematica segurament les coneixeu.

Si a més heu d’enviar articles a revista que et demanen les figures en format EPS (o PDF), segurament també us haurem trobat que el plot al Mathematica es veu bé, però una vegada l’exporteu via un

Export["figura.eps",fig]

la figura que us resulta té aquesta pinta:

Això és perquè el Mathematica “omple” les regions dibuixant petits triangles, i les arestes d’aquests triangles (que en principi haurien de ser invisibles, però no s’exporten bé) no se superposen, de manera que s’acaben veient a l’arxiu exportat. Després de barallar-m’hi una bona estona, he trobat (en aquest enllaç) la següent solució, que bàsicament el que fa és acolorir l’aresta de cada triangle amb el color del seu triangle:

Export["figura.eps",fig/. {EdgeForm[],
r_?(MemberQ[{RGBColor, Hue, CMYKColor, GrayLevel}, Head[#]] &),
i___} :> {EdgeForm[r], r, i}]

El resultat és el que s’esperaria:

Pels interessats amb temps, sembla ser que hi ha solucions més generals i robustes aquí.

Follow

Get every new post delivered to your Inbox.

Join 144 other followers

%d bloggers like this: