使用有限差分计算所提供函数的导数,Python
Calculate derivative for provided function, using finite difference, Python
首先我应该说我对 python 比较陌生,但我以前用 java 和 Matlab 编写过代码。
在python中,代码
def func(f):
return f
g = func(cos)
print(g(0))
给出结果
>1.0
as g
现在被定义为余弦函数。
我想编写一个函数,使用有限差分法计算任何提供的函数的导数。函数定义为
def derivator(f, h = 1e-8):
想实现以下目标:
g = derivator(cos)
print(g(0)) # should be about 0
print(g(pi/2)) # should be about -1
目前我的导数函数看起来像这样
def derivator(f, h = 1e-8):
return (f(x+h/2)-f(x-h/2))/h
这肯定是错误的,但我不确定该如何解决。有什么想法吗?
您当前的 derivator()
函数(可能应该被称为 differentiator()
)使用未定义的变量 x
并且 return 一个单一的值,如果 x
被定义——f'(x)
的值。您想要 return 一个 接受 一个 x 值的函数。你可以定义一个内部函数并且return它:
def fprime(x):
return (f(x+h/2)-f(x-h/2))/h
return fprime
因为您没有在其他任何地方使用该函数,所以您可以改用 lambda
,它也更短:
return lambda x: (f(x+h/2)-f(x-h/2))/h
PEP 8 says 关于 lambda 的唯一一件事是你应该 不 将 lambda 的结果分配给一个变量,然后 return 它:
fprime = lambda x: (f(x+h/2)-f(x-h/2))/h # Don't do this!
return fprime
在你的 derivator
函数中创建一个内部函数并且 return 它:
from math import cos, pi
def derivator(f, h = 1e-8):
def g(x):
return (f(x+h/2)-f(x-h/2))/h
return g
g = derivator(cos)
print(g(0)) # 0.0
print(g(pi/2)) # -0.999999993923
f
和 h
将成为 returned 函数闭包的一部分。
您还可以 return 一个 lambda 表达式使其成为一行:
return lambda x: (f(x+h/2)-f(x-h/2))/h
首先我应该说我对 python 比较陌生,但我以前用 java 和 Matlab 编写过代码。
在python中,代码
def func(f):
return f
g = func(cos)
print(g(0))
给出结果
>1.0
as g
现在被定义为余弦函数。
我想编写一个函数,使用有限差分法计算任何提供的函数的导数。函数定义为
def derivator(f, h = 1e-8):
想实现以下目标:
g = derivator(cos)
print(g(0)) # should be about 0
print(g(pi/2)) # should be about -1
目前我的导数函数看起来像这样
def derivator(f, h = 1e-8):
return (f(x+h/2)-f(x-h/2))/h
这肯定是错误的,但我不确定该如何解决。有什么想法吗?
您当前的 derivator()
函数(可能应该被称为 differentiator()
)使用未定义的变量 x
并且 return 一个单一的值,如果 x
被定义——f'(x)
的值。您想要 return 一个 接受 一个 x 值的函数。你可以定义一个内部函数并且return它:
def fprime(x):
return (f(x+h/2)-f(x-h/2))/h
return fprime
因为您没有在其他任何地方使用该函数,所以您可以改用 lambda
,它也更短:
return lambda x: (f(x+h/2)-f(x-h/2))/h
PEP 8 says 关于 lambda 的唯一一件事是你应该 不 将 lambda 的结果分配给一个变量,然后 return 它:
fprime = lambda x: (f(x+h/2)-f(x-h/2))/h # Don't do this!
return fprime
在你的 derivator
函数中创建一个内部函数并且 return 它:
from math import cos, pi
def derivator(f, h = 1e-8):
def g(x):
return (f(x+h/2)-f(x-h/2))/h
return g
g = derivator(cos)
print(g(0)) # 0.0
print(g(pi/2)) # -0.999999993923
f
和 h
将成为 returned 函数闭包的一部分。
您还可以 return 一个 lambda 表达式使其成为一行:
return lambda x: (f(x+h/2)-f(x-h/2))/h