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

Sympy变量代入后出现NaN类型问题求助

问题原因与解决方案

核心原因

你的SymPy表达式中包含1/β、α/β这类分式项,当β=0时会触发除以零的运算,直接返回NaN。而你生成beta_set_values时用了np.linspace(0, 6, 10000),包含了β=0的取值,代入后必然出现NaN。

另外代码还有个逻辑错误:plt.scatter([beta], [alpha])里用的是SymPy符号变量,不是当前循环的point实际值,会导致绘图完全不符合预期。

修复步骤

  1. 排除β=0的取值:
    把β的取值范围起始值改成极小正数,避免除以零:

    beta_set_values = np.linspace(1e-6, 6, 10000)  # 用1e-6替代0
    
  2. 修正绘图参数:
    将scatter的参数替换为当前循环的点坐标:

    if value > 0:
        plt.scatter([point[0]], [point[1]], color='r')
    else:
        plt.scatter([point[0]], [point[1]], color='b')
    
  3. 可选:化简表达式提升效率:
    先对原表达式化简,减少计算量:

    expr1 = sp.simplify(α*(1 - 0.1/β) + α - 0.3*α/β + 2 - 1.9*(α*β - 0.1*α - β)/β)
    

完整修复后的关键代码片段

alpha_set_values = np.linspace(0, 5, 10000)
beta_set_values = np.linspace(1e-6, 6, 10000)  # 移除β=0

def plot_expr(exprVal, points):
    for point in points:
        value = exprVal.subs([(beta, point[0]), (alpha, point[1])])
        # 处理可能的NaN情况(可选)
        if sp.isnan(value):
            continue
        if value > 0:
            plt.scatter([point[0]], [point[1]], color='r')
        else:
            plt.scatter([point[0]], [point[1]], color='b')
    plt.show()

# 先化简表达式
expr1 = sp.simplify(alpha*(1 - 0.1/beta) + alpha - 0.3*alpha/beta + 2 - 1.9*(alpha*beta - 0.1*alpha - beta)/beta)
plot_expr(expr1, points)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:45:49