我有一些符号表达式已存储在文本文件中(因为它们太大),以后无法读取它们以找到它们的数值估计值。因此,在我阅读了这些表达式(比如foo_sym
)之后,我将这些表达式转换为 python 函数,如下所示:
import sympy as sym
foo_fn = sym.lambdify(tuple(foo_sym.free_symbols), foo_sym)
表达式中的一些符号变量是数组,因此我将函数的矢量化版本设置为:
import numpy as np
foo_fn_vec = np.vectorize(foo_fn)
现在,我发现向量化函数的数值估计如下:
foo_num = foo_fn_vec(var_1, var_2, var_3, ...., var_12)
在上面的代码中,符号值var_1, var_2, var_3, ...., var_12
的顺序与我通过的符号顺序一致tuple(foo_sym.free_symbols)
。但是,每次我重新启动 python 并运行上面的代码时,我都会得到一个,ValueError: math domain error
因为给出的符号变量的顺序tuple(foo_sym.free_symbols)
似乎已经改变了,但是值的顺序foo_fn_vec(var_1, var_2, var_3, ...., var_12)
没有改变。
有没有一种方法可以在两个步骤中保持符号的顺序不变,即在转换为函数的sym.lambdify((var_1, var_2, var_3, ...., var_12), foo_sym)
同时找到函数的数值为foo_num = foo_fn_vec(var_1, var_2, var_3, ...., var_12)
?