其中变量遵循以下分布:
现在,我在python中的代码是将表达式与
\(W_{1:3}\)
分别为\(1,2,3\)
、\(r_1 = 0\)
、\(v\)
进行积分,即方差为\(1\)
,时间常数\(tau\)
为\(1\)
,我想估计导数的根以找到\(D\)
如下:
import sympy as sp
import math
w_n = [0,1,2]
r_1 = sp.Symbol("r_1")
r_2 = sp.Symbol("r_2")
r_3 = sp.Symbol("r_3")
r_n = [0, r_2,r_3]
D = sp.Symbol("D")
v = sp.Symbol("v")
t = sp.Symbol("t")
def expo_power(i=0,t=t,D=D,v=v):
return ((((w_n[i] - r_n[i]) ** 2)/(2 * v)) + (((r_n[i] - r_n[i-1]) ** 2)/(4 * D * t)))
def expo_power_sum(lower_bound = 2, upper_bound=3,t=t,D=D,v=v):
f = 0
for i in range(lower_bound,upper_bound):
f += expo_power(i-1,t=t,D=D,v=v)
return f
def P_w_n_P_r_n(i=0,v=v,D=D,t=t):
return (1/(8 * (sp.pi ** 2) * D * t * v)) \
* sp.exp(-expo_power_sum(lower_bound=2,upper_bound=3,t=t,D=D,v=v))
def P_w_i_r_i(i = 0, v=v):
return (1/(sp.sqrt(2 * sp.pi * v))) \
* sp.exp(-((w_n[i] - r_n[i]) ** 2/(2 * v)))
def normal_dist(x =0, m = r_n[0], v =v):
return (1/(sp.sqrt(2 * sp.pi * v))) \
* sp.exp(-(((x - m) ** 2)/(2 * v)))
def integrand(v = v,t=t,lower = 2):
f = P_w_n_P_r_n(i=lower,v=v,D=D,t=t)
sp.pprint(f)
f = f * P_w_i_r_i(v=v)
f = f * normal_dist(x=r_n[0],v=v)
return f
def integrate(v=v,t=t, lower_bound = -sp.oo, upper_bound= sp.oo):
function = integrand(v=v,t=t)
integral_1 = sp.integrate(function, (r_1, lower_bound, upper_bound)).evalf()
sp.pprint(integral_1)
integral_2 = sp.integrate(integral_1, (r_3, lower_bound, upper_bound)).evalf()
sp.pprint(integral_2)
integral_3 = sp.integrate(integral_2, (r_2, lower_bound, upper_bound)).evalf()
num = sp.N(integral_3)
print(num)
#sp.pprint(integral_3)
deriv = sp.diff(num, D)
sol = sp.solve(deriv, D)
sp.pprint(sol)
integrate(v=1,t=1,lower_bound=-1000,upper_bound=1000)
现在,显示的解是两个未计算积分之间的比率。
t
是 (tau),我们在边缘化 (r_1,r_2,r_3) 后找到关于 (D) 的导数的根,积分没有被计算,特别是对于 ( r_2)
积分有闭形式吗?如果是的话,可以求解 $D$ 形式的导数吗?如果不是,有什么替代方案可以产生 $P'(w_{1:3}|D,v) = 0$ 相对于 $D$ 的解决方案?
我无法完全说出发生了什么,但问题的表述方式似乎有些问题,我认为你需要在寻求解决方案之前理顺问题陈述。
如果我没记错的话,所有涉及的分布都是正态分布,并且您对其中一些分布进行了边缘化(积分)。如果是这样,结果应该再次是正态分布(如果仍然存在一些自由变量)或涉及均值和方差的某个常数。我的猜测是,如果您将联合分布表述为具有合适协方差矩阵的多元正态分布,您将能够根据协方差运算来陈述结果。
但即使没有这个,如果问题设置正确,也应该可以得到 D、v 和 t 的精确结果。
我看到的第一个问题是被积数(函数中的
function
integrate
)只是r_2
的函数。它也应该是 r_1
和 r_3
的函数,不是吗?
不应该将
r_n
分配给 [r_1, r_2, r_3]
而不是 [0, r_2, r_3]
吗?
function
不含 r_3
表明 expo_power_sum
无法正常工作。
最后,我的建议是在表述积分时使用符号无穷大(正/负
sp.oo
)而不是正/负 1000——替换任何有限值可能会使结果比需要的更复杂。