我試圖在給它一個值的範圍時找到函數的最大值,然後將相同的值放入數組供以後使用。在這種情況下,我有2個參數,一個是x,另一個是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()
你的返回語句沒有縮進到他們返回的函數中。你也定義了kl(兩次!?),Integrand和U循環。將它們定義在循環上方,如果需要,在循環中調用它們。 –
您有許多縮進問題。該代碼不會運行。仔細看看它,並修正縮進E()和Denom()必須縮進它們的代碼套件。你的退貨需要縮進,你的函數裏面的函數很奇怪,應該刪除並放在主代碼塊 –
你可以詳細說明你的意思是「縮進到函數中」嗎? –