使用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
相关产品推荐
相关产品推荐

