2

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

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

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

  3. 加到f(x, y) + g(x, y)get h(x, y),所以f(x, y) + g(x, y) = h(x, y) = 4x + y

  4. 现在我有了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)在这种情况下就是这样),那将非常有帮助。

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

4

3 回答 3

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作为 and 的函数x进行评估y

print(h.subs(dict(x=4, y=3)))
# 19
print(h.subs(dict(x=1, y=0)))
# 4
于 2013-02-03T01:37:29.357 回答
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,就像你的例子一样。

于 2013-02-03T01:52:34.253 回答
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)

于 2013-08-27T23:58:28.570 回答