使用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
?
答案 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))