使用scipy.optimize.fsolve求解数组缩放因子遇问题求指导
问题分析与解决办法
你的需求本质是求解线性方程,用fsolve不是最优选择,甚至会因为函数的线性特性导致迭代逻辑不触发,直接返回初始值。
直接解法(最优)
既然目标是找到x满足sum(array * x) = Target_value,变形后可得:x = Target_value / sum(array)
直接计算即可,不需要用数值优化方法,代码如下:
Target_value = 1169308000 # 替换为你的实际数组 array = [...] scaling_factor = Target_value / sum(array)
若一定要用fsolve的修正方案
如果坚持用scipy.optimize.fsolve,需要适配函数的输入输出格式,避免迭代提前终止。修正后的代码:
from scipy.optimize import fsolve Target_value = 1169308000 array = [...] # 替换为你的实际数组 def func(x): # 将返回值转为数组形式,适配fsolve的参数要求 return [sum(array * x) - Target_value] # 可尝试调整初始值或增加迭代次数 scaling_factor = fsolve(func, 0.1, maxfev=1000)
不过这种方式完全没必要,直接计算是更高效准确的方案。
内容的提问来源于stack exchange,提问作者HM14
相关产品推荐
相关产品推荐

