You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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}]
  • 实现步骤:
    1. 提取入参里所有坐标的x、y值转为numpy数组
    2. 校验入参合法性:至少2个坐标点,且所有x值不重复
    3. 构造范德蒙德矩阵,注意设置幂次升序排列保证系数顺序符合要求
    4. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:18:02