2011-06-16 15 views
6

FindDivisions[ ], Mma v7'de eklenmiştir ve çizimler için esnek keneler elde etmenin güzel bir yolu gibi görünmektedir. Örneğin, this question ve cevaplarına bakınız.FindDivisions [] belirtildiği şekilde çalışmaz

Kullanım örneği:

f[fd_] := Join[ 
    {#, #, {.07, 0}, Directive[Black, Thickness[.01]]} & /@ fd[[1]], 
    {#, #, {.05, 0}, Directive[Black, Thin]}   & /@ Flatten[fd[[2]]]]; 
plot[pr_List] := 
    Plot[Sin[x], [email protected][{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}] 

plot[{0, 10}] 

enter image description here

Ve her şey doğru görünüyor.
Ama bir aksaklık olduğunu: Gördüğünüz gibi, kırmızı ve siyah kene

f[fd_] := Join[ 
    {#, #, {.03, 0}, Directive[Red, Thickness[.01]]} & /@ fd[[1]], 
    {#, #, {.05, 0}, Directive[Black, Thin]}   & /@ Flatten[fd[[2]]]]; 
plot[pr_List] := 
    Plot[Sin[x], [email protected][{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}] 
plot[{0, 10}] 

enter image description here

bindirilmiş. Bunun nedeni

FindDivisions[{0, 2}, {2, 4}] 
(* 
-> {{0, 1, 2}, {{0, 1/4, 1/2, 3/4, 1}, {1, 5/4, 3/2, 7/4, 2}}} 
*) 

olduğunu ve ilk listede numaralar (ana keneler) ikinci listede tekrarlanan olduğunu görebilirsiniz.
Ancak FindDivisions [] belgelerine durumları:

enter image description here

Yani, iki soru:

  1. Bu bir hata mı, yoksa yanlış (veya anlayış) bir şey yapıyorum?
  2. Herhangi bir kolay çok katmanlı bir yapıda tekrarlanan keneleri silmek için bir yol mu?

cevap

5

Yinelenen değerler zaman zaman yararlı olabilse de, muhtemelen uygulamada bir hatadır. (Kesinlikle bölünmeler farklı düzeylerde inşa için yararlıdır.) Kene için

, muhtemelen benzer bir kod kullanılmasıdır ediyorum: çiftleri hiyerarşi düzleştirmek ve kaldırmak için

{major, minor} = FindDivisions[{0, 2}, {2, 4}]; 
minor = Complement[Flatten[minor], major]; 

. Sadece iki daha düzeyleri için Genelleştirilmiş


:

divs = Flatten /@ FindDivisions[{0, 2}, {2, 4, 2}]; 
Complement[#2, #1] & @@@ Partition[divs, 2, 1, -1, {{}}] 
+0

Teşekkür @Brett. FindDivisions [{0, 2}, {2, 4, 2}] 'için nasıl çalışır? –

+0

Yanıt güncellendi, bu durumda üçüncü seviye için bulduğu bölümleri umursamama rağmen ... –

+0

"FindDivisions [{0, 1}, {3, 3, 3}]' ile, değer olarak görünüyor '1/2', üçüncü listede –