Я пытаюсь подогнать кривую к своим данным, чтобы получить наиболее подходящие параметры. У меня есть функция, которая умножает определенные значения вместе, чтобы получить набор «значений y», но я не уверен, как превратить это в функцию, основанную на зависимой переменной, такой как x или λ.
import matplotlib.pyplot as plt
import numpy as np
import statistics as st
λ=np.linspace(0.4,2.280,37)
R=3
def ExtinctionMW(λ,E): #Equation 20, table 4 from Pei Paper
#E=0.7 #E(B-V)
Ext=(165/((((λ/0.047)**2)+((0.047/λ)**2))+90))+(14/((((λ/0.08)**6.5)+((0.08/λ)**6.5))+4))+
(0.045/((((λ/0.22)**2)+((0.22/λ)**2))-1.95))+(0.002/((((λ/9.7)**2)+((9.7/λ)**2))-1.95))+
(0.002/((((λ/18)**2)+((18/λ)**2))-1.8))+(0.012/(((λ/25)**2)+((25/λ)**2)))
ζ1=10**(-0.4*E*Ext)
return ζ1
def Flux(λ,a,β):
#β=0.5
Fem=(λ**β)
return Fem
def fluxmodelMW(a,b,e):
wl=[0.4,0.4685,0.510,0.552,
0.552,0.580,0.622,0.650,0.691,
0.691,0.720,0.755,0.780,0.818,
0.818,0.850,0.889,0.922,
0.960,1.000,1.040,1.090,1.120,
1.150,1.200,1.250,1.300,1.350,
1.500,1.550,1.630,1.700,1.760,
2.000,2.100,2.175,2.280]
noADC=[0.291,0.403,0.447,0.474,
0.475,0.492,0.498,0.492,0.478,
0.541,0.555,0.556,0.554,0.528,
0.520,0.475,0.391,0.309,
0.538,0.540,0.542,0.544,0.545,
0.535,0.536,0.535,0.535,0.533,
0.531,0.530,0.528,0.523,0.519,
0.511,0.476,0.452,0.440]
transmission=[]
for n in range(len(noADC)):
transmission.append(((Flux(wl[n]/R,a,b))*(ExtinctionMW(wl[n]/R,e))/R)*noADC[n])
return np.array(transmission)