範囲の値を与えたときに最大の関数を見つけようとしています。後で使用するための配列。この場合、2つのパラメータがあります.1つはx、もう1つはthetaです。私の問題は、リスト内の次のx値にループしていないことです。それをループさせて最大値を配列にする方法はありますか?Python:関数の最大値を設定して、配列内の次の値の最大値を調べます。
import sympy.mpmath as mp
import numpy as np
import scipy.optimize as sc
from scipy.optimize import fmin
import matplotlib.pyplot as plt
#INPUT
c = 299792458. #speed of light
f = 300e6 #frequency
lmda = c/f #lambda
C = 0.5772 #Euler's constant
def E(x):
i = [] #creates an empty list
for z in x:
def kl(x):
return (2*np.pi/lmda)*x*lmda/2
def U(theta):
u = (np.cos(kl(z)*np.cos(theta))-np.cos(kl(z)))/np.sin(theta)
return u
theta = np.linspace(0.0001,np.pi,1000)
E_max = fmin(lambda theta: -U(theta), 0)
i+=[E_max]
return np.array(i)
def Denom(x):
y = [] #creates an array
for z in x:
def kl(x):
return (2*np.pi/lmda)*x*lmda
def Integrand(x):
f =np.abs(mp.ci(kl(x)) + 0.5*np.sin(kl(x))*(mp.si(2*kl(x))-2*mp.si(kl(x))) + 0.5*np.cos(kl(x))*(2*mp.ci(kl(x)) - mp.ci(2*kl(x))))
return f
PWR_tot = Integrand(z)
y+=[PWR_tot]
return np.array(y)
x = np.linspace(0.0001,5.,1000)
Directivity = E(x)/Demon(x)
plt.plot(x,Directivity)
plt.ylim(ymin = 0)
plt.show()
return文は、返される関数の中にインデントされていません。また、kl(2回!?)、Integrand、Uループを内部ループとして定義します。それらをループの上に定義し、必要に応じてループ内でそれらを呼び出す –
インデントの問題が多すぎます。そのコードは実行されません。それを注意深く見て、インデントを修正してください。E()とDenom()は、コードスイートをインデントしなければなりません。あなたのリターンは字下げする必要があります。あなたの関数defは内部関数が奇数であり、コードのメインブロックに置かなければなりません。 –
"関数の中に入るためにインデントされる"ということを詳しく説明できますか? –