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

使用SciPy minimize最大化函数时遇TypeError错误求助

错误原因及修复方案

错误原因

  • 初始变量定义错误:np.ndarray(45.0)不是创建包含初始值45.0的数组的正确写法,会生成不符合预期的对象,导致minimize无法迭代处理。单变量初始值应使用np.array([45.0])或直接传入标量45.0。
  • 目标函数未使用优化变量:函数f直接引用全局变量theta,而非minimize传入的迭代参数X,违背优化逻辑的同时会引发类型不匹配问题。
  • 边界参数格式错误:bdns = (0.0, 90.0)是单个元组,而minimize的bounds参数要求是序列(如列表),每个元素对应一个变量的边界元组,单变量场景需写成[(0.0, 90.0)]。

修复后的代码

import scipy.optimize as spo
import math as m
import numpy as np

# 定义常量
fenceLength = 7.5  # ft
pointLoad = 500    # lbs
ex2 = 2            # in
ey2 = 4            # in

# 定义初始变量(正确的数组形式)
theta = np.array([45.0])  # degrees

# 定义theta的边界(列表包裹元组的格式)
bdns = [(0.0, 90.0)]

def f(X, *args):
    # 使用传入的优化变量X,替代全局theta
    current_theta = X[0]
    ex1 = (fenceLength/2)*m.cos(m.radians(current_theta))
    ey1 = (fenceLength/2)*m.sin(m.radians(current_theta))
    # 通过返回原函数负值,用minimize实现最大化需求
    Y = m.sqrt(((pointLoad*(ey1+ey2))**2 + (pointLoad*(ex1+ex2))**2)) * -1
    return Y

# 调用优化器
theta_final = spo.minimize(f, theta, method='SLSQP', options={'disp':True}, bounds=bdns)

# 打印优化结果
print("优化后的theta值:", theta_final.x[0])

内容的提问来源于stack exchange,提问作者Jdonza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:31:12