用SymPy绘图

时间:2016-04-17 16:57:20

标签: python sympy

使用SymPy,我可以用以下函数绘制函数:

f, a = symbols('f a')
f = a + 10
plot(f)

但是,如果我将函数定义为:

f, a, b = symbols('f a b')
f = a + b
b = 10
plot(f)

然后我收到错误声明:

ValueError: The same variable should be used in all univariate
            expressions being plotted.

如果我定义f,如果在绘制函数之前为f = a + b分配了一个常量值,我该如何绘制b

3 个答案:

答案 0 :(得分:5)

f, a, b = symbols('f a b')
f = a + b
b = 10

请勿在表达式中更改b。如果您打印f,您会发现它仍被定义为a + b

您将Python变量与SymPy符号混淆。在第一行中,Python变量b指向名为b的SymPy符号(实际上,它们不必是同一个名称;您也可以编写x = Symbol('b')和{{1 }})。在第二行中,变量y = a + x指向包含符号f的SymPy表达式。在第三行中,变量b指向整数10.这并不会更改使用变量b的任何先前行,因为它们已经运行过。它与你跑

没什么不同
b

您希望最后a = 1 b = 1 c = a + b b = 2 的值为c,而不是2。类似地,当3指向一个符号时,使用它创建的表达式使用符号,但如果将其更改为指向一个数字,则它不会影响以前的符号。 / p>

在SymPy中处理此问题的推荐方法是避免将相同的变量分配给符号,然后再分配给非符号(值得指出的是b中的f定义第一行完全没用,因为你在第二行立即重新定义它。要替换表达式中的符号,请使用subs:

a, b = symbols('a b')
f = a + b
f1 = f.subs(b, 10)

请注意,subs不会更改原始f。它返回一个新表达式。

This document也可能有助于消除这种混乱。

答案 1 :(得分:2)

如果您不想像其他答案中那样使用替换,那么您可以使f成为当然的实际功能

def f(a, b):
    return a + b
a = symbols('a')
b = 10
plot(f(a,b))

答案 2 :(得分:0)

您必须将b替换为f:

plot(f.subs('b', b))