当我尝试绘制指数函数时,我得到了一个线性图:
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
发布于 2016-06-29 11:48:27
你真的不应该使用EVAL。但是,抛开这个问题不谈,问题是您传递的是一个包含两个值的元组作为x_range参数的实参。这是创建一个值为:array([ 0, 100])的x,如果您创建相应的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))结果:

https://stackoverflow.com/questions/38089954
复制相似问题