动态滴定预测算法研究(代码片段)

卓晴 卓晴     2022-12-04     516

关键词:

简 介: 对于取得的滴定数据使用了单位滴定面积倒数预测剩余水量模型进行预测,渴望获得比较好的预测精度,最后给出了进一步实验的步骤和方向。

关键词 动态滴定预测研究卡式水分滴定

 

§01 式水分滴定


一、滴定过程加速

  在卡式水分滴定过程的采集采用了 不同采集方案精度对比 ,并在此基础上对于 卡尔费休滴定进行建模 ,所有的目的是为了能够加快滴定过程。

  在上次在先驱威锋讨论的时候对于整个滴定过程分为了三部分:

  • 滴定起始阶段:此时滴定杯中存有大量的水,远离平衡态;此时稳态电流检测值基本上为0.
  • 终点过度阶段:此时稳态电流在5 ~ 20 微安左右。
  • 终点平衡阶段:此时稳态电流在20 至28微安左右,逐步靠近滴定终点。

▲ 图1.1 卡式水分滴定流程图

▲ 图1.1 卡式水分滴定流程图

  按照上面的动态滴定框图可以大大提高第二阶段(过渡过程)。

  下面则需要分别针对起始阶段以及平衡阶段的响应的控制算法进行研究。

 

§02 据分析


一、原始数据文件

1、刘通发送EXCEL数据

  下面四个原始数据文件是由刘通发送过来:

  • 2021-07-05 上午50mL反应体积.xlsx
  • 2021-07-05 下午100mL反应体积.xlsx
  • 20210703-预测卡氏液消耗量.xlsx
  • 20210705-预测卡氏液消耗总量.xlsx

D:\\zhuoqing\\DesignCenter\\XQWF\\2021\\水分滴定

2、TEXT数据

  以下是四月份的测量数据。其中包括有加入的测试水分,每步增加的卡式液的体积等不同的组合。

(1)实验参数组合

【表1-1 实验不同的参数组合】

水:μL0.51251015
卡氏液uL1000200400100020003000
1000 μL不测不测不测不测--
500 μL不测不测不测---
250 μL不测不测----
100 μL不测-----
50 μL------

(2)实验测量数据文件

  1. KS-转速240-加水量0.5-滴定度5.443-加液速度20-溶剂总体积50-单步馈液50-01.txt
  2. KS-转速240-加水量1-滴定度5.443-加液速度20-溶剂总体积70-单步馈液50-01.txt
  3. KS-转速240-加水量1-滴定度5.443-加液速度20-溶剂总体积70-单步馈液100-01.txt
  4. KS-转速240-加水量2-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液50-01.txt
  5. KS-转速240-加水量2-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液100-01.txt
  6. KS-转速240-加水量2-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液250-01.txt
  7. KS-转速240-加水量5-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液50-01.txt
  8. KS-转速240-加水量5-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液100-01.txt
  9. KS-转速240-加水量5-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液250-01.txt
  10. KS-转速240-加水量5-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液500-01.txt
  11. KS-转速240-加水量10-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液50-01.txt
  12. KS-转速240-加水量10-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液100-01.txt
  13. KS-转速240-加水量10-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液250-01.txt
  14. KS-转速240-加水量10-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液500-01.txt
  15. KS-转速240-加水量10-滴定度5.443-馈液速度20-溶剂总体积70-单步馈液1000-01.txt
  16. KS-转速300-加水量15-滴定度5.443-馈液速度20-溶剂总体积100-单步馈液50-01.txt
  17. KS-转速300-加水量15-滴定度5.443-馈液速度20-溶剂总体积100-单步馈液100-01.txt
  18. KS-转速300-加水量15-滴定度5.443-馈液速度20-溶剂总体积100-单步馈液250-01.txt
  19. KS-转速300-加水量15-滴定度5.443-馈液速度20-溶剂总体积100-单步馈液500-01.txt
  20. KS-转速300-加水量15-滴定度5.443-馈液速度20-溶剂总体积100-单步馈液1000-01.txt

(3)实验数据格式

  实验条件和数据分别反映在实验数据文件名称与数据格式中。

  • 实验舒适名称中的信息可以只有通过文件名称的不同字段来反映;
  • 实验数据文件包括有若干行:每一行的组成如下表所示:

【表1-2 滴定数据每一行格式】

数字1数字2数字3数字4-n
滴定步数
从1开始,到文件结束递增
剩余的水量:μL滴定液量:μL电流值数量
10秒钟的数据,总共150个记录数据

▲图2.1 一次滴定过程中的数据

▲图2.1 一次滴定过程中的数据

dirpath = tspstring2text('datadir')
#printf(dirpath)
filedim = os.listdir(dirpath)
#printf(filedim)
def arg2file(water, karl):
    for f in filedim:
        if f.find('加水量%s'%water) > 0 and f.find('单步馈液%s'%karl) > 0:
            return os.path.join(dirpath, f)
    return 'NO FILE'
#------------------------------------------------------------
filename = arg2file(2, 50)
printf(filename)
with open(filename, 'r', encoding='gbk') as f:
    lines = f.readlines()
    printf(len(lines))
    count = 0
    for s in lines:
        count += 1
        sdim = [float(sn) for sn in s.split() if len(sn) > 0]
        plt.plot(sdim[4:], label='第%d次加液'%count)
plt.title(os.path.basename(filename))
plt.xlabel("Samples")
plt.ylabel("Values")
plt.legend(loc='upper right')
plt.grid(True)
plt.tight_layout()
plt.show()

二、数据分析

1、滴定电流积分

  分析滴定电流积分(面积)与滴定液之间的变化关系。

(1)加水量2-单步馈液50

  这次滴定曲线为上面【图2.1】所示。可以看到第一次滴液的时候电流值并没有发生变化,所以这次滴液忽略。积分数值选择从第10 个开始到底55个结束,大约经过三秒钟的时间。

▲ 图2.1 11次滴定面积

▲ 图2.1 11次滴定面积

  去掉第一个,将其余的取倒数:
▲ 图2.2 从第二次滴定到最后一次滴定的倒数数值

▲ 图2.2 从第二次滴定到最后一次滴定的倒数数值

(2)加水量5-馈液量50

▲ 图2.3 加水量5-馈液量50

▲ 图2.3 加水量5-馈液量50

  上面的面积计算采用了三秒的数据积分,下面采用8秒时间的积分,计算出面积倒数与滴定次数之间的关系。

▲ 图2.4 8秒时间的积分得到的面积倒数与滴定次数之间的关系

▲ 图2.4 8秒时间的积分得到的面积倒数与滴定次数之间的关系

▲ 图2.5 两秒时间的面积积分与滴定次数之间的关系

▲ 图2.5 两秒时间的面积积分与滴定次数之间的关系

  下面对于不同的积分时间下积分面积的倒数与滴定次数之间的关系:

▲ 图2.6 不同的积分时间对于计算关系的影响

▲ 图2.6 不同的积分时间对于计算关系的影响

  积分时间越长,上述面积的导数与滴定步数之间的线性关系越好。在数据的稳定性与时间之间做平衡,在后面的实验中,积分时间取5秒

  由于滴定是采用了等间隔滴定,所以剩余水分随着滴定次数线性下降。因此从前面滴定曲线来看,每次滴定的面积倒数与剩余水量之间大体呈现正比的关系。

2、全部实验

  下面对于前面实验的输出做统一的处理。得到第一滴滴定积分面积的导数与剩余水量之间的关系。处理数据的相关参数:

  • 从数据名称得到加水量,也就是对应的溶液中的水量;
  • 从数据名称中得到滴定水量:也就是馈液量;
  • 分别计算数据的第一条积分面积和第二条积分面积;
  • 积分数据从10 ~ 10+75,供5秒的数据;

(1)处理程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST3.PY                     -- by Dr. ZhuoQing 2021-07-08
#
# Note:
#============================================================

from headm import *

dirpath = tspstring2text('datadir')
filedim = os.listdir(dirpath)

def arg2file(water, karl):
    for f in filedim:
        if f.find('加水量%s'%water) > 0 and f.find('单步馈液%s'%karl) > 0:
            return os.path.join(dirpath, f)

    return 'NO FILE'
#------------------------------------------------------------

def filearg(filename):
    with open(os.path.join(dirpath, filename), 'r', encoding='gbk') as f:
        lines = f.readlines()

        line1 = lines[0]
        line2 = lines[1]

        data1 = [float(s) for s in line1.split() if len(s) > 0]
        data2 = [float(s) for s in line2.split() if len(s) > 0]

        area1 = sum(data1[10:85])
        area2 = sum(data2[10:85])

        files = filename.split('-')
        printf(files)

        return (area1, area2,
                float(files[1][2:]),
                float(files[2][3:]),
                float(files[3][3:]),
                float(files[4][4:]),
                float(files[5][5:]),
                float(files[6][4]))

datadim = []
for f in filedim:
    d = filearg(f)
    datadim.append(d)

tspsave('dataall', data=datadim)

#------------------------------------------------------------
#        END OF FILE : TEST3.PY
#============================================================

(2)二十个文件处理结果

  下面是对二十个数据文件处理的结果。可以看到所有文件的第一个数值都小于第二个数值,特别是第一个滴定数值有的甚至为复数,这说明使用第二个滴定曲线的面积更为准确。这与前面的实验结果是相同的。

【表2-1 二十个文件滴定面积积分】

序号面积2转速加水量体积单步馈液
02618.78240.000.5050.0050.00
14197.93240.001.0070.00100.00
22060.49240.001.0070.0050.00
3658.96240.0010.0070.00100.00
45542.40240.0010.0070.001000.00
51770.17240.0010.0070.00250.00
6234.24240.0010.0070.0050.00
73158.55240.0010.0070.00500.00
82631.48240.002.0070.00100.00
97010.46240.002.0070.00250.00
101211.81240.002.0070.0050.00
111299.90240.005.0070.00100.00
123504.06240.005.0070.00250.00
13612.20240.005.0070.0050.00
147008.82240.005.0070.00500.00
15264.14300.0015.00100.00100.00
162069.19300.0015.00100.001000.00
17669.59300.0015.00100.00250.00
18134.68300.0015.00100.0050.00
191280.25300.0015.00100.00500.00
data = tspload('dataall', 'data')

printf("序号 面积2 转速 加水量 体积 单步馈液")
for id,d in enumerate(data):

    printf("%d %5.2f %5.2f %5.2f %5.2f %5.2f"%(id, d[1], d[2], d[3], d[6], d[7]))

3、多元回归分析

  在【表格2-1】中,通过面积2,转速、体积、单步馈液来回归加水量。下面定义相关变量名:

定义相关变量名:
加水量: W W W
面积: A A A
转速: R R R
体积: V V V
馈液量: S S S

(1)单位滴定面积倒数关系

  根据之前讨论的结果,一种最基本的猜测是利用面积A的倒数来预测加水量A。由于面积与单步馈液量之间存在正向关系,所以下面使用 A / S A/S A/S来线性预测W数值,这个预算成为单位滴定面积预测。

【表2-3 利用单位滴定面积倒数预测加水量】

序号S/ASWW*A/S
00.0250.000.5026.19
10.02100.001.0041.98
20.0250.001.0041.21
30.15100.0010.0065.90
40.181000.0010.0055.42
50.14250.0010.0070.81
60.2150.0010.0046.85
70.16500.0010.0063.17
80.04100.002.0052.63
90.04250.002.0056.08
100.0450.002.0048.47
110.08100.005.0064.99
120.07250.005.0070.08
130.0850.005.0061.22
140.07500.005.0070.09
150.38100.0015.0039.62
160.481000.0015.0031.04
170.37250.0015.0040.18
180.3750.0015.0040.40
190.39500.0015.0038.41

  从上述实验中,可以看到一个W/(S/A)的数值在40左右呈现比较多的次数。经过归纳,可以看到如下规律:

  • 单步滴定在50μL;
  • 加水量在15微升

  下面是将上面表格中符合的条件摘录下来,可以看到除了W= 0.5, W= 5之外其它都差不多在40左右。

序号S/ASWW*A/S
00.0250.000.5026.19
20.0250.001.0041.21
60.2150.0010.0046.85
100.0450.002.0048.47
130.0850.005.0061.22
150.38100.0015.0039.62
160.481000.0015.0031.04
170.37250.0015.0040.18
180.3750.0015.0040.40
190.39500.0015.0038.41

(2)处理4月8日数据

  下面时对于4月8日的数据进行处理。可以看到单位滴定积分面积导数与加水量之间的比值发生了变化。不过仍然有很多的曲线符合这个关系。

序号S/ASWW*A/S
00.0250.000.5026.70
10.02100.001.0046.19
20.0350.001.0035.30
30.37100.0010.0026.85
40.301000.0010.0033.89
50.28250.0010.0036.21
60.3950.0010.0025.61
70.26500.0010.0039.13
80.04100.002.0053.53
90.04250.002.0049.25
100.0550.002.0042.08
110.12100.005.0041.08
120.10250.005.0052.09
130.1450.005.0036.81
140.09500.005.0053.03
150.82100.0015.0018.39
160.591000.0015.0025.40
170.64250.0015.0023.26
180.8850.0015.0017.02
190.59500.0015.0025.57

(4)使用第三滴面积预测

  下面使用第三滴单位面积进行预测。可以看到在每一滴为50微升的时候吧,也会得到40左右的预测比例系数。

序号S/ASWW*A/S
00.0150.000.5042.89
10.02100.001.0060.32
20.0250.001.0051.49
30.16100.0010.0061.32
40.111000.0010.0092.66
50.12250.0010.0082.65
60.2250.0010.0044.70
70.10500.0010.0096.90
80.03100.002.0076.53
90.02250.002.0091.80
100.0350.002.0060.21
110.06100.005.0080.54
120.05250.005.0096.14
130.0750.005.0068.59
140.05500.005.00109.24
150.36100.0015.0041.21
160.291000.0015.0052.52
170.34250.0015.0043.68
180.3950.0015.0038.01
190.28500.0015.0053.32

 

§03 析结论


一、分析结论

  通过前面的分析,大体可以的到如下的结论:

  1. 利用滴定曲线的积分面积的倒数预测剩余水量具有一定的实验基础;
  2. 通过对比不同时间的积分面积,可以大体看到使用3 ~ 5秒中采集的数据积分比较合适。
  3. 对于转速在预测中的影响,由于数据比较少,所以还无法得到进一步的验证。
  4. 在滴定度为5.44左右的时候,S/A预测W的系数大体为40左右;
  5. 前两滴的体积最佳方案为50 ~ 100。

二、补充实验

1、不同水量的滴定

  采用以下滴定条件,做不同水量下的滴定曲线:

  • 转速:300r/s

  • 单步馈液:50uL

  • 滴定度:保持恒定

  • 采样时间:6秒钟;

  • 加水量分别为: 0.5,1,2,5,10, 12,15,18, 20,25

2、不同转速的滴定

  在转速为240,260,280,300, 加水量为5微升的情况下,单步馈液量仍然是5微升,进行滴定。

  为了加快实验,由于只需要获得前三次滴定曲线,因此。从第四步开始,就可以根据已知的加水量,增大单步滴定,尽快达到平衡,从而进行下一次时间。

3、实验目的:

  • 进一步确认上述预测模型的准确性;
  • 获得最佳的转速设置;
  • 根据多次测量的结果,能够建立起 第二滴曲线面积,第三滴曲线面积与加水量的回归模型。

三、新的算法模型

通过前面的实验,可以确定一个比较安全的单位滴定曲线面积倒数 1 / A 1/A 1/A与剩余水量 W W W之间的比率。然后再根据滴定度,确定预加滴定液体积 V V V

因此,滴定的起始阶段可以按照下面步骤进行:

查看详情

基于离散markov模型的web用户行为预测算法的研究(代码片段)

目录一、理论基础二、案例背景1.问题描述2.思路流程三、部分MATLAB程序四、仿真结论分析五、算法相关应用六、参考文献一、理论基础    对于Kth-Markov模型,常见的建模算法依次扫描每条会话记录,提取所有长度为K的... 查看详情

基于遗传算法的bp神经网络在汇率预测中的应用研究(matlab代码实现)(代码片段)

目录1遗传算法2 实数编码的遗传算法与神经网络的结合3Matlab代码及详细文章4运行结果 5参考文献6写在最后1遗传算法(1)遗传算法(GeneticAlgorithms,GA)是一种全局寻优搜索算法,它通过将问题编码为由基因组... 查看详情

采用alstm模型的温度和降雨关联预测研究论文学习记录(代码片段)

为了准确和及时预测局部区域的降雨及温度,提出了一种基于Attention和LSTM组合模型(ALSTM)的关联多值预测算法。该算法利用天气时间序列中的前期数据,对下一小时的降雨量和温度进行关联预测,以此实现对天气要素... 查看详情

python|基于lendingclub数据的分类预测研究part01——问题重述+特征选择+算法对比(代码片段)

...据集进行数据分析,并用多种机器学习算法进行分类预测。具体文章和数据集可以见我所发布的资源:发布的资源Python|基于LendingClub数据的分类预测研究Part01——问题重述+特征选择+算法对比零、问题重述&背景... 查看详情

elman预测基于粒子群算法改进elman动态递归神经网络实现数据预测matlab源码(代码片段)

一、Elman神经网络介绍1.特点Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能... 查看详情

elman预测基于粒子群算法改进elman动态递归神经网络实现数据预测matlab源码(代码片段)

一、Elman神经网络介绍1.特点Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能... 查看详情

elman预测基于布谷鸟算法改进elman动态递归神经网络实现数据预测matlab源码(代码片段)

 一、Elman神经网络介绍1.特点Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的... 查看详情

elman预测基于布谷鸟算法改进elman动态递归神经网络实现数据预测matlab源码(代码片段)

 一、Elman神经网络介绍1.特点Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的... 查看详情

滴定数据处理结果分析(代码片段)

...:对于补充测量数据进行重新初步分析关键词:滴定,卡式水分 §01补充测量数据一、数据文件  在今天(2021-07-11)收到的数据包括两类数据:1、不同水量测量结果  在相同转速下,不同加水量... 查看详情

风电功率预测基于matlab粒子群算法优化lstm风电功率预测含matlab源码941期(代码片段)

一、简介1粒子群算法的概念粒子群优化算法(PSO:Particleswarmoptimization)是一种进化计算技术(evolutionarycomputation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共... 查看详情

五大经典算法-动态规划及其算法应用(代码片段)

前言整篇文章分析整个动态规划算法,什么是动态规划,及动态规划算法在字符串匹配中使用、分治法的差别点、动态规划优点;概念什么叫做动态规划(dynamicprogramming),它是运筹学的一个分支,是求解决策过... 查看详情

基于grnn广义回归神经网络的飞机引擎剩余使用周期预测算法的研究(代码片段)

目录一、理论基础1.1数据分析1.2特征提取1.3GRNN二、核心程序三、仿真测试结果作者ID:fpga和matlabCSDN主页:https://blog.csdn.net/ccsss22?type=blog擅长技术:1.无线基带,无线图传,编解码2.机器视觉,图像处理,三维重建3.人工... 查看详情

matlab模型预测控制(mpc,modelpredictivecontrol)(代码片段)

...式处理约束的能力,这种能力来自其基于模型对系统未来动态行为的预测,通过把约束加到未来的输入、输出或状态变量上,可以把约束显式表示在一个在线求解的二 查看详情

维特比算法(代码片段)

...是决定研究一下这个算法的原理及其具体实现,如果了解动态规划的同学应该很容易了解维特比算法,因为维特比算法的核心就是动态规划。对于HMM而言,其中一个重要的任务就是要找出最有可能产生其观测序列的隐含序列。一 查看详情

动态规划令你战栗的神奇算法:动态规划基础(代码片段)

  动态规划,一种奇妙却苦涩难懂的算法,使若干小白头疼,这次小编会系统的梳理动态规划的基础。▎什么是动态规划?一、概念引入  1)动态规划的历史:动态规划最早是在数学领域中使用的,最常见的是在运筹学中... 查看详情

开盘指数预测基于matlab遗传算法优化小波神经网络股票开盘指数预测含matlab源码2014期(代码片段)

一、遗传算法优化小波神经网络简介1小波神经网络1.1小波神经网络结构小波神经网络分为松散型与融合型两类,前者将小波分析作为神经网络的前置手段,对网络输入初步优化,使得信息便于神经网络的处理,但这类WNN并未改变隐含... 查看详情

优化算法动态粒子群算法的动态环境寻优算法含matlab源码1125期(代码片段)

一、简介粒子群算法源于复杂适应系统(ComplexAdaptiveSystem,CAS)。CAS理论于1994年正式提出,CAS中的成员称为主体。比如研究鸟群系统,每个鸟在这个系统中就称为主体。主体有适应性,它能够与环境及其他的主... 查看详情