⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kineticsest1_diff.m

📁 本代码为黄华江编著《实用化工计算机模拟—MATLAB在化学工程中的应用》的配套车程序
💻 M
字号:
function KineticsEst1_Diff  
% 动力学参数辨识: 用微分法进行反应速率分析得到速率常数k和反应级数n
% Analysis of kinetic rate data by using the differential method
%
%   Author: HUANG Huajiang
%   Copyright 2003 UNILAB Research Center, 
%   East China University of Science and Technology, Shanghai, PRC
%   $Revision: 1.0 $  $Date: 2003/07/27 $
%
% Reaction of the type -- rate = kCA^order
% order - reaction order
% rate -- reaction rate vector
% CA -- concentration vector for reactant A
% T -- vector of reaction time
% N -- number of data points
% k- reacion rate constant

clear all
clc

% 动力学数据
t = [0 20  40  60  120  180  300];
CAm = [10  8  6  5  3  2  1];

% 用最小二乘样条拟合法计算微分dCA/dt--使用不经过实验点的B样条插值函数
knots = 3;
K = 3;                  % 三次B样条
sp = spap2(knots,K,t,CAm);
pp = fnder(sp);         % 计算B样条函数的导函数
dCAdt = fnval(pp,t);    % 计算t处的导函数值
rAm = dCAdt;

% 绘制浓度拟合曲线
ti = linspace(t(1),t(end),200);
CAi = fnval(sp,ti);
plot(t,CAm,'ro',ti,CAi,'b-')
xlabel('t')
ylabel('C_A')
legend('实验值','B样条拟合')

% 非线性拟合
beta0 = [0.0053 1.39];
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@OptObjFunc,beta0,[],[],[],rAm,CAm);          
ci = nlparci(beta,residual,jacobian);

% 参数辨识结果
fprintf('Estimated Parameters:\n')
fprintf('\tk = %.4f ± %.4f\n',beta(1),ci(1,2)-beta(1))
fprintf('\tn = %.2f ± %.2f\n',beta(2),ci(2,2)-beta(2))
fprintf('  The sum of the squares is: %.1e\n\n',sum(residual.^2))

% 绘制反应速率拟合曲线
figure
plot(t,rAm,'ro',t,Rate(CAm,beta),'b*')
xlabel('t')
ylabel('dC_Adt')
legend('Experiment','Kinetic Model')

% ------------------------------------------------------------------
function f = OptObjFunc(beta,rAm,CAm)
rAc = Rate(CAm,beta);
f = rAc - rAm;

% ------------------------------------------------------------------
function rA = Rate(CA,beta)
rA = -beta(1)*CA.^beta(2);   % -rA = -dCAdt = k*CA^n, 其中k=beta(1), n=beta(2)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -