Python计算旋转圆盘电极LSV得到反应速率常数

会有学化学的看到吗?

只到拟合得到斜率和截距,后续计算很简单,暂时没写(懒得写)

书接上回:判断完LSV数据是否可用后,如果数据没问题就到计算速率常数这一步

主要需要获取的参数就是电流的-1次方和转速的-0.5次方线性拟合后得到的截距,只需要把截距存储起来,然后对截距取log,对过电位进行线性拟合即可。

Step1:输入转速,进行数学计算,存储输出

# 数据库导入
import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import math

# PART0:数据列表
potential_list = []#电压列表
rotating_speed_rpm=[]#转速列表rpm
rotating_speed_rad=[]#转速列表rad
rotating_speed_rad_half=[]#转速的-0.5次方列表
pl=potential_list
interception=[]#截距列表
interception_log=[]#截距列表
overpotentials=[]#过电位列表
R2list=[]#线性拟合数据方差

# PART1:输入相关参数
n= int(input("转速个数:"))
m= int(input("取点数:"))
overpotential = input("过电位间隔(V):")# 输入过电位间隔
op= float(overpotential)

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

Step2:数据进行查找计算存储输出,这里套用了一个循环语句,如果是对同一个电对,不同测试次数,对表格1进行完计算后,在对表格2进行计算,避免重复输入转速,如果两次数据转速不同则需要终止

p=int(input("开始输入1,结束输入其他数字:"))
while p==1:
    df = pd.read_excel(input("输入表格名称"))
    b = float(input("输入电压(V):")) + op  # 输入平衡电压
    #PART3:循环检索表格中最接近的电压,并且输出所在行的数据,并对其进行数据处理
    a=1#循环计次用
    while a <= m:
    # 要搜索的数值

        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]  # 最接近数据
        print(df7)
        df8=1/df7#对电流取倒数
        arr = df8.iloc[:,1:n+1]#除去第一个数据
        arr_list1=arr.values.tolist()
        print("电流的倒数:",arr_list1[0])

        ops=-op*a*1000#过电位
        overpotentials.append(ops)

        

 

Step3:对数据进行线性拟合,输出相关数据

        y=arr_list1[0]
        x=rotating_speed_rad_half
        x_n = sm.add_constant(x)
        model = sm.OLS(y, x_n)
        coef = np.polyfit(x, y, 1)
        intercept = coef[1]
        intercept=float(intercept)
        interception.append(intercept)

        intercept_log = -math.log10(-intercept)
        interception_log.append(intercept_log)

        results=model.fit()
        R2=results.rsquared
        R2list.append(R2)
        # print('斜率', slope)
        print("截距", intercept)
        print("截距对数",intercept_log)
        print('R2: ', results.rsquared)

 Step4:输出得到的拟合结果,查看R方

        a = a+1#循环
        b = op+b#电压
        pl.append(closest_value)#记录电压



    print("所选电压:",pl)
    print("所有截距",interception)
    print("所有截距对数",interception_log)
    print("过电位",overpotentials,"mV")
    print("转速的-0.5次方和电流的-1次方线性拟合的方差",R2list)

 输出得到R方,可以看R方大小,R2太小则说明线性不好

 Step5:对log截距和过电位线性拟合

    y=overpotentials
    x=interception_log
    excel = []
    excel.append(x)
    excel.append(y)
    df = pd.DataFrame(excel)
    df2 = df.transpose()
    x_n = sm.add_constant(x)  # statsmodels进行回归时,一定要添加此常数项
    coefficent = np.polyfit(x, y, 1)
    y_fixed=np.poly1d(coefficent)
    model = sm.OLS(y, x_n)  # sm.OLS是回归分析模型
    results = model.fit()  # results是回归分析后的结果
    print(results.summary())
    print('Parameters: ', results.params)
    print('R2: ', results.rsquared)

 Step6:出图

    plt.rcParams['font.sans-serif'] = [u'simHei']  # 显示中文
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号问题
    plt.rcParams['font.size'] = 20
    plt.rcParams['font.family'] = 'Arial'
    plt.figure(figsize=(8, 6))  # 单位为英寸

    plt.title(u"KL-Curves",fontsize=20)
    plt.xlabel(u"-logik",fontsize=20)
    plt.ylabel(u"overpotential(mV)",fontsize=20)



    plt.scatter(x, y, marker="o",color="b", s=50)
    plt.plot(x, y_fixed(x), linewidth=3, color="r")
    plt.show()

 斜率截距

 

Step7:对表格进行清空,便于下一次计算,对应Step2

    potential_list.clear()
    interception.clear()
    interception_log.clear()
    overpotentials.clear()
    arr_list1.clear()
    R2list = []  # 线性拟合数据方差

Step8:是否输出文件

    output = int(input("是否输出结果,是输入1,否0:"))
    if output == 1:

        df2.to_excel(input("输出:输入文件名:"), index=False)
    p=int(input("继续输入1,结束输入其他数字"))
    a=0

 

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: LSV(Least Significant Value)是一种用于图像处理和数字图像嵌入的算法,它能够提取图像中最不显著的像素值,并将其用于隐藏信息或特定图像处理任务。LSV算法中,通过计算像素的灰度值的最低频率部分,即最不显著的部分,来确定信息的嵌入或处理方式。 而自定义图源是指用户可以根据自己的需求和喜好,选择或创建自己喜欢的图像作为图像处理或嵌入信息的源图像。自定义图源可以包括来自手机相册、网络图片或者手绘的图像等。通过使用自定义图源,用户可以在图像处理过程中更加个性化地表达自己的意图,同时也能够获得更好的效果。 在使用LSV算法进行图像处理或嵌入信息时,自定义图源可以提供更多的选择和灵活性。用户可以选择一张喜欢的图像,将其作为源图像,然后使用LSV算法提取最不显著的像素值来获取需要隐藏的信息或进行特定的图像处理,如模糊、锐化等。由于自定义图源的个性化特点,可以使处理结果更加符合用户的期望。 总结来说,LSV自定义图源LRC,意味着用户可以利用LSV算法,通过选择自己喜欢的图像作为源图像,并对其进行嵌入信息或特定处理,从而达到个性化和更好的效果的目的。 ### 回答2: LSV(Latex Standalone Viewer)是一个用于查看和编辑LaTeX代码的图形用户界面程序。它允许用户轻松创建和管理LaTeX文档,包括修改格式、插入数学公式、添加图像等。 当使用LSV时,用户可以自定义图源(Graphical Sources)。图源实际上是指LSV用于显示和处理图像的源文件或路径。用户可以根据自己的需要,选择或自定义图源,以便在LaTeX文档中使用各种图像。 在LSV中,用户可以通过以下步骤来自定义图源: 1. 打开LSV软件,并选择“设置”或“选项”菜单。 2. 在设置界面中,找到相关的选项或标签,通常会有“图源”或“路径”选项。 3. 点击“添加”或“浏览”按钮,选择或输入要添加的图源路径。 4. 确认添加后,LSV会将该路径保存为默认图源。 5. 可以随时添加、删除或修改图源路径,以适应不同的LaTeX文档需求。 通过自定义图源,用户可以方便地在LSV中插入和编辑各种类型的图像,例如位图文件(如JPEG、PNG)和矢量图(如EPS、PDF)。此外,用户还可以在LSV中设置图像的默认位置、大小和格式等属性,以满足文档排版的需求。 总之,通过使用LSV自定义图源,用户可以更好地管理和处理LaTeX文档中的图像,提高文档的可读性和美观度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值