我试图对功能进行三重集成。
from scipy.integrate import tplquad
S = 40
P1 = 0.37
P2 = 0.43
P3V = .05
UND = 1 - (P1+P2+P3V)
b1 = S*P1
b2 = S*P2
b3 = S*P3
b4 = S*UND
x1 = 48
x2 = 47
x3 = 4
x4 = 1
tp1 = tplquad(lambda x, y, z: ((x**(b1 + x1 - 1))*(y**(b2 + x2 - 1))*(z**(b3 + x3 - 1))*((1-x-y-z)**(x4+b4-1))), 0, 1, lambda z: z, lambda z: (1-z)/2, lambda x,z: 0, lambda x,z: x)
这是投掷:
ValueError:负数不能提升到分数幂
我试图整合功能(x**(b1 + x1 - 1))*(y**(b2 + x2 - 1))*(z**(b3 + x3 - 1))*((1-x-y-z)**(x4+b4-1))
超出以下限制:
首先,y
从0到x,
然后,x
从z变为(1-z)/ 2,
然后,z
从0变为1.
谁能告诉我我做错了什么?
答案 0 :(得分:2)
我稍微改了一下来调试它:
def func(x, y, z):
print(x, y, z)
print(b1 + x1 - 1)
print(b2 + x2 - 1)
print(b3 + x3 - 1)
print(1-x-y-z)
print(x4+b4-1)
return x**(b1 + x1 - 1) * y**(b2 + x2 - 1) * z**(b3 + x3 - 1) * (1-x-y-z)**(x4+b4-1)
所以在运行集成时:
tp1 = tplquad(func, 0, 1, lambda z: z, lambda z: (1-z)/2, lambda x, z: 0, lambda x,z: x)
我得到以下内容:
0.25 0.375 0.5
61.8
63.2
5.0
-0.125
5.9999999999999964
-0.125
中的1-x-y-z
是问题所在。您要求Python计算负数(1-x-y-z)**(x4+b4-1)
的分数幂。在大多数情况下,结果会很复杂。
即使这不是问题(在python-3.x中,负数的分数幂不是问题!)它仍然会遇到float
- {{1}的要求}:
triplequad
所以看起来你的功能出现了根本性的错误(或者界限不正确)。这是你必须要解决的问题。我只能猜到可以做些什么。