Jeg ser etter en måte å lage et Hasse-diagram fra en gitt del bestille binær relasjon. Forholdet vil bli gitt eksplisitt, for eksempel: Hasse[{{1,2},{2,3},{1,3}}]
, og utgangen vil være den tilsvarende grafen.
Jeg har googlet for en løsning , og jeg fant en løsning, men jeg skjønte ikke hvordan jeg skulle bruke den. her er det jeg fant.
Hvis det er en måte å generere et Hasse-diagram for et betinget delbestillingssett, og for et ikke-endelig forhold (selvfølgelig, for dette tilfellet er jeg bare interessert i et tilnærmet diagram), vil jeg gjerne høre om det også.
Kommentarer
- Hvilken del av koden du henviste til, forstod du ikke '?
- Vel, jeg forsto ' ikke hvordan jeg skulle bruke den til mitt formål. mening, hvordan definerer jeg forholdet eksplisitt (som eksemplet ovenfor). synes det bare tillater meg å tegne en graf bare for betinget forhold .. vel, jeg kunne definere forholdet med tilstand, men er det ikke ' noe enklere? og et problem til, jeg lekte med det litt, og jeg kunne ikke finne en måte å endre skriftstørrelsen på etikettene på. Jeg vil kopiere grafen til ord, og etikettene må være lesbare, og ikke så små.
- Hvis du spesifiserer forholdet mellom noder eksplisitt ikke ' t er det bare en graf, så?
- I ' Beklager, jeg ' er ny i Mathematica. Alt som vil se ut som en graf av beskrivelsen min, vil være bra. Jeg trenger ikke ' å gjøre beregninger på det. Men jeg har mange grafer å tegne, og jeg håpet det er en dedikert funksjon for mine behov. hvis du har en annen løsning, er du velkommen til å gi meg beskjed .. men husk at jeg ' er ny i Mathematica, så jeg ' Jeg er ikke kjent med mange av de grunnleggende metodene i programmet.
- Velkommen til Mathematica Stack Exchange RB14, jeg vil legge ut et svar om kort tid (vel … etter lunsj :-))
Svar
I versjoner 10+ kan vi komponere TransitiveReductionGraph og RelationGraph for å få en Hasse-diagramfunksjon med tar de samme argumentene og alternativene som RelationGraph
:
ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph
Eksempler:
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"]
Svar
Jeg synes det du vil er veldig enkelt (også bemerket av @ SjoerdC.deVries i kommentaren):
Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"]
Hvis du derimot vil utforske fullverdige Hasse-diagrammer, er koden du koblet til en god start. Demonstrations Project har noen få relevante eksempler – det er alltid en god ide å søke der.
Digging dypere, Mathematica innebygd Combinatorica pakken har HasseDiagram
pakke. Ta en titt på dette eksemplet fra Dokumentasjon krever
<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]]
For enda dypere funksjonalitet kan det være lurt å kontakte forfattere av denne artikkelen:
«En Mathematica-pakke for å takle delvis bestilte sett» , P. Codara
eller få denne boka:
Kommentarer
- Hvis spørgeren vil ha et ekte Hasse-diagram, vil han sikkert ha en automatisk måte å beregne transitiv reduksjon av den dirigerte grafen generert av den binære relasjonen. Pilene skal rettes, synes jeg, og pilen mellom 1 og 3 skal ikke ' ikke være der.
- @JOwen Vet du hvorfor standard representasjon da er ikke regissert? alturl.com/jribp
- Jeg ' er ikke sikker, men jeg tror det er retningsbestemt informasjon i kantene.Det står i lenken du la ut at man skulle tegne " et linjestykke eller en kurve som går oppover [kursiv i originalen] fra x til y når y dekker x (det vil si når som helst x < y og det er ingen z slik at x < z < y) "
Jeg synes det du vil er veldig enkelt (også bemerket av @ SjoerdC.deVries i kommentaren):
Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"]
Hvis du derimot vil utforske fullverdige Hasse-diagrammer, er koden du koblet til en god start. Demonstrations Project har noen få relevante eksempler – det er alltid en god ide å søke der.
Digging dypere, Mathematica innebygd Combinatorica pakken har HasseDiagram
pakke. Ta en titt på dette eksemplet fra Dokumentasjon krever
<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]]
For enda dypere funksjonalitet kan det være lurt å kontakte forfattere av denne artikkelen:
«En Mathematica-pakke for å takle delvis bestilte sett» , P. Codara
eller få denne boka:
Kommentarer
- Hvis spørgeren vil ha et ekte Hasse-diagram, vil han sikkert ha en automatisk måte å beregne transitiv reduksjon av den dirigerte grafen generert av den binære relasjonen. Pilene skal rettes, synes jeg, og pilen mellom 1 og 3 skal ikke ' ikke være der.
- @JOwen Vet du hvorfor standard representasjon da er ikke regissert? alturl.com/jribp
- Jeg ' er ikke sikker, men jeg tror det er retningsbestemt informasjon i kantene.Det står i lenken du la ut at man skulle tegne " et linjestykke eller en kurve som går oppover [kursiv i originalen] fra x til y når y dekker x (det vil si når som helst x < y og det er ingen z slik at x < z < y) "