1

我正在进行优化,我想编写一个函数,我可以在其中 sub() 更多的变量。为此,我生成了带有 n 个变量的函数。例如,假设 3 个函数和 2 个变量。

num_var=2
x=symbols('x0:num_var')

我生成了这个函数:

f=[5*x0 + 4*x1 + 6, -4*x0 - 5*x1 - 6, -8*x0 - 10]

我有一点像:

point=[-2.8,1.74]

如果我想在每个函数中使用 sub(),最快的方法是什么?

f[0].subs([(x[0],point[0]),(x[1],point[1])])

(这将给出第一个函数的评估)我在列表中得到三个函数评估:

fun_eval=[some number,some number, ... (in size of number of functions)] 

问题是如何编写代码来对大量函数中的大量变量进行评估?

4

2 回答 2

1
>>> from sympy import *
>>> x0, x1 = x = symbols('x:2')
>>> f = [5*x0+4*x1+6, -4*x0-5*x1-6, -8*x0-10]
>>> point = (-2.8, 1.74)
>>> [fi.subs(zip(x, point)) for fi in f]
[-1.04000000000000, -3.50000000000000, 12.4000000000000]
于 2013-11-06T12:16:57.907 回答
0

请参阅http://docs.sympy.org/latest/tutorial/basic_operations.html#lambdify。如果您想在大量点上有效地评估一个函数,您应该使用lambdify.

>>> func = lambdify(x, f)
>>> func(*point)
[-1.04, -3.5, 12.399999999999999]

默认情况下,它使用 subs,但如果你已经numpy安装,你可以使用它来更快地评估,通过传递module="numpy"lambdify.

顺便说一句,您symbols('x0:num_var')实际上并没有使用该num_var变量。你需要使用symbols('x0:%d' % num_var).

于 2013-11-07T04:47:51.830 回答