ここのようなループなしで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(シータ) = Sum(i=1->N)[a0*(cos(i*シータ)]
つまり、からまでの範囲内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 を使用することをお勧めします。