예제 #1
0
파일: 10411.py 프로젝트: ys15061078/PhyLab
def VA_MR(R1, R2, R_o, U, I, source):
    mark = 0
    temp1 = abs(R1 - R_o) / R_o
    temp2 = abs(R2 - R_o) / R_o
    if temp1 > temp2:
        mark = 1

    U.append(sum(U) / len(U))
    I.append(sum(I) / len(I))

    #一元线性回归计算R
    res = phylab.ULR(I, U)
    b = res[0]
    r = res[1]
    R = b * 1000
    ua_R = b * sqrt((1 / pow(r, 2) - 1) / (len(U) - 1 - 2)) * 1000
    u_R = ua_R
    res = phylab.BitAdapt(R, u_R)
    phylab.RoundOne(U, 1)
    phylab.RoundOne(I, 1)
    b = round(b, 7)
    r = round(r, 7)
    R = round(R, 4)
    u_R = round(u_R, 3)
    ua_R = round(ua_R, 3)

    result = env.from_string(source).render(R1=R1,
                                            R2=R2,
                                            R_o=R_o,
                                            U=U,
                                            I=I,
                                            MARK=mark,
                                            b=b,
                                            r=r,
                                            R=R,
                                            UA_R=ua_R,
                                            U_R=u_R,
                                            RES=res)
    return result
예제 #2
0
def LloydSodium(lx, bmin, bmax, loc):
    tenx = phylab.DWM(lx)
    delta_x = []
    for a in tenx:
        delta_x.append(a / 10.0)
    delta_x.append(sum(delta_x) / len(delta_x))
    ua_x = phylab.Ua(delta_x, delta_x[len(delta_x) - 1], len(delta_x) - 1)
    ub_x = 0.005 / sqrt(3)
    u_x = sqrt(ub_x**2 + ua_x**2)

    ave_bi = abs(bmin[0] - bmin[1] + bmin[2] - bmin[3]) / 2
    bmin.append(ave_bi)
    ave_ba = abs(bmax[0] - bmax[1] + bmax[2] - bmax[3]) / 2
    bmax.append(ave_ba)
    u_bmin = sqrt(pow(0.025 * ave_bi / sqrt(3), 2) + pow(0.005 / sqrt(3), 2))
    u_bmax = sqrt(pow(0.025 * ave_ba / sqrt(3), 2) + pow(0.005 / sqrt(3), 2))

    smin = abs(loc[0] - loc[4])
    smax = abs(loc[0] - loc[3])
    u_smin = 2.8
    u_smax = 2.8

    lbd = delta_x[len(delta_x) - 1] * sqrt(
        ave_bi * ave_ba) / (smin + smax) * pow(10, 5)
    temp = pow(u_x / delta_x[len(delta_x) - 1], 2)
    temp += pow(u_bmin / 2 / ave_bi, 2)
    temp += pow(u_bmax / 2 / ave_ba, 2)
    temp += pow(u_smin / 10 / (smin + smax), 2)
    temp += pow(u_smax / 10 / (smin + smax), 2)
    u_lbd = lbd * sqrt(temp)

    res = phylab.BitAdapt(lbd, u_lbd)
    print "res: " + str(res)
    phylab.RoundOne(lx, 3)
    print "lx: " + str(lx)
    phylab.RoundOne(tenx, 3)
    print "tenx: " + str(tenx)
    phylab.RoundOne(delta_x, 4)
    print "delta_x: " + str(delta_x)
    ua_x = round(ua_x, 5)
    print "ua_x: " + str(ua_x)
    ub_x = round(ub_x, 5)
    print "ub_x: " + str(ub_x)
    u_x = round(u_x, 5)
    print "u_x: " + str(u_x)
    phylab.RoundOne(bmin, 3)
    print "bmin: " + str(bmin)
    phylab.RoundOne(bmax, 3)
    print "bmax: " + str(bmax)
    u_bmin = round(u_bmin, 4)
    print "u_bmin: " + str(u_bmin)
    u_bmax = round(u_bmax, 4)
    print "u_bmax: " + str(u_bmax)
    phylab.RoundOne(loc, 1)
    print "loc: " + str(loc)
    smin = round(smin, 1)
    print "smin: " + str(smin)
    smax = round(smax, 1)
    print "smax: " + str(smax)
    u_smin = round(u_smin, 1)
    print "u_smin: " + str(u_smin)
    u_smax = round(u_smax, 1)
    print "u_smax: " + str(u_smax)
    lbd = round(lbd, 3)
    print "lbd: " + str(lbd)
    u_lbd = round(u_lbd, 3)
    print "u_lbd: " + str(u_lbd)
예제 #3
0
def Inertia(m, d, T, l, T2, source):
    # 所有测得的数据必须是5倍周期
    I = [-1]  # 实际值
    J = [-1]  # 理论值
    len_T = []
    delta = []
    for a in T:
        a.append(sum(a) / len(a) / 5)
        len_T += [len(a)]
    # 计算扭转常数k
    temp = m[0] * pow(d[0], 2) * pow(10, -9) / 8
    I.append(temp)
    J.append(temp)
    k = 4 * pow(pi, 2) * temp / (pow(T[1][-1], 2) - pow(T[0][-1], 2))
    I[0] = pow(T[0][-1], 2) * k / (4 * pow(pi, 2))
    # 圆筒转动惯量
    I.append(pow(T[2][-1], 2) * k / (4 * pow(pi, 2)) - I[0])
    J.append(m[1] * (d[1]**2 + d[2]**2) * pow(10, -9) / 8)
    # 球转动惯量
    I.append(pow(T[3][-1], 2) * k / (4 * pow(pi, 2)))
    J.append(m[2] * pow(d[3], 2) * pow(10, -9) / 10)
    # 细杆转动惯量
    I.append(pow(T[4][-1], 2) * k / (4 * pow(pi, 2)))
    J.append(m[3] * pow(d[4], 2) * pow(10, -9) / 12)
    for i in range(2, 5):
        delta.append(abs(J[i] - I[i]) * 100 / J[i])  # 百分之多少

    # # 验证平行轴定理
    # for a in T2:
    #     a.append(sum(a) / len(a))
    # # 线性回归计算
    # x, y, xy, x2, y2 = [], [], [], [], []
    # temp = 0
    # for i in range(5):
    #     temp += 5
    #     x.append(temp ** 2)
    #     x2.append(x[i] ** 2)
    #     y.append(pow(T2[i][-1] / 5, 2))
    #     y2.append(y[i] ** 2)
    #     xy.append(x[i] * y[i])
    # ave_x = sum(x) / len(x)
    # ave_y = sum(y) / len(y)
    # ave_x2 = sum(x2) / len(x2)
    # ave_y2 = sum(y2) / len(y2)
    # ave_xy = sum(xy) / len(xy)
    # b = (ave_x * ave_y - ave_xy) / (ave_x ** 2 - ave_x2) * pow(10, 4)
    # a = ave_y - b * ave_x * pow(10, -4)
    # r = abs(ave_xy - ave_x * ave_y) / sqrt((ave_x2 - ave_x ** 2) * (ave_y2 - ave_y ** 2))
    # I1 = m[4] * (l[0] ** 2 + l[1] ** 2) * pow(10, -9) / 16 + m[4] * l[2] ** 2 * pow(10, -9) / 12
    # I2 = m[5] * (l[0] ** 2 + l[1] ** 2) * pow(10, -9) / 16 + m[5] * l[2] ** 2 * pow(10, -9) / 12
    # b1 = (m[4] + m[5]) * 4 * pi ** 2 / k / pow(10, 3)
    # a1 = (J[3] + I1 + I2) * 4 * pi ** 2 / k
    # res = [r, b]
    phylab.RoundTwo(T, 2)
    phylab.RoundOne(delta, 2)
    return env.from_string(source).render(m=m,
                                          d=d,
                                          T=T,
                                          len_T=len_T,
                                          K=phylab.ToScience(k),
                                          I=map(phylab.ToScience, I),
                                          J=map(phylab.ToScience, J),
                                          delta=delta)