我在尝试绘制指数函数时得到一个线性图:
import math
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)
graph('100*(np.power(0.8, x))', (0,100))
我做错了什么? output_image
你真的不应该使用 EVAL。但是,撇开这个问题不谈,问题是您要传递一个包含两个值的元组作为 x_range 参数的参数。这是创建一个 x
,其值为:array([ 0, 100])
,如果您创建相应的 y,那么您当然只有两个点你会得到一条线。您想使用 np.arange
而不是 np.array
。但是,如果您将一个元组传递给您的 graph
函数,您将需要在将它传递给 np.arange 时解压该元组。
所以这应该有效:
def graph(formula, x_range):
x = np.arange(*x_range)
y = eval(formula)
plt.plot(x, y)
不过说真的,为什么不传递一个函数而不是 eval
?
def graph(func, x_range):
x = np.arange(*x_range)
y = func(x)
plt.plot(x, y)
graph(lambda x: 100*(np.power(0.8, x)), (0,100))
结果:
我是一名优秀的程序员,十分优秀!