5

我想知道如何在没有像这里这样的循环的情况下在 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)]

预先感谢您的帮助 :):)

4

3 回答 3

4

你的公式是:

V(theta) = Sum(i=1->N)[a0*(cos(i*theta)]

这意味着:对范围内a0*(cos(i*theta)的给定值的所有值求和,包括。theta1N

这在 Python 中变成了这样:

def V(theta, N):
    return sum(a0*(cos(i*theta)) for i in range(1, N + 1))

请注意,您必须将thetaand传递N给该函数。另请注意,我们N + 1用于确保N包含(因为range迭代值直到但不包括最后一个值)。

于 2012-08-28T21:19:26.937 回答
3

就像是:

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) 
于 2012-08-28T21:19:35.407 回答
0

您显示的示例不使用数学函数,仅使用基本的算术运算。这就是它如图所示工作的原因,但 math.cos 不支持列表,因此不会以这种方式工作。
如果你真的想在没有任何 for 的情况下四处走动,你应该使用 numpy。Numpy 的数学函数支持列表(实际上是数组)。
这样,您可以编写如下内容:

from numpy import *
def fun(theta):
    return a0*sum(cos(arange(1,N+1)*theta))

如果您要进行大量此类计算,最好使用 numpy。

于 2012-08-28T21:48:18.770 回答