如何用Python循环构造含不同系数的x求和函数并求取极小值
代码修正方案
你原代码的核心问题如下:
- 在循环内重复定义f、g函数,运行结束后g仅保留了最后一次循环的逻辑,完全没有实现所有项的累加
- 调用f时错误传入i作为参数,而f的入参应为x,计算逻辑完全错误
- g仅实现了两个项的相加,还存在i+1超出数组长度的越界风险
修正后完整代码
from scipy.optimize import minimize import numpy as np from matplotlib import pyplot as plt # 预先定义参数 x_range = np.arange(1, 50, 0.001) C = [860, 1090, 1020, 1060, 1070, 1120, 1030, 900] T = [0, 0.03, 0.07, 0.1, 0.13, 0.15, 0.17, 0.18] const = 195.21 # 固定常量单独提取方便修改 def target_func(x): total = 0 # 遍历所有项累加平方值,自动适配C、T的长度,支持最多60项需求 for c_i, t_i in zip(C, T): term = C[0] * np.exp(-t_i * x) + const * t_i / x + C[0]/x + C[0] - const/(x**2) total += (c_i - term) **2 return total # 求解最小值 result = minimize(target_func, x0=1) print(result) # 绘制函数曲线 plt.plot(x_range, target_func(x_range)) plt.xlabel('x') plt.ylabel('target function value') plt.scatter(result.x[0], result.fun, c='red', label=f'min at x={result.x[0]:.4f}') plt.legend() plt.show()
关键说明
- 目标函数
target_func内部自动遍历所有C、T的配对元素完成累加,只要两个数组长度一致,不管是8项还是60项都可以直接适配,不需要手动修改求和逻辑 - 固定常量195.21单独提取,后续需要修改时不用逐行替换
- 结果输出包含最优x值、最小函数值等完整信息,绘图时额外标记了最小值点方便查看
内容的提问来源于stack exchange,提问作者Елена
相关产品推荐
相关产品推荐

