【问题标题】:Python: Substituting variables with functions SymPyPython:用函数 SymPy 替换变量
【发布时间】:2018-10-26 10:45:15
【问题描述】:

我正在编写一个代码,我需要用多个函数替换一个函数的变量。

例如,我有B=x1**2+x2**2+x3**2,我需要替换x1=cos(x1+x2)x2=sin(x2+x3)x3=x1,以便得到这个值:cos(x1+x2)**2+sin(x2+x3)**2+x1**2

但是,当我像这样迭代地执行此操作时:

for j in range(nvar):
        B=expand(B.subs(x[j],f[j]))

其中nvar=3 和x 被定义为符号列表,f 被定义为符号函数列表,在每次迭代中,来自先前替换的x[j] 被替换并给出错误答案:x1**2 + sin(x1 + cos(x1 + sin(x1 + x2)))**2 + cos(x1 + sin(x1 + cos(x1 + sin(x1 + x2))))**2

如何同时执行此替换?

【问题讨论】:

  • 您可以为替代变量使用其他名称,例如 x1=cos(y1+y2),因为从数学上讲,scipy 为您提供了正确的扩展。

标签: python sympy


【解决方案1】:

您可以将simultaneous 关键字用于subs,这是为以下情况而设计的:

>>> (x1**2+x2**2+x3**2).subs(dict(x1=cos(x1+x2), x2=sin(x2+x3), x3=x1), simultaneous=True)
x1**2 + sin(x2 + x3)**2 + cos(x1 + x2)**2

或者,如果 x 和 f 包含您感兴趣的所有替换实例,

>>> reps = dict(zip(x, f))
>>> B = expand(B.subs(reps, simultaneous=True)

【讨论】:

    猜你喜欢
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多