39 lines
761 B
Python
39 lines
761 B
Python
|
from scipy.optimize import curve_fit
|
||
|
from numpy import linspace
|
||
|
|
||
|
from numpy import tanh
|
||
|
from scipy.constants import e, k
|
||
|
|
||
|
|
||
|
import pandas as pd
|
||
|
|
||
|
|
||
|
# Global variables
|
||
|
|
||
|
new_U = linspace(-25, 25, 1000)
|
||
|
|
||
|
|
||
|
# Function for approximation
|
||
|
|
||
|
|
||
|
def function_IU(U, I_n, T_e):
|
||
|
return I_n * tanh(e*U/2/k/T_e)
|
||
|
|
||
|
# Find the best fit params of In and Te
|
||
|
|
||
|
|
||
|
def find_FitParams(data_I, data_U):
|
||
|
popt, pcov = curve_fit(function_IU, data_U, data_I, p0=[0, 50000])
|
||
|
return popt, pcov
|
||
|
|
||
|
# Returns pandas.DataFrame with approximated Current and Voltage values
|
||
|
|
||
|
|
||
|
def getApproxValues(data):
|
||
|
data = data.sort_values(by=['U'])
|
||
|
popt, pcov = find_FitParams(data['I'], data['U'])
|
||
|
df = pd.DataFrame()
|
||
|
df['U'] = new_U
|
||
|
df['I'] = function_IU(df['U'], *popt)
|
||
|
return df
|