El siguiente código crea un diagrama de un cierto cálculo. Mi problema es que, aunque los términos en denominador están en un buen orden, después de aplicar Plus en él, se reorganizan arbitrariamente. ¿Alguna sugerencia sobre cómo forzar el orden original para que se guarde?Evitar que "Plus" reordene las cosas
http://yaroslavvb.com/upload/ind-sets-grid.png
r[i_] := Floor[(i - 1)/n] + 1; c[i_] := Mod[i, n, 1]; adj[a_, b_] := Abs[r[a] - r[b]] + Abs[c[a] - c[b]] == 1; indsetQ[s_] := Not[Or @@ (adj @@@ Subsets[s, {2}])]; indsets[k_] := Select[Subsets[Range[n^2], {k}], indsetQ]; twoColorGraph[g_, seen_, lbl_] := Module[{radius = .22}, vcoords = # -> {c[#], n - r[#]} & /@ Range[n^2]; fv = Function[{p, v}, {EdgeForm[Thick], If[MemberQ[seen, v], Pink, White], Disk[p, radius]}]; GraphPlot[g, VertexLabeling -> True, VertexRenderingFunction -> fv, PlotLabel -> Style[lbl, 20], LabelStyle -> Directive[Bold], VertexCoordinateRules -> vcoords, ImageSize -> 80] ]; n = 2; g = Array[Boole[adj[#1, #2]] &, {n^2, n^2}]; weight[set_] := Times @@ (Subscript[\[Lambda], c[#], r[#]] & /@ set); denominator = twoColorGraph[g, #, weight[#]] & /@ Join @@ (indsets[#] & /@ Range[2]); numerator = twoColorGraph[g, {1}, weight[{1}]]; Style[numerator/(Plus @@ denominator), FontSize -> 30]
Esto es un duplicado, en la intención, si no en la forma, de otra pregunta (http://stackoverflow.com/questions/3947071/controlling-order-of-variables-in-an-expression). De lo contrario, te daría un +1 solo por los gráficos. ¿Para qué sirve el cálculo? – rcollyer
Sí, eso es similar. La sugerencia allí es definir una función propia que no esté sin orden como "myPlus", pero ¿cómo hago para que se muestre lo mismo que "Plus"? –
El cálculo consiste en encontrar probabilidades de ocupación por sitio de gas local repulsivo de núcleo duro en una cuadrícula finita (es decir, gran gas canónico con auto-repulsión de núcleo duro e interacción de núcleo duro) –