IPython,绘制多项式

时间:2015-02-12 20:32:10

标签: plot ipython sympy polynomials

我一直在和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循环,逐个输入并将其作为列表保存在另一个变量中。所以我的问题是,第一个输入有什么问题?是否有一种简单的方法来绘制多项式?

1 个答案:

答案 0 :(得分:2)

欢迎来到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:如果你在问题中包含一个可运行的例子,它可以让潜在的回答者更容易生活。