一个小数 可以很好地近似 的实根,但它没有说误差多大,也没有证明根是唯一的。实根隔离交付另一种答案:一个有理端点区间,里面恰好一个根;所有这样的区间合在一起,覆盖全部实根。近似值随后可以取区间中点,误差由区间宽度保证。
它与普通二分求根理路二分求根法Bisection method以端点异号区间为不变量,给出可验证误差界、对数成本和有限精度停止条件。的差别在“恰好一个”。例如 在 和 都为正,却在里面有两个根;只靠端点是否异号,会把这两个根一起漏掉。这里每次分割之前,先调用Sturm计数理路Sturm 多项式实根计数Sturm theorem for real polynomial roots · Sturm sequence · 多项式的 Sturm 定理用带负号的多项式余式链在区间两端数变号,证明其差恰为不同实根数,并明确零项、重根和根端点的处理。确认区间中到底有多少根。
形式陈述
明确输入和交付物
输入是非零的 ,系数以精确分数给出。输出是一列开区间
满足四条条件:
- 两个端点都不是 的根
- 每个 恰好含一个不同实根
- 各区间两两不相交
- 的每个实根都在某个 中
还可以要求 ,其中 是指定的有理精度。这个附加要求使中点 满足 。重数另附在对应区间上,不通过复制区间来表示。
非零常数没有根,直接返回空列表。零多项式在每个实数处都为零,不存在这种有限隔离列表,必须作为不符合输入条件的情形报告。
去重不等于丢掉重数
先求平方自由部分
它与 的不同根相同,且每个根都简单。若还要恢复重数,同时保存平方自由分解理路多项式平方自由分解Square-free factorization of polynomials · Square-free decomposition以形式导数、GCD 与正特征下的 Frobenius 开根分离不可约因子的重数。
其中非恒定 两两互素且平方自由。
接着为 建立一条Sturm链,并用根界理路多项式的根界Polynomial root bounds · Cauchy root bound · 多项式的 Cauchy 根界用系数的绝对值给全部复根一个严格外界,再通过倒数多项式与变量缩放构造可核验的实根搜索范围。找整数 ,保证全部实根在 中。链只建一次,以后在不同端点重复求值即可。记 。
三种区间,三种动作
把 放入待处理列表。每次拿出一个区间 :
- 若 ,丢弃它
- 若 ,且精度已经满足,将它加入输出
- 若 ,或还需要更窄的区间,选择一个非根有理数 ,改为处理 与
由于 不是根,计数满足
因此分割不会在切口丢失根,也不会重复计算它。
最自然的候选是中点。若 ,已经发现一个精确有理根,但不能继续把这个根当作“非根端点”。可以专门输出单点并调整邻区间;本页选择更统一的做法:改选附近的非根切口,仍让所有输出都采用开区间。
具体地,若 ,检查中间一半内的 个有理数
非零 次多项式最多有 个不同根,所以至少一个候选不是根。它在区间的四分之一与四分之三之间,两个子区间的长度都不超过原长的 。这个选择同时保证“找得到切口”和“确实缩短区间”。
直觉
为什么没有漏根,也为什么最终会停
在任意一步,每个实根都恰好属于一个已输出区间或一个待处理区间。初始时由根界成立。丢弃计数零的区间不会删掉根;保存计数一的区间不会混入第二个根;非根切口将原区间的根不重不漏地分到两边。因此这个不变量一直成立。
再看终止。 只有有限多个不同实根。如果至少有两个,令 为任意两个根之间距离的最小值;若只有一个,分离要求自动满足。沿任何不断细分的分支,第 层区间长度至多为
当它小于 ,其中不可能再含两个根;若还要求精度,继续缩到不超过 即可。计数为零的分支立即删除,所以经过有限层,待处理列表必为空。
这个证明并不要求预先知道 。算法通过计数决定是否继续; 只用来证明它不可能永远继续。若要从输入位数推导显式运行时间,还需要额外的根分离下界。
例子与边界
把一份七次输入算完
考虑展开输入
精确乘法可核验
它的首一GCD为 ,所以平方自由部分是
由根界可取 。这是一个可读性良好的隔离证书:
| 区间 |
来自哪个因子 |
该因子在两端的值 |
不同根数 |
中重数 |
|
|
|
1 |
1 |
|
|
|
1 |
2 |
|
|
|
1 |
1 |
|
|
|
1 |
1 |
这些开区间两两不相交;第二和第三个虽然共享端点 ,端点不属于任何一个区间,也不是根。
单看表中的异号还不够,唯一性和完整性需要另外核对。二次因子 的Sturm链为 ,在两个给定区间各计一根,在整个 共计两根。线性因子只有根一。三次因子的链在上一页已证明全实轴共一根,并将它放在 。三个因子两两互素,所以合计恰好四个不同实根,没有漏项。
附带的精确核验脚本还直接对六次平方自由部分建链,验证四个区间分别计一根、全区间计四根。因式分解只是让人容易复查的额外证书,隔离算法并不依赖先完成不可约分解。
隔离区间与重数分别记录
推论与应用
怎样把重数放回正确的根
得到 的单根区间 后,对每个平方自由块 在 中计数。因为这些块两两互素,而 只含 的一个根,恰有一个块计数为一,其下标 就是该根在 中的重数。
上例的非恒定块是
因此四个不同实根按重数合计为 ,不是七。另两个根是三次因子的非实共轭根。“多项式次数等于七”不能替代实根计数。
成本与可迁移的证书
若多项式次数为 ,Sturm链至多 项,每次端点求值用Horner法可保守地在 次有理数算术内完成。若有效细分深度为 ,每层至多有 个含根区间,连同其零根兄弟,整个树有 个节点,因此有保守的 次有理数算术预算,建链另计。
这不是同样大小的位运算界。余式系数和区间端点分母会增长;小根间距使 变大。实际实现可使用适当带符号的子结式技术降低系数膨胀,但必须保持已证明的符号约定。
一份隔离证书至少要保留原系数、平方自由关系、初始根界、输出区间及各端点变号数。把上例的三次因子换成 后,先重新计算,不要只把图中的红点移到负半轴;根区间、重数归属与全局计数都需要新的证书。
参考资料