数学函数,未分配的变量?

时间:2013-02-03 01:17:17

标签: python function unassigned-variable

我正在寻找一种方法,在为方程中的变量赋值之前,将多个数学函数加在一起 我这样做是因为我需要优化我的代码,并且我希望每次都为变量分配不同的值。我想要做的一个例子:

  1. f(x, y) = x + 2y

  2. g(x, y) = 3x - y

  3. 添加f(x, y) + g(x, y)以获取h(x, y),因此f(x, y) + g(x, y) = h(x, y) = 4x + y

  4. 现在我有h(x, y),我需要来自h(x, y)的多个值

  5. x = 4; y = 3, h(x, y) = 19
    x = 1, y = 0, h(x, y) = 4
    

    这可能吗?我试图将它们创建为字符串,添加字符串,然后删除引号以评估总和,但这不起作用。我试图以这种方式做我的方法,因为我想优化我的代码。如果我能够在评估它之前创建我的最终函数(在这种情况下它将是h(x, y)),那将非常有帮助。

    编辑:我正在添加(e **(x + y)),所以使用矩阵的线性解决方案不起作用:/

3 个答案:

答案 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作为xy的函数:

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)