我想知道如何在没有像这里这样的循环的情况下在 python 中表示一个总和
我们有:
def rosen(x):
"""The Rosenbrock function"""
return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)
我的功能如下:V(theta) = Sum(i=1->N)[a0*(cos(i*theta)]
预先感谢您的帮助 :):)
我想知道如何在没有像这里这样的循环的情况下在 python 中表示一个总和
我们有:
def rosen(x):
"""The Rosenbrock function"""
return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)
我的功能如下:V(theta) = Sum(i=1->N)[a0*(cos(i*theta)]
预先感谢您的帮助 :):)
你的公式是:
V(theta) = Sum(i=1->N)[a0*(cos(i*theta)]
这意味着:对范围内a0*(cos(i*theta)
的给定值的所有值求和,包括。theta
1
N
这在 Python 中变成了这样:
def V(theta, N):
return sum(a0*(cos(i*theta)) for i in range(1, N + 1))
请注意,您必须将theta
and传递N
给该函数。另请注意,我们N + 1
用于确保N
包含(因为range
迭代值直到但不包括最后一个值)。
就像是:
def V(theta,N):
return sum(a0*(cos(i*theta) for i in range(1,N+1))
print V(theta,N)
或者您可以使用lambda
:
V =lambda theta,N : sum(a0*(cos(i*theta) for i in range(1,N+1))
print V(theta,N)
您显示的示例不使用数学函数,仅使用基本的算术运算。这就是它如图所示工作的原因,但 math.cos 不支持列表,因此不会以这种方式工作。
如果你真的想在没有任何 for 的情况下四处走动,你应该使用 numpy。Numpy 的数学函数支持列表(实际上是数组)。
这样,您可以编写如下内容:
from numpy import *
def fun(theta):
return a0*sum(cos(arange(1,N+1)*theta))
如果您要进行大量此类计算,最好使用 numpy。