Ich suche nach einer Möglichkeit, aus einem bestimmten Teil ein Hasse-Diagramm zu erstellen binäre Beziehung bestellen. Die Beziehung wird explizit angegeben, zum Beispiel: Hasse[{{1,2},{2,3},{1,3}}]
, und die Ausgabe wird der entsprechende Graph sein.
Ich habe nach einer Lösung gegoogelt und ich habe eine Lösung gefunden, aber ich habe nicht verstanden, wie ich sie verwenden soll. hier ist was ich gefunden habe.
Wenn es eine Möglichkeit gibt, ein Hasse-Diagramm für einen bedingten Teilordnungssatz und für eine nicht endliche Beziehung zu generieren (natürlich interessiert mich in diesem Fall nur ein ungefähres Diagramm), würde ich mich freuen, davon zu hören Auch.
Kommentare
- Welchen Teil des Codes, auf den Sie sich bezogen haben, haben Sie ' nicht verstanden?
- Nun, ich habe ' nicht verstanden, wie ich es für meinen Zweck verwenden soll. Das heißt, wie definiere ich die Beziehung explizit (wie im obigen Beispiel) scheint es mir nur erlaubt Um ein Diagramm nur für die bedingte Beziehung zu zeichnen. Nun, ich könnte die Beziehung zur Bedingung definieren, aber gibt es nicht etwas Einfacheres? und noch ein Problem, ich habe ein wenig damit gespielt und konnte keine Möglichkeit finden, die Schriftgröße der Beschriftungen zu ändern. Ich möchte das Diagramm in ein Wort kopieren, und die Beschriftungen müssen lesbar und nicht so klein sein.
- Wenn Sie die Beziehungen zwischen den Knoten explizit angeben, ist ' nicht nur ein Diagramm?
- I ' Es tut mir leid, ich ' bin neu in Mathematica. Alles, was wie eine Grafik meiner Beschreibung aussehen würde, wäre in Ordnung. Ich muss ' nicht berechnen. Aber ich muss viele Grafiken zeichnen, und ich hoffte, dass es eine spezielle Funktion für meine Bedürfnisse gibt. Wenn Sie eine andere Lösung haben, lassen Sie es mich bitte wissen. Beachten Sie jedoch, dass ich ' neu in Mathematica bin, also ' Ich bin mit vielen grundlegenden Methoden des Programms nicht vertraut.
- Willkommen bei Mathematica Stack Exchange RB14, ich werde in Kürze eine Antwort veröffentlichen (na ja … nach dem Mittagessen :-))
Antwort
In Versionen 10+ können wir TransitiveReductionGraph und RelationGraph zum Abrufen einer Hasse-Diagrammfunktion mit denselben Argumenten und Optionen wie RelationGraph
:
ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph
Beispiele:
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"]
Antwort
Ich denke, was Sie wollen, ist eigentlich sehr einfach (auch von @ SjoerdC.deVries in seinem Kommentar vermerkt):
Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"]
Wenn Sie andererseits Hasse-Diagramme mit allen Funktionen erkunden möchten, ist der Code, mit dem Sie verknüpft sind ein guter Anfang. Auch Demonstrationsprojekt hat einige relevante Beispiele – es Es ist immer eine gute Idee, dort zu suchen.
Mathematica, das im Combinatorica -Paket eingebaut ist, hat das HasseDiagram
-Paket. Schauen Sie sich an. Dieses Beispiel aus Dokumentation erfordert
<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]]
Für noch tiefere Funktionen möchten Sie möglicherweise Kontakt aufnehmen Autoren dieses Papiers:
„Ein Mathematica-Paket zur Bewältigung teilweise geordneter Mengen“ , P. Codara
oder holen Sie sich dieses Buch:
Kommentare
- Wenn der Fragesteller ein echtes Hasse-Diagramm möchte, möchte er sicherlich eine automatische Berechnungsmethode die transitive Reduktion des durch die binäre Beziehung erzeugten gerichteten Graphen. Ich denke, die Pfeile sollten gerichtet sein, und der Pfeil zwischen 1 und 3 sollte nicht ' vorhanden sein.
- @JOwen Wissen Sie, warum Standarddarstellung dann ist? nicht gerichtet? alturl.com/jribp
- Ich ' bin nicht sicher, aber ich denke, es gibt eine Richtung Informationen in den Rändern.In dem von Ihnen geposteten Link heißt es, dass man " ein Liniensegment oder eine Kurve zeichnen sollte, die von x nach y nach oben [im Original kursiv] geht, wenn y x abdeckt (dh wann immer) x < y und es gibt kein z, so dass x < z < y) "