如何用Python求解多项式系数?实现get_polynom函数的方法
多项式系数求解实现思路
你提供的代码片段已经明确了核心实现路径:通过构造线性方程组,调用numpy的线性求解工具得到结果,具体实现逻辑和要求如下:
- 前提约束:n个坐标点可以唯一确定一个n-1次多项式,共n个系数,要求所有坐标点的x值不能重复,否则方程组无唯一解。
- 核心原理:对于多项式
y = c0 + c1*x + c2*x² + ... + c_{n-1}*x^{n-1},把每个坐标点代入可以得到n个线性方程,把方程转为矩阵形式A * C = B,求解C即可得到所有系数:- 矩阵A是n行n列的范德蒙德矩阵,第i行第j列的元素为
x_i ** j(x_i是第i个点的x坐标,j从0到n-1) - 向量B是所有坐标点的y值组成的一维数组
- 向量C就是要求的系数数组
[c0, c1, ..., c_{n-1}]
- 矩阵A是n行n列的范德蒙德矩阵,第i行第j列的元素为
- 实现步骤:
- 提取入参里所有坐标的x、y值转为numpy数组
- 校验入参合法性:至少2个坐标点,且所有x值不重复
- 构造范德蒙德矩阵,注意设置幂次升序排列保证系数顺序符合要求
- 调用
np.linalg.solve求解后直接返回结果
完整实现代码
import numpy as np def get_polynom(coords): x = np.array([p[0] for p in coords]) y = np.array([p[1] for p in coords]) n = len(coords) # 入参合法性校验 if n < 2: raise ValueError("至少需要2个坐标点才能确定多项式") if len(np.unique(x)) != n: raise ValueError("所有坐标点的x值不能重复") # increasing=True设置幂次从0开始升序,保证返回系数顺序为c0、c1... a = np.vander(x, n, increasing=True) b = y return np.linalg.solve(a, b)
使用示例
比如三个坐标点(0,1)、(1,3)、(2,7)对应多项式y = 1 + x + x²,调用函数的输出与预期一致:
coords = [(0, 1), (1, 3), (2, 7)] print(get_polynom(coords)) # 输出 [1. 1. 1.]
内容的提问来源于stack exchange,提问作者Oleg Ivanytskyi
相关产品推荐
相关产品推荐

