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 :

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.
Voici également le script de ma fonction et de mon script d'exécution :

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)]
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
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
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?

Merci beaucoup pour votre aide.

Jeremy