绘图时Python出现无效语法

1 投票
1 回答
6259 浏览
提问于 2025-04-16 18:11

在我搞错了无限阶乘和求和的代码之后,我重新写了一遍,但我还是一直收到语法错误的提示 :\

from scitools.std import *
from math import factorial, cos, e
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()

它说我的程序有错误:无效的语法,而且字母a是红色的 :\

现在到底出什么问题了? :(

编辑:

我在求和的最后加了一个右括号,但现在我又遇到了一个很大的错误:

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'

我是不是应该让这个求和表达式返回一个数组,这样我才能绘图呢?

1 个回答

4

return 0.5*(1 + sum(... 这段代码中,括号没有配对好。

从风格上来说,我建议尽量避免使用 from <module> import * 这种方式来导入模块。在你的例子中,这样做会把一个单字母的变量名(e)导入到全局命名空间里,然后你又用到了它。这可能会导致混淆,更糟糕的是,可能会出现难以发现的错误。

撰写回答