예제 #1
0
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()
예제 #3
0
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])