会有学化学的看到吗?
旋转圆盘电极常用于计算扩散系数以及反应动力学常数,通常得到结果后需要筛选数据,然后进行求倒数,log等一系列操作,这些计算虽然能够通过Origin作图软件得到,但是有的时候测出来的数据并不一定很好,导致做了半天发现数据不行,因此这个程序能够帮助快速处理得到的LSV数据,判断是否线性,针对求反应速率常数。
基于上四个方程,我们需要得到在不同过电位下对应的电流的负一次方和转速rad/s的-0.5次方的线性关系,从而得到截距ik,而后根据方程三画图线性拟合即可得到i0,便可算的k0,本程序主要用于判断实验测得的数据中电流的-1次方和转速的-0.5次方是否成线性关系,如果成立,即可输出转换后的数据,用于Origin进一步作图,如果线性不好,那就再测,能够节省繁杂的处理重复数据的时间
程序组成
1、根据输入平衡电位,寻找不同过电位对应的电流
2、对得到的数据进行数学运算,得到需要值,并进行存储
3、对数据进行拟合出图,认为线性较好,即可输出对应数据
Step1:导入数据库,并建立所需存储数据列表
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 列表
rotating_speed_rpm=[]
rotating_speed_rad=[]
current_list=[]#电流列表
current_list_T=[]#置换后列表
all_current_list=[]#所有列表
rotating_speed_rad_half=[]#转速的-0.5次方
Step2: 输入参数
#输入
n= int(input("转速个数:"))
m= int(input("取点数:"))
overpotential = input("过电位间隔(V):")# 输入过电位间隔
op= float(overpotential)
df = pd.read_excel(input("输入表格名称"))
b = float(input("输入平衡电压(V):")) + op # 输入平衡电压
例:
Step3:输入转速,并对转速进行数学计算和存储
# PART2:输入转速rpm,输出为rad/s
r=1#循环
while r<=n:
r=r+1
rpm=int(input("输入转速rpm:"))
rad = rpm*0.10472
rad_half=rad**-0.5
rotating_speed_rpm.append(rpm)
rotating_speed_rad.append(rad)
rotating_speed_rad_half.append(rad_half)
print("转速",rotating_speed_rpm,"rpm")
print("转速",rotating_speed_rad,"rad/s")
all_current_list.append(rotating_speed_rad_half)
print("转速的-0.5次方”)
例:
Step4:寻找对应电流数据进行计算保存,保存的个数为输入取点数
#PART3:循环检索表格中最接近的电压,并且输出所在行的数据,并对其进行数据处理
a=1#循环计次用
while a <= m:
# 要搜索的数值
b=b+op
search_column = 'Voltage'#确定检索的列
search_value = b#检索的数字
# 计算距离每个数值的差值,然后使用argmin找到最接近的索引
closest_index = np.argmin(np.abs(df[search_column] - search_value))
# 获取最接近的数据
closest_value = df.loc[closest_index, search_column]#最接近的数据[
df7 = df[df['Voltage']==closest_value] # 最接近数据
df8=1/df7
arr = df8.iloc[:,1:n+1]#除去第一个数据
arr_list1=arr.values.tolist()
arr_list1=arr_list1[0]
all_current_list.append(arr_list1)
a=a+1
Step5:将列表数据转换为dataframe格式,便于输出
df = pd.DataFrame(all_current_list,columns=None)
df_melt = df.transpose()#x和y置换,便于Origin作图
Step6:numpy函数线性拟合,matplotlib函数出图
o=1
while o<=m:
x= df_melt.iloc[:, 0]
print(x)
y= df_melt.iloc[:,o]
o = o + 1
coefficent=np.polyfit(x,y,1)
fixed_y=np.poly1d(coefficent)#线性拟合的一次函数
plt.rcParams['font.sans-serif'] = [u'simHei'] # 显示中文
plt.rcParams['axes.unicode_minus'] = False # 解决负号问题
plt.rcParams['font.size'] = 20 # 字体大小,调节坐标轴字体
plt.rcParams['font.family'] = 'Times New Roman' # 字体
plt.rcParams['font.weight'] = 'bold' # 字体加粗:normal,bold,bolder
plt.xlabel(u"ω^-0.5(rad/s)^-0.5",fontsize=20,fontweight='bold')
plt.ylabel(u"Current^-1(A)^-1", fontsize=20, fontweight='bold')
plt.scatter(x, y, marker="*",color="b", s=30)#做点图
plt.plot(x, fixed_y(x), linewidth=1, color="r")#做线图,fixed_y(x)表示将x轴的数据代入线性方程计算得到理论结果
plt.show()
Step7:是否输出数据
output=int(input("结果是否有效,有效输入1,导出数据:"))
if output==1:
df_melt.to_excel(input("输入文件名保存(需要加.xlsx后缀):"), index=False)
else:
print("结果无效")
得到数据:可复制进入Origin作图