Python 如何将函数表达式传递给lambda(sympy)

Python 如何将函数表达式传递给lambda(sympy),python,lambda,sympy,Python,Lambda,Sympy,我不知道如何将表达式传递给lambda参数。 我认为这是一个sympy.core.power.pow类型的问题 代码如下: import sympy def trapezoid(f, a, b, n): h = float(b - a) / n result = 0.5 * f(a) + 0.5 * f(b) for i in range(1, n): result += f(a + i * h) result *= h return r

我不知道如何将表达式传递给lambda参数。 我认为这是一个sympy.core.power.pow类型的问题

代码如下:

import sympy

def trapezoid(f, a, b, n):
    h = float(b - a) / n
    result = 0.5 * f(a) + 0.5 * f(b)
    for i in range(1, n):
        result += f(a + i * h)
    result *= h
    return result

if __name__ == "__main__":
    x = sympy.Symbol('x')
    fonction = sympy.Pow(x,2)
    print(fonction) # x**2
    print(type(fonction)) # <class 'sympy.core.power.Pow'>

    print("Expected Result : ", trapezoid(lambda x: x ** 2, 1, 5, 100))

    print("Not expected result : ",trapezoid(lambda x:fonction, 1, 5, 100)) # Won't give me expected result
导入sympy
def梯形(f、a、b、n):
h=浮动(b-a)/n
结果=0.5*f(a)+0.5*f(b)
对于范围(1,n)内的i:
结果+=f(a+i*h)
结果*=h
返回结果
如果名称=“\uuuuu main\uuuuuuuu”:
x=符号('x')
函数=sympy.Pow(x,2)
打印(功能)#x**2
打印(类型(功能))#
打印(“预期结果:”,梯形(λx:x**2,1,5,100))
打印(“非预期结果:”,梯形(λx:fonction,1,5100))#不会给我预期结果
你们知道我需要用什么样的语法吗?
即使我搜索了几个主题,我也找不到这样的例子。

根据您问题的变化更新我的答案-

Sympy允许您创建可跨多种语言使用的表达式,但在尝试运行它们时必须对其进行计算。您的代码的问题是您将一个symphy表达式(不能直接调用)传递给梯形函数。我修改了你的梯形函数来评估你定义的“函数”

from sympy import *

def trapezoid(f, a, b, n):
    h = float(b - a) / n
    result = 0.5 * f.evalf(subs={x: a}) + 0.5 * f.evalf(subs={x: b})
    for i in range(1, n):
        result += f.evalf(subs={x: (a + i * h)})
    result *= h
    return result

if __name__ == "__main__":
    x = Symbol('x')
    fonction = Pow(x,2)
    print(fonction) # x**2
    print("Expected result : ",trapezoid(fonction, 1, 5, 100))
退房。在这里,您可以找到用python计算symphy表达式的不同方法。

下面的示例演示如何创建lambda函数并调用它

my_func = lambda x: x**2;
print(my_func(3))
在您的示例中:

def test(function):
    print(function)
    print(type(function))
    print(function(3))
称之为:

>>> test(lambda x:x**2)
<function <lambda> at 0x7f49d24d7d50>
<type 'function'>
9
测试(λx:x**2) 9
我想你想要的是
梯形(函数,a,b,n)
这里很多东西都不清楚。
梯形
采用什么参数?
函数
采用什么参数?你所说的
print(function)#x**2
是什么意思?
function
只是一个字符串吗<代码>“x**2”?@PaulH或者更可能的
梯形(函数)
对此表示抱歉。函数是一个数学表达式,其类型派生自simpy库。这不是一根绳子。实际上我试过lambda x:str(函数),但没有成功。其他参数其实并不重要,请使用包含Symphy函数定义的更新代码。谢谢您的帮助。我已经更新了帖子,所以现在可能更清楚了。我认为这是一个类型问题。谢谢你的帮助。我已经更新了帖子,所以现在可能更清楚了。我认为这是一个类型问题。先生,你是我的英雄。非常感谢,它按预期工作!很乐意帮忙。另外,请注意,您只需要在定义表达式的位置定义一个符号。由于您是在main中定义它,并将其传递给函数,因此可以跳过梯形函数中的符号定义。您是对的!感谢您忽略了更改,我在代码中做到了这一点,它工作起来没有问题。
>>> test(lambda x:x**2)
<function <lambda> at 0x7f49d24d7d50>
<type 'function'>
9