在Python3中,有没有一种方法可以将数学函数作为函数的参数?

2024-03-28 17:43:29 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在Python中包含数学函数作为函数的参数?你知道吗

在我的特殊情况下,我正在编写一个黎曼和计算器,理想情况下,它看起来像:

def riemann_sum(func_x, minvalue, maxvalue, partitions)
...
return riemannSum

其中func_x是x的某个函数,因此我可以找到任意函数的riemann和:

func_x = x**2
minvalue = 1
maxvalue = 2
partitions = 100
a = riemann_sum(func_x,minvalue,maxvalue,partitions)
print(a)

但是,我无法执行上述过程,因为x未定义。你知道吗

我可以通过手动输入函数的一行,得到x的特定函数的黎曼和,如下所示:

someList = [x**2 for x in someOtherList]

在这里,函数是x**2,但是我不能改变它而不实际地进入并改变函数。你知道吗

我现在唯一的解决办法就是每次我想找到一个新函数的定积分时,就定义一个新的黎曼和函数,这是可行的,但我觉得有更好的方法。你知道吗

(编辑:我的问题不同于标记为可能重复的黎曼和问题。他们的问题是关于一个具体的黎曼和的实现。我的问题是如何把一个数学函数作为一个函数的参数,我碰巧用黎曼和作为一个特殊的例子)


Tags: 函数参数returndef情况数学计算器riemann
3条回答

在Python中,函数是第一类对象,因此可以将函数作为参数传递给其他函数。也就是说,编写riemann_sum函数声明的方式很好。你知道吗

不起作用的是func_x的定义,因为需要将func_x定义为函数。为此,您可以:

func_x = lambda x: x**2

或者,对于更一般的多行(或单行)函数

def func_x(x):
    temp = x**2  # just to stretch this out to another line for demonstration
    return temp

然后你可以这样说:

def riemann_sum(func_x, minvalue, maxvalue, partitions):
    # below just demos calling func_x, and is a bad way to do the sum
    riemannSum = 0
    step = 1.0*(maxvalue-minvalue)/partitions
    value = minvalue
    while value<maxvalue:
        riemannSum == step*func_x(value)  # here's where func_x is called
        value += step
    return riemannSum

也就是说,这里的要点是演示如何在riemann_sum函数中调用func_x。这允许您根据求和的需要,以不同的x值计算func_x。你知道吗

# Replace with whatever your function is  
def func_x(x):
    return x**2


def riemann_sum(func_x(3), minvalue, maxvalue, partitions)
...
return riemannSum

这样就可以了。您可以在别处创建函数,然后在riemann\u和中初始化它作为输入。你知道吗

几年前我在为微分方程课编写代码的时候也遇到过类似的问题。下面是一个对我有用的例子:

func_x = "(x**2)+x+1"
paramList = [(1+(1/k),(1/k)-(1/(k+1))) for k in range(1,101)]
# paramList holds the tuple (x,changeInX) for the riemann sum
def riemann_sum(str_func_x,paramList):
    theSum=0
    for tup in paramList:
        x=tup[0]
        diff=tup[1]
        theSum+=eval(str_func_x)*diff
    return theSum
riemannSumValue = riemann_sum(func_x,paramList)

确保param list真的是1,1+1/100。,2表示第一个索引 参数列表中的元组。我想是从现在的1点01分到2点(20分钟前我吃了些泰诺,现在我太累了,无法检查自己。)

相关问题 更多 >