Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3中,有没有办法将数学函数作为函数的参数?_Python - Fatal编程技术网

在Python3中,有没有办法将数学函数作为函数的参数?

在Python3中,有没有办法将数学函数作为函数的参数?,python,Python,如何在Python中包含数学函数作为函数的参数 在我的特殊情况下,我正在编写一个黎曼和计算器,理想情况下,它看起来像: def riemann_sum(func_x, minvalue, maxvalue, partitions) ... return riemannSum 其中func_x是x的函数,因此我可以找到任意函数的黎曼和: func_x = x**2 minvalue = 1 maxvalue = 2 partitions = 100 a = riemann_sum(func_x,

如何在Python中包含数学函数作为函数的参数

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

def riemann_sum(func_x, minvalue, maxvalue, partitions)
...
return riemannSum
其中func_x是x的函数,因此我可以找到任意函数的黎曼和:

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,但我不能在不实际进入并更改函数的情况下更改它

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

(编辑:我的问题不同于标记为可能重复的Riemann和问题。他们的问题是关于专门针对Riemann和的实现。我的问题是关于如何将数学函数合并为函数的参数,我碰巧使用Riemann和作为一个特殊示例)


这应该可以做到。您可以在别处创建函数,然后在riemann_sum中将其初始化为输入。

在Python中,函数是第一类对象,因此您可以将函数作为参数传递给其他函数。也就是说,您编写
riemann\u sum
函数声明的方式很好

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

func_x = lambda x: x**2
或者,对于更通用的多行(或单行)函数

然后你可以这样说:

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
def riemann_和(func_x,minvalue,maxvalue,分区):
#下面是调用func_x的演示,这是一种不好的求和方法
黎曼和=0
step=1.0*(最大值最小值)/分区
值=最小值

几年前,当我为微分方程类编写代码时,我遇到了一个类似的问题。以下是一个对我有用的例子:

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)
确保参数列表确实是从1,1+1/100。,第一个索引为2
参数列表中元组的。我想现在是从1.01到2(我20分钟前吃了泰诺,现在我太累了,无法检查自己。)

可能是重复的。有很多选择:只需谷歌“python Riemann sum”。下面是另一个例子:。或者这个:你是在说
func_x=lambda x:x**2
?是的。。。我有点忘记了lambda函数。这就是我所缺少的。我不认为这能解决我的问题。。。通过说func_x(3),我已经指定我只在x=3时计算我的函数。。。或3**2=9。我需要在minvalue和maxvalue之间的特定数量(由partitions参数给出)的位置计算我的函数。设置x=3(或任何数字)将x限制为一个值,当我需要对多个值进行采样时..好的,我想这就是我想要的。Python现在对我的x函数没有问题,但出于某种原因,这发现了一些其他代码的问题,这些代码以前工作得很好。我想我可以自己解决这个问题。lambda函数似乎是我丢失的关键,谢谢<代码>lambda
起作用,但请记住,更通用、更通用的方法是只定义一个函数。我只是把它完整地放进去,但我几乎总是使用常规函数,并且只在我写它的同一行上使用lambdas函数,比如一次性调用,比如
riemannSum(lambda x:x**2,1,2,100)
。是的,我想这是我想要解决的另一个(不太突出的)问题。我想变得懒惰,直接在Riemann和函数中输入X的函数,而不必每次输入X的新函数时都定义一个新函数。Lambda帮助我稍微懒惰一点,但定义函数才是我真正的问题。对。这似乎是一个合理的用例。我只是想说清楚,这是个例外,而不是常态。好的,谢谢!虽然有人已经回答了我的主要问题,但这解决了我的第二个问题。也就是说,“eval”函数帮助很大,因为它允许我以字符串形式输入函数,然后在需要计算时“解除”它。
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
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)