跳转至

04 · 多项式:系数序列与 Sturm 序列

多项式:系数序列与 Sturm 序列

从有限系数序列构造多项式,再用精确有理数运算研究区间内的实根数。

阅读本章前

你已经能把有理数运算追溯到整数和自然数的定义。

完成本章后,你可以
  • 用自己的话说明“多项式:系数序列与 Sturm 序列”中的数学定义
  • 指出定义在 Python 数据中的表示方式
  • 根据实际实现预测一段小规模执行过程
数学定义

多项式由 `(a₀,a₁,…)` 表示,其中 `aᵢ` 是 `xⁱ` 的系数。Sturm 定理用符号变化数之差给出区间内不同实根的个数。

数据表示

`Polynomial` 保存从常数项开始的系数元组,并删除末尾的零;零多项式因此有唯一表示。

Python 实现

`(a₀,a₁,…)` → `Polynomial`; `#roots` → `sturm_sequence`

与本章一起阅读的实现和测试

peano/polynomial.py · tests/test_polynomial.py

数学定义

数学定义

多项式由 (a₀,a₁,…) 表示,其中 aᵢ 是 xⁱ 的系数。Sturm 定理用符号变化数之差给出区间内不同实根的个数。

数据表示

数据表示

Polynomial 保存从常数项开始的系数元组,并删除末尾的零;零多项式因此有唯一表示。

Python 实现

Python 实现

evaluate 按系数求值;sturm_sequence 反复取带负号的余式;count_real_roots 比较区间两端的符号变化。

本课程使用的精确对应关系:

`(a₀,a₁,…)` → `Polynomial`; `#roots` → `sturm_sequence`

执行过程

执行过程

对 x²-2 在 1 和 2 处求值,会得到一负一正,为下一章的隔离区间提供依据。

运行前预测

在运行前判断两个端点的符号,并说明这是否足以证明区间里恰有一个根。

实验 · 多项式:系数序列与 Sturm 序列 尚未运行
⌘ / Ctrl + Enter
输出
请先写下预测,再运行。

用测试核对

用测试核对

测试检查系数规范化、求值、除法和已知多项式的根数。恰有一个根要由 Sturm 计数确认,而非只看符号。

适用范围

适用范围

这里只处理有理系数的一元多项式;重根和端点根需要实现中的明确约定。

关于“多项式:系数序列与 Sturm 序列”的实现,哪一种说法正确?