Plot 伊皮顿,画一个多项式

Plot 伊皮顿,画一个多项式,plot,ipython,sympy,polynomials,Plot,Ipython,Sympy,Polynomials,我一直在使用Symphy进行插值,结果得到了一个7次多项式(ax^7+bx^6+cx^5+…+h),我想要绘制,但如果我尝试绘制它,就会出现错误,例如,如果我尝试: plt.plot(r,U.subs(x,r)) 其中r=np.linspace(0,20,num=100)和U=多项式(x); 结果是一条错误消息:ValueError:序列太大;必须小于32,如果我尝试'r=np.arange(20)',我将获得内存错误:。我可以绘制它的唯一方法是使用for循环,逐个替换并将其保存在另一个变量中

我一直在使用Symphy进行插值,结果得到了一个7次多项式(ax^7+bx^6+cx^5+…+h),我想要绘制,但如果我尝试绘制它,就会出现错误,例如,如果我尝试:

plt.plot(r,U.subs(x,r))
其中
r=np.linspace(0,20,num=100)
U=多项式(x)
; 结果是一条错误消息:
ValueError:序列太大;必须小于32,如果我尝试'r=np.arange(20)',我将获得
内存错误:
。我可以绘制它的唯一方法是使用for循环,逐个替换并将其保存在另一个变量中作为列表。所以我的问题是,第一个的输入有什么问题?有没有简单的方法来绘制多项式?

欢迎使用SO

subs()
方法不适用于numpy数组。做你想做的事。尝试:

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()
)。在本例中,它不是明确需要的

附言:如果你在你的问题中加入了一个可运行的例子,它会让潜在的回答者的生活变得更加轻松