def main_diode(): """ Главная функция, осуществляющая эксперимент :return: """ bstart = [6.15200000e-08, 1.16000000e00, 3.37600000e-02] # 20% bend = [9.22800000e-08, 1.74000000e00, 5.06400000e-02] # 20% # bstart = [ 4.61400000e-08, 8.70000000e-01, 2.53200000e-02] # 40% # bend = [ 1.07660000e-07, 2.03000000e+00, 5.90800000e-02] # 40% iia = IterationInfoAcceptor("resfiles/M1_Diode.txt", verbose=1) msa = DiodeMainScriptMantissaEx1() for i in range(50): btrue1 = f_sf.rangomNormalvariateVector(bstart, bend) # msa.ec.btrue = btrue1 msa.ec.bstart = bstart msa.ec.bend = bend try: rs = msa.proceed() iia.accept(numiter=rs["numiter"], Sk=rs["Sk"], AvDif=rs["AvDif"]) except: print("uno problemo") pass plt.hist([x["numiter"] for x in iia], 20) plt.show() plt.savefig("resfiles/MantissaResDiode.png")
def main_diode(): """ Главная функция, осуществляющая эксперимент :return: """ bstart = [ 6.15200000e-08 , 1.16000000e+00, 3.37600000e-02] # 20% bend = [ 9.22800000e-08 , 1.74000000e+00 , 5.06400000e-02] # 20% # bstart = [ 4.61400000e-08, 8.70000000e-01, 2.53200000e-02] # 40% # bend = [ 1.07660000e-07, 2.03000000e+00, 5.90800000e-02] # 40% iia = IterationInfoAcceptor ('resfiles/M1_Diode.txt', verbose=1) msa = DiodeMainScriptMantissaEx1() for i in range (50): btrue1 = f_sf.rangomNormalvariateVector(bstart, bend) #msa.ec.btrue = btrue1 msa.ec.bstart = bstart msa.ec.bend = bend try: rs = msa.proceed() iia.accept(numiter=rs['numiter'], Sk=rs['Sk'], AvDif=rs['AvDif']) except: print ('uno problemo') pass plt.hist ([x['numiter'] for x in iia],20) plt.show() plt.savefig('resfiles/MantissaResDiode.png')
def main_transistor(): """ Главная функция, осуществляющая эксперимент :return: """ # bstart = [ 6.15200000e-08 , 1.16000000e+00, 3.37600000e-02] # 20% # bend = [ 9.22800000e-08 , 1.74000000e+00 , 5.06400000e-02] # 20% # bstart = [ 4.61400000e-08, 8.70000000e-01, 2.53200000e-02] # 40% # bend = [ 1.07660000e-07, 2.03000000e+00, 5.90800000e-02] # 40% # transistor inf = 10e10 # числовые значения изменены шоб было по 7 значимых IS = 11.23456e-15 BF = 584.5171 VAF = 112.3456 VAR = inf IKF = 29.27141e-3 # ток перехода к высококу уровню инжекции inf ISE = 131.8031e-12 # генерационно-рекомбинационный ток насыщения эмиттерного перех 0 NE = 2.083371 # коэфф. неидеальности ген-рек тока эмиттерного перех 1 NR = 1 # коэфф неидеальности для диффузного тока в инв режиме 1 NF = 1 # коэфф неидеальности для диффузионного тока в нормальном режиме 1 NC = 1 # коэфф неидеальности генерационно-рекомбинацоинного тока коллектора 1 BR = 1.952141 # инверсный коэфф усиления тока в схеме с ОЭ 1 IKR = 9.999961e-3 # ток перехода к высокому уровню инжекции в инверсном включении inf ISC = 100.3161e-12 # генерационно-рекомбинационный ток насыщения колекторного перех 0 RE = 1 # сопротивления эмиттера, коллектора, базы 0 0 0 RC = 5.48635 RB = 0 btrue = [IS, BF, NR, NF, BR] bstart = np.array(btrue) - np.array(btrue) * 0.3 bend = np.array(btrue) + np.array(btrue) * 0.3 from Cases.Mantissa2 import IterationInfoAcceptor iia = IterationInfoAcceptor("resfiles/M1.txt") msa = TransistorMainScriptMantissaEx1() for i in range(50): btrue1 = f_sf.rangomNormalvariateVector(bstart, bend) msa.ec.btrue = btrue1 msa.ec.bstart = bstart msa.ec.bend = bend try: print("entering") rs = msa.proceed() iia.accept(numiter=rs["numiter"], Sk=rs["Sk"], AvDif=rs["AvDif"]) except: print("uno problemo") pass try: plt.hist([x[0] for x in iia], 20) plt.show() plt.savefig("resfiles/MantissaResTransistor.png") except: pass
def main_transistor (): """ Главная функция, осуществляющая эксперимент :return: """ #bstart = [ 6.15200000e-08 , 1.16000000e+00, 3.37600000e-02] # 20% #bend = [ 9.22800000e-08 , 1.74000000e+00 , 5.06400000e-02] # 20% # bstart = [ 4.61400000e-08, 8.70000000e-01, 2.53200000e-02] # 40% # bend = [ 1.07660000e-07, 2.03000000e+00, 5.90800000e-02] # 40% # transistor inf=10e10 #числовые значения изменены шоб было по 7 значимых IS = 11.23456e-15 BF = 584.5171 VAF = 112.3456 VAR = inf IKF = 29.27141e-3 # ток перехода к высококу уровню инжекции inf ISE = 131.8031e-12 # генерационно-рекомбинационный ток насыщения эмиттерного перех 0 NE = 2.083371 # коэфф. неидеальности ген-рек тока эмиттерного перех 1 NR = 1 # коэфф неидеальности для диффузного тока в инв режиме 1 NF = 1 # коэфф неидеальности для диффузионного тока в нормальном режиме 1 NC = 1 # коэфф неидеальности генерационно-рекомбинацоинного тока коллектора 1 BR = 1.952141 # инверсный коэфф усиления тока в схеме с ОЭ 1 IKR = 9.999961e-3 # ток перехода к высокому уровню инжекции в инверсном включении inf ISC = 100.3161e-12 # генерационно-рекомбинационный ток насыщения колекторного перех 0 RE = 1 # сопротивления эмиттера, коллектора, базы 0 0 0 RC = 5.48635 RB = 0 btrue = [IS, BF, NR, NF, BR] bstart = np.array(btrue)-np.array(btrue)*0.3 bend = np.array(btrue)+np.array(btrue)*0.3 from Cases.Mantissa2 import IterationInfoAcceptor iia = IterationInfoAcceptor ('resfiles/M1.txt') msa = TransistorMainScriptMantissaEx1() for i in range (50): btrue1 = f_sf.rangomNormalvariateVector(bstart, bend) msa.ec.btrue = btrue1 msa.ec.bstart = bstart msa.ec.bend = bend try: print ('entering') rs = msa.proceed() iia.accept(numiter=rs['numiter'], Sk=rs['Sk'], AvDif=rs['AvDif']) except: print ('uno problemo') pass try: plt.hist ([x[0] for x in iia],20) plt.show() plt.savefig('resfiles/MantissaResTransistor.png') except: pass
except: print ('uno problemo') pass try: plt.hist ([x[0] for x in iia],20) plt.show() plt.savefig('resfiles/MantissaResTransistor.png') except: pass if __name__=='__main__': iia = IterationInfoAcceptor ('resfiles/M1_Diode.txt', verbose=1, read=1) plt.hist ([x['numiter'] for x in iia if x['numiter']<20 ],10) plt.show() #main_diode() # l = [14, 14, 10, 27, 10, 8, 10, 11, 51, 10, 48, 19, 8, 5, 31, 15, 9, 10, 13, 5, 15, 15, 51, 34, 49, 6, 5, 10, 15, 46, 11, 10, 16, 22, 7, 11, 42, 7, 10, 29, 27, 15, 9, 7, 38, 27, 10, 29, 15, 12, 17, 7, 11, 8, 32, 51, 12, 23, 40, 10, 24, 34, 34, 40, 9, 7, 26, 51, 51, 51, 23, 14, 29, 22, 10, 50, 33, 8, 6, 6, 19, 11, 22, 9, 14, 30, 51, 14, 15, 13, 10, 6, 7, 17, 17, 23, 51, 17, 7, 10, 5, 7, 24, 29, 7, 21, 47, 7, 16, 20, 19, 23, 5, 22, 9, 7, 12, 9, 15, 32, 29, 13, 11, 16, 9, 16, 51, 20, 5, 8, 24, 46, 9, 25, 6, 10, 7, 36, 21, 10, 6, 11, 17, 15, 51, 8, 10, 11, 19, 30, 9, 51, 34, 9, 27, 22, 15, 14, 9, 45, 16, 29, 9, 10, 17, 10, 20, 51, 20, 17, 51, 11, 30, 20, 8, 11, 19, 41, 14, 12, 49, 14, 10, 5, 13, 8, 10, 28, 7, 7, 6, 8, 11, 8, 10] #binit const btrue unif #ll=[18, 7, 13, 13, 12, 9, 7, 51, 6, 9, 9, 5, 7, 6, 7, 8, 14, 7, 12, 13, 6, 12, 9, 14, 20, 18, 18, 7, 43, 22, 11, 29, 6, 10, 34, 9, 9, 13, 7, 5, 12, 10, 7, 15, 13, 9, 12, 6, 19, 6, 12, 33, 13, 9, 13, 5, 11, 9, 6, 7, 12, 24, 8, 11, 12, 7, 51, 5, 10, 6, 10, 17, 12, 18, 12, 32, 9, 13, 7, 8, 15, 7, 11, 30, 8, 23, 16, 7, 9, 6, 6, 10, 6, 8, 16, 6, 12, 16, 5, 9, 6, 8, 26, 8, 8, 6, 5, 8, 10, 9, 12, 33, 7, 8, 10, 9, 9, 17, 7, 25, 10, 35, 7, 13, 12, 7, 9, 6, 14, 4, 10, 16, 8, 8, 22, 16, 9, 7, 21, 22, 12, 11, 12, 7, 14, 8, 10, 17, 7, 7, 6, 16, 17, 23, 9, 29, 15, 6, 20, 7, 11, 37, 47, 20, 8, 8, 8, 13, 12, 29, 9, 25, 5, 8, 9, 11, 8, 17, 7, 20, 10, 5, 10, 12, 10, 18, 14, 22, 18, 12, 15, 9, 34, 11, 7, 8, 7, 20, 24, 6] #binit const btrue norm
def main(): rs = [] nirc = 205 # рассматриваемое число кейсов iiadumplist = [] for i in range(nirc): try: dms = DiodeMainScriptMantissaEx2() iia = IterationInfoAcceptor() dms.options.lst_data_abt_iteration = iia dms.proceed() # получили список значений b на каждой итерации btrue = dms.ec.btrue #Здесь определяется норма <<<>>> # такщем-та вроде как выводятся гистограммы для каждой итерации начиная с 4-й по эвклидовой норме # iia - это список данных по каждой итерации normfunc = norm1 #list_of_errors = [normfunc(btrue, m['b']) for m in iia] # for k in iia: # print (k, '\n') #plt.plot([z['b'][0] for z in iia]) #plt.plot([z['b'][1] for z in iia]) #plt.plot([z['b'][2] for z in iia]) #print (iia) iiadumplist.append(iia) # fig, ax = plt.subplots( nrows=1, ncols=1 ) # create figure & 1 axis # ax.plot([z['b'][1] for z in iia]) # #это у нас графики значений компонента вектора по итерациям. # fig.savefig ('resfiles/M2/graphs/img_{0}.png'.format(i)) # plt.close(fig) #получили список ошибок # print ('len', len(list_of_errors)) # #if len(list_of_errors)<20: #работать только с теми случаями, где кол-во итераций не превысило обычное # # #rs.append(list_of_errors) # print (list_of_errors) # rs.append(list_of_errors) #всадили его в результат except: pass # # складываем все результаты в пикулёвую БД в файл. Так-то б в мускул сложить, но то надо табличечку делать # # проще всего вытянуть из пикуля import pickle with open('resfiles/resdump205_DISP__.dat', 'wb') as f: pickle.dump(iiadumplist, f) # теперь rs это матрица список ошибок, прикол в том, шо каждая всунутая строка с инфой по итерациям # какбы чуть разной длины # берём срез в другую сторону rsT = [] for i in range( 20 ): #свыше 20 итераций уже не рассматриваем, нах, до 3й тоже неинтересно try: rsT.append([rs[k][i] for k in range(nirc)]) except: break #теперь есть список списков погрешностей на первой, второй и далее итерациям #фигарим гистограммы за каждый список #[print (d) for d in rs] #print () #[print (d) for d in rsT] ni = 0 import os filelist = [ f for f in os.listdir("resfiles/M2/hists") if f.endswith(".png") ] for f in filelist: try: os.remove("resfiles/M2/hists/" + f) except: pass for d in rsT: #d = [x for x in d if x<.1] ni += 1 fig, ax = plt.subplots(nrows=1, ncols=1) # create figure & 1 axis d = list(filter(lambda x: x < .01, d)) print(d) ax.hist(d, 50) fig.savefig('resfiles/M2/hists/img_{0}.png'.format(ni)) plt.close(fig)