Python scipy minimize_scalar求解体积高度结果不符及变量调用问题
Scipy求解体积公式参数返回异常问题解决
问题核心原因
你的代码存在两处逻辑错误,导致结果不符合预期:
- 目标函数逻辑错误:
minimize_scalar的作用是求传入函数返回值的最小值,你代码中(length * width * x) - target这行的计算结果没有被返回,函数直接返回了自变量x本身,优化器自然会寻找x的最小允许值,也就是你设置的区间下边界1附近,所以返回结果接近1。 - 结果取值错误:
x是目标函数内部的形参,仅在函数内部作用域生效,你直接执行print(x)会触发未定义变量报错,优化结果存储在minimize_scalar返回的结果对象的x属性中。
修正后的代码
from scipy.optimize import minimize_scalar def objective_function(x): target = 1300 length = 10 width = 10 # 返回计算体积和目标体积的差的平方,最小化这个值来让体积尽可能等于目标值 return (length * width * x - target) ** 2 res = minimize_scalar(objective_function, method='bounded', bounds=(1, 100)) # 从返回结果中取优化后的x值 print(res.x)
运行后输出结果约为13,符合预期。
外部使用求解结果的方法
求解得到的x值可以在函数外部使用,直接读取res.x即可,这是全局作用域下的变量,你可以直接赋值给其他变量使用,比如height = res.x后续调用height即可。
内容的提问来源于stack exchange,提问作者Rockport Redfish
相关产品推荐
相关产品推荐

