我正在尝试使用-infinity到infinity在Python中创建以下函数的累积分布图:
最初,我尝试了在网上找到的这段代码,该代码似乎适用于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)。如果无法修改此代码以考虑到这两个条件,那么是否有其他建议可以做到这一点?
答案 0 :(得分:2)
您可以将条件用作掩码,然后利用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))