函数式编程计算微分
高阶函数(higher-order function)函数本身也可以赋值给变量,例如:>>> f = abs>>> f<built-in function abs> 如果一个变量指向了一个函数,那么,可否通过该变量来调用这个函数?用代码验证一下:>>> f = abs>>> f(-1)1 说明变量f现在已经指向了abs函数本身。在上一篇提到的map函数的调用方式:map(function, iterable, ...)。可以看到,参数列表中就有函数。filter,reduce等函数与之类似,其参数列表中也有函数。将其他函数作为参数或者将函数作为结果返回的函数,称为高阶函数。要计算 的和,我们可以这样编程:def add(x,y): return x + yreduce(add, [1,2,3,4,5,6] ) reduce的第一个参数是一个函数,第二个参数是一个列表。作为reduce的第一个参数的函数必须接受两个参数并返回单个结果。正如函数可以作为其他函数的输入参数一样,函数也可以作为其他函数的返回。def fun(n): return lambda x: x**n 这里返回的一个匿名函数。下面来调用这个高阶函数>>> f = fun(3)>>> f(2)8 甚至可以一步到位:>>> f = fun(3)(2)8 函数式编程计算微分函数 的导数定义如下: def Derivative(f, h): return lambda x: ( f(x+h) - f(x) ) / h 调用上面的函数求 在 的导数。value = Derivative(lambda x: x**2, 0.0001) (10) 函数式编程计算n阶导数利用递归算法计算n阶导数。def Derivative(f, h): return lambda x: ( f(x+h) - f(x) ) / hdef Derivative_n(f, h, n): if n == 0: return f else: return Derivative(Derivative_n(f, h, n-1), h) 调用上面的函数求 在 的3阶导数。value = Derivative_n(lambda x: x**4, 0.0001, 3) (10)来源:数值分析与有限元编程