热动力数据MATLAB代码分享
DSC 数据拟合和转化率计算
- 本文介绍
- 补充说明
- 热动力学介绍
- 拟合采用kissinger方程
- 拟合过程代码
- 拟合结果展示
- 通过计算,输出反应结果和拟合的r^2大小
- 反应转率介绍
- 反应产物转化计算程序
- 导入DSC数据
- 代码运行过程展示
- 交互过程选取反应起始和结束范围
- 不同升温速率梯度下的结果汇总
- 根据反应区间范围计算反应转化率 代码
- 总结
本文介绍
- 本文主要用于记录实验数据处理过程 采用matlab进行数据处理分析
- 本文主要针基础过程进行代码分享,代码以解决问题为主没有过多注释和完善
- 代码极其粗野请紧张的往下看
- 代码主要涉及基础的拟合方法,作图格式设置方法
- MATLAB的基础交互过程
补充说明
代码 jisuan_1 函数是里面注释部分,运行时额外粘贴一下。(2021年3月3日)
热动力学介绍
你好! 建议[点击进行查询][1]
拟合采用kissinger方程
特殊形式
∂α∂t=Aexp(−E/RT)(1−α)n\frac{\partial \alpha }{\partial t}=A \exp (-E/RT) (1-\alpha)^{n} ∂t∂α=Aexp(−E/RT)(1−α)n
通用形式
∂α∂t=Aexp(−E/RT)f(α)\frac{\partial \alpha }{\partial t}=A \exp (-E/RT)f(\alpha ) ∂t∂α=Aexp(−E/RT)f(α)
通过推导最后 建立出反应放热峰值温度与升温速率的关系
ln(βiTpi2)=ln(AkREK)−EkRTpi2[i=1,2,3..6]\ln(\frac{\beta _{i}}{T^{2}_{pi}})=\ln(\frac{A_{k}R}{E_{K}})- \frac{E_{k}}{RT^{2}_{pi}} {[i=1, 2,3 ..6]} ln(Tpi2βi)=ln(EKAkR)−RTpi2Ek[i=1,2,3..6]
根据公式可以知道最后反应归结为 升温速率与峰值温度的关系。只需要将数据代入进行直线拟合就能算出表观活化能 EKE_{K}EK和 反应频率AAA,
拟合过程代码
%% 对dsc数据进行拟合 k方法
% 输入放热峰值
% 输入温度梯度
% 结果保存
% 2020/7/4
% 版本 0.1 尚帝
%% 清理变量空间
clc
clear
close all
%% 数据输入与预处理
x_1=[10 15 20 25 30]; % 温度梯度变化
y_x=[687.64 703.4 716.21 726.87 730.55]; %样本数据的峰值温度 T_P
y_y=[740.10 757.52 780.78 793.49 797.40]; %样本数据的峰值温度 T_P
y_z=[725.51 748.39 759.47 770.79 774.49]; %样本数据的峰值温度 T_P
%% 拟合过程
[E_K_z, A_K_z,fitresult_z, gof_z]=jisuan_1(x_1,y_z,'Z的拟合结果');
[E_K_x, A_K_x,fitresult_x, gof_x]=jisuan_1(x_1,y_x,'X的拟合结果');
[E_K_y, A_K_y,fitresult_y, gof_y]=jisuan_1(x_1,y_y,'Y的拟合结果');
A_K_ALL=[A_K_x,A_K_y,A_K_z];
E_K_ALL=[E_K_x,E_K_y,E_K_z];
%% 结果汇总
rsquare_all=[gof_x.rsquare,gof_y.rsquare,gof_z.rsquare];
all_num=[E_K_ALL' A_K_ALL' rsquare_all'];
all_num=array2table(all_num, 'VariableNames',{'E_K','A','R^2'});
writetable(all_num,'拟合结果.xlsx')
%% 图像处理部分
function [E_K, A_K, fitresult, gof]=jisuan_1(x_1,y_1,name)
x=[x_1;y_1]';
gradient(x);
y1=log(x(1:5,1)./x(1:5,2).^2);
x1=1./x(1:5,2);
[xData, yData] = prepareCurveData( x1, y1 );
% Set up fittype and options.
ft = fittype( 'poly1' );
[fitresult, gof] = fit( xData, yData, ft );
figure( 'Name',name );
%% 图像形式处理
% 创建 axes
axes1 = axes('Parent',gcf);
hold(axes1,'on');
set(axes1,'FontName','Times New Roman','FontSize',13);
h = plot( fitresult, xData, yData );
legend( h, 'y1 vs. x1', '拟合方程', 'Location', 'NorthEast' );
% Label axes
xlabel({'x1'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
ylabel({'y1'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');title({name},'FontWeight','bold','FontSize',15,'FontName','宋体');grid off
saveas(gcf,strcat(name,".bmp"));
E_K=-fitresult.p1*8.314/10^3;
A_K=fitresult.p2+log(-fitresult.p1);
disp(strcat("反应的E_K=",num2str(E_K)))
disp(strcat("反应的A_K=",num2str(A_K)))
disp("-----------------------------------------")
end
自定义拟合函数
%% 图像处理部分
function [E_K, A_K, fitresult, gof]=jisuan_1(x_1,y_1,name)
x=[x_1;y_1]';
gradient(x);
y1=log(x(1:5,1)./x(1:5,2).^2);
x1=1./x(1:5,2);
[xData, yData] = prepareCurveData( x1, y1 );
% Set up fittype and options.
ft = fittype( 'poly1' );
[fitresult, gof] = fit( xData, yData, ft );
figure( 'Name',name );
%% 图像形式处理
% 创建 axes
axes1 = axes('Parent',gcf);
hold(axes1,'on');
set(axes1,'FontName','Times New Roman','FontSize',13);
h = plot( fitresult, xData, yData );
legend( h, 'y1 vs. x1', '拟合方程', 'Location', 'NorthEast' );
% Label axes
xlabel({'x1'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
ylabel({'y1'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');title({name},'FontWeight','bold','FontSize',15,'FontName','宋体');grid off
saveas(gcf,strcat(name,".bmp"));
E_K=-fitresult.p1*8.314/10^3;
A_K=fitresult.p2+log(-fitresult.p1);
disp(strcat("反应的E_K=",num2str(E_K)))
disp(strcat("反应的A_K=",num2str(A_K)))
disp("-----------------------------------------")
end
拟合结果展示
通过计算,输出反应结果和拟合的r^2大小
反应转率介绍
- 通过查阅文献,反应速率是通过定义为 [DSC反应过程下TA曲线变化对应热流曲线下的面积][2]可以定义为下面的公式
αi=∫T1TidαdT[i=1,2...n][0<αi=<1]\alpha _{i}=\int_{T1}^{Ti}\frac{\mathrm{d}\alpha }{\mathrm{d}T} \: \: [i=1,2...n] [0<\alpha _{i}=<1] αi=∫T1TidTdα[i=1,2...n][0<αi=<1]
公式中的TiT_{i}Ti表示启示反应温度点,TnT_{n}Tn 表示反应结束温度,可以通过热重曲线确定反应的开始和结束。反应转化率表示为随温度升高反应产物的积累量。
反应产物转化计算程序
导入DSC数据
%% 时间 2020/7/3
% 输入DSC数据,求取反应转化过程
% 0.1版
% 对转化率进行拟合
% 输入dsc数据 输出转化率与温度的变化 输出反应时间变化
% 尚帝
%% 清理空间
clc
clear
close all
%% 文件读取设置
name_U='Z10'; % 计算的名字
%% 读取文件内容
opts = spreadsheetImportOptions("NumVariables", 9);
% 指定工作表和范围
opts.Sheet = name_U;
opts.DataRange = "A1:I11755";
% 指定列名称和类型
opts.VariableNames = ["VarName1", "VarName2", "VarName3", "VarName4", "VarName5", "VarName6", "VarName7", "VarName8", "VarName9"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double", "double", "double"];
% 导入数据
x1 = readtable("C:\Users\Administrator\Desktop\dsc数据\运算数据\Z转化率数据.xlsx", opts, "UseExcel", false);
%% 转换为输出类型
x1 = table2array(x1);
%% 清除临时变量
clear opts
%% 数据预处理
p_h=x1(:,4); %热流密度
p_t=x1(:,2); %温度曲线
figure
plot(p_t,p_h);
% 输入起始与结束点
[x_s1,y_s1]=ginput(1);
hold on
plot(x_s1,y_s1,'o')
[x_s2,y_s2]=ginput(1);
hold on
plot(x_s2,y_s2,'o')
plot([x_s1,x_s2],[y_s1,y_s2])
hold off
% 判断点选取的合理性
if y_s1>max(p_h)&&y_s1<min(p_h)disp('选择的点不存在于线上')x_s1=655;x_s2=737.6;y_s1= p_h(max(p_t<=x_s1&p_t>=x_s1-0.1));y_s2= p_h(max(p_t<=x_s2&p_t>=x_s2-0.1)) ;
end
x=[x_s1;x_s2];
y=[y_s1;y_s2];
% 截断后的数据
p_t1=p_t(p_t>=x_s1 & p_t<= x_s2);
p_h1=p_h(p_t>=x_s1 & p_t<= x_s2);
% 求取两点的直线
[xData, yData] = prepareCurveData( x, y );
ft = fittype( 'poly1' );
[fitresult, gof] = fit( xData, yData, ft );
% 截断数据减去直线
figure
plot(fitresult,x,y)
hold on
plot(p_t1,p_h1);
[fitresult1, gof1] = fit_p_1(p_t1, p_h1);
hold off
figure
p_h2=p_h1-fitresult(p_t1);
plot(p_t1,p_h2);
%% 计算转化率
p_h2_d=diff(p_h2); %对热流算差分
p_t1_d=diff(p_t1); %对温度算差分
a_m=zeros(size(p_t1_d,1),1);
for i=1:size(p_t1_d,1)if i==1a_m(i)=(p_h2(i)+p_h2(i+1))*p_t1_d(i)*0.5;elsea_m(i)=(p_h2(i)+p_h2(i+1))*p_t1_d(i)*0.5+a_m(i-1);end
end
a_m_gui=mapminmax(a_m',0,1); % 归一化
figure
p_t1_end=p_t1(1:end-2);
p_t1_end_1=p_t1(1:end-1);
plot(p_t1(1:end-1),a_m_gui);
xlabel('温度')
ylabel('转化率')
a_m_u=diff(a_m_gui);a_m_u_1=smooth(a_m_u);figureplot(a_m_u_1)[fitresult2, gof2] = fit_p_1(p_t1_end, a_m_u_1);
web("www.baidu.com")
%% 保存数据
% dsc曲线
name_z10=a_m_u_1;
save(strcat(name_U,"_dsc_1.mat") ,'name_z10')
% 转化率
name_z10_p=a_m_gui;
save(strcat(name_U,"_tr.mat") ,'name_z10_p')
% 温度范围
name_z10_t=p_t1_end_1;
save(strcat(name_U,"_tr_t.mat") ,'name_z10_t')
代码运行过程展示
交互过程选取反应起始和结束范围
不同升温速率梯度下的结果汇总
根据反应区间范围计算反应转化率 代码
%% 清理空间
clc
clear
close all
a=1;
%% 数据读取
name_p='y粒径的反应';
for i=10:5:30name=strcat("y",num2str(i),'_tr.mat');name1=strcat("y",num2str(i),'_tr_t.mat');load(name)load(name1)y=eval(strcat('name_y',num2str(i),"_p"));x=eval(strcat('name_y',num2str(i),"_t"));f=plot(x,y,'DisplayName',strcat('反应速率',num2str(i)));legend('show');hold on
end
xlabel({'t'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
ylabel({'a'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
title({name_p},'FontWeight','bold','FontSize',15,'FontName','宋体');
saveas(gcf,strcat(name_p,".bmp"))
hold offname_p='x粒径的反应';
for i=10:5:30name=strcat("x",num2str(i),'_tr.mat');name1=strcat("x",num2str(i),'_tr_t.mat');load(name)load(name1)y=eval(strcat('name_x',num2str(i),"_p"));x=eval(strcat('name_x',num2str(i),"_t"));f=plot(x,y,'DisplayName',strcat('反应速率',num2str(i)));legend('show');hold on
end
xlabel({'t'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
ylabel({'a'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
title({name_p},'FontWeight','bold','FontSize',15,'FontName','宋体');
saveas(gcf,strcat(name,".bmp"))
hold off
name_p='x粒径的反应';
for i=10:5:30name=strcat("z",num2str(i),'_tr.mat');name1=strcat("z",num2str(i),'_tr_t.mat');load(name)load(name1)y=eval(strcat('name_z',num2str(i),"_p"));x=eval(strcat('name_z',num2str(i),"_t"));f=plot(x,y,'DisplayName',strcat('反应速率',num2str(i)));legend('show');hold on
end
xlabel({'t'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
ylabel({'a'},'FontWeight','bold','FontSize',13,'FontName','Times New Roman');
title({name_p},'FontWeight','bold','FontSize',15,'FontName','宋体');
saveas(gcf,strcat(name_p,".bmp"))
hold off
总结
*咕咕咕咕 本文主要为做动力学曲线分析
[1]: www.baidu.com
[2]:
[3]: /
[4]:
热动力数据MATLAB代码分享相关推荐
- arima模型matlab代码_PSTR面板平滑转换模型简介(附Matlab代码分享)
写论文的时候用到的~相关的资料太少了,做一些简单内容和资料的分享.(PSTR模型的Matlab代码分享在最后)本文主要为简单理论和粗暴实操~ 有用的话可以点个赞哟(知乎小白卑微求赞) 嘻嘻下面进入正题 ...
- 采样点流量数据提取(代码分享):利用ECMWF开源数据
内容介绍: 利用欧洲中期天气预报中心(ECMWF)开源数据提取采样时采样点流量数据,在研究范围为大尺度时适用. 数据来源:River discharge and related historical ...
- 经验分享 | SEN+Mk趋势分析(matlab代码分享)
代码分享 方法介绍:Sen 斜率估计用于计算趋势值,通常与MK非参数检验结合使用.即首先计算Sen趋势值,然后使用MK方法判断趋势显著性 示例:1984-2018NDVI年最大值趋势分析 注意:在对N ...
- (MATLAB代码分享,可运行)基于改进遗传算法的柔性作业车间调度优化研究
问题描述 柔性加工车间,一个工件的单个工序的加工机床可以由多台机床完成,一个机床可以加工多种工件. 多目标优化的时候,加权系数暂定a=1,b=1; a+b=1,a=0.6或0.7或,0.8 单目标的时 ...
- (论文复现,matlab代码分享,可运行)改进遗传算法求解农业水资源调度问题
问题简介 目前国内外现有的渠道优化配水模型都是在下级渠道配水流量相等这一假定条件的基础上建立的.这与 绝大多数渠系实际配水要求不相符合.针对这一问题,建立了下级渠道引水流量不等情况下的渠道优化配水模型 ...
- 数据预处理代码分享——机器学习与数据挖掘
数据预处理分为6步: 第1步:导入NumPy和Pandas库.NumPy和Pandas是每次都要导入的库,其中Numpy包含了数学计算函数,Pnadas是一个用于导入和管理数据集(Data Sets) ...
- python3读取excel数据-python3读取Excel表格数据的代码分享
python3 读取Excel表格中的数据 需要先安装openpyxl库 通过pip命令安装: pip install openpyxl 源码如下: #!/usr/bin/python3 #-*- c ...
- 数据预处理代码分享——机器学习与数据挖掘 1
2019独角兽企业重金招聘Python工程师标准>>> 数据预处理分为6步: 第1步:导入NumPy和Pandas库.NumPy和Pandas是每次都要导入的库,其中Numpy包含了 ...
- (matlab代码分享,可运行) 多技能员工排班调度多目标优化(技能熟练度包含学习型、遗忘型)(Part 1)
一.技能值不变的多技能员工调度优化模型 1.问题描述 对于企业管理者来说,如何合理的分配员工去完成任务,是降低企业运行费用,提升企业产品开发的重要手段.现代化企业需要制定一套科学的方法对员工进行任务分 ...
最新文章
- 面试必备:一个秒杀系统的设计思考
- python进行数据分析,学习笔记 第8章(1)
- java 一般方法_一般覆盖Java中的方法
- ab plc编程软件_三菱PLC编程程序PLC的软件编程
- python(numpy,pandas5)——numpy中copy 和 deep copy
- boost::geometry::correct用法的测试程序
- JavaScript(三)—— JavaScript 函数/JavaScript 作用域/JavaScript 预解析/JavaScript 对象
- 曲线拟合最小二乘法对数c语言实现,数值计算_第6章曲线拟合的最小二乘法
- ACER微型计算机支持MSATA,宏基S7超级本惊现双主控mSATA SSD 速度近900MB/s
- 【万字讲解C语言入门小游戏】——三子棋
- Java并发编程——创建线程的三种方法以及区别
- WinForm中 SplitContainer的使用
- 交换机不同vlan不同网段通过核心交换机配置VLANIF通信
- java ftps_如何基于FTP4J实现FTPS连接过程解析
- 案例:理想主义的猪与结果导向的猪
- Real-Time Rendering——5.2.2 Punctual Lights精准光
- v2021年烷基化工艺考试题及烷基化工艺考试试卷
- dig 域名信息查询
- ppt插入html,如何在PPT中嵌入网页?
- python登录微信pc版_腾讯TIM iOS版2.5.6重大更新:新增支持微信帐号登录、语音进度条...
热门文章
- 网络安全工程师的职业前景如何?
- 启动计算机引导win10,图文详解win10系统电脑开机引导错误的方案
- 模型优化与tensorflow
- INSERT插入表记录
- 直接灰度变换法matlab,数字图像处理-灰度变换(附MATLAB代码)
- Java:抽象成类找对象
- Javascript vue 数组中的对象分离 获取对象属性名称 对象属性值
- RecyclerView最后一条显示不全
- 解决:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING
- 腾讯应用宝认领应用步骤