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