IPython,绘制多项式
IPython, Plotting a Polynomial
我一直在使用 Sympy 进行插值,结果我得到了我想要的 7 次多项式 (ax^7 + bx^6 + cx^5 + ...+ h)绘制,但是当我尝试绘制它时出现错误,例如,如果我尝试:
plt.plot(r,U.subs(x,r))
其中 r = np.linspace(0,20,num=100)
和 U = Polynomial(x)
;
结果是一条错误消息:ValueError: sequence too large; must be smaller than 32
,如果我尝试 `r = np.arange(20)',我会得到 MemoryError:
。我可以绘制它的唯一方法是使用 for 循环,逐个替换并将其作为列表保存在另一个变量中。所以我的问题是,第一个输入有什么问题?有没有简单的方法来绘制多项式?
欢迎来到 SO!
subs()
方法不适用于 numpy 数组。 lambdify() 为所欲为。尝试:
import numpy as np
import matplotlib.pyplot as plt
import sympy as sy
sy.init_printing() # nice formula rendering in IPython
x = sy.symbols("x", real=True)
# the sample polynomial:
pp = x**3 + 3*x**2 - 6*x - 8
# Convert expression function usable with numpy array:
f_pp = sy.lambdify(x, pp, modules=np)
# Do the plotting:
x_n = np.linspace(-5, 2, 500)
y_n = f_pp(x_n) # evaluate all x_n
fg, ax = plt.subplots(1, 1)
ax.plot(x_n, y_n)
fg.canvas.draw()
plt.show()
参数 modules=np
确保 numpy 用于表达式中的函数(例如,sin()
=> np.sin()
)。在这个例子中,它不是明确需要的。
PS:如果您在问题中包含一个可运行的示例,那么对于潜在的回答者来说,生活会容易得多。
我一直在使用 Sympy 进行插值,结果我得到了我想要的 7 次多项式 (ax^7 + bx^6 + cx^5 + ...+ h)绘制,但是当我尝试绘制它时出现错误,例如,如果我尝试:
plt.plot(r,U.subs(x,r))
其中 r = np.linspace(0,20,num=100)
和 U = Polynomial(x)
;
结果是一条错误消息:ValueError: sequence too large; must be smaller than 32
,如果我尝试 `r = np.arange(20)',我会得到 MemoryError:
。我可以绘制它的唯一方法是使用 for 循环,逐个替换并将其作为列表保存在另一个变量中。所以我的问题是,第一个输入有什么问题?有没有简单的方法来绘制多项式?
欢迎来到 SO!
subs()
方法不适用于 numpy 数组。 lambdify() 为所欲为。尝试:
import numpy as np
import matplotlib.pyplot as plt
import sympy as sy
sy.init_printing() # nice formula rendering in IPython
x = sy.symbols("x", real=True)
# the sample polynomial:
pp = x**3 + 3*x**2 - 6*x - 8
# Convert expression function usable with numpy array:
f_pp = sy.lambdify(x, pp, modules=np)
# Do the plotting:
x_n = np.linspace(-5, 2, 500)
y_n = f_pp(x_n) # evaluate all x_n
fg, ax = plt.subplots(1, 1)
ax.plot(x_n, y_n)
fg.canvas.draw()
plt.show()
参数 modules=np
确保 numpy 用于表达式中的函数(例如,sin()
=> np.sin()
)。在这个例子中,它不是明确需要的。
PS:如果您在问题中包含一个可运行的示例,那么对于潜在的回答者来说,生活会容易得多。