用python写的科大奥锐虚拟仿真霍尔效应实验计算程序

  • 导入matplotlib模块,用于画坐标图
import matplotlib.pyplot as plt
  • 获取一些霍尔元件的基本数据,并进行单位换算处理
c = 0
sum_1 =0
filename ='wz.txt'
a= []
a_1 = []
d = float(input('请输入霍尔元件片d=?mm\n'))/1000
b = float(input('请输入电磁圈的磁场大小B(T)=?\n'))
b_2 = float(input('请输入霍尔元件片b=?mm\n'))/1000
v = float(input('请输入当Is=0.1mA时产生的不等位电势v = ?mv\n'))
l = float(input('请输入霍尔元件片L=?mm\n'))/1000
  • 读取wz.txt下----来自第一个表格的电压值数据
with open(filename)as wztq:
    #读每一行然后存列表里
    lines = wztq.readlines()
  • 接下来是把放入列表的每一行的数据先分割整合后放进一个大的列表中
pi_string = ''
print('-----数据呈现,byRHZ----------')
for line in lines:
    pi_string+=line.rstrip()#消除空格,方便调用数据和做分割
    #print(line.strip())
print('-----------------------')
lst1=[]

lst1 = pi_string.split(" ")#lst1用来存储输入的字符串,用空格分割
avglist =[]
lst =[]
for il in lst1:
    i_1= float(il)
    if i_1 <=0:
    #把负数全部变为正数
        i_1=-i_1
        lst.append(float(i_1))
    else:
        lst.append(float(i_1))
print(lst)
  • 把数据分组分类处理并加入列表,由此一来,我们的第一个表中的数据成功存进列表
def list_of_groups(init_list, children_list_len):
    list_of_groups = zip(*(iter(init_list),) *children_list_len)
    end_list = [list(i) for i in list_of_groups]
    count = len(init_list) % children_list_len
    end_list.append(init_list[-count:]) if count !=0 else end_list
    return end_list
  • 求均值处理,对列表中的列表进行递归处理,先求和再求均值
lst2 = list_of_groups(lst,4)
for i in lst2:
    for lstnumber in i:
        sum_1 +=float(lstnumber)
    avg = sum_1/4.0#此处4可根据具体数据改变,科大默认每组都是四个数据
    avglist.append(avg)#将每组的均值加入一个新的列表中
    sum_1 =0#重置sum_1的值方便后期对每组值求和
  • python下的斜率计算法即是k=vh/is,参考大佬的教程写的
  • 核心代码,求斜率k=w,截距b=b_1
def fit(data_x, data_y):
    m = len(data_y)
    x_bar = 2.5
    sum_yx = 0
    sum_x2 = 0
    sum_delta = 0
    for i in range(m):
        x = data_x[i]
        y = data_y[i]
        sum_yx += y * (x - x_bar)
        sum_x2 += x ** 2
    # 根据公式计算w
    w = sum_yx / (sum_x2 - m * (x_bar ** 2))

    for i in range(m):
        x = data_x[i]
        y = data_y[i]
        sum_delta += (y - w * x)
    b_1 = sum_delta / m
    return w, b_1
  • 传递数据
x = [0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5]#科大实验默认x轴Is是这些数据
y = avglist[:]#传递V的每一行的均值数据给y
  • 绘制生成坐标图
k, b_1 = fit(x, y)
  • 画出坐标图,可视化的坐标轴
def huatu():
    x_values = [0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5]
    y_values = avglist[:]

    plt.style.use('seaborn')
    fig,ax = plt.subplots()
    ax.scatter(x_values,y_values,s=100)
    ax.plot(x_values,y_values,linewidth =3)
    #调用scatter()并使用参数s设置绘制图形时使用的点的尺寸

    #设置图表标题并给坐标轴加上标签
    ax.set_title('RHZ'+'\n'+'V ='+ str(k)+'* Is' + str(b_1),fontsize=20)
    ax.set_xlabel('Is',fontsize=14)
    ax.set_ylabel('V',fontsize=14)

    #设置刻度标记的大小
    ax.tick_params(axis='both',which='major',labelsize=14)
    plt.show()
  • 得到数据
Rh = float(k*d/b)
zlz =1/Rh/1.6/100
ddl = 0.1*l/(v*b_2*d)
qyl = ddl*Rh
print('霍尔系数Rh求得为:'+str(Rh))
print('载流子浓度n为:'+str(zlz))
print('材料的电导率为:'+str(ddl))
print('载流子迁移率为:'+str(qyl))
huatu()
print('数据处理Rh,n,电导率,迁移率分别保留5,3,2,3小数')
  • 大家可在我的基础上更进一步的开发,我是写来方便最近处理实验用的,表一数据的提取,可以直接截图然后用腾讯的提取文字功能复制粘贴进wz.txt即可。
    -数据表一

  • 数据提取得到

1.36 -1.35 -1.37 1.36
 2.72 -2.71 -2.74 2.73
 4.08 -4.07 -4.09 4.09
 5.44 -5.43 -5.46 5.45
 6.80 -6.79 -6.82 6.81
 8.16 -8.15 -8.18 8.17
 9.52 -9.51 -9.53 9.52
 10.88 -10.87 -10.90 10.89
 12.24 -12.23 -12.26 12.25
  • 复制粘贴进wz.txt,运行python代码,输入霍尔元件片的数据即可,自动画出坐标图自动画出坐标图
  • 数据处理结果
    请添加图片描述
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay叶湘伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值