Skip to content

定理Theorem

Sturm 多项式实根计数

Sturm theorem for real polynomial roots · Sturm sequence · 多项式的 Sturm 定理

用带负号的多项式余式链在区间两端数变号,证明其差恰为不同实根数,并明确零项、重根和根端点的处理。

x3−x−1 在 x=1 时等于 −1,在 x=2 时等于 5。由介值定理,(1,2) 至少有一个根。可是“至少一个”还没有排除三个,也没有排除负半轴上的别的根。

Sturm 的办法是在原多项式旁边安排一串辅助多项式。当位置从左向右越过原多项式的一个简单根,这串值恰好少一次变号;越过辅助多项式的根,变号总数不动。于是只看区间两端,就能知道中间经过了几个根。

形式陈述 ​

这串多项式怎样生成 ​

先设有理系数多项式 f∈Q[x] 非常数且平方自由,即 gcd(f,f′)=1。形式导数按 (akxk)′=kakxk−1 计算。建立

S0=f,S1=f′,Si+1=−rem(Si−1,Si),

直到下一余式为零;零余式不加入序列。这里 rem 是有理系数多项式长除法的余式,次数严格小于除数次数,所以过程一定终止。平方自由性保证最后一项是非零常数。

关键是余式前的负号。每一步都留下恒等式

Si−1=QiSi−Si+1.

它既是生成规则,也是稍后检查符号的证书。直接使用普通 Euclidean 算法的正余式,虽然仍能算 GCD,却不满足本页的根计数规则。

对 f=x3−x−1,第一步为

f=x3(3x2−1)−(23x+1),

第二步为

3x2−1=(92x−274)(23x+1)−(−234).

所以完整非零链是

x3−x−1,3x2−1,23x+1,−234.

两条除法恒等式都可直接乘开核验。最后得到非零常数,也同时认证了 f 没有重根。

先删零,再数相邻异号 ​

对一个实数 t,将 S0(t),…,Sm(t) 中的零删去,再数相邻两个非零数符号相反的次数,记为 V(t)。

例如 (+,0,−,−) 删除零后为 (+,−,−),只有一次变号。零不被算作正,也不被算作负;它只是暂时不参与相邻比较。

若 a<b 且 f(a)f(b)≠0,Sturm 定理给出

#{α∈(a,b):f(α)=0}=V(a)−V(b).

端点允许某个辅助多项式为零,但不能是 f 的根。下表使用刚才的四项链:

t S0(t) S1(t) S2(t) S3(t) V(t)
−2 −7 11 −1/3 −23/4 2
0 −1 −1 1 −23/4 2
1 −1 2 5/3 −23/4 2
5/4 −19/64 59/16 11/6 −23/4 2
4/3 1/27 13/3 17/9 −23/4 1
2 5 11 7/3 −23/4 1

因此 (−2,2) 恰有一个实根,而且它在 (5/4,4/3)。根界已保证所有根的模小于二,故这就是全部实根,不只是图上找到的一个。

直觉

辅助项过零时,为什么计数不变 ​

先证明相邻两项不能同时为零。若 Si−1(t)=Si(t)=0,除法恒等式迫使 Si+1(t)=0,一路传到最后的非零常数,矛盾。

现在设中间项 Si(t)=0,其中 0<i<m。同一恒等式给出

Si−1(t)=−Si+1(t)≠0.

所以左右邻居符号相反。在 t 附近,邻居保持各自符号。中间项无论是正、负,还是正好为零,这一小段总共都贡献一次变号:

(+,+,−),(+,−,−),(+,0,−)

都是一次;把所有符号反转也一样。辅助项因此不会凭空增加或消去计数。

如果几个不相邻的辅助项在同一点为零,可以分别处理这些局部三项段;它们不共享任何会过零的邻项,变号总和仍然不动。这里只用了连续多项式的非零值在足够小邻域内保持符号。

原多项式过根时,为什么恰好减一 ​

设 f(α)=0。平方自由性使 f′(α)≠0,写

f(x)=(x−α)h(x),h(α)=f′(α).

在足够小的邻域,h(x) 与 f′(x) 同号。因此在根左侧,f(x) 与 f′(x) 异号;在根右侧,它们同号。链首两项从“一次变号”变成“零次变号”。

其余位置的总变号数按上一节保持不变,所以 V 跨过 α 恰好减一。有限区间内只有有限多个多项式零点,把区间按这些点分段,所有辅助点贡献零、每个 f 的根贡献一;相加就是 V(a)−V(b)。

辅助零点与真正的计数跳跃

图中 −3/2 是 S2 的根,±1/3 是 S1 的根;它们都不是 f 的根。虚线标出这些位置时,蓝色阶梯保持水平。红色根只用有理区间 (5/4,4/3) 标定,绘图位置不承担精确证书。

例子与边界

重根、端点与缩放各有一条规则 ​

先去重再计数。 对任意非零非常数 F∈Q[x],令

f=F/gcd(F,F′).

这个平方自由部分与 F 有相同的不同根。用 f 的链计数,输出的是不同根数;若还要各自重数,调用平方自由分解保存的重数块。例如 (x−1)2 在 (0,2) 有一个不同根、按重数计有两个,两个口径不能混写。

根端点要单独处理。 本页公式使用开区间且要求端点非根。若 f=x,链为 (x,1),则 V(−1)−V(0)=1,但 (−1,0) 里没有根。这说明直接把根端点的零删去,会把右端点算进去。需要开区间时可改选非根有理端点,或明确使用单侧值 V(a+)−V(b−)。

只允许不改符号的简化。 把链中的任意一项乘以正数不会改变 V,所以可用正分母清掉分数。把最后的 −23/4 首一化为 1 却乘了负数,会毁掉证书。“每项都化为首一”适合某些GCD接口,不适合直接拿来数Sturm变号。若继续递推,应同时保存实际的除法恒等式,而不是把旧商硬套到缩放后的项上。

推论与应用

把数量保证变成下一步工具 ​

一条有理余式链可以反复在不同端点求值,不必为每个区间重算。所有端点值都是有理数,符号可以精确判断;复杂性仍取决于分子分母的位长度,不能把任意大有理数运算当成固定耗时。

现在对任何候选区间都能回答零个、一个或多个根。实根隔离据此丢弃零根区间、保留单根区间、继续分割多根区间。若需要在这些根上统计另一个多项式的正负,Sturm–Tarski 查询保留同样的余式机制,把“每个根贡献一”推广为“按所查询的符号贡献 −1,0,1”。

参考资料
  • Sturm Theory,IMSc多项式算法课程讲义,Theorem 3及前面的两类过零分析,PDF第1–2页;§1讨论实根隔离。本文固定使用有理系数负余式链,不将任意子结式缩放直接当作Sturm链。
  • Saugata Basu、Richard Pollack、Marie-Françoise Roy,Algorithms in Real Algebraic Geometry,第2版,Springer,2006,实闭域上的Sturm与Tarski计数部分。
  • Wenda Li,The Sturm–Tarski Theorem,Archive of Formal Proofs,2014:Sturm计数作为符号查询特例的形式化证明。
关系图谱9 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系