Python下高效求解百万级四阶多项式指定区间局部最小值方案
百万级独立四阶多项式区间局部最小值求解需求
我正在寻找一种高效方法,用于为数量超过100万、相互独立的四阶多项式,在给定/指定区间/边界内求解局部最小值。
核心要求
- R1:即使处理100万个不同多项式方程,仍保持较高运行效率
- R2:局部最小值求解精度达到0.01(即保留2位小数)
目前我已基于scipy实现了基础版本,效果尚可,但在着手采用并行编程方案前,想了解是否存在其他更适配该任务的工具包。
单多项式测试案例
为方便说明问题,先以单个多项式为例:
我尝试求解4x^4 + 6x^3 + 3x^2 + x + 5在区间(-5, 5)内的局部最小值,在个人笔记本上单次求解耗时约2ms,求得的局部最小值位置约为-0.72770502。单多项式的耗时可以接受,但由于我需要定期执行超过100万次该类运算,希望找到更快的实现方案。
对应单多项式求解代码如下:
from scipy import optimize import numpy as np # 定义四阶多项式的目标函数与梯度 # x为待评估的自变量取值 # par为长度为5的numpy数组,对应多项式从高次到低次的系数 def obj_grad_fun_custom(x,par): obj = (np.array([x**4,x**3,x**2,x**1,1]) * par).sum() grad = (np.array([4*x**3,3*x**2,2*x,1]) * par[:-1]).sum() return obj, grad # 测试求解示例多项式4x^4 + 6x^3 + 3x^2 + x + 5在约束边界内的最小值 res = optimize.minimize( fun = obj_grad_fun_custom, x0 = 0, args=(np.array([4,6,3,1,5])), # 传入多项式系数 jac=True , bounds=[(-2, 10)], tol=1e-10) print(res.x) # 耗时测试(个人环境下单次运行约2ms) %timeit optimize.minimize(fun = obj_grad_fun_custom, x0 = 0, args=(np.array([4,6,3,1,5])), jac=True, bounds=[(-5, 5)], tol=1e-10)
批量求解现有逻辑
下方是我计划定期运行的百万级不同四阶多项式局部最小值求解逻辑,希望能得到除scipy外更适配的工具包推荐,或是其他可行的替代优化方法。
# 批量多项式求解 result = [] # 存储所有多项式的局部最小值结果 poly_sim_no = 1000000 # 理想求解规模为100万甚至更高 np.random.seed(0) # 生成随机四阶多项式系数作为测试集 par_set = np.random.choice(np.arange(10), size=(poly_sim_no, 5), replace=True) for a in par_set: res = optimize.minimize(obj_grad_fun_custom, 0,args=(a), jac=True ,bounds=[(-5, 5)], tol=1e-10) result.append(res.x) print(result)
内容的提问来源于stack exchange,提问作者Daves
相关产品推荐
相关产品推荐

