我正在寻找一种方法,在为方程中的变量赋值之前,将多个数学函数加在一起 我这样做是因为我需要优化我的代码,并且我希望每次都为变量分配不同的值。我想要做的一个例子:
f(x, y) = x + 2y
g(x, y) = 3x - y
添加f(x, y) + g(x, y)
以获取h(x, y)
,因此f(x, y) + g(x, y) = h(x, y) = 4x + y
现在我有h(x, y)
,我需要来自h(x, y)
的多个值
x = 4; y = 3, h(x, y) = 19
x = 1, y = 0, h(x, y) = 4
等
这可能吗?我试图将它们创建为字符串,添加字符串,然后删除引号以评估总和,但这不起作用。我试图以这种方式做我的方法,因为我想优化我的代码。如果我能够在评估它之前创建我的最终函数(在这种情况下它将是h(x, y)
),那将非常有帮助。
答案 0 :(得分:8)
SymPy可以做到这一点:
import sympy as sym
x, y = sym.symbols('xy')
f = x + 2*y
g = 3*x - y
h = f + g
这表明SymPy简化了表达式:
print(h)
# y + 4*x
这显示了如何评估h
作为x
和y
的函数:
print(h.subs(dict(x=4, y=3)))
# 19
print(h.subs(dict(x=1, y=0)))
# 4
答案 1 :(得分:2)
如果函数都是变量的线性组合,如示例所示,则不需要@unutbu建议的解析器或者sympy解决方案(这对于复杂的函数来说似乎绝对是正确的答案)。
对于线性组合,我使用numpy
数组来包含变量的系数,如下所示:
import numpy as np
f = np.array([1,2])
g = np.array([3,-1])
h = f + g
x = np.array([4,3])
sum(h*x)
...它给出了答案19
,如您的示例所示。
答案 2 :(得分:1)
您也可以使用lambda函数。
f=lambda x,y:x+2*y
g=lambda x,y:3*x-y
h=lambda x,y:f(x,y)+g(x,y)
并评估h(x,y)