Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 用辛随机变量计算一个简单表达式的方差_Random_Probability_Sympy - Fatal编程技术网

Random 用辛随机变量计算一个简单表达式的方差

Random 用辛随机变量计算一个简单表达式的方差,random,probability,sympy,Random,Probability,Sympy,两个U(0,1)随机变量,X1和X2,我想要max(2,X1)+X2的方差 我要用sympy。是的,我知道这太容易了。然而,我想知道是否有处理此类问题的内置方法,以及如何使用它们 >>> from sympy.stats import Uniform, Variance >>> from sympy import symbols, Integral >>> X1 = Uniform('X1', 0, 1) >>> X2 =

两个U(0,1)随机变量,X1和X2,我想要max(2,X1)+X2的方差

我要用sympy。是的,我知道这太容易了。然而,我想知道是否有处理此类问题的内置方法,以及如何使用它们

>>> from sympy.stats import Uniform, Variance
>>> from sympy import symbols, Integral
>>> X1 = Uniform('X1', 0, 1)
>>> X2 = Uniform('X2', 0, 1)
辛皮似乎不喜欢马克斯;它表达了对
if
语句的同样厌恶

>>> Variance(max(2, X1) + X2)
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python34\lib\site-packages\sympy-1.0.1.dev0-py3.4.egg\sympy\core\relational.py", line 195, in __nonzero__
    raise TypeError("cannot determine truth value of Relational")
TypeError: cannot determine truth value of Relational

不幸的是,我通常都很胖。如何处理涉及条件的概率计算?

Python的
max
不适用于SymPy对象;用SymPy's代替。此外,您不需要使用被动(未评估)形式
方差
,然后要求对其进行评估:只需使用尝试评估的
方差
。例如:

from sympy.stats import Uniform, variance, E
from sympy import Max
X1 = Uniform('X1', 0, 1)
X2 = Uniform('X2', 0, 1)
X3 = Max(2, X1) + X2
print(E(X3))
print(variance(X3))
这类工作,除了积分似乎太难了,无论如何都无法计算,因为它们包含Max。这是输出

1/2 + Integral(Max(2, X1), (X1, 0, 1))
2*Integral(Max(2, X1), (X1, 0))*Integral(Max(2, X1), (X1, 0, 1)) - 2*Integral(Max(2, X1), (X1, 1))*Integral(Max(2, X1), (X1, 0, 1)) - Integral(Max(2, X1)**2, (X1, 0)) + Integral(Max(2, X1)**2, (X1, 1)) + 1/12 + Integral(Max(2, X1), (X1, 0, 1))**2
强制数字答案适用于预期值:

print(E(X3).evalf())
打印2.5。我发现获得方差数值的唯一方法是通过抽样——也就是说,让SymPy生成给定大小的样本,然后从中获取方差,当然要考虑抽样错误

print(variance(X3, numsamples=1e4))

打印0.0839550029765917。

我敢打赌你是对的。如果有人出现,我将表示应有的遗憾,我必须接受那个人的回答。但我并没有屏息以待。当涉及到分段定义函数和计算机代数系统时,当事情进展顺利时,我会感到惊喜。在这种特定的情况下,主要的障碍是,即使是
integrate(Max(x,2)、(x,0,1))
返回未经SymPy评估的结果。很高兴知道,不只是人类对它们有困难。
print(variance(X3, numsamples=1e4))