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

Python计算Hill函数及Hill系数时触发不支持操作数类型错误

报错原因
  • 变量名和函数名冲突:代码开头先定义了数值型参数c = randint(1,u),后续又定义了名为c(x)的复合函数,后者会覆盖前者的数值定义。
  • 执行g(x)内的x-c运算时,c已经是函数对象而非初始的整数参数,numpy浮点数组无法和函数做减法运算,直接触发TypeError。
  • 该命名冲突还会连锁影响所有用到参数c的后续计算,包括c(x)内部运算、EC2/EC3反函数推导,就算跳过当前报错,后续计算结果也完全错误。
修复方案
  1. 重命名复合函数,避开参数名c:将原复合函数c(x)改名为fg(x),同步修改所有调用该函数的位置,包括最大值计算、EC值计算、绘图代码。
  2. 注意逻辑适配:当前定义的f(x)=a*x是无界线性函数,不存在饱和平台,在0-10采样区间内的最大值永远取在区间右端点,计算出的Hill系数仅对当前采样区间有效,如果要做标准Hill函数分析,需要给f(x)补充饱和上限定义。
修复后的核心代码段
# 函数定义部分,复合函数重命名为fg避免冲突
def f(x):
    return a*x
def g(x):
    return m*(x-c)/(d+x-c)
def fg(x):
    return a*m*(x-c)/(d+x-c)


# 计算各函数在采样区间的最大值
x = np.linspace(0, 10, 100)
xmax1 = x[np.argmax(f(x))]
ymax1 = f(x).max()

xmax2 = x[np.argmax(g(x))]
ymax2 = g(x).max()

xmax3 = x[np.argmax(fg(x))]
ymax3 = fg(x).max()

# EC10、EC90计算部分逻辑不变,注意EC3调用时参数c已恢复为数值变量
def EC1(x):
    return x/a
y90_1 = ymax1*0.9
y10_1 = ymax1*0.1
EC90_1 = EC1(y90_1)
EC10_1 = EC1(y10_1)

def EC2(x):
    return ((x*c)-(m*c)-(x*d))/(x-m)
y90_2 = ymax2*0.9
y10_2 = ymax2*0.1
EC90_2 = EC2(y90_2)
EC10_2 = EC2(y10_2)

def EC3(x):
    return ((x*c)-(a*m*c)-(x*d))/(x-(a*m))
y90_3 = ymax3*0.9
y10_3 = ymax3*0.1
EC90_3 = EC3(y90_3)
EC10_3 = EC3(y10_3)

# Hill系数计算逻辑不变
H_1 = ln(81)/(ln(EC90_1/EC10_1))
H_2 = ln(81)/(ln(EC90_2/EC10_2))
H_3 = ln(81)/(ln(EC90_3/EC10_3))

# 绘图部分同步修改复合函数调用
plt.plot(x, f(x), color = 'red', label='f(x)')
plt.plot(x, g(x), color = 'blue', label='g(x)')
plt.plot(x, fg(x), color = 'green', label='f(g(x))')
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:09:16