2010-11-05 11 views
6

निम्न कोड एक निश्चित गणना का आरेख बनाता है। मेरी समस्या यह है कि भले ही इन्हें प्लस लगाने के बाद, संप्रदाय में नियम अच्छे क्रम में हैं, फिर भी वे मनमाने ढंग से पुन: व्यवस्थित हो जाते हैं। कोई सुझाव है कि मूल आदेश को कैसे रखा जाए?चीजों को पुनर्व्यवस्थित करने से "प्लस" को रोकना

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] 
+0

यह एक अन्य प्रश्न (http://stackoverflow.com/questions/3947071/controlling-order-of-variables-in-an-expression) के इरादे में, एक डुप्लिकेट है। अन्यथा, मैं आपको केवल ग्राफिक्स के लिए एक +1 दूंगा। के लिए गणना क्या है? – rcollyer

+0

हां, यह समान है। सुझाव है कि अपने कार्य को परिभाषित करना है जो "myPlus" जैसा ऑर्डर रहित नहीं है, लेकिन मैं इसे "प्लस" के रूप में प्रस्तुत करने के लिए कैसे प्राप्त करूं? –

+0

गणना एक परिमित ग्रिड (यानी, हार्ड कोर स्व-प्रतिकृति और हार्ड-कोर जोड़ी इंटरैक्शन के साथ ग्रैंड कैनोलिक गैस) पर हार्ड-कोर प्रतिकूल स्थानीय गैस की प्रति-साइट व्यवसाय संभावनाओं को ढूंढना है –

उत्तर

5

myPlusकरने की तरह कुछ स्वरूपण के लिए चाल उत्पादन पर Plus तरह देखने Format उपयोग करने के लिए है। यहाँ प्राप्त करने के लिए एक सरल उदाहरण आप आरंभ है:

फिर, क्या आप नोटबुक में नेत्रहीन देखेंगे:

In[7]:= x = myPlus[3, 2, 1] 
Out[7]= 3+2+1 

... लेकिन x अभी भी सिर myPlus होगा।

यहाँ प्रलेखन कि उत्पादन, ऑपरेटर पूर्वता प्रारूपित करने के बारे में अधिक जानकारी के में चला जाता है से एक tutorial, आदि

आशा है कि मदद करता है!

+1

+1, मैं इसे 'नोटेशन' के साथ करने की कोशिश कर रहा था और यह बुरी तरह विफल रहा था। मैं सीधे 'प्रारूप' को देखना भूल गया। – rcollyer

+0

मैंने आपके उत्तर के साथ 'व्याख्या' को शामिल करने की कोशिश की ताकि इसे कॉपी और चिपकाया जा सके, लेकिन समस्याओं में भाग लिया। SO प्रश्न http://stackoverflow.com/q/4112299/421225 देखें – Simon

संबंधित मुद्दे