CylindricalDecomposition[expr,{x1,x2,…}]
将由语句 expr 表示的区域分解为圆柱分量,其方向依次对应于 xi.
CylindricalDecomposition[expr,{x1,x2,…},op]
求对由语句 expr 表示的区域应用拓扑运算的结果的分解.
CylindricalDecomposition[expr,{x1,x2,…},"Function"]
将结果表示为 CylindricalDecompositionFunction[…][x1,x2,…],以便有效运用于以后的计算中.
CylindricalDecomposition
CylindricalDecomposition[expr,{x1,x2,…}]
将由语句 expr 表示的区域分解为圆柱分量,其方向依次对应于 xi.
CylindricalDecomposition[expr,{x1,x2,…},op]
求对由语句 expr 表示的区域应用拓扑运算的结果的分解.
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 的圆柱代数公式的形式为
,其中
. 每个
的形式为
或
,其中
和
是在解集
上定义并连续的代数函数.
中的
的解集
被称为 cell. 当
时,cell
和
在
上的投影要么不相交,要么相同. - 如果没有指定 "Function",CylindricalDecomposition 返回以等式或不等式的布尔组合给出的圆柱代数公式.
- CylindricalDecompositionFunction 给出圆柱代数公式的压缩 (encapsulated) 表示,当用于 CylindricalDecomposition 的输入时,或用于如 Reduce、Resolve、FindInstance、Solve 或 Minimize 这样的求解器时会更加高效.
- Normal 将 CylindricalDecompositionFunction 对象转换成等式或不等式的布尔组合.
- 可将拓扑运算的指定和输出格式组合在一起,如 CylindricalDecomposition[ineqs,{x1,x2,…},"BoundaryFunction"] 给出了解集的边界,并将解集 ineqs 表示为 CylindricalDecompositionFunction 对象.
范例
打开所有单元 关闭所有单元基本范例 (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 图形显示二维半代数集:
RegionPlot[x ^ 2 + y ^ 2 < 1 && y > x, {x, -1, 1}, {y, -1, 1}]利用 RegionPlot3D 图形显示三维半代数集:
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 语言. 2003. "CylindricalDecomposition." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/CylindricalDecomposition.html.
APA
Wolfram 语言. (2003). CylindricalDecomposition. Wolfram 语言与系统参考资料中心. 追溯自 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: 04-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: 04-September-2026]}