Numpy根功能和pyplot情节

时间:2015-02-27 06:09:21

标签: python numpy matplotlib

我想绘制二次方程的两个解作为参数(函数coeff(t))的函数。我正在使用函数numpy.roots(我确信在这种情况下所有的根都是真的),我试图从pyplot.plot中调用它,如下所示:

import numpy as np
import matplotlib.pyplot as plt

r = 3.74
def coeff(pp):
    return np.array([pp-1,r+1-0.5*pp,-r])

def sroot(t):
    return np.roots(coeff(t))

a = np.linspace(0,0.9,100)

fig = plt.figure()
plt.plot(a,sroot(a)[0,:])
plt.plot(a,sroot(a)[1,:])

plt.show()

我收到错误消息:

  File "quest.py", line 18, in <module>
    plt.plot(a,sroot(a)[0,:])
  File "quest.py", line 10, in sroot
    return np.roots(coeff(t))
  File "/usr/lib64/python2.7/site-packages/numpy/lib/polynomial.py", line 218, in roots
    p = p.astype(float)

据我所知,numpy.roots只接受参数列表,无法识别数组3xlen(a)中的行。有没有办法在一行中完成,最好是在pyplot.plot中?我想避免使用循环。

1 个答案:

答案 0 :(得分:0)

这是因为你一次转换所有系数并试图在所有系数上调用numpy root求解器。 np.roots仅接受1-d数组并求解单个多项式。这是一个执行您想要的脚本:

import numpy as np
import matplotlib.pyplot as plt

# Parameters
r = 3.74
T = np.linspace(0.0,0.9,100)

# Coefficients
C = np.zeros((len(T),3))
C[:,0] = T-1
C[:,1] = r + 1 - 0.5*T
C[:,2] = r

# Roots
R = np.zeros((len(T),2))
for i in range(len(T)):
    R[i] = np.roots(C[i])

# Plot
fig = plt.figure()
plt.plot(T,R[:,0])
plt.plot(T,R[:,1])

plt.show()