如何快速整合正态分布和python中的某些变化?

问题描述

我正在使用scipy创建正态分布pdf,并希望将其集成

def normal_distribution_function(x):
    value = scipy.stats.norm.pdf(x,mean,std)
    value=value*x
    return value
inte1,err = quad(normal_distribution_function,1)
def normal_distribution2(x):
    value=scipy.stats.norm.pdf(x,std)
    return value
inte2,err = quad(normal_distribution2,1,np.inf)

下面是对正态分布进行积分的示例,第一个功能是对与输入x相乘的积分。

我想进行快速整合,我用这种方式编写

def normal_distribution_function1(x,case):
    value = scipy.stats.norm.pdf(x,expect_reward,std1)
    if case==1:
        value=0
    elif case==2:
        value=value*(1-x)
    elif case==3:
        value=value*(1+x)-x
    elif case==4:
        value=value
    return value
case1=quad(normal_distribution_function1(case=1),np.inf)
case2=quad(normal_distribution_function1(case=2),1)
case3=quad(normal_distribution_function1(case=3),-1,0)
case4=quad(normal_distribution_function1(case=4),-np.inf,-1)

但是,我得到了错误

TypeError: normal_distribution_function1() missing 1 required positional argument: 'x'

我找不到解决方法,有人可以帮忙吗?谢谢

解决方法

您的函数normal_distribution_function1(x,case)带有两个参数,但您仅指定了第二个参数:case

在以下几行中,您还需要指定第一个参数x

case1=quad(normal_distribution_function1(case=1),1,np.inf)
case2=quad(normal_distribution_function1(case=2),1)
case3=quad(normal_distribution_function1(case=3),-1,0)
case4=quad(normal_distribution_function1(case=4),-np.inf,-1)

说明:

当您调用normal_distribution_function时,python不执行该函数,这就是为什么您没有收到任何错误的原因,因此quad()方法起作用了。如果您尝试仅传递一个参数:normal_distribution_function1(case=1),则编译器会抱怨,因为如果不提供两个参数就无法执行此功能。

explanation

,

我找到了一种使用lambda进行集成的快速方法

case2_function= lambda x : scipy.stats.norm.pdf(x,expect_reward,std1) *(1-x)
case3_function = lambda x: scipy.stats.norm.pdf(x,std1) *(1+x)-x
case2,err2=quad(case2_function,1)
case3.err3=quad(case3_function,0)

感谢Marios Karamanis的帮助!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...