Sunday 15 March 2015

hermite - TypeError: 'float' object has no attribute '__getitem__' Python NBody Simulation -



hermite - TypeError: 'float' object has no attribute '__getitem__' Python NBody Simulation -

i want create n-body simulation using hermite algorithm, when write code, maintain getting error, said:

typeerror: 'float' object has no attribute '__getitem__'

and have no thought why it's happen, because object in list not float.

dt = input('dt = ') t_end = input('t_end = ') n = input('n= ') t = input('t= ') m = np.zeros(n) r = np.zeros((n, 3)) rji = np.zeros((3)) vji = np.zeros((3)) v = np.zeros((n, 3)) = np.zeros((n, 3)) jk = np.zeros((n, 3)) in range (0,n,1): m[i] = 2 k in range (0,3,1): r[i,k] = 2+i k in range (0,3,1): v[i,k] = 1+i print ('m'),m,r,v in range (0,n,1): k in range (0,3,1): a[i,k] = jk[i,k] = 0.0 in range (0,n,1): j in range (i+1,n,1): k in range (0,3,1): rji[k] = r[j,k] - r[i,k] vji[k] = v[j,k] - v[i,k] r2 = 0. k in range (0,3,1): r2 += rji[k] * rji[k] r3 = r2 * math.sqrt(r2) rv = 0. k in range (0,3,1): rv += rji[k] * vji[k] rv /= r2 k in range (0,3,1): a[i,k] += m[j] * rji[k] / r3; a[j,k] -= m[i] * rji[k] / r3; jk[i,k] += m[j] * (vji[k] - 3 * rv * rji[k]) / r3; jk[j,k] -= m[i] * (vji[k] - 3 * rv * rji[k]) / r3; ekin = 0. epot = 0. in range (0,n,1): j in range (i+1,n,1): k in range (0,3,1): rji[k] = r[j,k] - r[i,k] #the error coming line r2=0. k in range (0,3,1): r2 += rji[k] * rji[k] print rji r = math.sqrt(r2) epot -= m[i] * m[j] / r k in range (0,3,1): ekin += 0.5 * m[i] * v[i,k] *v[i,k] e_in = ekin + epot print('initial total energy e_in = '), e_in

i'm not sure if source of error seeing, missing variable name in line (last line of loops):

ekin += 0.5 * m[i] * v[i][k] *[i][k]

that should be

ekin += 0.5 * m[i] * v[i][k] * v[i][k]

a comment on code: using 2-dimensional numpy arrays, can index them as, example, v[i,k] instead of v[i][k]. notation much more efficient, , it's easier read.

python hermite

No comments:

Post a Comment