Bonjour,
Je rencontre un problème dans la résolution d'un système d'équations. J'utilise le solveur Matlab fsolve car mes équations sont non linéaires, cependant, je ne sais pas comment ajuster les paramètres 'TolX' et 'TolFun' pour obtenir des résultats corrects, je recois le message d'erreur suivant :
Voici également le script de ma fonction et de mon script d'exécution :fsolve stopped because the relative size of the current step is less than the selected value of the step size tolerance squared and the vector of function values is near zero as measured by the selected value of the function tolerance.
et pour le script d'execution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 function F=myfun(x,T) cov_co_init=0.5; cov_o_init=0; A1=2.13e11; %prefactor CO desorption Ea1=(136.19-33*cov_co_init)*1000; %activation energy desorption [J/mol] S01=0.84; %probability of adsorption MCO=(12.011+31.999/2)/1000; %molar mass [kg/mol] R=8.314; %gas constant CCO=0.005; %CO concentration 1000e-6 Ea2=(224.71-120*cov_o_init)*1000; Tref=300; A2=3.22e21; %prefactor CO desorption %S02=0.07*(Tref./T); %probability of adsorption S02=0.07; MO2=31.999/1000; %molar mass [kg/mol] R=8.314; %gas constant CO2=0.005; %O2 concentration A3=3.7e18; Ea3=91500; F=[-A1*exp(-Ea1/(R*T))*x(1)+S01*(R*T/(2*pi*MCO))^0.5*CCO*(1-x(1)-x(2))-A3*exp(-Ea3/(R*T))*x(1)*x(2); -A2*exp(-Ea2/(R*T))*x(2)^2+S02*(R*T/(2*pi*MO2))^0.5*CO2*(1-x(2)-x(1))^2-A3*exp(-Ea3/(R*T))*x(1)*x(2)]
quelqu'un aurait-il une recette pour ajuster TolX et TolFun pour éviter le callage du solveur? d'autre paramètres sont peut-être également à prendre en compte?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 clear all close all clc cov_co_init=0.5; cov_o_init=0.1; A1=2.13e11; %prefactor CO desorption Ea1=(136.19-33*cov_co_init)*1000; %activation energy desorption [J/mol] S01=0.84; %probability of adsorption MCO=(12.011+31.999/2)/1000; %molar mass [kg/mol] R=8.314; %gas constant CCO=0.005; %CO concentration 1000e-6 T=[100:10:1000]; Ea2=(224.71-120*cov_o_init)*1000; Tref=300; A2=3.22e21; %prefactor CO desorption S02=0.07*(Tref./T); %probability of adsorption MO2=31.999/1000; %molar mass [kg/mol] R=8.314; %gas constant CO2=0.005; %O2 concentration A3=3.7e18; Ea3=91500; %x0=zeros(2,length(T)); x0=[0.5 0.5]; options = optimset('Display','iter','TolFun',1e-16,'TolX',1e-16,'MaxFunEvals',100000); tic for i=1:length(T) [x(i,:),fval,exitflag,output] = fsolve(@(x)myfun(x,T(i)),x0,options); end toc
Merci beaucoup pour votre aide.
Jeremy
Partager