当前位置: 首页 > 知识库问答 >
问题:

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

闾丘冠玉
2023-03-14

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

这里,这个图像可以分成0到50和50到100两部分。

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

在第二部分中,随后值的x与y的增加在50-60比60-70之间较低,在60-70比70-80之间较低,依此类推。

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

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

共有1个答案

佟阳云
2023-03-14

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

from math import exp, log
from matplotlib import pyplot as plt

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}): "))
plot = input("plot? (y|n): ")[:1] in "yY"

# 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)

x_lst = list(range(X_MIN, X_MAX+1))
y_lst = [c1 - a1 * exp(-b1 * x) if x < X_CTR else
         c2 + a2 * exp( b2 * x) for x in x_lst]

if plot:
    plt.plot(x_lst, y_lst)
    plt.grid(True)
    plt.show()
else:
    for x, y in zip(x_lst, y_lst):
        print(f"{x},{y:.14}")

E、 例如,使用此输入:

c1 (> 2.1): 2.13
c2 (< 2.1): 2.08
plot? (y|n): y
 类似资料:
  • Python3 实例 素数(prime number)又称质数,有无限个。除了1和它本身以外不再被其他的除数整除。 以下实例可以输出指定范围内的素数: 实例(Python 3.0+)#!/usr/bin/python3 # 输出指定范围内的素数 # take input from the user lower = int(input("输入区间最小值: ")) upper = int(input(

  • 假设您有一个间隔列表,例如[(0 4),(1 3),(2 5),(2 6)]。此列表未排序。然后给您一个范围,如[1 5]。您必须返回适合范围内的间隔数。在这个问题中,它将返回2。((1 3)和(2 5)) 间隔列表保持不变,但我们最多得到100000个查询,每个查询由一个范围组成。对于每个范围查询,我们必须返回适合其中的间隔数。 在研究之后,我读到了间隔树。但是,您只能查询与任何给定范围重叠的间

  • 所以我必须写一个程序,找到给定范围之间的所有回文数。程序必须使用numDigits()方法,该方法接受int数并返回该int的位数。 一个isPalindrome()方法,它将接受一个int数字,并返回一个布尔值true或false,无论该数字是否回文 我在这里编码了一个numDigit()方法: 我知道如何用另一种方法找到回文,但作业是专门针对这种技术的。我如何实现这个numDigit()方法来

  • 所以,我做了这个小程序。它给出了所有正确的输出,但当它上传到网上法官扔我一个时间限制超过。有什么办法让它更有效率吗? 这是我的代码。

  • 问题内容: 请检查以下代码段: 链接到这里:https : //play.golang.org/p/cdryPmyWt5 上面的代码将检查for循环中的指针和值之间的差异,而go语句也同时使用。对于代码: 我们知道,控制台将打印 三三三 的结果,因为循环运行到其最终的够程开始执行,其中写V作为片的最后一个元素之前。但是指针呢? 好像打印 一二三 ,为什么呢? 谢谢。 问题答案: 答:在调用函数之前

  • 问题内容: 在指令内部创建 隔离作用域 使我们可以将 外部作用域 映射到 内部作用域 。我们已经看到了六种映射到属性的不同方法: = attr &attr @attr = 和 @ 这些作用域映射选项分别做什么? 问题答案: 这可能会造成混淆,但是希望有一个简单的示例可以阐明这一点。首先,让我们将模型绑定与行为分开。 这是一个小提琴,应该有助于将它们联系在一起:http : //jsfiddle.n