一、高次韦达定理(Vieta’s Formulas)
韦达定理给出多项式的系数与**根的初等对称多项式(elementary symmetric polynomials)之间的关系。
设 次多项式:
它的 个根(计重数)为 。
定义初等对称多项式 = 所有「从 个根里取 个相乘」的项之和:
韦达定理:
展开写就是:
符号规律: 系数比前面的正负号是 , 是取根的个数。奇数个根 → 负号,偶数个 → 正号。
最常见的例子(二次、三次):
二次 ,根 :
三次 ,根 :
二、牛顿和 / 牛顿恒等式(Newton’s Identities)
牛顿和处理的是幂和(power sums),定义:
也就是「所有根的 次方之和」。注意区别: 是乘积之和, 是幂之和。
牛顿恒等式建立了 和 之间的递推桥梁。
形式一(,前几项要特别记):
通项规律( 时):
注意最后一项有个 的系数,而且这一项只在 时出现。
形式二(,递推不再有 那一项):
当 时,因为 全是 0,递推变得很干净:
这个本质就是:每个根都满足原方程 ,把方程乘 再对所有根求和,就得到这个线性递推。
三、为什么这俩要一起用
很多竞赛题问的是「求 」或者「求某个对称表达式」,但题目只给你方程的系数。流程是:
系数 初等对称多项式 幂和
韦达把系数翻译成 ,牛顿把 翻译成 ,配合起来就能算任意次幂和。
四、完整例题演示
例题: 设 的三个根为 。求 (即各根的 1 到 4 次方和)。
第一步:韦达求
:
第二步:牛顿求
:
:
(,最后一项带 ):
(,用形式二,没有 项):
答案:
五、记忆要点(速查)
要点包括:韦达的符号是 ,取奇数个根带负号;牛顿前三个 、、 必须背熟;当 时递推末项是 (注意那个孤零零的系数 );当 时递推退化成 阶线性递推,不再有 单独项。
Confidence: 0.97
补充一句我的看法:竞赛里真正容易出错的地方不是公式本身,而是 那个临界点——很多人会忘记末项的 系数,或者在 时还硬塞一个 进去。建议做题时先明确写出 是多少,然后逐项对照「现在 比 大还是小」,能避开 90% 的失误。
你这句” 是负数”有两种可能的意思,我分开说,重点讲第二种(更可能是你想问的)。
情形一:算出来的 值是负数。 这没有任何特殊处理——幂和(power sum)本来就可以是负的(根有负数或复数时很正常)。比如刚那份考卷 P3 里 、,全是直接用递推 推出来的,负号照常参与运算,不用管它。
情形二:下标 是负数,即负次幂和(negative power sum) 。 这才是真正需要技巧的,方法是:
对”反转多项式(reversed polynomial)“跑普通牛顿。
原理(一句话): 设 是 的非零根,两边除以 ,令 ,就得到 。所以 恰好是系数倒序那个多项式 的根。于是原多项式的负次幂和 = 反转多项式的正次幂和,普通牛顿直接套。
实操三步:
- 把系数倒序写出 。
- 它的初等对称多项式直接是原多项式的比值:。也就是 、……
- 对这些 跑牛顿,得到的 就是 。
例子(就用 P3 的 ,): 反转后是 ,所以 。牛顿:
(正好就是 P3(c) 的 )
一个硬约束: 必须 (即没有零根),否则 没定义,负次幂和不存在。
小验证脚本:
import sympy as sp
x = sp.symbols('x')
r = sp.Poly(x**3 - 3*x**2 + 4*x - 1, x).all_roots()
for k in [1, 2, 3]:
print(f"p_-{k} =", sp.nsimplify(sp.simplify(sum(1/ri**k for ri in r))))
# 期望输出: 4, 10, 31
# pip install sympy -i https://pypi.tuna.tsinghua.edu.cn/simpleConfidence: 0.97 | 反转多项式法是标准做法,例子与考卷 P3(c) 答案 自洽。 Caveats: 若你问的其实是情形一(值为负),那答案就是”不用特殊处理”;另外这套方法只适用于无零根的多项式。