评估函数时返回部分的意义是什么?为什么这有必要?
答案 0 :(得分:0)
你给出答案。 x[0]
是-1.0
,你希望数组中间的值.np.linspace是构建这一系列值的好函数:
def f1(x):
g = np.sin(math.pi*np.exp(-x))
return g
n = 1001 # odd !
x=linspace(-1,1,n) #x[n//2] is 0
f1x=f1(x)
df1=np.diff(f1(x),1)
dx=np.diff(x)
df1dx = - math.pi*np.exp(-x)*np.cos(math.pi*np.exp(-x))[:-1] # to discard last element
# In [3]: np.allclose(df1/dx,df1dx,atol=dx[0])
# Out[3]: True
作为另一个提示,numpy数组在没有循环的情况下更有效和可读地使用。
答案 1 :(得分:0)
您的假设是正确的:dfdx[0]
确实是该数组中的第一个值,因此根据您的代码对应于评估x=-1.0
处的导数。
要知道x等于0的正确索引,您必须在x
数组中查找它。
找到这个的一种方法是,我们找到值为| x-0 |的索引使用argmin
:
index0 = np.argmin(np.abs(x-0))
然后我们得到我们想要的东西,dfdx在x为0的索引处:
print dfdx[index0]
关于浮点算术欺骗的另一种但不太健壮的方法是执行以下操作:
# we make a boolean array that is True where x is zero and False everywhere else
bool_array = (x==0)
# Numpy alows to use a boolean array as a way to index an array
# Doing so will get you the all the values of dfdx where bool_array is True
# In our case that will hopefully give us dfdx where x=0
print dfdx[bool_array]
# same thing as oneliner
print dfdx[x==0]