Etsin tapaa luoda Hasse-kaavio annetusta osasta järjestysbinaarisuhde. Suhde annetaan nimenomaisesti, esimerkiksi: Hasse[{{1,2},{2,3},{1,3}}]
, ja lähtö on vastaava kaavio.
Olen googlannut ratkaisua , ja löysin jonkin verran ratkaisua, mutta en tiennyt miten sitä käytetään. täällä ”on mitä löysin.
Jos on olemassa tapa luoda Hasse-kaavio ehdolliselle osajärjestysjoukolle ja ei-äärelliselle relaatiolle (tietysti tässä tapauksessa minua kiinnostaa vain likimääräinen kaavio), olisin iloinen kuullessani siitä myös.
Kommentit
- Mikä viittaamasi koodin osa ei ymmärtänyt '?
- No, en ymmärtänyt, että ' ei ymmärrä, miten sitä käytetään tarkoitukseeni. eli miten määritän suhde nimenomaisesti (kuten yllä oleva esimerkki). näyttää siltä, että se sallii vain minulle piirtää kaavio vain ehdolliselle suhteelle .. hyvin, voisin määritellä suhteen ehdon kanssa, mutta eikö ' ole siellä jotain yksinkertaisempaa? ja vielä yksi ongelma, soitin sen kanssa vähän, enkä löytänyt tapaa muuttaa tarrojen fonttikokoa. Haluan kopioida kuvaajan sanaksi, ja tarrojen on oltava luettavissa, eikä niin pieniä. / li>
- Jos määrität solmujen väliset suhteet nimenomaisesti, ei ole ' t vain kaavio?
- I ' m anteeksi, olen ' uusi Mathematicassa. Kaikki, mikä näyttäisi kuvaukseni kaaviosta, olisi hieno. Minun ' ei tarvitse tehdä laskelmia siitä. Mutta minulla on paljon piirrettäviä kaavioita, ja toivoin, että tarpeisiisi on olemassa oma toiminto. jos sinulla on toinen ratkaisu, ilmoita siitä minulle .. mutta muista, että olen ' uusi Mathematicassa, joten olen ' en ole perehtynyt moniin ohjelman perusmenetelmiin.
- Tervetuloa Mathematica Stack Exchange RB14: een, lähetän vastauksen pian (hyvin … lounaan jälkeen :-))
vastaus
Versioissa 10+ voimme säveltää TransitiveReductionGraph ja RelationGraph Hasse-kaaviofunktion saamiseksi tarvitaan samat argumentit ja vaihtoehdot kuin RelationGraph
:
ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph
Esimerkkejä:
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"]
Vastaa
Mielestäni haluamasi on todella yksinkertaista (myös @ SjoerdC.deVries huomautti kommentissaan):
Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"]
Jos haluat toisaalta tutustua Hasa-kaavioiden ominaisuuksiin, linkitetty koodi on hyvä alku. Myös demonstraatioprojektissa on muutama asiaankuuluva esimerkki – se on aina hyvä idea etsiä sinne.
Syvemmälle kaivamalla Mathematica, joka on rakennettu Combinatorica -pakettiin, sisältää HasseDiagram
-paketin. Katso tämä esimerkki dokumentaatiosta vaatii
<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]]
Saat vielä syvemmän toiminnallisuuden tämän artikkelin kirjoittajat:
”Mathematica-paketti osittain tilattujen sarjojen käsittelemiseksi” , P. Codara
tai hanki tämä kirja:
Kommentit
- Jos kysyjä haluaa oikean Hasse-kaavion, hän haluaa varmasti automaattisen tavan laskea binaarisuhteen luoman suunnatun kuvaajan transitiivinen pienennys . Nuolien tulisi mielestäni olla suunnattuja, ja nuolien 1 ja 3 välissä ei pitäisi olla '.
- @JOwen Tiedätkö miksi vakioesitys on sitten ei ohjata? alturl.com/jribp
- En ' ole varma, mutta mielestäni suunta on reunojen tiedot.Lähettämässäsi linkissä sanotaan, että " tulisi piirtää viivasegmentti tai käyrä, joka menee ylöspäin [kursivoitu alkuperäisessä] x: stä y: ksi aina, kun y peittää x: n (eli aina, kun x < y eikä z ole sellaista, että x < z < y) "