Effacer les filtres
Effacer les filtres

How to determine kinetic parameters using nonlinear least square algorithm?

3 vues (au cours des 30 derniers jours)
Zitro
Zitro le 23 Avr 2020
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];

Réponses (1)

Raunak Gupta
Raunak Gupta le 29 Avr 2020
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.

Catégories

En savoir plus sur Systems of Nonlinear Equations dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by