首页 > 解决方案 > 将此函数绘制为累积分布

问题描述

我正在尝试在 Python 中创建以下函数的累积分布图,从 -infinity 到 infinity:

在此处输入图像描述

最初我尝试了我在网上找到的这段代码,它似乎适用于诸如 x**2 之类的函数:

import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
    x = np.array(x_range)
    y = eval(formula)
    plt.plot(x, y)
    plt.show()

#graph('(4/5)*(((x**4)/4)+x)', range(-100, 100))

graph('x**2', range(-100, 100))

结果: 在此处输入图像描述

问题是我不确定如何翻译此代码以将函数的其他条件考虑到此图中(即,如果 x <= 0,则为 0,如果 x>=1,则为 0)。如果无法修改此代码以考虑这两个条件,那么还有其他关于可以执行此操作的代码的建议吗?

标签: pythonnumpymatplotlibstatistics

解决方案


您可以将您的条件用作掩码,然后使用 NumPy 数组索引将 y 的值分配给您想要的区域为 0。

几个变化:

  • 我曾经linspace有一个精细的网格,以便在x=0和之间包含更多数据点x=1。您使用的range生成整数,因此您基本上将在 0 和 1 之间有一条直线。
  • y[(x<=0) | (x>=1)] = 0是这里的关键。|运算符合并这两个条件并(x<=0) | (x>=1)从 x 数组中返回该条件成立的索引True。然后将这些索引用作 y 数组的输入,然后将这些值分配给 0。

我将 x 限制限制为 -1.5 到 1.5,以突出显示有趣的区域。

x^2 案例的完整答案

import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
    x = np.array(x_range)
    y = eval(formula)

    y[(x<=0) | (x>=1)] = 0
    plt.plot(x, y)
    plt.xlim(-1.5,1.5)
    plt.show()

graph('x**2', np.linspace(-100, 100, 10000))

绘制你的实际方程

import numpy as np
import matplotlib.pyplot as plt

def graph(formula, x_range):
    x = np.array(x_range)
    y = eval(formula)

    y[(x<=0) | (x>=1)] = 0
    plt.plot(x, y)
    plt.xlim(-1.5,1.5)
    plt.show()

graph('(4/5)*(((x**4)/4)+x)', np.linspace(-100, 100, 10000))

在此处输入图像描述

在此处输入图像描述


推荐阅读