Caut o modalitate de a crea o Diagrama Hasse dintr-un parțial dat relația binară de ordine. Relația va fi dată în mod explicit, de exemplu: Hasse[{{1,2},{2,3},{1,3}}], iar ieșirea va fi graficul corespunzător.

Am căutat o soluție pentru o soluție și am găsit o soluție, dar nu am reușit să o folosesc .. aici ce am găsit.

Dacă există o modalitate de a genera o diagramă Hasse pentru un set de ordine parțială condițională și pentru o relație non-finită (desigur, pentru acest caz, „mă interesează doar o diagramă aproximativă), aș fi fericit să aud despre asta de asemenea.

Comentarii

  • Ce parte din cod la care ați făcut referire nu ați înțeles-o '?
  • Ei bine, nu ' nu am înțeles cum să-l folosesc în scopul meu. adică, cum definesc relația în mod explicit (ca în exemplul de mai sus). se pare că îmi permite doar pentru a desena un grafic doar pentru relația condițională .. ei bine, aș putea defini relația cu condiția, dar nu este ceva mai simplu? ' și încă o problemă, m-am jucat puțin cu el și nu am putut găsi o modalitate de a modifica dimensiunea fontului etichetelor .. Vreau să copiez graficul în cuvânt, iar etichetele trebuie să fie lizibile și nu atât de mici.
  • Dacă specificați relațiile dintre noduri în mod explicit nu este ' nu este decât un grafic atunci?
  • I ' îmi pare rău, ' m nou în Mathematica. Orice lucru care ar arăta ca un grafic al descrierii mele ar fi bine. Nu ' nu trebuie să fac calcule pe aceasta. Dar am o mulțime de grafice de desenat și am sperat că va exista o funcție dedicată nevoilor mele. dacă aveți o altă soluție, nu ezitați să mă anunțați .. dar rețineți că ' sunt nou în Mathematica, așa că ' Nu sunt familiarizat cu multe dintre metodele de bază ale programului.
  • Bine ați venit la Mathematica Stack Exchange RB14, voi posta un răspuns în scurt timp (bine … după prânz :-))

Răspuns

În versiunile 10+, putem compune TransitiveReductionGraph și RelationGraph pentru a obține o funcție diagramă Hasse cu acceptă aceleași argumente și opțiuni ca RelationGraph:

ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph 

Exemple:

hasseF[SubsetQ, Subsets[Range[4]], VertexShapeFunction -> "Name"] 

introduceți descrierea imaginii aici

substringQ[s1_, s2_] := UnsameQ[s1 , s2] && StringMatchQ[s1, ___ ~~ s2 ~~ ___] hasseF[substringQ, {"a", "b", "c","ab", "ac","abc", "abcd"}, VertexShapeFunction -> "Name"] 

introduceți descrierea imaginii aici

Răspuns

Cred că ceea ce doriți este de fapt foarte simplu (notat și de @ SjoerdC.deVries în comentariul său):

Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"] 

introduceți descrierea imaginii aici

Dacă, pe de altă parte, doriți să explorați diagramele Hasse complete, codul la care ați conectat este Un început bun. De asemenea, Demonstrations Project are câteva exemple relevante – este întotdeauna o idee bună să căutați acolo.

Sapând mai adânc, Mathematica încorporat în pachetul Combinatorica are pachetul HasseDiagram. Aruncați o privire la acest exemplu din Documentare necesită

<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]] 

introduceți descrierea imaginii aici

Pentru funcționalități și mai profunde, vă recomandăm să contactați autorii acestei lucrări:

„Un pachet Mathematica pentru a face față seturilor parțial comandate” , P. Codara

sau obțineți această carte:

„Matematică discretă computațională: combinație și teorie a graficelor cu Mathematica” , Sriram Pemmaraju, Steven Skiena

Comentarii

  • Dacă solicitantul dorește o diagramă Hasse adevărată, cu siguranță vrea un mod automat de a calcula reducerea tranzitivă a graficului direcționat generat de relația binară. Săgețile ar trebui direcționate, cred, iar săgeata între 1 și 3 nu ar trebui să ' să fie acolo.
  • @JOwen Știți de ce este reprezentarea standard atunci nu este regizat? alturl.com/jribp
  • Nu ' nu sunt sigur, dar cred că există direcție informații în margini.În linkul pe care l-ați postat se spune că ar trebui să desenați " un segment de linie sau o curbă care merge în sus [cursiv în original] de la x la y ori de câte ori y acoperă x (adică ori de câte ori x < y și nu există z astfel încât x < z < y) "

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *