Why does replacing zeros in the mass matrix by small numbers solve: "DAE appears to be of index greater than 1"?
1 回表示 (過去 30 日間)
古いコメントを表示
Hello,
I've a set of stiff differential equations that I wanted to solve using ode15s. At small initial concentrations the system worked fine, no problems. However, when I increased the initial values by a factor 10 the error following error popped up:
This DAE appears to be of index greater than 1.
In order to speed up the simulations I used a Mass Matrix M with zeros on the diagonal line except for the last cell, a simple example:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 1 0
0 0 0 0 0 1
As stated previously, this worked fine for small inital values but not for larger initial values. From some literature and other questions I saw that by replacing the zeros on the Mass Matrix diagonal line by small values, e.g. 1e-12, the system would work. Which it did, so this is the mass matrix that I currently use:
1e-12 0 0 0 0 0
0 1e-12 0 0 0 0
0 0 1e-12 0 0 0
0 0 0 1e-12 0 0
0 0 0 0 1 0
0 0 0 0 0 1
So the problem is solved, only I don't know why. What's the reason that the DAE index is greater than 1 when using zeros, but when using really small values it is fine?
Does somebody have an explanation for this?
As an example, the simplified version of my system (where parameter values are stored in .par):
options = odeset('Mass',M,'RelTol',1e-6,'AbsTol',1e-6);
[t,c]=ode15s(@Equations,par.tspan,par.Initial,options,par);
function dcdt = Equations(c,par)
% Create a storage
dcdt = zeros(size(c));
% Determine Rate
Rate = par.k .* c(1,1:end-1);
% Determine Reaction Profile
dcdt(1,1:end-1) = - Rate;
dcdt(2,1:end-1) = + Rate;
% Determine Liquid Profile
dcdt(1,end) = dcdt(1,par.Nr+1) + par.A * (par.c0 - c(1,end) ) + par.B * ( par.C - c(1,end) );
dcdt(2,end) = dcdt(2,par.Nr+1) + par.A * (par.c0 - c(2,end) ) + par.B * ( par.C - c(2,end) );
end
Kind regards,
Danny
15 件のコメント
Torsten
2022 年 4 月 19 日
Fix the differential variables to their initial values and give initial guesses for the rest (algebraic variables and derivatives). This should fix your system.
If decic is not able to compute consistent initial values, I could look over your equations if you post them in a comprehensible way.
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Equation Solving についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!