Skip to content

定理Theorem

Sturm–Tarski 符号查询

Sturm–Tarski query · Tarski query · Sturm–Tarski theorem · 加权实根符号查询

将实根计数推广为根上符号之和,以导数加权负余式链计算查询,并用三次查询恢复正、负、零根数。

知道 p 有几个实根之后,还可以问:其中多少个使 q 为正?在一个指定的无理根上,q 到底是正、负还是零?逐个近似求根再代入,遇到很小的值时容易把等号误判为正负。

Sturm–Tarski查询直接计算

T(a,b)(q;p)=∑p(α)=0a<α<bsgnq(α),

其中每个不同实根出现一次,sgn 取 −1,0,1。每个根的贡献不再固定为一,而是由它上面的 q 值决定。当 q=1,这就是通常的Sturm根计数。

一个查询值为零,可能因为所有值都为零,也可能因为正负贡献抵消。要恢复三个数量,需要后面介绍的三次查询,而不能把一次查询误当作完整符号表。

形式陈述 ​

先把问题放进精确输入 ​

以下设 p∈Q[x] 非常数、平方自由,q∈Q[x],且有理端点满足 a<b、p(a)p(b)≠0。非平方自由输入先取平方自由部分,因此本页不按重数加权。

先计算

r=rem(p′q,p).

在 p 的每个根 α 上,r(α)=p′(α)q(α)。取余使次数降到 deg⁡p 以下,并没有改变所需根上的值。

若 r=0,因为 p 平方自由,p′(α)≠0,所以每个根上 q(α)=0,查询为零,算法结束。否则令

d=gcd(p,r),A=p/d,B=r/d.

被 d 删除的恰是 q(α)=0 的根,它们原本就贡献零。留下的 A,B 互素,且 deg⁡B<deg⁡A。

现在从 S0=A,S1=B 开始做负余式链:

Si+1=−rem(Si−1,Si),

停在最后一个非零项。按上一页同样的规则,求值后删零,再数变号,记为 VA,B(t)。结论是

T(a,b)(q;p)=VA,B(a)−VA,B(b).

注意第二项是由 p′q 得到的,不是随意把普通Sturm链的导数换成 q。导数因子负责把根穿越的方向与 q 的符号对齐。

直觉

权重怎样进入过根的那一刻 ​

A,B 互素,故负余式链的最后一项为非零常数。任何中间项过零时,左右邻项仍然相反,总变号数保持不变;这部分证明完全复用Sturm计数的局部三项分析。

设 α 是留下来的 A 的根。因为 p=dA,有

p′(α)=d(α)A′(α),r(α)=d(α)B(α).

而 d(α)≠0,于是

B(α)A′(α)=r(α)p′(α)=q(α).

在 α 附近,A(x) 的符号是 A′(α)(x−α) 的符号,B 保持 B(α) 的符号。

  • 若 q(α)>0,B(α) 与 A′(α) 同号,链首从异号变为同号,V 减一
  • 若 q(α)<0,二者异号,链首从同号变为异号,V 增一
  • 若 q(α)=0,这个根已被 d 删除,不产生变化

因此跨过一个根时,V(α−)−V(α+)=sgnq(α)。把区间内所有根的贡献相加,便得到公式。这也解释了为什么加权查询的 V 不一定单调下降。

例子与边界

一个只用有理数的负号证书 ​

取

p=x3−x−1,q=x2−2,(a,b)=(5/4,4/3).

该区间只含一个 p 的根 α,所以查询应直接给出 sgn(α2−2)。

先算加权导数余式:

p′q=(3x2−1)(x2−2)=3x4−7x2+2,

由 x3≡x+1(modp),得到

r=−4x2+3x+2.

这对输入的GCD为一,负余式链为

p,−4x2+3x+2,58−x16,368.

中间两步可由以下等式核验:

p=(−x4−316)r−(58−x16),r=(64x+592)(58−x16)−368.

端点表为

t 第一项 第二项 第三项 第四项 变号数
5/4 −19/64 −1/2 35/64 368 1
4/3 1/27 −10/9 13/24 368 2

所以查询为 1−2=−1,从而 α2−2<0。变号数增加不是算法出错,恰好说明这个根带来一个负贡献。

边界:三种看似省事的改法会出错 ​

不能省去导数权重。 对 p=x2−1、q=1,若从 (p,1) 直接建链,两端变号之差为零,却有两个实根。正确第二项是 p′q=2x。

不能把近零当零。 公共根的删除靠精确GCD完成。若将 q 改成 q+1/1020,曾经为零的贡献可能变成正或负;固定小数阈值会悄悄改变数学问题。

不能混用重数口径。 若原输入 F=p2,本页仍对每个不同根计一次。需要按 F 的重数统计时,应先做平方自由分解,对重数为 k 的块查询后乘 k,再相加。

最后,余式项只可乘正数来简化符号。对普通子结式实现,也必须确认其输出有与本页一致的有符号恢复规则,不能只因为它也使用Euclidean算法就直接数变号。

推论与应用

三次查询恢复完整数量 ​

固定一个根集合,设 n+,n−,n0 分别为 q 正、负、零的根数。计算

N=T(1;p),U=T(q;p),W=T(q2;p).

因为非零数的平方为正,零的平方仍为零,三式满足

N=n++n−+n0,U=n+−n−,W=n++n−.

解出

n+=W+U2,n−=W−U2,n0=N−W.

这些等式还能帮助检查结果:必须有 0≤W≤N、|U|≤W,而 W 与 U 同奇偶。若其中一条失败,输入条件、端点规则或符号链至少有一处处理不对。

例如令

p=(x−1)(x2−2),q=x−1,

在 (−2,2) 内的三个根依次为 −2,1,2。查询得到 (N,U,W)=(3,0,2),于是 (n+,n−,n0)=(1,1,1)。U=0 来自一个正贡献与一个负贡献抵消,中间另有一个真正的零值;三种情形现在被分开了。

若要多个多项式的联合符号条件,可以对它们适当的乘积进行更多查询,再恢复各符号组合的计数。那需要新的线性恢复步骤,不能把单个 q 的三个数量直接当成多个条件的交集数量。

区间选根与整轴统计是两个接口 ​

当 (a,b) 隔离单根 α 时,T(q;p) 只有一项,直接给出 q(α) 的符号。这使实代数数表示有了精确求值接口,无需先构造 q(α) 的极小多项式。

当区间含多个根,输出则是这些根的符号总和。它不能告诉我们正根具体位于哪里;若需要逐根标注,就在每个隔离区间分别查询。

若要整个实轴的结果,可使用一个严格包含全部实根的有理区间。也可以直接计算 ±∞ 的符号:非零多项式在 +∞ 的符号是首项系数符号,在 −∞ 还要乘 (−1)deg⁡Si。这只是在符号层读取首项,不需要真的把无穷代入多项式。

单元中的第二条证书路线 ​

对三次算例,查询给出了 α2−2<0 的一份余式证书。Hermite迹型会从同一多项式构造一个有理对称矩阵,以“正平方数减负平方数”重新得到 −1。两条计算读取同样的数学对象,却使用不同的中间数据,适合交叉核对。

参考资料
  • Wenda Li、Grant Olney Passmore、Lawrence C. Paulson,Deciding Univariate Polynomial Problems Using Untrusted Certificates in Isabelle/HOL,§5.1 “The Sturm–Tarski Theorem”、§5.2:Tarski查询、带符号余式与隔离根处符号判定。
  • Wenda Li,The Sturm–Tarski Theorem,Archive of Formal Proofs,2014,含实根计数与查询的形式化证明。
  • Saugata Basu、Richard Pollack、Marie-Françoise Roy,Algorithms in Real Algebraic Geometry,第2版,2006,Tarski查询与符号判定章节。本文采用先删除零贡献公共因子、再逐根跟踪变号的证明,并显式固定所有缩放符号。
关系图谱6 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例

类型化关系