这是我的代码:
def lsf2(x,y):
N = 100
A = (sum(x)*sum(y))/(sum(x)*(1-n))
B = (sum(y)-N*A)/sum(x)
delta = N*(sum(x**2)*sum(y))- sum(x)*sum(x*y)
sigy = (sum(y-A-B*x)**2/(N-2))**0.5
siga = sigy(sum(x)**2)/delta
sigb = sigy*(N/delta)**0.5
return A, B, sigy, siga, sigb
A, B, sigy, siga, sigb = lsf2(xdata, ydata)
print(A, B, sigy, siga, sigb)
我得到的错误是这样的:
----> 7 siga = sigy(sum(x(**2(/delta
类型错误:"numpy.ndarray"对象不可调用
你有:
sigy = (sum(y-A-B*x)**2/(N-2))**0.5
siga = sigy(sum(x)**2)/delta
sigy
是一个数字数组。当您键入sigy(sum(x)**2)/delta
时,您尝试sum(x)**2
作为输入传递,就好像sigy
是一个函数,但事实并非如此。
也许你需要:
siga = sigy*(sum(x)**2)/delta # multiplication
或
siga = sigy**(sum(x)**2)/delta # power
错误告诉您您正在尝试使用sigy(...)
调用函数sigy
但它是一个数组而不是函数。根据错误后面的行,我认为您缺少一个*
:
siga = sigy*(sum(x)**2)/delta
^ here
在数学中,我们可以写类似x(a+b)
的东西,我们假设x
的值乘以括号内的结果。在 Python 中,这种相同的语法意味着将括号内的值传递给名为x
的函数。您不能在 Python 程序中省略乘法运算符。
sigy
是一个numpy数组,而不是一个函数。在第siga = sigy(sum(x)**2)/delta
行中,sigy()
试图调用一个名为sigy
和参数sum(x)**2
的函数。如果您尝试索引sigy
则需要使用[]
sigy[index]
.