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(シータ) = Sum(i=1->N)[a0*(cos(i*シータ)]

つまり、からまでの範囲内a0*(cos(i*theta)の特定の値に対する のすべての値を合計します。theta1N

これは、Python では次のようになります。

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

theta関数にandを渡す必要があることに注意してくださいN。また、が含まれN + 1ていることを確認するために を使用していることにも注意してください (最後の値までは値を繰り返し処理しますが、最後の値は含まれません)。Nrange

于 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 に答える