Estoy buscando una manera de crear un Diagrama Hasse a partir de un orden relación binaria. La relación se dará explícitamente, por ejemplo: Hasse[{{1,2},{2,3},{1,3}}]
, y la salida será el gráfico correspondiente.
He buscado en Google una solución , y encontré alguna solución, pero no entendí cómo usarla .. aquí « lo que encontré.
Si hay una manera de generar un diagrama de Hasse para un conjunto de orden parcial condicional y para una relación no finita (por supuesto, en este caso solo estoy interesado en un diagrama aproximado), me encantaría saberlo. también.
Comentarios
- ¿Qué parte del código al que se refirió no ' entendió?
- Bueno, yo ' no entendí cómo usarlo para mi propósito. Es decir, ¿cómo defino la relación explícitamente (como en el ejemplo anterior). parece que solo me permite para dibujar un gráfico solo para la relación condicional … bueno, podría definir la relación con la condición, pero ¿no hay ' algo más simple? y un problema más, jugué un poco con él, y no pude encontrar una manera de cambiar el tamaño de fuente de las etiquetas … Quiero copiar el gráfico a Word, y las etiquetas deben ser legibles, y no tan pequeñas.
- Si especifica las relaciones entre los nodos explícitamente, ¿no es ' sólo un gráfico, entonces?
- I ' Lo siento, ' soy nuevo en Mathematica. Cualquier cosa que pareciera un gráfico de mi descripción estaría bien. No ' no necesito hacer cálculos al respecto. Pero tengo muchos gráficos para dibujar, y esperaba que hubiera una función dedicada a mis necesidades. si tiene otra solución, no dude en hacérmelo saber … pero tenga en cuenta que soy ' nuevo en Mathematica, así que ' No estoy familiarizado con muchos de los métodos básicos del programa.
- Bienvenido a Mathematica Stack Exchange RB14, publicaré una respuesta en breve (bueno … después del almuerzo :-))
Respuesta
En las versiones 10+, podemos componer TransitiveReductionGraph y RelationGraph para obtener una función de diagrama Hasse con los mismos argumentos y opciones que RelationGraph
:
ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph
Ejemplos:
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"]
Respuesta
Creo que lo que quieres es realmente muy simple (también lo señaló @ SjoerdC.deVries en su comentario):
Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"]
Si, por otro lado, «desea explorar diagramas Hasse con todas las funciones, el código al que vinculó es un buen comienzo. Además, el Proyecto de demostraciones tiene algunos ejemplos relevantes : Siempre es una buena idea buscar allí.
Profundizando, Mathematica construido en el paquete Combinatorica tiene el paquete HasseDiagram
. Eche un vistazo a este ejemplo de la documentación requiere
<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]]
Para una funcionalidad aún más profunda, es posible que desee contactar autores de este artículo:
«Un paquete de Mathematica para hacer frente a conjuntos parcialmente ordenados» , P. Codara
u obtenga este libro:
Comentarios
- Si el autor de la pregunta quiere un verdadero diagrama de Hasse, seguramente quiere una forma automática de calcular la reducción transitiva del gráfico dirigido generado por la relación binaria. Las flechas deben estar dirigidas, creo, y la flecha entre 1 y 3 no debe ' estar allí.
- @JOwen ¿Sabes por qué la representación estándar es no dirigido? alturl.com/jribp
- Yo ' no estoy seguro, pero creo que hay direcciones información en los bordes.En el enlace que publicaste, dice que se debe dibujar " un segmento de línea o curva que vaya hacia arriba [en cursiva en el original] de xay siempre que y cubra x (es decir, siempre que x < y y no hay una z tal que x < z < y) "