In [427]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from __future__ import division
import pandas as pd
In [428]:
V = np.linspace(0,1000,1000)
plt.plot(V, 6.43 - 5e-14*(np.exp(V/2.6) - 1)) #in V and A
plt.ylim(0,10)
plt.xlim(0,100)
Out[428]:
In [429]:
V = np.linspace(0,100,1000)
I_o = 5e-14 #A
I_L = 6.43 #A
R_s = 0 #ohm
R_sh = 1e6 #ohm
plt.plot(V, I_L - I_o*(np.exp(V/2.6) - 1)) #in V and A
plt.ylim(0,10)
plt.xlim(0,100)
Out[429]:
In [430]:
I = 100
plt.plot(I - I_L - I_o*(np.exp((V+I*R_s)/2.6) - 1)) #this
Out[430]:
In [431]:
from sympy import solve, Symbol, exp
x = Symbol('x')
y = Symbol('y')
solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y])
Out[431]:
In [433]:
V = Symbol('V')
I = Symbol('I')
I_o = 5e-14 #A
I_L = 6.43 #A
R_s = 10 #mohm
R_sh = 1e5 #mohm
n = 1
#solve(I - I_L - I_o*(exp( (V + I * R_s) /(26*n)) - 1) , I)
In [434]:
from scipy.optimize import fsolve
import math
def equations(p):
x, y = p
return (x+y**2-4, math.exp(x) + x*y - 3)
x, y = fsolve(equations, (1, 1))
print equations((x, y))
In [435]:
import scipy.optimize as optimize
from math import sqrt
def f(c):
return sqrt(c[0]**2 + c[1]**2 + (c[2]-2)**2)
result = optimize.minimize(f, [1,1,1])
print result.values()[6]
In [436]:
import scipy.optimize as optimize
from math import sqrt
# I, c[0]
I_L = 6.43 #A
# I_o = 5e-14 #A, c[2]
# n = 1, c[2]
V = 1 #mV
# R_s = 1 #mohm, c[3]
# R_sh = 1e5 #mohm c[4]
def f(c):
I - I_L - I_o*(exp( (V + I * R_s) /(26*n)) - 1)
return I
result = optimize.minimize(f, [1,1,1])
print result.values()[6]
In [437]:
irrad_df = pd.read_csv('data/ASTMG173.csv')
In [438]:
irrad_df.head()
Out[438]:
In [439]:
irrad_df['globaltilt'].plot()
Out[439]:
In [440]:
eqe_df = pd.read_csv('data/eqe_sunpower_25.csv')
In [441]:
eqe_df.head()
Out[441]:
In [442]:
eqe_df['percent'].values
Out[442]:
In [443]:
from scipy import interpolate
x = eqe_df['wavelength'].values
y = eqe_df['percent'].values
f = interpolate.interp1d(x, y)
wav_new = np.arange(300,1180, 0.5)
eqe_new = f(xnew) # use interpolation function returned by `interp1d`
plt.plot(x, y, 'o', wav_new, eqe_new, '-')
plt.show()
In [444]:
irrad_df[irrad_df['wavelength']==300]
Out[444]:
In [445]:
irrad_df[irrad_df['wavelength']==1180]
Out[445]:
In [ ]:
In [448]:
from scipy import interpolate
x = irrad_df['wavelength'][40:1021].values
irrad_global = irrad_df['globaltilt'][40:1021].values #AM1.5 spectrum
f = interpolate.interp1d(x, irrad_global)
wav_new = np.arange(300,1180, 0.5) #300 nm to 1180 nm with 0.5 nm spacing
irrad_new = f(xnew) #recreate AM1.5 with 0.5 nm spacing
plt.plot(x, irrad_global, 'o', wav_new, irrad_new, '-')
plt.show()
In [449]:
plt.plot(wav_new,eqe_new*irrad_new*wav_new)
Out[449]:
In [450]:
(1/1240)*sum(eqe_new*irrad_new*wav_new)*.5/1e3 #mA/cm^2
Out[450]:
In [451]:
iv_df = pd.read_csv('data/i_v_sunpower_25.csv')
In [465]:
plt.plot(iv_df.voltage,iv_df.current, 'r--')
I_o = 3.6e-10 #mA/cm^2
I_L = 41.74 #mA/cm^2
plt.plot(iv_df.voltage, I_L - I_o*(np.exp(iv_df.voltage/.0283) - 1)) #in V and A
plt.ylim(0,50)
Out[465]:
In [ ]:
In [ ]:
In [ ]: