【发布时间】:2016-06-14 13:42:18
【问题描述】:
当我给它一个值范围时,我试图找到函数的最大值,然后将相同的值放入一个数组中以供以后使用。在这种情况下,我有 2 个参数,一个是 x,另一个是 theta。我的问题是它没有循环到列表中的下一个 x 值。有没有办法让它循环并将最大值设置为数组?
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(两次!?)、积分和 U。在循环上方定义它们,如果需要,在循环中调用它们
-
你的缩进问题太多了。该代码不会运行。仔细查看它,并修复缩进 E() 和 Denom() 必须缩进它们的代码套件。您的返回需要缩进,您的函数内部函数定义很奇怪,应该删除并放入主代码块中
-
您能详细说明“缩进到函数中”是什么意思吗?
标签: python arrays function loops