Ich versuche, das Maximum der Funktion zu finden, wenn ich ihm einen Bereich von Werten geben und dann denselben Wert in ein setzen Array für die spätere Verwendung. In diesem Fall habe ich 2 Parameter, von denen einer das x und der andere das Theta ist. Mein Problem ist, dass es nicht zum nächsten x-Wert in der Liste springt. Gibt es eine Möglichkeit, die Schleife zu umkreisen und das Maximum in ein Array zu setzen?Python: Legen Sie das Maximum einer Funktion und Schleife um das Maximum des nächsten Wertes in einem Array zu finden
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()
Ihre Return-Anweisungen sind nicht eingerückt, in den Funktionen zu leben, die sie zurückgeben. Sie definieren auch kl (zweimal !?), Integrand und U innerhalb Schleifen. Definieren Sie sie über der Schleife und rufen Sie sie bei Bedarf in der Schleife auf –
Sie haben zu viele Einrückungsprobleme. Dieser Code wird nicht ausgeführt. Schauen Sie es sich genau an und korrigieren Sie die Einrückungen E() und Denom() muss ihre Code-Suite eingerückt haben. Ihre Returns müssen eingerückt werden, Ihre Funktion defs innerhalb Funktionen sind ungerade und sollte entfernt werden und in den Hauptblock des Codes –
setzen Können Sie näher auf das, was Sie mit "eingerückt, um in der Funktion leben" bedeuten? –