How to determine kinetic parameters using nonlinear least square algorithm?
3 次查看(过去 30 天)
显示 更早的评论
Hello,
First things first, I am an absolute beginner in Matlab, so this problem could be easy to solve.
The Problem:
I have a data curve that does provide me with the conversion of an reactant at a given temperature T in my reactor system. Using this data, I read you can determine the kinetic parameters A(1) to A(6) by using a nonlinear least square algorithm. I decided to give it a try, but I don't know how to write a code to solve this problem. Therefore i need your help.
The kinetik equations are:
(1/p0)*dp/dt = -r(T)*(1/p0)
r(T) = p*A(1)*A(2)*A(3)*exp(A(4)/(R*T))*exp(A(5)/(R*T))*exp(A(6)/(R*T)) / [(1+p*A(2)*exp(A(5)/(R*T)))*(1+A(3)*exp(A(6)/(R*T)))]
Due to the obtained data points i know the conversion (equals (1/p0)*delta_p) at a given temperature T. I also know the parameter R (=8.314), the initial partial pressure of the reactant p0 =0.01 and the residence time t0 in the reactor to integrate (let's assume t0 =1.2 seconds). The reporting paper is: DOI 10.1007/s13762-016-0961-z
To make things easier, you can copy this matrix with some exemplary results for your calculations. In the first column, you will find the temperature, and in the second column you will find the corresponding conversion of the reactant.
Data = [29.5 0.0000; 77.3 0.0000; 115.9 0.0000; 150.0 0.0033; 179.5 0.0099;
206.8 0.0232; 222.6 0.0430; 238.5 0.0728; 252.0 0.1325; 267.7 0.2185;
283.3 0.3477; 298.9 0.4669; 312.3 0.5695; 328.0 0.6589; 341.5 0.7285;
357.3 0.7947; 373.1 0.8377; 388.9 0.8775; 402.5 0.9073; 418.3 0.9338;
431.9 0.9503; 450.1 0.9735; 463.7 0.9801; 477.3 0.9901;
493.2 0.9934];
0 个评论
回答(1 个)
Raunak Gupta
2020-4-29
Hi,
You may look for lsqnonlin as a potential function for solving the nonlinear least square problem as here you have two know data points r(T) and T. You need to set the objective function as the difference between the r(T) and the parametrized version of r(T) which have six unknowns you want to find.
Since the conversion is given as (1/p0)*delta_p) you can convert it to represent r(T). The optimization algorithm needs to start with an initial point, so you need to specify 6 element vector corresponding to starting point for each parameter. Also, if the parameters can be any real number you may want to use fminunc which is similar but used for unconstrained optimization. Otherwise if you know the range in which the parameters might lie you can give lower bound and upper bound in lsqnonlin.
You may take a look at Nonlinear Least Squares (Curve Fitting) for exploring about optimization workflows.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Systems of Nonlinear Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!