如何使用Python求解指定x取值范围内方程Fp的最大值
Python计算指定区间内方程最大值的实现方法
问题排查
你原有代码报错的核心原因是max()函数要求传入可迭代对象(如列表、元组等)才能计算最大值,而你在循环内部每次仅生成单个Fp数值,直接对单个数值调用max()不符合函数参数要求。
正确实现方式
方法1:全量存储后计算最大值
先把所有x取值对应的Fp、Td值存入列表,再统一求最大值,逻辑直观易理解:
L = range(1, 11) fp_list = [] td_list = [] for x in L: Fp = 1000 + 9*(x**2) - 183*x Td = 20 - 0.12*(x**2) + 4.2*x fp_list.append(Fp) td_list.append(Td) print(f"x={x} Fp={Fp} Td={Td}") max_fp = max(fp_list) match_index = fp_list.index(max_fp) match_x = L[match_index] match_td = td_list[match_index] print(f"\nFp最大值:{max_fp},对应x取值:{match_x},对应Td值:{match_td}")
方法2:动态更新最大值
循环过程中直接记录当前最大值,不需要额外存储全量数据,适合取值范围大的场景:
L = range(1, 11) max_fp = float('-inf') match_x = None match_td = None for x in L: Fp = 1000 + 9*(x**2) - 183*x Td = 20 - 0.12*(x**2) + 4.2*x print(f"x={x} Fp={Fp} Td={Td}") if Fp > max_fp: max_fp = Fp match_x = x match_td = Td print(f"\nFp最大值:{max_fp},对应x取值:{match_x},对应Td值:{match_td}")
结果说明
目标方程是开口向上的二次函数,对称轴为x=183/(2*9)≈10.17,在1~10的取值区间内函数单调递减,因此最大值出现在x=1时,数值为826。
内容的提问来源于stack exchange,提问作者Sunny Start
相关产品推荐
相关产品推荐

