如何用微积分方法编写Python最小化函数使calc返回0?
解决方法
首先化简calc函数的返回表达式,直接通过代数求解找到让结果为0的x值即可,完全不需要数值优化算法:
- 先整理
calc中的计算逻辑:
已知z = b + c + d,把calc的返回值y合并同类项后可以得到:y = x*a - z - x*a*0.015 y = x*a*(1 - 0.015) - z y = x*a*0.985 - z - 令
y=0,解这个一元一次方程求x:x*a*0.985 = z x = z / (a * 0.985)
把这个求解逻辑直接写入minimize函数就行。
完整代码
def calc(x, a, b, c, d): z = b + c + d y = x * a - z - x * a * 0.015 return y def minimize(a, b, c, d): z = b + c + d return z / (a * 0.985) A = 100 B = 90 C = 5 D = 1 print(calc(minimize(A, B, C, D), A, B, C, D)) # 输出接近0的浮点数(受浮点运算精度影响)
补充说明
- 这种代数求解的方式比数值优化更高效,结果也更精确,唯一的误差来自Python的浮点运算精度。
- 不管
z和a的大小关系如何,这个公式都能让calc的返回值趋近于0,不需要额外处理边界情况。
内容的提问来源于stack exchange,提问作者Herberts
相关产品推荐
相关产品推荐

