使用Python寻找函数最小值的x时遇类型错误求助
问题分析与解决方案
错误原因
你的P1_adj函数返回的是复数,但scipy.optimize.minimize只能优化实值函数——复数无法直接进行大小比较,这就是触发TypeError: '<' not supported between instances of 'complex' and 'float'错误的核心原因。
修正方案
复值函数无法直接用于优化,你需要先明确要最小化复数的哪个实值属性(通常是模长、实部或虚部),再将目标函数改造为返回实值的形式。以下是具体修正步骤:
1. 修正拼写错误
原代码中import nyumpy as np是拼写错误,应改为import numpy as np。
2. 改造目标函数
根据需求选择以下一种实值指标作为优化目标:
- 最小化复数的模长:对应复数的幅值大小,是最常见的需求
- 最小化复数的实部
- 最小化复数的虚部
3. 优化代码示例
import numpy as np from scipy.optimize import minimize, Bounds def P1_adj(x): complex_val = 60450.64625041 * np.exp(1j * (57.29 * 1.75056445 + x)) # 选择以下其中一行作为返回值: return np.abs(complex_val) # 最小化模长 # return np.real(complex_val) # 最小化实部 # return np.imag(complex_val) # 最小化虚部 # 设置x的取值边界 bounds = Bounds(-180., 180.) # 调用minimize,指定支持边界的优化方法(如L-BFGS-B) result = minimize(P1_adj, x0=0, bounds=bounds, method='L-BFGS-B') print(result)
额外说明
- 原代码中
x=np.arange(-180.0,180.0)是多余的,minimize仅需要初始猜测值x0,不需要生成整个数组。 - 由于你设置了边界,建议使用支持边界约束的优化方法(如
L-BFGS-B、trust-constr),避免优化过程中x超出[-180, 180]范围。
内容的提问来源于stack exchange,提问作者SAHAR GOHARSHENASAN
相关产品推荐
相关产品推荐

