You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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,提问作者Елена

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:01