def test_Diode_In_mpmath(): b = [mpm.mpf('1.238e-14'), mpm.mpf('1.3'), mpm.mpf('1')] c = None #0.0026638081177255196 rng = mpm.arange('0.01', '2', '0.01') xstart = [mpm.mpf('0.00001')] xend = [mpm.mpf('2')] Ve = np.array([[0.0001]]) #снимем ВАХ # resrng=[solver_Diode_In_mpmath ([x],b)[0] for x in rng] # изменяем напряжение на базе при постоянном напряжении на коллекторе - снимаем ток базы. #resrng=o_pmpm.makeMeasOneDot_lognorm(solver_Diode_In_mpmath, x],b)[0] for x in rng] # изменяем напряжение на базе при постоянном напряжении на коллекторе - снимаем ток базы. resrng = [ o_pmpm.makeMeasOneDot_lognorm(solver_Diode_In_mpmath, [x], b, c, Ve) for x in rng ] resrng1 = [ solver_Diode_In_mpmath([x], b)[0] for x in rng ] # изменяем напряжение на базе при постоянном напряжении на коллекторе - снимаем ток базы. # plt.plot(rng , resrngorig, label='r=0') plt.plot(rng, resrng, label='r=1000') plt.plot(rng, resrng1, label='r=3000') plt.legend(loc='upper left') #plt.axis([0.0,1.0,0,5]) plt.grid() plt.show()
def test_Diode_In_mpmath(): b=[mpm.mpf('1.238e-14'), mpm.mpf('1.3'), mpm.mpf('1')] c=None #0.0026638081177255196 rng=mpm.arange('0.01','2','0.01') xstart=[mpm.mpf('0.00001')] xend=[mpm.mpf('2')] Ve=np.array([ [0.0001] ] ) #снимем ВАХ # resrng=[solver_Diode_In_mpmath ([x],b)[0] for x in rng] # изменяем напряжение на базе при постоянном напряжении на коллекторе - снимаем ток базы. #resrng=o_pmpm.makeMeasOneDot_lognorm(solver_Diode_In_mpmath, x],b)[0] for x in rng] # изменяем напряжение на базе при постоянном напряжении на коллекторе - снимаем ток базы. resrng=[o_pmpm.makeMeasOneDot_lognorm(solver_Diode_In_mpmath, [x],b,c,Ve) for x in rng] resrng1=[solver_Diode_In_mpmath ([x],b)[0] for x in rng] # изменяем напряжение на базе при постоянном напряжении на коллекторе - снимаем ток базы. # plt.plot(rng , resrngorig, label='r=0') plt.plot(rng , resrng, label='r=1000') plt.plot(rng , resrng1, label='r=3000') plt.legend(loc='upper left') #plt.axis([0.0,1.0,0,5]) plt.grid() plt.show()
def extraction_Diode_In_mpmath(): """ пробуем экстрагировать коэффициенты из модели диода коэффициенты модели: Ток утечки Is, коэффициент неидеальности N, омическое сопротивление, параллельное диоду R входные параметры: напряжение, приложенное источником к системе резистор-диод +-----------|||||---------->|--------- - Резистор подключен до диода :return: """ btrue = [mpm.mpf('1.238e-14'), mpm.mpf('1.3'), mpm.mpf('10')] c = None global FT funcf = solver_Diode_In_mpmath jacf = jac_Diode_In_mpmath #теперь попробуем сделать эксперимент. Ve = np.array([[1e-7]]) bstart = [mpm.mpf('1.0e-14'), mpm.mpf('1.0'), mpm.mpf('9')] bend = [mpm.mpf('1.5e-14'), mpm.mpf('1.5'), mpm.mpf('14')] #binit=[mpm.mpf('1.1e-14'), mpm.mpf('1.1'), mpm.mpf('11')] binit = mpm.matrix([['1.1e-14', '1.1', '11.1']]).T xstart = [mpm.mpf('0.0001')] xend = [mpm.mpf('2')] N = 100 NAprior = 20 unifplan = o_pmpm.makeUniformExpPlan(xstart, xend, N) unifmeasdata = o_pmpm.makeMeasAccToPlan_lognorm(funcf, unifplan, btrue, c, Ve) #print (unifmeasdata[0]['y'][0]) import Fianora.Fianora_static_functions as f_sf for dps in [20, 10, 7]: with f_sf.Profiler(): print() print('mantissa', dps) gknux = o_empm.grandCountGN_UltraX1_mpmath_mantissa(funcf, jacf, unifmeasdata, binit, c, NSIG=dps, implicit=True, verbose=False, mantissa=[dps]) with mpm.workdps(dps): print('b', gknux[0]) print('numiter', gknux[1]) print('log', gknux[2]) print('Sk', gknux[4]) for f**k in range(10): with f_sf.Profiler(): print() print('mantissa', 'variable') gknux = o_empm.grandCountGN_UltraX1_mpmath_mantissa( funcf, jacf, unifmeasdata, binit, c, NSIG=7, implicit=True, verbose=False, mantissa=[4, 5, 6, 7]) with mpm.workdps(dps): print('b', gknux[0]) print('numiter', gknux[1]) print('log', gknux[2]) print('Sk', gknux[4])
def extraction_Diode_In_mpmath(): """ пробуем экстрагировать коэффициенты из модели диода коэффициенты модели: Ток утечки Is, коэффициент неидеальности N, омическое сопротивление, параллельное диоду R входные параметры: напряжение, приложенное источником к системе резистор-диод +-----------|||||---------->|--------- - Резистор подключен до диода :return: """ btrue=[mpm.mpf('1.238e-14'), mpm.mpf('1.3'), mpm.mpf('10')] c=None global FT funcf=solver_Diode_In_mpmath jacf = jac_Diode_In_mpmath #теперь попробуем сделать эксперимент. Ve=np.array([ [1e-7] ] ) bstart=[mpm.mpf('1.0e-14'), mpm.mpf('1.0'), mpm.mpf('9')] bend=[mpm.mpf('1.5e-14'), mpm.mpf('1.5'), mpm.mpf('14')] #binit=[mpm.mpf('1.1e-14'), mpm.mpf('1.1'), mpm.mpf('11')] binit=mpm.matrix([['1.1e-14', '1.1', '11.1']]).T xstart=[mpm.mpf('0.0001')] xend=[mpm.mpf('2')] N=100 NAprior=20 unifplan = o_pmpm.makeUniformExpPlan(xstart, xend, N) unifmeasdata = o_pmpm.makeMeasAccToPlan_lognorm(funcf, unifplan, btrue, c, Ve) #print (unifmeasdata[0]['y'][0]) import Fianora.Fianora_static_functions as f_sf for dps in [20,10,7]: with f_sf.Profiler(): print() print ('mantissa', dps) gknux = o_empm.grandCountGN_UltraX1_mpmath_mantissa(funcf, jacf, unifmeasdata, binit,c, NSIG=dps,implicit=True, verbose=False, mantissa=[dps]) with mpm.workdps(dps): print ('b', gknux[0]) print ('numiter', gknux[1]) print ('log', gknux[2]) print ('Sk', gknux[4]) for f**k in range (10): with f_sf.Profiler(): print() print ('mantissa', 'variable') gknux = o_empm.grandCountGN_UltraX1_mpmath_mantissa(funcf, jacf, unifmeasdata, binit,c, NSIG=7,implicit=True, verbose=False, mantissa=[4,5,6,7]) with mpm.workdps(dps): print ('b', gknux[0]) print ('numiter', gknux[1]) print ('log', gknux[2]) print ('Sk', gknux[4])