GreyKoshak Asked:2020-12-04 22:43:25 +0000 UTC2020-12-04 22:43:25 +0000 UTC 2020-12-04 22:43:25 +0000 UTC 从给定分布生成随机数 772 有必要生成Х є [0, 1]根据以下定律分布的随机数: python 1 个回答 Voted Best Answer extrn 2020-12-05T00:21:50Z2020-12-05T00:21:50Z 如果我正确理解了任务,那么在 2/3 的情况下应该生成数字[0; 0.5)并且概率会降低 - 其余的[0.5; 1)。 然后你可以这样做 def generate(): x = random.random() * 0.75 return x if x < 0.5 else 1 - math.sqrt(3 - 4 * x) / 2 import random import math import matplotlib.pyplot as plt plt.hist([generate() for _ in range(1000000)], bins=100) plt.show() 如何计算 首先,我们从任务中获取概率函数 def f(x): return 1 if x < 0.5 else -2*x + 2 我们发现它的积分 def g(x): return x if x < 0.5 else -x**2 + 2*x - 0.25 常数c = -0.25是从方程中获得的-x**2 + 2*x + c = x при x = 0.5 g(x)0返回从到的形状填充部分的面积x。因此,如果积分这个词让人不寒而栗,就需要像计算简单几何图形的面积一样精确地实现函数。 例如g(0.8),它将返回下一个图形的面积 A g(0.6) - g(0.2)- 下一个 现在我们实现函数逆g- 即 它将占用区域并返回x。 为此,我们求解二次方程-x**2 + 2*x - 0.25 = y 我们得到 def h(y): return y if y < 0.5 else 1 - math.sqrt(3 - 4 * y) / 2 现在,传入h()均匀分布在段上的值,[g(0); g(1)]我们将[0; 1]根据我们的概率函数接收分布在段上的值。 那些。generate可以这样改写 def generate(): return h(random.random() * (g(1) - g(0)) + g(0))
如果我正确理解了任务,那么在 2/3 的情况下应该生成数字
[0; 0.5)并且概率会降低 - 其余的[0.5; 1)。然后你可以这样做
如何计算
首先,我们从任务中获取概率函数
我们发现它的积分
常数
c = -0.25是从方程中获得的-x**2 + 2*x + c = x при x = 0.5g(x)0返回从到的形状填充部分的面积x。因此,如果积分这个词让人不寒而栗,就需要像计算简单几何图形的面积一样精确地实现函数。例如
g(0.8),它将返回下一个图形的面积A
g(0.6) - g(0.2)- 下一个现在我们实现函数逆
g- 即 它将占用区域并返回x。为此,我们求解二次方程
-x**2 + 2*x - 0.25 = y我们得到
现在,传入
h()均匀分布在段上的值,[g(0); g(1)]我们将[0; 1]根据我们的概率函数接收分布在段上的值。那些。
generate可以这样改写