python 函数组合.

额,是看http://www.maths.lth.se/na/courses/NUMA21/ 中看到的.

首先我们定义个函数类如下.

class Function(object):
    def __init__(self,f):
        self.f = f
        
    def __call__(self,x):        
        return self.f(x)

嗯,很简单,就是把一个函数拖进来而已.调用也简单.如下

但是如果把上面的函数稍稍扩展下就很好玩了.完整如下:

class Function(object):
    def __init__(self,f):
        self.f = f
        
    def __call__(self,x):        
        return self.f(x)
    
    def __add__(self,g):
        def sum(x):
            return self(x) + g(x)
        return Function(sum)
    
    def __mul__(self,g):
        def prod(x):
            return self.f(x) * g(x)
        return Function(prod)
    def __radd__(self,g):
        return self + g
    def __rmul__(self,g):
        return self * g

中间也没什么特别NX的代码.都是很简单的.但是组合起来就好玩了.在积分上的应用.

如果是积分和.如 $\int _0^{2 \pi }\sin(x) + \cos(x) dx = \int _0^{2 \pi }\sin(x) dx + \int _0^{2 \pi }\cos(x) dx$也许不会有什么问题.但是乘法就不同了.$\int _0^{2 \pi }\sin(x) \times  \cos(x) dx = \int _0^{2 \pi }\sin(x) dx \times  \int _0^{2 \pi }\cos(x) dx (?)$.

使用Function就可以很自然地写出这类积分,测试代码如下.(其中需要Numpy和Scipy的支持).

好了睡觉先..

 

posted @ 2012-12-29 01:36  zhuangzhuang1988  阅读(621)  评论(0编辑  收藏  举报