我正在尝试一个关于legendre函数的程序,如下所示,但它显示了一些错误。我不习惯Python中的数组,但在C ++中知道它们。
from math import *
j = 0
arr = [0 for i in range (6)]
k= 3.75
arr[0]= 1
arr[1] = 1
x0= -1
xf = 1
x= x0
h= 0.1
f1 = open('leg.dat', 'w')
while x< xf:
for j in range(0,5):
arr[j+2]= (arr[j] *(j*j + j -k)/((j+2)*(j+1)))
print >>f1, x,(x**j)*(((j+2)(j+1)*arr[j]) - (j*(j-1)*arr[j]) - (2*j*arr[j]) + k*arr[j])
x = x+h
f1.close ()
错误显示:
print>>f1, x,(x**j)*(((j+2)(j+1)*arr[j]) - (j*(j-1)*arr[j]) - (2*j*arr[j]) + k*arr[j])
TypeError: 'int' object is not callable
答案 0 :(得分:4)
问题在于:
(j+2)(j+1)
Python试图以j+2
作为参数调用j+1
。
>>> j = 1
>>> (j+2)(j+1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
您的意思是(j+2)*(j+1)
吗?
答案 1 :(得分:1)
print >>f1, x,(x**j)*(((j+2)(j+1)*arr[j]) - (j*(j-1)*arr[j]) - (2*j*arr[j]) + k*arr[j])
^^^ ^^^
您未指定这两个值之间的操作。你的意思是乘以它们吗?
print >>f1, x,(x**j)*(((j+2)*(j+1)*arr[j]) - (j*(j-1)*arr[j]) - (2*j*arr[j]) + k*arr[j])