def extraction_func_DiodeV3Approach1_part_In():
    """
    [Реестровая]

    :return:
    """
    funcf=solver_func_DiodeV3Approach1_part_In
    jacf=Jac_func_DiodeV3Approach1_part_In
    c={}
    Ve=np.array([ [0.001] ]  )
    btrue=[1.238e-14, 1.3]
    bstart=np.array(btrue)-np.array(btrue)*0.1
    bend=np.array(btrue)+np.array(btrue)*0.1

    binit=np.array(btrue)+np.array(btrue)*0.05
    xstart=[0.01]
    #xend=[20,60]
    xend=[3]
    N=300 #число точек в плане (для планов, кроме априорного)
    NArprior=20 #число точек в априорном плане

    #Получаем априорный план
    print("performing aprior plan:")
    #блок кеширования априорного плана в файл
    filename = os.path.basename(__file__).replace('.py','_plan')
    try:
        oplan=o_p.readPlanFromFile(filename) #переключение на чтение априорного плана из файла
        print ("Read file successful")
    except BaseException as e:
        oplan=o_ap.grandApriornPlanning (xstart, xend, NArprior, bstart, bend, c, Ve, jacf, funcf, Ntries=6, verbosePlan=True, verbose=True)[1]
        o_p.writePlanToFile(oplan, filename)
    #}


    unifplan =  o_p.makeUniformExpPlan(xstart, xend, N)


    #получаем измерения с планов
    measdata = o_p.makeMeasAccToPlan_lognorm(funcf, oplan, btrue, c,Ve )
    measdataUnif = o_p.makeMeasAccToPlan_lognorm(funcf, unifplan, btrue, c,Ve )

    filename = os.path.basename(__file__).replace('.py','_results')



    #выполняем оценку
    print ("performing aprior plan")
    gknu=o_e.grandCountGN_UltraX_Qualitat (funcf, jacf,  measdata, binit, c, Ve, NSIG=100, implicit=True)
    o_q.analyseDifList(gknu, imagename='Aprior_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)


    print ("performing uniform plan")
    gknu=o_e.grandCountGN_UltraX_Qualitat (funcf, jacf,  measdataUnif, binit, c, Ve, NSIG=100, implicit=True)
    o_q.analyseDifList(gknu, imagename='Uniform_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)


    print ("performing ExtraStart™ method")
    resarr=list() #Список результатов
    t=PrettyTable (['Среднее логарифма правдоподобия','Сигма логарифма правдоподобия' , 'b','Среднее остатков по модулю'])

    for i in range(30):
        measdata = o_p.makeMeasAccToPlan_lognorm(funcf, oplan, btrue, c,Ve)
        gknu=o_e.grandCountGN_UltraX_ExtraStart (funcf, jacf,  measdata, bstart, bend, c, Ve,  NSIG=100, implicit=True, verbose=False, Ntries=10, name='aprior plan plus several measurements')
        if (gknu):
            resarr.append(gknu)
    if resarr:
        for gknu in resarr:
            if (gknu):
                t.add_row([gknu['AvLogTruth'],gknu['SigmaLT'], gknu['b'], gknu['AvDif'] ])
    gknu=o_e.selectBestEstim (resarr)

    t.add_row(['*', '*', '*', '*' ])
    t.add_row([gknu['AvLogTruth'], gknu['SigmaLT'], gknu['b'], gknu['AvDif'] ])
    print(t)

    o_q.analyseDifList(gknu, imagename='ExtraStart_et_Aprior_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)
Exemplo n.º 2
0
def extractionRD():
    """
    пробуем экстрагировать коэффициенты из модели диода
    коэффициенты модели: Ток утечки Is, коэффициент неидеальности N, омическое сопротивление, параллельное диоду R
    входные параметры: напряжение, приложенное источником к системе резистор-диод
    +-----------|||||---------->|--------- -
    Резистор подключен до диода
    :return:
    """

    global FT
    global foldername

    #возвращает значение y
    funcf = solver_Diode_In_Limited
    jacf = jac_Diode_In_Limited
    #теперь попробуем сделать эксперимент.
    c = {}

    Ve = np.array([[1.34e-7]
                   ])  #согласно погрешности на мультиметре CHROMA 12061
    #btrue=[5.31656e-8,2 ,.0392384] #номинальные значения диода D1N4001
    btrue = [
        7.69e-8, 1.45, .0422
    ]  #номинальные значения диода D1N4001 с сайта, вроде официальной модели производителя
    # V=x[0] #напряжение на диоде
    # Is=b[0]
    # N=b[1]
    # R=b[2]

    bstart = np.array(btrue) - np.array(btrue) * 0.2
    bend = np.array(btrue) + np.array(btrue) * 0.2
    #binit=np.array(btrue)-np.array(btrue)*0.1

    print('conditions:')
    print(bstart)
    print(bend)

    binit = [
        7.69e-8, 1.45, .0422
    ]  #номинальные значения диода D1N4001 с сайта, вроде официальной модели производителя
    xstart = [0.001]
    xend = [1.1]
    N = 20

    folderData = '/home/reiner/RDReports/DiodeProof'
    realout = sys.stdout

    listOfMeasdatas = ord.grfiles(folderData)

    for measdata in listOfMeasdatas:

        print(measdata[1])
        print(measdata[0])

        sys.stdout = open(folderData + '/' + 'resGr.res',
                          'a')  # Перенаправить вывод в файл
        print(measdata[1])
        print(measdata[0])
        gknuxlim = o_el.grandCountGN_UltraX1_Limited_wrapper(
            funcf,
            jacf,
            measdata[0],
            binit,
            bstart,
            bend,
            c,
            implicit=True,
            verbose=False,
            verbose_wrapper=False)
        gknuxlim2 = o_q.convertToQualitatStandart(gknuxlim,
                                                  funcf,
                                                  jacf,
                                                  measdata[0],
                                                  c,
                                                  Ve,
                                                  name='Limited Count Aprior')
        o_q.printQualitatStandart(gknuxlim2)

        title = measdata[1]
        twographsfigname = ''.join([folderData, '/', 'twgr_', title, '.png'])
        Rgraphsfigname = ''.join([folderData, '/', 'R_', title, '.png'])

        plotMeasAndModelled(
            measdata[0], funcf, gknuxlim2['b'], twographsfigname, title
        )  #начертить два графика - реальный (синий) и моделированный (красный)

        #o_pl.plotSkGraph(gknuxlim, title='', filename=None) #чертит дроп ск по итерациям - бред, на последнем прогоне лимитед их всего пара штук))

        #o_q.analyseDifList(gknuxlim, True, )

        try:
            o_q.analyseDifList(gknuxlim2, True, title, filename=Rgraphsfigname
                               )  #числовой режим, вектора не поддерживаются
        except:
            pass

        sys.stdout.close()

        sys.stdout = realout
def extraction_DiodeV4_partIn_Decimal(plot=True):
    """
    пробуем экстрагировать коэффициенты из модели диода
    коэффициенты модели: Ток утечки Is, коэффициент неидеальности N, омическое сопротивление, параллельное диоду R
    входные параметры: напряжение, приложенное источником к системе резистор-диод
    +-----------|||||---------->|--------- -
    Резистор подключен до диода
    :return:
    """

    #возвращает значение y
    funcf=solver_DiodeV4_partIn_Decimal
    jacf = jac_DiodeV4_partIn_Decimal
    #теперь попробуем сделать эксперимент.
    c={}
    Ve=np.array([ [0.00000001] ]  )
    btrue=[1.238e-14, 1.8, 100]
    #btrue=[1.5e-14, 1.75, 150]

    bstart=np.array(btrue)-np.array(btrue)*0.3
    bend=np.array(btrue)+np.array(btrue)*0.3
    binit=[1.0e-14, 1.7, 70]
    #binit=[1.238e-14, 1.8, 100]

    xstart=[0.001]
    #xend=[20,60]
    xend=[1.5]
    N=100 #для неаприорных планов
    NAprior=20 #для априорных планов


     #Получаем априорный план
    print("performing aprior plan:")
    #блок кеширования априорного плана в файл
    filename ='cachedPlans/'+os.path.basename(__file__).replace('.py','_plan')
    try:
        oplan=o_p.readPlanFromFile(filename) #переключение на чтение априорного плана из файла
        print ("Read file successful")
    except BaseException as e:

        oplan=o_ap.grandApriornPlanning (xstart, xend, NAprior, bstart, bend, c, Ve, jacf, funcf, Ntries=6, verbosePlan=True, verbose=True)[1]
        o_p.writePlanToFile(oplan, filename)
    #}

    unifplan =  o_p.makeUniformExpPlan(xstart, xend, N)

    #получаем измерения с планов
    measdata = o_p.makeMeasAccToPlan_lognorm(funcf, oplan, btrue, c,Ve )


    measdataUnif = o_p.makeMeasAccToPlan_lognorm(funcf, unifplan, btrue, c,Ve )

    filename = os.path.basename(__file__).replace('.py','_results')

    #выполняем оценку
    print ("performing aprior plan")
    gknu=o_e.grandCountGN_UltraX_Qualitat (funcf, jacf,  measdata, binit, c, Ve, NSIG=100, implicit=True)
    o_q.analyseDifList(gknu, imagename='Aprior_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)


    print ("performing uniform plan")
    gknu=o_e.grandCountGN_UltraX_Qualitat (funcf, jacf,  measdataUnif, binit, c, Ve, NSIG=100, implicit=True)
    o_q.analyseDifList(gknu, imagename='Uniform_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)
Exemplo n.º 4
0
def extraction_DiodeV4_partIn_Decimal(plot=True):
    """
    пробуем экстрагировать коэффициенты из модели диода
    коэффициенты модели: Ток утечки Is, коэффициент неидеальности N, омическое сопротивление, параллельное диоду R
    входные параметры: напряжение, приложенное источником к системе резистор-диод
    +-----------|||||---------->|--------- -
    Резистор подключен до диода
    :return:
    """

    #возвращает значение y
    funcf = solver_DiodeV4_partIn_Decimal
    jacf = jac_DiodeV4_partIn_Decimal
    #теперь попробуем сделать эксперимент.
    c = {}
    Ve = np.array([[0.00000001]])
    btrue = [1.238e-14, 1.8, 100]
    #btrue=[1.5e-14, 1.75, 150]

    bstart = np.array(btrue) - np.array(btrue) * 0.3
    bend = np.array(btrue) + np.array(btrue) * 0.3
    binit = [1.0e-14, 1.7, 70]
    #binit=[1.238e-14, 1.8, 100]

    xstart = [0.001]
    #xend=[20,60]
    xend = [1.5]
    N = 100  #для неаприорных планов
    NAprior = 20  #для априорных планов

    #Получаем априорный план
    print("performing aprior plan:")
    #блок кеширования априорного плана в файл
    filename = 'cachedPlans/' + os.path.basename(__file__).replace(
        '.py', '_plan')
    try:
        oplan = o_p.readPlanFromFile(
            filename)  #переключение на чтение априорного плана из файла
        print("Read file successful")
    except BaseException as e:

        oplan = o_ap.grandApriornPlanning(xstart,
                                          xend,
                                          NAprior,
                                          bstart,
                                          bend,
                                          c,
                                          Ve,
                                          jacf,
                                          funcf,
                                          Ntries=6,
                                          verbosePlan=True,
                                          verbose=True)[1]
        o_p.writePlanToFile(oplan, filename)
    #}

    unifplan = o_p.makeUniformExpPlan(xstart, xend, N)

    #получаем измерения с планов
    measdata = o_p.makeMeasAccToPlan_lognorm(funcf, oplan, btrue, c, Ve)

    measdataUnif = o_p.makeMeasAccToPlan_lognorm(funcf, unifplan, btrue, c, Ve)

    filename = os.path.basename(__file__).replace('.py', '_results')

    #выполняем оценку
    print("performing aprior plan")
    gknu = o_e.grandCountGN_UltraX_Qualitat(funcf,
                                            jacf,
                                            measdata,
                                            binit,
                                            c,
                                            Ve,
                                            NSIG=100,
                                            implicit=True)
    o_q.analyseDifList(gknu, imagename='Aprior_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)

    print("performing uniform plan")
    gknu = o_e.grandCountGN_UltraX_Qualitat(funcf,
                                            jacf,
                                            measdataUnif,
                                            binit,
                                            c,
                                            Ve,
                                            NSIG=100,
                                            implicit=True)
    o_q.analyseDifList(gknu, imagename='Uniform_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)
def extractionRD():
    """
    пробуем экстрагировать коэффициенты из модели диода
    коэффициенты модели: Ток утечки Is, коэффициент неидеальности N, омическое сопротивление, параллельное диоду R
    входные параметры: напряжение, приложенное источником к системе резистор-диод
    +-----------|||||---------->|--------- -
    Резистор подключен до диода
    :return:
    """



    global FT
    global foldername

    #возвращает значение y
    funcf=solver_Diode_In_Limited
    jacf = jac_Diode_In_Limited
    #теперь попробуем сделать эксперимент.
    c={}

    Ve=np.array([ [1.34e-7] ]  ) #согласно погрешности на мультиметре CHROMA 12061
    #btrue=[5.31656e-8,2 ,.0392384] #номинальные значения диода D1N4001
    btrue=[7.69e-8, 1.45 ,.0422] #номинальные значения диода D1N4001 с сайта, вроде официальной модели производителя
    # V=x[0] #напряжение на диоде
    # Is=b[0]
    # N=b[1]
    # R=b[2]

    bstart=np.array(btrue)-np.array(btrue)*0.2
    bend=np.array(btrue)+np.array(btrue)*0.2
    #binit=np.array(btrue)-np.array(btrue)*0.1

    print('conditions:')
    print(bstart)
    print(bend)

    binit=[7.69e-8, 1.45 ,.0422] #номинальные значения диода D1N4001 с сайта, вроде официальной модели производителя
    xstart=[0.001]
    xend=[1.1]
    N=20


    folderData = '/home/reiner/RDReports/DiodeProof'
    realout= sys.stdout


    listOfMeasdatas=ord.grfiles (folderData)

    for measdata in listOfMeasdatas:

        print (measdata[1])
        print (measdata[0])

        sys.stdout = open(folderData+'/'+'resGr.res', 'a') # Перенаправить вывод в файл
        print (measdata[1])
        print (measdata[0])
        gknuxlim = o_el.grandCountGN_UltraX1_Limited_wrapper(funcf,jacf,measdata[0],binit,bstart,bend, c, implicit=True, verbose=False, verbose_wrapper=False )
        gknuxlim2=o_q.convertToQualitatStandart (gknuxlim, funcf, jacf,  measdata[0], c, Ve, name='Limited Count Aprior')
        o_q.printQualitatStandart (gknuxlim2)

        title = measdata[1]
        twographsfigname = ''.join([folderData,'/','twgr_',title,'.png'])
        Rgraphsfigname = ''.join([folderData,'/','R_',title,'.png'])


        plotMeasAndModelled(measdata[0],funcf,gknuxlim2['b'], twographsfigname, title) #начертить два графика - реальный (синий) и моделированный (красный)

        #o_pl.plotSkGraph(gknuxlim, title='', filename=None) #чертит дроп ск по итерациям - бред, на последнем прогоне лимитед их всего пара штук))

        #o_q.analyseDifList(gknuxlim, True, )

        try:
            o_q.analyseDifList(gknuxlim2, True, title, filename=Rgraphsfigname ) #числовой режим, вектора не поддерживаются
        except:
            pass

        sys.stdout.close()

        sys.stdout = realout
def extraction_func_DiodeV3Approach1_part_In():
    """
    [Реестровая]

    :return:
    """
    funcf = solver_func_DiodeV3Approach1_part_In
    jacf = Jac_func_DiodeV3Approach1_part_In
    c = {}
    Ve = np.array([[0.001]])
    btrue = [1.238e-14, 1.3]
    bstart = np.array(btrue) - np.array(btrue) * 0.1
    bend = np.array(btrue) + np.array(btrue) * 0.1

    binit = np.array(btrue) + np.array(btrue) * 0.05
    xstart = [0.01]
    #xend=[20,60]
    xend = [3]
    N = 300  #число точек в плане (для планов, кроме априорного)
    NArprior = 20  #число точек в априорном плане

    #Получаем априорный план
    print("performing aprior plan:")
    #блок кеширования априорного плана в файл
    filename = os.path.basename(__file__).replace('.py', '_plan')
    try:
        oplan = o_p.readPlanFromFile(
            filename)  #переключение на чтение априорного плана из файла
        print("Read file successful")
    except BaseException as e:
        oplan = o_ap.grandApriornPlanning(xstart,
                                          xend,
                                          NArprior,
                                          bstart,
                                          bend,
                                          c,
                                          Ve,
                                          jacf,
                                          funcf,
                                          Ntries=6,
                                          verbosePlan=True,
                                          verbose=True)[1]
        o_p.writePlanToFile(oplan, filename)
    #}

    unifplan = o_p.makeUniformExpPlan(xstart, xend, N)

    #получаем измерения с планов
    measdata = o_p.makeMeasAccToPlan_lognorm(funcf, oplan, btrue, c, Ve)
    measdataUnif = o_p.makeMeasAccToPlan_lognorm(funcf, unifplan, btrue, c, Ve)

    filename = os.path.basename(__file__).replace('.py', '_results')

    #выполняем оценку
    print("performing aprior plan")
    gknu = o_e.grandCountGN_UltraX_Qualitat(funcf,
                                            jacf,
                                            measdata,
                                            binit,
                                            c,
                                            Ve,
                                            NSIG=100,
                                            implicit=True)
    o_q.analyseDifList(gknu, imagename='Aprior_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)

    print("performing uniform plan")
    gknu = o_e.grandCountGN_UltraX_Qualitat(funcf,
                                            jacf,
                                            measdataUnif,
                                            binit,
                                            c,
                                            Ve,
                                            NSIG=100,
                                            implicit=True)
    o_q.analyseDifList(gknu, imagename='Uniform_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)

    print("performing ExtraStart™ method")
    resarr = list()  #Список результатов
    t = PrettyTable([
        'Среднее логарифма правдоподобия', 'Сигма логарифма правдоподобия',
        'b', 'Среднее остатков по модулю'
    ])

    for i in range(30):
        measdata = o_p.makeMeasAccToPlan_lognorm(funcf, oplan, btrue, c, Ve)
        gknu = o_e.grandCountGN_UltraX_ExtraStart(
            funcf,
            jacf,
            measdata,
            bstart,
            bend,
            c,
            Ve,
            NSIG=100,
            implicit=True,
            verbose=False,
            Ntries=10,
            name='aprior plan plus several measurements')
        if (gknu):
            resarr.append(gknu)
    if resarr:
        for gknu in resarr:
            if (gknu):
                t.add_row([
                    gknu['AvLogTruth'], gknu['SigmaLT'], gknu['b'],
                    gknu['AvDif']
                ])
    gknu = o_e.selectBestEstim(resarr)

    t.add_row(['*', '*', '*', '*'])
    t.add_row([gknu['AvLogTruth'], gknu['SigmaLT'], gknu['b'], gknu['AvDif']])
    print(t)

    o_q.analyseDifList(gknu, imagename='ExtraStart_et_Aprior_Plan')
    o_q.printGKNUNeat(gknu)
    o_q.printQualitatNeat(measdata, gknu['b'], Ve, funcf, c, jacf)