我想绘制二次方程的两个解作为参数(函数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中?我想避免使用循环。
答案 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()