这是我的代码,
import numpy as np
import math
import matplotlib.pyplot as plt
#Voltages
V,I = np.genfromtxt('Photocurrent_graph_2.csv', dtype=float, delimiter=',',
usecols=(0,2), skiprows=1, unpack=True)
z = np.polyfit(V,I,6)
def function(x):
return (z[0])*x**6 (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]
plt.plot(V, function(V))
plt.plot(V,I,'ro')
如果我注释掉行plt.plot(V,函数(V)),python不会给我任何错误。我做错了什么?
编辑:
我遵循了iCodez的建议,但没有提供新的错误消息,
return (z[0])*x**6 + (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]
IndexError: index 7 is out of bounds for axis 0 with size 7
答案 0 :(得分:2)
问题在于这一行:
return (z[0])*x**6 (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]
您忘记了+
和(z[0])*x**6
之间的(z[1])*x**5
。
这是固定版本:
return (z[0])*x**6 + (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]
如果没有+
,您可以通过直接在其后面放置(z[0])*x**6
来调用(z[1])
这是一个整数。
答案 1 :(得分:0)
在第一个表达式后,您错过了 + 符号。 您使用了太多括号 - 它们不会增加代码的清晰度,只会使其无法读取 并且有一种更好的方法来编写多项式计算:
sum(c*x**pos for pos, c in enumerate(reversed(z)))