[Mathematica覚書]

  • 結合則を満たす2項演算子を定義する方法. 例えば,2項演算子f:(g,h)->f(g,h)をg・h (CenterDot[g,h])と表記して,g1・g2・g3・...・gn を定義したければ, CenterDot[z__] := Fold[f, {z}]; とする.ここで,__はBlankSequence.

  • Stringの間に下付き添字を入れる方法.(LaTeX形式に変換なされないようだ.) (link)

  • ショートカットキー (link)

  • Pfaffianの実装例 (link)

  • (Mathematica 11.2)(12.1で修正済み) 対角成分のみ非ゼロの行列において,対角成分の一部にゼロを含む場合に,
    SmithDecomposition[m][[1]].m.SmithDecomposition[m][[3]]==SmithDecomposition[m][[2]]
    が不成立.例えば,
    m = {{0, 0, 0}, {0, -2, 0}, {0, 0, 2}}

  • (Mathematica 11.2) 次の行列のLatticeReduceを取ると,フリーズする.
    {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {-1, 0, 0, 1, -1, 1, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, -1, 1, -1, 1, 0, 0, 0, 0, 2, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1}, {1, 0, 2, 0, -1, 1, 1, -1, 0, 0, 3, -1, 1, -1, 0, -1, 1, -1, 0, 0, -1, 3, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1}, {1, 0, 2, 0, -1, 1, 1, -1, 0, 0, 3, -1, 0, -1, 1, -2, 1, 0, 0, 0, -1, 3, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 3, 1, -2, 2, 1, -1, 0, 0, 4, -2, 1, -1, 0, -2, 1, -1, 0, 0, -2, 4, 0, 0, 1, 1, 1, 1, 0, 0, 0, 2}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 2, 2, 0, 2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, -1, 0, 1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, -1, 0, 1, -1, 0, 1, 0, 0, -2, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, -2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, -2, 0, -2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 0, 0, -1, -1, 0, 0, 2, 0, -1, -1, 0, -2, 1, -1, 0, 0, 0, 0, 0, 0, 1, -1, -1, -1, 0, 0, 0, 0}, {0, 0, 1, 1, 0, 0, -1, -1, 0, 0, 0, 0, -1, -1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 1, 1, -1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 1, -1, 1, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, 2, -2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 2, 2, 0, 0, -2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, -2, 2, 2, -2, 2, -2, -2, 0, 0, -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, -2, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, -2, 2, 2, -2, 2, -2, -2, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, -2, 2, 0, -2, 2, 0, -2, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, -1, 1, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, -1, 1, 1, -1, 1, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, -1, -1, 0, 0, 1, 1, 0, 0, -2, 0, 1, 1, 0, 2, -1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, {-2, 0, -1, 1, 0, 0, -1, 1, 0, 0, -2, 0, -1, -1, 0, 0, 1, 1, 0, 0, 0, -2, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0}, {0, -2, 1, 1, -2, 0, -1, -1, 0, 0, 0, -2, -1, -1, 0, -2, 1, 1, 0, 0, -2, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0}, {0, -2, 0, 0, 0, 0, -2, 0, 0, 0, -4, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, -2, -1, 1, 0, 0, -1, -1, 0, 0, -2, 0, -1, -1, 0, 0, 1, 1, 0, 0, 0, -2, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0}, {0, -4, 2, 2, -2, 2, -2, -2, 0, 0, -2, -2, 0, 0, 0, 0, 0, 2, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}

  • (Mathematica 11.2) 以下を実行すると,警告なく強制終了する.
    tmp = {{-(1/8), 1/2, 3/8}, {-(1/8), 1/2, 1/2}, {-(1/8), 1/2, 5/ 8}, {-(1/8), 1/2, 3/4}, {-(1/8), 5/8, 3/8}, {-(1/8), 5/8, 1/ 2}, {-(1/8), 5/8, 5/8}, {-(1/8), 5/8, 3/4}, {0, 1/2, 1/4}, {0, 1/ 2, 3/8}, {0, 1/2, 1/2}, {0, 1/2, 5/8}, {0, 1/2, 3/4}, {0, 5/8, 3/ 8}, {0, 5/8, 1/2}, {0, 5/8, 5/8}, {0, 5/8, 3/4}, {0, 3/4, 5/ 8}, {0, 3/4, 3/4}, {0, 7/8, 5/8}, {0, 7/8, 3/4}, {1/8, 1/2, 1/ 4}, {1/8, 1/2, 3/8}, {1/8, 1/2, 1/2}, {1/8, 1/2, 5/8}, {1/8, 1/2, 3/4}, {1/8, 5/8, 3/8}, {1/8, 5/8, 1/2}, {1/8, 5/8, 5/8}, {1/8, 5/ 8, 3/4}, {1/8, 5/8, 7/8}, {1/8, 3/4, 5/8}, {1/8, 3/4, 3/4}, {1/8, 3/4, 7/8}, {1/8, 7/8, 5/8}, {1/8, 7/8, 3/4}, {1/8, 7/8, 7/8}, {1/ 4, 1/2, 1/4}, {1/4, 1/2, 3/8}, {1/4, 1/2, 1/2}, {1/4, 1/2, 5/ 8}, {1/4, 1/2, 3/4}, {1/4, 5/8, 3/8}, {1/4, 5/8, 1/2}, {1/4, 5/8, 5/8}, {1/4, 5/8, 3/4}, {3/8, 1/2, 1/4}, {3/8, 1/2, 3/8}, {3/8, 1/ 2, 1/2}, {3/8, 1/2, 5/8}, {3/8, 1/2, 3/4}, {3/8, 5/8, 3/8}, {3/8, 5/8, 1/2}, {3/8, 5/8, 5/8}, {3/8, 5/8, 3/4}, {1/2, 1/2, 1/4}, {1/ 2, 1/2, 3/8}, {1/2, 1/2, 1/2}, {1/2, 1/2, 5/8}, {1/2, 1/2, 3/ 4}, {1/2, 5/8, 3/8}, {1/2, 5/8, 1/2}, {1/2, 5/8, 5/8}, {1/2, 5/8, 3/4}, {5/8, 1/2, 1/4}, {5/8, 1/2, 3/8}, {5/8, 5/8, 3/8}, {3/4, 1/ 2, 1/4}};
    ConvexHullMesh[tmp]

  • Mathematica 11.2のConvexhullmeshは有理数成分の座標に対して正しい凸包を与えない場合があるので,COnvexhullmeshを用いる際は,ランダムに微小な摂動を加えて使うと良い. 例えば,以下の点集合に対してConvexhullmeshは正しい凸包を与えない.
    {{0, 1/2, 1/8}, {0, 1/2, 0}, {0, 1/2, -(1/8)}, {0, 0, 0}, {0, 0, 3/8}, {0, 0, -(3/8)}, {1/2, 0, (1/8)}, {1/2, 0, 0}, {1/2, 0, -(1/8)}, {1/4, 1/4, -(1/4)}, {1/4, 1/4, 1/4}, {0, 1/4, -(1/4)}, {0, 1/4, 1/4}, {1/4, 0, -(1/4)}, {1/4, 0, 1/4}}
    しかし,微小な摂動を与えると数値的には正しい凸包が得られる.


  • [home]