示例#1
0
    Fre = float(fields[0])
    if Fre >= FreqLB and Fre <= FreqUB:
        F=F+[float(fields[0])]
        R=R+[float(fields[1])]
        Im=Im+[float(fields[2])]
        thetas=thetas+[numpy.arctan(float(fields[2])/float(fields[1]))]


#Form data into complex array
FArr=numpy.array(F)
RArr=numpy.array(R)
ImArr=numpy.array(Im)*1j
TotArr=RArr+ImArr

#Fit the data
fit_result, ParamNames = fit.custom_fitting(F, TotArr, params)
Fitted_variables = fit_result.x

#Obtain the residuals
residuals = fit.res_vec( Fitted_variables, FArr, TotArr)

#Bootstrap to get error and generate final model
boot_params, corr = boot.strap(residuals, FArr, TotArr, Fitted_variables, ParamNames)
result = cir.Z(boot_params, FArr, modelname)
boot_generation = result.z
Real_Boot_Fit = boot_generation.real
Imag_Boot_Fit = boot_generation.imag
Thetas_Fit = []
i=0
for x in Real_Boot_Fit:
    theta = numpy.arctan(Imag_Boot_Fit[i]/Real_Boot_Fit[i])
示例#2
0
def strap(residuals, FArr, ZArr, params, ParamNames):

    #Break apart complex array of original residuals
    length = int(len(residuals) / 2)
    Real_residuals = residuals[0:length]
    Imag_residuals = residuals[length:]

    #Break apart original complex array
    RArr = ZArr.real
    ImArr = ZArr.imag
    Modulus = numpy.sqrt(RArr**2 + ImArr**2)

    #Obtain the Statistical parameters of the Residuals from original fitting (Needed input = Real + Imaginary Residuals)
    Real_res_error = statistics.stdev(Real_residuals)
    Imag_res_error = statistics.stdev(Imag_residuals)
    Real_res_mean = statistics.mean(Real_residuals)
    Imag_res_mean = statistics.mean(Imag_residuals)

    #Initialize iterator
    i = 0

    #Initilize Matrix to carry disributions of fitted variables
    Fitted_Variables_Matrix = []

    #Initialize Parameters list
    global Param_names

    #Main Bootstrap. Fitting to be performed x times in i<x
    while i < 50:
        #Generate a new set of residuals based on the statistics acquired above.
        Boot_R_residuals = numpy.random.normal(
            Real_res_mean, Real_res_error, size=length) * Modulus
        Boot_i_residuals = numpy.random.normal(
            Imag_res_mean, Imag_res_error, size=length) * Modulus
        #Generate a new data set based on these residuals (Requires original impedance data)
        new_r_boot = RArr + Boot_R_residuals
        new_i_boot = ImArr + Boot_i_residuals
        total_boot = new_r_boot + 1j * new_i_boot

        #Check simulated impedance (uncomment to check boots)
        #plt.plot(new_r_boot, -new_i_boot)
        #plt.savefig("boots.png")

        #Perform a fit on newly generated data (Requires parameter guesss)
        fit_result, pn = fit.custom_fitting(FArr, total_boot, params)
        #Generate a list of variables from fit
        Fitted_variables = list(fit_result.x)

        Fitted_Variables_Matrix.append(Fitted_variables)

        i = i + 1

        Param_names = pn

    Fitted_Variables_Matrix = pd.DataFrame(Fitted_Variables_Matrix,
                                           columns=ParamNames)
    Correlation_Matrix = Fitted_Variables_Matrix.corr()

    #Take the standard deviation of each of the fitted variables distributions
    Stds = Fitted_Variables_Matrix.std(axis=0)

    #Take the average fit
    means = Fitted_Variables_Matrix.mean(axis=0)

    #Compile all of the fitted variables errors into a single list
    evz = list(Stds)
    ms = list(means)

    #Compile and save these results to a csv
    Params = list(zip(Param_names, ms, evz))
    Paramsdf = pd.DataFrame(data=Params,
                            columns=['Parameters', 'Value', 'Error'])
    Paramsdf.to_csv('Fitted_Parameters.csv', index=False)

    #Clear figure at end of program
    plt.clf()

    #Return Fitted Params
    return ms, Correlation_Matrix