Python中给定范围之间的值的指数分布

问题描述 投票:2回答:1

我有三个变量,Min = 0.29,Max = 6.52,center = 2.10。我希望创建一个表,以以下方式将这些数据以表格式分配为100个值:

enter image description here

这里,此图像可分为0至50和50至100的两部分。

在第一部分中,后续值x与y的增加在1-10与10-20之间较高,在10-20与20-30之间较高,依此类推。

在第二部分中,后续值的x vs y增量在50-60 vs 60-70之间较低,在60-70 vs 70-80之间较低,依此类推。

现在,我在统计方面并不熟练,因此无法弄清楚如何为指数分布提供最小值,最大值和中心值,以及如何在python中实现它。

我尝试使用link中给出的解决方案,但无法使其适用于我的情况。任何帮助将不胜感激。

python statistics exponential-distribution data-transform
1个回答
0
投票

两个指数函数中的每个都由3个参数定义,但是每个参数只有2个点。一种可能性是为两个函数提供渐近值。由于时间有限,我将在这里粘贴我的代码,包括所有公式的推导-对不起:

from math import exp, log

X_MIN, X_CTR, X_MAX = 1, 50, 100
Y_MIN, Y_CTR, Y_MAX = 0.29, 2.10, 6.52

c1 = float(input(f"c1 (> {Y_CTR}): "))
c2 = float(input(f"c2 (< {Y_CTR}): "))

# c1 - a1 * exp(-b1 * X_MIN) == Y_MIN  # with a1 > 0, b1 > 0, c1 > Y_CTR
# c1 - a1 * exp(-b1 * X_CTR) == Y_CTR
# c2 + a2 * exp( b2 * X_CTR) == Y_CTR  # with a2 > 0, b2 > 0, c2 < Y_CTR
# c2 + a2 * exp( b2 * X_MAX) == Y_MAX

# a1 * exp(-b1 * X_MIN) == c1 - Y_MIN
# a1 * exp(-b1 * X_CTR) == c1 - Y_CTR
# a2 * exp( b2 * X_CTR) == Y_CTR - c2
# a2 * exp( b2 * X_MAX) == Y_MAX - c2

# log(a1) - b1 * X_MIN == log(c1 - Y_MIN)
# log(a1) - b1 * X_CTR == log(c1 - Y_CTR)
# log(a2) + b2 * X_CTR == log(Y_CTR - c2)
# log(a2) + b2 * X_MAX == log(Y_MAX - c2)

# b1 * (X_CTR - X_MIN) == log(c1 - Y_MIN) - log(c1 - Y_CTR)
# b2 * (X_MAX - X_CTR) == log(Y_MAX - c2) - log(Y_CTR - c2)

b1 = (log(c1 - Y_MIN) - log(c1 - Y_CTR)) / (X_CTR - X_MIN)
b2 = (log(Y_MAX - c2) - log(Y_CTR - c2)) / (X_MAX - X_CTR)

# log(a1) == log(c1 - Y_MIN) + b1 * X_MIN
# log(a2) == log(Y_MAX - c2) - b2 * X_MAX

a1 = exp(log(c1 - Y_MIN) + b1 * X_MIN)
a2 = exp(log(Y_MAX - c2) - b2 * X_MAX)

for x in range(X_MIN, X_CTR+1):
    y = c1 - a1 * exp(-b1 * x)
    print(f"{x},{y:.14}")

for x in range(X_CTR, X_MAX+1):
    y = c2 + a2 * exp(b2 * x)
    print(f"{x},{y:.14}")

© www.soinside.com 2019 - 2024. All rights reserved.