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
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)
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)