CylindricalDecomposition[expr,{x1,x2,…}]
文 expr で表される領域を連続する xiの方向に対応した円柱部分へと分割する.
CylindricalDecomposition[expr,{x1,x2,…},op]
文 expr で表される領域に位相操作 op を適用した結果の分解を求める.
CylindricalDecomposition[expr,{x1,x2,…},"Function"]
後の計算で使用できる結果をCylindricalDecompositionFunction[…][x1,x2,…]として表す.
CylindricalDecomposition
CylindricalDecomposition[expr,{x1,x2,…}]
文 expr で表される領域を連続する xiの方向に対応した円柱部分へと分割する.
CylindricalDecomposition[expr,{x1,x2,…},op]
文 expr で表される領域に位相操作 op を適用した結果の分解を求める.
CylindricalDecomposition[expr,{x1,x2,…},"Function"]
後の計算で使用できる結果をCylindricalDecompositionFunction[…][x1,x2,…]として表す.
詳細とオプション
- 文 expr は以下の任意の論理結合でよい.
-
lhs==rhs 等式 lhs!=rhs 等式ではない lhs>rhs または lhs>=rhs 不等式 CylindricalDecompositionFunction[…][x,y,…] 円柱代数式 ForAll[x,cond,expr] 全称記号 Exists[x,cond,expr] 存在記号 - 等式と不等式は,多項式,有理関数,実代数関数を含むことがある.
- CylindricalDecompositionはすべての変数が実数であると仮定する.
- CylindricalDecompositionは一般に上下限に代数関数を含むような不等式を返す.
- 位相操作 op は次のいずれかである.
-
"Boundary" 解集合の境界 "Closure" 解集合の閉包 "Interior" 解集合の内側 "Exterior" 解集合の外側 "ClosureOfInterior" 解集合の内側の閉包 "InteriorOfClosure" 解集合の閉包の内側 "Components" 解集合の連結成分 - CylindricalDecompositionFunctionオブジェクトは,さらなる計算で効率的に使用できる半代数集合の明示的なコンパクト表現を提供する.
- CylindricalDecompositionFunctionオブジェクトは,通常,集合のブール値の組合せの計算,追加の条件による集合の制限,一部の変数の削除,集合の最適化等,半代数集合を使用した繰り返しの計算に使用される.
- x1,…,xnにおける円柱代数式は
の形をしている.ただし,
である.各
の形は
または
である.ただし
と
は,
の解集合上で定義され連続代数関数である.
上の
の解集合
はセルと呼ばれる.セル
とセル
の
への写像は,任意の
について,互いに素であるか同一であるかのどちらかである. - CylindricalDecompositionは,"Function"指定がなければ,等式と不等式の論理結合として明示的に書かれた円柱代数式を返す.
- CylindricalDecompositionFunctionは,CylindricalDecompositionの入力として,あるいはReduce,Resolve,FindInstance,Solve,Minimize等のソルバとして使う際にしばしばより効率的な,円柱代数式のカプセル化表現を与える.
- Normalは,CylindricalDecompositionFunctionオブジェクトを,等式と不等式の明示的な論理結合に変換する.
- トポロジー操作と出力形式の指定は組み合せることができる.つまり,CylindricalDecomposition[ineqs,{x1,x2,…},"BoundaryFunction"]は,CylindricalDecompositionFunctionオブジェクトとして表された ineqs の解集合の境界を与える.
例題
すべて開く すべて閉じる例 (2)
スコープ (14)
基本的な用法 (9)
CylindricalDecomposition[(x - 1)(x - 2) ^ 2(x - 3)(x - 4)(x - 5) > 0, x]Show[Plot[(x - 1)(x - 2) ^ 2(x - 3)(x - 4)(x - 5), {x, 0.5, 5.5}], Graphics[{Red, Point[{{1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}}]}]]NumberLinePlot[%%, {x, 0.5, 5.5}]CylindricalDecomposition[(x - 1)(x - 2) ^ 2(x - 3)(x - 4)(x - 5) ≥ 0, x]NumberLinePlot[%, {x, 0.5, 5.5}]CylindricalDecomposition[(x - 1)(x - 2) ≥ 0 && (x - 1 / 2)(x - 3 / 2) ≥ 0, x]NumberLinePlot[%, {x, 0, 3}]CylindricalDecomposition[Xor[(x - 1)(x - 2) ≥ 0, (x - 1 / 2)(x - 3 / 2) ≥ 0], x]NumberLinePlot[%, {x, 0, 3}]CylindricalDecomposition[x ^ 2 + y ^ 2 < 1, {x, y}]CylindricalDecomposition[x ^ 2 + y ^ 2 < 1 && y > x, {x, y}]RegionPlotを使って個々の円柱をプロットする:
{cyl1, cyl2} = List@@%;RegionPlot[{cyl1, cyl2}, {x, -1, 1}, {y, -1, 1}, PlotLegends -> "Expressions"]CylindricalDecomposition[x ^ 2 + y ^ 2 < 1 && y > x, {y, x}]{cyl1, cyl2} = List@@%;RegionPlot[{cyl1, cyl2}, {x, -1, 1}, {y, -1, 1}, PlotLegends -> "Expressions"]CylindricalDecomposition[x ^ 2 + y ^ 2 ≤ 1 || x == 1, {x, y}]CylindricalDecomposition[x ^ 2 + y ^ 2 + z ^ 2 < 1, {x, y, z}]CylindricalDecomposition[x ^ 2 + y ^ 2 + z ^ 2 + w ^ 2 < 1, {x, y, z, w}]CylindricalDecompositionには定量化された式を使うことができる:
CylindricalDecomposition[Exists[y, x ^ 2 + y ^ 2 < 1 && y > x], x]CylindricalDecomposition[Sqrt[2]x ^ 2 + Root[# ^ 5 - 2# - 11&, 1]y ^ 2 < 1, {x, y}]CylindricalDecomposition[E ^ Pi x ^ 2 + Pi ^ E y ^ 2 ≤ 77 && Log[2]x + Log[3]y == 2, {x, y}]CylindricalDecomposition[Sqrt[x - y] ≤ Root[# ^ 3 - y # + x&, 1], {x, y}]位相操作 (5)
CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}]CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}, "Boundary"]CylindricalDecomposition[x^4 > x^2 + y^2, {x, y}]CylindricalDecomposition[x^4 > x^2 + y^2, {x, y}, "Closure"]CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}]CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}, "Interior"]CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}]CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}, "Exterior"]CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}]CylindricalDecomposition[x^4 ≥ x^2 + y^2, {x, y}, "Components"]オプション (2)
Method (1)
以下は,"InequalitySolvingOptions"グループのシステムオプションをローカルに設定する:
CylindricalDecomposition[46 v ^ 2 + 42 u w + 28 u x + 64 v y + 68 u z - 66 w z ≤ 21, {x, y, z, u, v, w}, Method -> {"CADConstruction" -> "LocalProjection"}];//AbsoluteTiming自動的メソッドによる選択ヒューリスティックは,ここではより低速の"GlobalProjection"を選択する:
CylindricalDecomposition[46 v ^ 2 + 42 u w + 28 u x + 64 v y + 68 u z - 66 w z ≤ 21, {x, y, z, u, v, w}];//AbsoluteTimingWorkingPrecision (1)
TimeConstrained[CylindricalDecomposition[E x ^ 2 + Pi y ^ 2 + E ^ 77 z ^ 2 <= Pi ^ 33 && x ^ 3 - 9y ^ 3 + 7z ^ 3 >= 1, {x, y, z}, "Function"], 60]WorkingPrecision->1000を使って分解を求めるが,結果が正しくない可能性がある:
CylindricalDecomposition[E x ^ 2 + Pi y ^ 2 + E ^ 77 z ^ 2 <= Pi ^ 33 && x ^ 3 - 9y ^ 3 + 7z ^ 3 >= 1, {x, y, z}, "Function", WorkingPrecision -> 1000]//Timingアプリケーション (2)
CylindricalDecomposition[y^2 == x (-1 + x^4), {x, y}]CylindricalDecomposition[y^2 == x (-1 + x^4), {x, y}, "Components"]CylindricalDecomposition[(x^2 + y^2) (x (2 + x) + y^2) < 8 x y^2, {x, y}]CylindricalDecomposition[(x^2 + y^2) (x (2 + x) + y^2) < 8 x y^2, {x, y}, "Components"]特性と関係 (8)
RegionPlotを使って2Dの半代数的集合を可視化する:
RegionPlot[x ^ 2 + y ^ 2 < 1 && y > x, {x, -1, 1}, {y, -1, 1}]RegionPlot3Dを使って3Dの半代数的集合を可視化する:
RegionPlot3D[x ^ 2 + y ^ 2 + z ^ 2 < 1, {x, -1, 1}, {y, -1, 1}, {z, -1, 1}]Resolveは限定子を除去するので,円柱分解の計算を回避できるかもしれない:
CylindricalDecomposition[Exists[z, x ^ 2 + y ^ 2 + z ^ 2 < 1 && y > x], {x, y}]Resolve[Exists[z, x ^ 2 + y ^ 2 + z ^ 2 < 1 && y > x]]これに加え,Reduceは異なる領域と超越関数も扱う:
Reduce[x ^ 2 - 2y ^ 2 == 1, {x, y}, Complexes]Reduce[x ^ 2 - 2y ^ 2 == 1 && x > 0 && y > 0, {x, y}, Reals]Reduce[x ^ 2 - 2y ^ 2 == 1 && x > 0 && y > 0, {x, y}, Integers]Reduce[Exp[x] - 2y == 1 && y == x + 1, {x, y}]FindInstanceを使って方程式および不等式を満足する点を求める:
FindInstance[x ^ 2 + y ^ 2 < 1, {x, y}, 5]x ^ 2 + y ^ 2 < 1 /. %SemialgebraicComponentInstancesは各円柱のサンプル点を与える:
SemialgebraicComponentInstances[x ^ 2 + y ^ 2 < 1, {x, y}]CylindricalDecompositionはいくつかの円柱を組み合せてよりコンパクトに表示する:
CylindricalDecomposition[x ^ 2 + y ^ 2 < 1, {x, y}]GenericCylindricalDecompositionは全次元の部分のみを計算する:
CylindricalDecomposition[x ^ 2 + y ^ 2 ≤ 1 || x == 1, {x, y}]GenericCylindricalDecomposition[x ^ 2 + y ^ 2 ≤ 1 || x == 1, {x, y}]set1 = x ^ 2 + y ^ 2 < 1 && y > xset2 = CylindricalDecomposition[set1, {x, y}]set3 = CylindricalDecomposition[set1, {y, x}]{set1, set2, set3} /. {{x -> 1, y -> 1}, {x -> 0, y -> 1 / 2}}考えられる問題 (2)
CylindricalDecompositionには,厳密な無限大精度の入力が必要である:
CylindricalDecomposition[1.2x ^ 2 + 3.2y ^ 2 < 1.0, {x, y}]Rationalizeは厳密ではない数を厳密な数に変換する:
Rationalize[1.2x ^ 2 + 3.2y ^ 2 < 1.0, 0]CylindricalDecomposition[%, {x, y}]cd = CylindricalDecomposition[x ^ 2 + y ^ 2 + y ^ 2 <= 1 && x ^ 2 + 2y ^ 2 + 3z ^ 2 ≥ 4x y z + 1, {x, y, z}]ToDNF[e_Or] := ToDNF /@ e;
ToDNF[And[a___, b_Or, c___]] := ToDNF[And[a, #, c]]& /@ b;
ToDNF[e_] := e;ToDNF[cd]おもしろい例題 (1)
disk[{x0_, y0_}, r_] := (x - x0) ^ 2 + (y - y0) ^ 2 < r ^ 2disk[{-7 / 4, 9 / 4}, 1 / 3] || disk[{9 / 4, 9 / 4}, 1 / 3] || (disk[{0, 0}, 5] && !disk[{2, 2}, 1] && !disk[{-2, 2}, 1] && (!disk[{0, -1}, Sqrt[5]] || disk[{0, 1}, 3]))RegionPlot[%, {x, -5, 5}, {y, -5, 5}]テクニカルノート
履歴
2003 で導入 (5.0) | 2017 で更新 (11.2) ▪ 2020 (12.2)
テキスト
Wolfram Research (2003), CylindricalDecomposition, Wolfram言語関数, https://reference.wolfram.com/language/ref/CylindricalDecomposition.html (2020年に更新).
CMS
Wolfram Language. 2003. "CylindricalDecomposition." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/CylindricalDecomposition.html.
APA
Wolfram Language. (2003). CylindricalDecomposition. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/CylindricalDecomposition.html
BibTeX
@misc{reference.wolfram_2026_cylindricaldecomposition, author="Wolfram Research", title="{CylindricalDecomposition}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/CylindricalDecomposition.html}", note=[Accessed: 08-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_cylindricaldecomposition, organization={Wolfram Research}, title={CylindricalDecomposition}, year={2020}, url={https://reference.wolfram.com/language/ref/CylindricalDecomposition.html}, note=[Accessed: 08-September-2026]}