TypeError в python при попытке вывести сумму - PullRequest
0 голосов
/ 23 мая 2011

Поскольку я получил совет задать еще один вопрос, он идет ... Я хочу построить сумму, и у меня есть код:

from scitools.std import *
from math import factorial, cos, e, sqrt
from scipy import *
import numpy as np


def f1(t):
    return 0.5*(1 + sum( (a**(2*n)*cos(2*sqrt(1 + n)*t))/(e**a**2*factorial(n)) for n in range(0,100)))

a=4
t = linspace(0, 35, 1000)
y1 = f1(t)

plot(t, y1)

xlabel(r'$\tau$')
ylabel(r'P($\tau$)')
legend(r'P($\tau$)')
axis([0.0, 35.0, 0.0, 1.0])
grid(True)
show()

Но я получаю ошибку

Traceback (most recent call last):
  File "D:\faxstuff\3.godina\kvantna\vježbe\qm2\v8\plot.py", line 12, in <module>
    y1 = f1(t)
  File "D:\faxstuff\3.godina\kvantna\vježbe\qm2\v8\plot.py", line 8, in f1
    return 0.5*(1 + sum( (a**(2*n)*cos(2*sqrt(1 + n)*t))/(e**a**2*factorial(n)) for n in range(0,100)))
  File "C:\Python26\lib\site-packages\numpy\core\fromnumeric.py", line 1415, in sum
    res = _sum_(a)
  File "D:\faxstuff\3.godina\kvantna\vježbe\qm2\v8\plot.py", line 8, in <genexpr>
    return 0.5*(1 + sum( (a**(2*n)*cos(2*sqrt(1 + n)*t))/(e**a**2*factorial(n)) for n in range(0,100)))
TypeError: unsupported operand type(s) for /: 'numpy.ndarray' and 'numpy.float64'

Так в чем проблема? Он должен что-то делать с массивом, но я не знаю, что: \

РЕДАКТИРОВАТЬ: Изображение в Mathematica выглядит следующим образом: image

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Я не понимаю, что делает это выражение генератора в конце оператора return в f1, но это:

a=4
t = linspace(0, 35, 1000)
y1 = numpy.array([f1(t_i) for t_i in t])

должно вас куда-то привести.Что он делает, так это создает новый numpy.array, перебирая t, вызывая f1 для каждого значения и создавая список из результатов.Таким образом, t внутри f1 является одним числом, а не целым массивом сразу, что означает, что ваша арифметика может быть правильно применена к нему.

1 голос
/ 23 мая 2011

Вы не можете разделить numpy.ndarray на numpy.float64. Это проблемный код:

return 0.5*(1 + sum( (a**(2*n)*cos(2*sqrt(1 + n)*t))/(e**a**2*factorial(n))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...