scipy.optimize.curve_fit: неправильный массив ошибок с плавающей точкой / объект слишком глубокий для нужного массива - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь использовать подгонку кривой для подгонки к функции, которая принимает массив частот в качестве значений x. Я продолжаю получать эту ошибку и пытался изменить форму и сделать мои значения y плавающими. Не совсем уверен, куда идти отсюда, так как я продолжаю получать ошибку.

r_0 = (n_0 - n_1)/(n_0 + n_1)
r_1 = (n_1 - n_0)/(n_1+ n_0)
t_1 = 1 + r_1
t_0 = 1 + r_0
freq_values = np.linspace(108,200,1000)

#function to fit to
def T(freq,ghz=[]):
    Transmittance = []
    for ghz in freq_values:
        X_01 = np.exp((2j*np.pi*0.004724*1.528*ghz*10**9)/(3*10**8))   
        H_1 = X_01 + r_0*r_1*(X_01)**-1
        T = (t_0*t_1)/(H_1)
        hola = list(T.flat)
        Transmittance.append(hola*np.conj(hola))
    return Transmittance

x = freq_values
y = T(freq_values)
yy= np.reshape(y, len(y))
yyy= np.array(yy.real, dtype=float)

plt.plot(x,y, 'r', label = 'calculated')
#fit function, want to match/find optimized n value
def TT(freq,n,ghz=[]):
    Transmittance = []
    for ghz in freq_values:
        X_01 = np.exp((2j*np.pi*0.004724*n*ghz*10**9)/(3*10**8))
        H_1 = X_01 + r_0*r_1*(X_01)**-1
        T = (t_0*t_1)/(H_1)
        hola = list(T.flat)
        Transmittance.append(hola*np.conj(hola))
    return Transmittance

popt, pcov = curve_fit(TT, x, yyy)         #ydata = power (transmission) data
plt.plot(x, TT(x, *popt), 'b', label = 'fit')

plt.legend(loc='upper right')

Я ожидаю, что код или подгонка будут соответствовать исходному графику, но получаю ошибку для yyy в curve_fit (TT, x, yyy)

1 Ответ

0 голосов
/ 03 июня 2019

Кодовый блок, о котором идет речь, был изменен для работы ниже.Обратите внимание на разницу между тем, что возвращает функция.Кроме того, я подозреваю, что вам понадобится дать правильное начальное предположение.

def TT(freq,n,ghz=[]):
    Transmittance = []
    for ghz in freq_values:
        X_01 = np.exp((2j*np.pi*0.004724*n*ghz*10**9)/(3*10**8))
        H_1 = X_01 + r_0*r_1*(X_01)**-1
        T = (t_0*t_1)/(H_1)
        hola = list(T.flat)
        Transmittance.append(hola*np.conj(hola))
    return np.real(np.array(Transmittance)[:,0])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...