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

已知x与f(x)取值时如何借助Python包求解三次函数未知系数

三次函数未知系数的Python求解方案

完全可以通过Python实现三次函数的系数反求,这个问题本质是线性方程组求解/多项式拟合问题,和已知系数求方程根是完全不同的两类问题,用numpy这类常规科学计算库就能快速实现,不需要复杂的专用工具。

核心原理

三次函数的形式为 f(x) = ax³ + bx² + cx + d,对于每一组已知的观测值$(x_i, f(x_i))$,代入公式就能得到一个关于未知数a、b、c、d的线性方程:
a*x_i³ + b*x_i² + c*x_i + d = f(x_i)
只要累计的方程数量≥4,就可以通过求解得到系数值:

  • 若刚好有4组无误差的精确观测值,可直接求解线性方程组得到唯一精确解
  • 若有超过4组带测量误差的观测值,可通过最小二乘拟合得到最优的系数估计值

实现方法

场景1:4组无误差精确数据

使用numpy的线性代数求解器直接解线性方程组即可,示例代码如下:

import numpy as np

# 替换为你自己的4组x、f(x)对应取值
x = np.array([0, 1, 2, 3])
y = np.array([4, 10, 26, 58])  # 示例数据对应真实系数a=1,b=2,c=3,d=4

# 构造线性方程组的系数矩阵
coef_matrix = np.vstack([x**3, x**2, x, np.ones(len(x))]).T
# 求解方程组
a, b, c, d = np.linalg.solve(coef_matrix, y)

print(f"求解结果:a={a}, b={b}, c={c}, d={d}")

场景2:≥4组带误差的多组数据

课程项目中采集的真实数据一般都带测量误差,这时候直接用numpy内置的多项式拟合函数polyfit做最小二乘拟合即可,鲁棒性更强,示例代码如下:

import numpy as np

# 替换为你自己的多组x、f(x)对应取值,数据量≥4即可
x = np.array([0, 0.5, 1, 1.5, 2, 2.5, 3])
# 示例数据为真实值加小幅度随机噪声,模拟真实测量场景
y = x**3 + 2*x**2 + 3*x + 4 + np.random.normal(0, 0.1, size=len(x))

# 三次多项式拟合,deg参数指定多项式最高次为3
a, b, c, d = np.polyfit(x, y, deg=3)

print(f"拟合得到的系数:a={a:.4f}, b={b:.4f}, c={c:.4f}, d={d:.4f}")

注意事项

  • 如果你的数据中存在重复x值、或者x取值存在共线性问题,np.linalg.solve会抛出运算错误,这种场景下无论数据是否精确,都建议优先用np.polyfit计算
  • 如果需要输出系数的置信区间、做更复杂的拟合误差分析,可以使用scipy库的scipy.optimize.curve_fit接口,调用逻辑和polyfit类似,支持自定义拟合的约束条件

内容的提问来源于stack exchange,提问作者user032020

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:02:01