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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:42:15