如何在python中获取数学函数作为输出

时间:2016-02-18 15:55:46

标签: python

我想做这样的事情

def gaussian(x, amp):
    return amp * exp(-(x-cen)**2 /wid)

我想用amp和x代替并获得一个等式作为输出

例如:

gaussian(1,3)

3 * exp(-(1-cen)**2 /wid)作为输出。

我是否可以针对几个列表执行此操作,其中一个值为振幅a和另一个x各个值

2 个答案:

答案 0 :(得分:4)

我不确定你的意思"我需要一个等式"。你需要一些你可以评估的东西吗?然后可能你可以返回一个lambda对象,然后你可以评估它。或者你可以使用像:

这样的闭包
import math

def gaussian(x, amp): 
    def _gauss( cen,wid):
        return amp * math.exp(-(x-cen)**2 /wid)

    return _gauss

g = gaussian(10,1)
print g(2,4)

g现在是一个可调用的函数,其中x和amp已被替换,所以你只需要传递cen和wid

之所以这样做是因为每次调用包装函数时都会对内部函数_gauss进行求值,这样就可以使用父函数传递的参数来评估函数,并将其用作"静态&#34 ;.从那以后,你返回一个你可以评估它并传递所有参数的函数,这是一个常用的技术,当库强制你有参数回调时。 只有简单的函数调用才能回退,即生成子函数,而不是评估它。

答案 1 :(得分:1)

我会将您的return转换为字符串:

def gaussian(x, amp):
    return str(amp) + '* exp(-(' + str(x) + '-cen)**2 /wid)'

这应该返回你想要的值:

gaussian(1,3)

返回

'3 * exp(-(1-cen)**2 /wid)'