Hi I was trying to resolve a large ODE system with ODE45 ,the calculus didn't stop and it took more than 12hours ,so I changed the ODE to ODE15s ,here is my code and the errors that I've found
...k1 ...k2.k3...
IC = 1e19*ones(1,43); % Test: IC = 1e9*ones(1,43)
%%
F=@(t,n)([k1*n(2)*n(42)+k15*n(5)*n(9)+k16*n(5)*n(26)+k25*n(4)*n(26)+k29*n(4)*n(9)+k33*n(4)*n(11)+k39*n(7)*n(26)+k40*n(7)*n(27)+k43*n(7)*n(9)+k44*n(7)*n(12)+k48*n(9)*n(9)+k59*n(11)*n(42)+k72*n(2)*n(24)+k104*n(3)*n(5)+k105*n(3)*n(8)+k106*n(3)*n(25)+k117*n(18)*n(2)+k119*n(3)*n(43)+k122*n(11)*n(43)+k124*n(13)*n(43)+k130*n(22)*n(43)-k4*n(1)*n(37)-k8*n(1)*n(15)-k9*n(1)*n(26)-k10*n(1)*n(24)-k11*n(1)*n(20)-k12*n(1)*n(35)-k13*n(1)*n(22)-k61*n(2)*n(1)-k64*n(1)*n(13)-k65*n(1)*n(4)-k66*n(1)*n(9)-k67*n(1)*n(5)-k68*n(1)*n(1)-k69*n(1)*n(7)-k73*n(1)*n(27)-k74*n(1)*n(11)-k75*n(1)*n(23)-k76*n(1)*n(21)-k77*n(1)*n(19)-k118*n(1)*n(43)-k132*n(1)*n(42)-k136*n(1)*n(3)-k137*n(1)*n(12)-k138*n(1)*n(14)-k139*n(1)*n(6)-2*k164*n(7)*n(1)*n(1)+k164*n(7)*n(1)^(2)-k163*n(1)*n(15)*n(4)+k163*n(1)*n(15)*n(4)-k165*n(1)*n(32)*n(4)+k165*n(1)*n(32)*n(4);
-k1*n(2)*n(42)-k5*n(2)*n(15)-k6*n(2)*n(30)-k7*n(2)*n(36)-k61*n(2)*n(1)-k62*n(2)*n(7)-k63*n(2)*n(4)-k72*n(2)*n(24)-k117*n(18)*n(2)+k45*n(7)*n(11)+k73*n(1)*n(27)+k74*n(1)*n(11)+k75*n(1)*n(23)+k76*n(1)*n(21)+k77*n(1)*n(19)+k118*n(1)*n(43)+k122*n(11)*n(43);
k32*n(4)*n(12)+k132*n(1)*n(42)-k14*n(3)*n(24)-k104*n(3)*n(5)-k105*n(3)*n(8)-k106*n(3)*n(25)-k119*n(3)*n(43)-k136*n(1)*n(3)-k140*n(3)*n(4)-k141*n(3)*n(15)-k142*n(3)*n(7);
k2*n(5)*n(42)+k8*n(1)*n(15)+k10*n(1)*n(24)+k13*n(1)*n(22)+k14*n(3)*n(24)+k35*n(7)*n(15)+k36*n(7)*n(19)+k37*n(7)*n(24)+k38*n(7)*n(32)+k52*n(15)*n(24)+k53*n(15)*n(20)+k55*n(15)*n(22)+k56*n(15)*n(26)+k78*n(5)*n(9)+k79*n(5)*n(22)+k80*n(5)*n(30)+k81*n(5)*n(15)+k84*n(6)*n(15)+k85*n(6)*n(26)+k104*n(3)*n(5)+2*k107*n(5)*n(6)+k108*n(5)*n(18)+k109*n(6)*n(8)+k120*n(6)*n(43)+2*k126*n(15)*n(43)+k128*n(19)*n(43)+k130*n(22)*n(43)+k131*n(24)*n(43)+k162*n(42)*n(4)*n(15)-k19*n(4)*n(24)-k20*n(4)*n(32)-k21*n(4)*n(30)-k22*n(4)*n(30)-k23*n(4)*n(20)-k24*n(4)*n(36)-k25*n(4)*n(26)-k26*n(4)*n(26)-k27*n(4)*n(13)-k28*n(4)*n(35)-k29*n(4)*n(9)-k30*n(4)*n(21)-k31*n(4)*n(14)-k32*n(4)*n(12)-k33*n(4)*n(11)-k63*n(2)*n(4)-k65*n(1)*n(4)-2*k70*n(4)*n(4)-k82*n(4)*n(21)-k83*n(4)*n(23)-k133*n(4)*n(42)-k140*n(3)*n(4)-k143*n(4)*n(6)-k144*n(4)*n(12)-k161*n(42)*n(4)*n(15)-k162*n(42)*n(4)*n(15)-k163*n(1)*n(15)*n(4)-k165*n(1)*n(32)*n(4);
k5*n(2)*n(15)+k34*n(8)*n(15)+k82*n(4)*n(21)+k83*n(4)*n(23)+k128*n(19)*n(43)-k19*n(4)*n(24)-k20*n(4)*n(32)-k21*n(4)*n(30)-k22*n(4)*n(30)-k23*n(4)*n(20)-k24*n(4)*n(36)-k25*n(4)*n(26)-k26*n(4)*n(26)-k27*n(4)*n(13)-k28*n(4)*n(35)-k29*n(4)*n(9)-k30*n(4)*n(21)-k31*n(4)*n(14)-k32*n(4)*n(12)-k33*n(4)*n(11)-k63*n(2)*n(4)-k65*n(1)*n(4)-2*k70*n(4)*n(4)-k82*n(4)*n(21)-k83*n(4)*n(23)-k133*n(4)*n(42)-k140*n(3)*n(4)-k143*n(4)*n(6)-k144*n(4)*n(12)-k161*n(42)*n(4)*n(15)-k162*n(42)*n(4)*n(15)-k163*n(1)*n(15)*n(4)-k165*n(1)*n(32)*n(4);
k133*n(4)*n(42)+k161*n(42)*n(4)*n(15)-k84*n(6)*n(15)-k85*n(6)*n(26)-k107*n(5)*n(6)-k109*n(6)*n(8)-k120*n(6)*n(43)-k139*n(1)*n(6)-k143*n(4)*n(6)-k145*n(6)*n(24)-k146*n(6)*n(22)-k147*n(6)*n(7);
k3*n(8)*n(42)+k9*n(1)*n(26)+k11*n(1)*n(20)+k18*n(5)*n(20)+k19*n(4)*n(24)+k23*n(4)*n(20)+k26*n(4)*n(26)+k30*n(4)*n(21)+2*k60*n(21)*n(42)+k86*n(8)*n(15)+k87*n(8)*n(9)+k88*n(8)*n(22)+k89*n(8)*n(26)+k90*n(8)*n(24)+k105*n(3)*n(8)+k109*n(6)*n(8)+k110*n(8)*n(18)+k111*n(8)*n(12)+k112*n(8)*n(28)+k113*n(8)*n(14)+2*k129*n(20)*n(43)+k131*n(24)*n(43)+2*k159*n(20)*n(42)-k35*n(7)*n(15)-k36*n(7)*n(19)-k37*n(7)*n(24)-k38*n(7)*n(32)-k39*n(7)*n(26)-k40*n(7)*n(27)-k41*n(7)*n(13)-k42*n(7)*n(14)-k43*n(7)*n(9)-k44*n(7)*n(12)-k45*n(7)*n(11)-k46*n(7)*n(35)-k62*n(2)*n(7)-k69*n(1)*n(7)-k71*n(8)*n(7)-k91*n(7)*n(21)-k142*n(3)*n(7)-k147*n(6)*n(7)-k164*n(7)*n(1)*n(1);
k91*n(7)*n(21)-k3*n(8)*n(42)-k34*n(8)*n(15)-k71*n(8)*n(7)-k86*n(8)*n(15)-k87*n(8)*n(9)-k88*n(8)*n(22)-k89*n(8)*n(26)-k90*n(8)*n(24)-k105*n(3)*n(8)-k109*n(6)*n(8)-k110*n(8)*n(18)-k111*n(8)*n(12)-k112*n(8)*n(28)-k113*n(8)*n(14);
k9*n(1)*n(26)+k12*n(1)*n(35)+k13*n(1)*n(22)+k27*n(4)*n(13)+k41*n(7)*n(13)+k68*n(1)*n(1)+k74*n(1)*n(11)+k94*n(11)*n(24)+k111*n(8)*n(12)+k115*n(12)*n(25)+k121*n(9)*n(43)+k123*n(12)*n(43)+k124*n(13)*n(43)+k136*n(1)*n(3)+k153*n(10)*n(42)+k154*n(10)^(2)+k155*n(10)*n(1)-k15*n(5)*n(9)-k29*n(4)*n(9)-k43*n(7)*n(9)-k47*n(9)*n(15)-2*k48*n(9)*n(9)-k49*n(9)*n(19)-k66*n(1)*n(9)-k78*n(5)*n(9)-k87*n(8)*n(9)-k92*n(9)*n(23)-k93*n(9)*n(27)-k121*n(9)*n(43)-k134*n(9)*n(42)-k148*n(9)*n(12)-k150*n(9)*n(42);
k150*n(9)*n(42)-k153*n(10)*n(42)-k154*n(10)^(2)-k155*n(10)*n(1);
k61*n(2)*n(1)+k78*n(5)*n(9)+k87*n(8)*n(9)+k92*n(9)*n(23)+k93*n(9)*n(27)-k33*n(4)*n(11)-k45*n(7)*n(11)-k50*n(11)*n(15)-k59*n(11)*n(42)-k74*n(1)*n(11)-k94*n(11)*n(24)-k122*n(11)*n(43);
-k32*n(4)*n(12)-k44*n(7)*n(12)-k111*n(8)*n(12)-k115*n(12)*n(25)-k123*n(12)*n(43)-k137*n(1)*n(12)-k144*n(4)*n(12)-k148*n(9)*n(12)-k149*n(12)*n(13)+k31*n(4)*n(14)+k42*n(7)*n(14)+k134*n(9)*n(42);
k48*n(9)*n(9)+k66*n(1)*n(9)+k113*n(8)*n(14)+k114*n(14)*n(25)+k125*n(14)*n(43)+k137*n(1)*n(12)-k27*n(4)*n(13)-k41*n(7)*n(13)-k64*n(1)*n(13)-k124*n(13)*n(43)-k135*n(13)*n(42)-k149*n(12)*n(13);
k135*n(13)*n(42)-k31*n(4)*n(14)-k42*n(7)*n(14)-k113*n(8)*n(14)-k114*n(14)*n(25)-k125*n(14)*n(43)-k138*n(1)*n(14);
k17*n(5)*n(32)+k19*n(4)*n(24)+k20*n(4)*n(32)+k21*n(4)*n(30)+k57*n(24)*n(24)+k70*n(4)*n(4)+k77*n(1)*n(19)+k97*n(19)*n(32)+k98*n(19)*n(24)+k108*n(5)*n(18)+k110*n(8)*n(18)+k116*n(18)*n(25)+k117*n(18)*n(2)+k127*n(18)*n(43)+k143*n(4)*n(6)+2*k156*n(18)*n(15)+2*k157*n(18)*n(16)+2*k158*n(18)*n(17)+k161*n(42)*n(4)*n(15)-k5*n(2)*n(15)-k8*n(1)*n(15)-k34*n(8)*n(15)-k35*n(7)*n(15)-k47*n(9)*n(15)-k50*n(11)*n(15)-k51*n(15)*n(37)-k52*n(15)*n(24)-k53*n(15)*n(20)-k54*n(15)*n(27)-k55*n(15)*n(22)-k56*n(15)*n(26)-k81*n(5)*n(15)-k84*n(6)*n(15)-k86*n(8)*n(15)-k95*n(15)*n(21)-k96*n(15)*n(23)-k126*n(15)*n(43)-k141*n(3)*n(15)-k151*n(15)*n(42)-k152*n(15)*n(42)-k156*n(18)*n(15)-k161*n(42)*n(4)*n(15)-k162*n(42)*n(4)*n(15)-k163*n(1)*n(15)*n(4);
k151*n(42)*n(15)-k157*n(16)*n(18);
k152*n(42)*n(15)-k158*n(17)*n(18);
k84*n(6)*n(15)+k162*n(42)*n(4)*n(15)-k108*n(5)*n(18)-k110*n(8)*n(18)-k116*n(18)*n(25)-k117*n(18)*n(2)-k127*n(18)*n(43)-k156*n(18)*n(15)-k157*n(18)*n(16)-k158*n(18)*n(17);
k81*n(5)*n(15)+k86*n(8)*n(15)+k95*n(15)*n(21)+k96*n(15)*n(23)-k36*n(7)*n(19)-k49*n(9)*n(19)-k77*n(1)*n(19)-k97*n(19)*n(32)-k98*n(19)*n(24)-k128*n(19)*n(43);
k21*n(4)*n(30)+k37*n(7)*n(24)+k39*n(7)*n(26)+k57*n(24)*n(24)+k76*n(1)*n(21)+k82*n(4)*n(21)+k91*n(7)*n(21)+k95*n(15)*n(21)+k99*n(21)*n(26)+k100*n(21)*n(22)-k11*n(1)*n(20)-k18*n(5)*n(20)-k23*n(4)*n(20)-k53*n(15)*n(20)-k129*n(20)*n(43)-k159*n(20)*n(42)-k160*n(20)*n(42);
k40*n(7)*n(27)+k71*n(8)*n(7)+k160*n(20)*n(42)-k30*n(4)*n(21)-k60*n(21)*n(42)-k76*n(1)*n(21)-k82*n(4)*n(21)-k91*n(7)*n(21)-k95*n(15)*n(21)-k99*n(21)*n(26)-k100*n(21)*n(22);
k4*n(1)*n(37)+k5*n(2)*n(15)+k8*n(1)*n(15)+k24*n(4)*n(36)+k26*n(4)*n(26)+k27*n(4)*n(13)+k28*n(4)*n(35)+k29*n(4)*n(9)+k31*n(4)*n(14)+k32*n(4)*n(12)+2*k47*n(9)*n(15)+k49*n(9)*n(19)+k50*n(11)*n(15)+k54*n(15)*n(27)+k58*n(24)*n(37)+k65*n(1)*n(4)+k75*n(1)*n(23)+k83*n(4)*n(23)+k92*n(9)*n(23)+k96*n(15)*n(23)+k102*n(24)*n(23)+k139*n(1)*n(6)+k140*n(3)*n(4)-k13*n(1)*n(22)-k55*n(15)*n(22)-k79*n(5)*n(22)-k88*n(8)*n(22)-k100*n(21)*n(22)-k101*n(22)*n(27)-k130*n(22)*n(43)-k146*n(6)*n(22);
k7*n(2)*n(36)+k15*n(5)*n(9)+k33*n(4)*n(11)+k49*n(9)*n(19)+k50*n(11)*n(15)+k63*n(2)*n(4)+k67*n(1)*n(5)+k79*n(5)*n(22)+k88*n(8)*n(22)+k100*n(21)*n(22)+k101*n(22)*n(27)-k75*n(1)*n(23)-k83*n(4)*n(23)-k92*n(9)*n(23)-k96*n(15)*n(23)-k102*n(24)*n(23);
k20*n(4)*n(32)+k22*2*n(4)*n(30)+k23*n(4)*n(20)+k24*n(4)*n(36)+k25*n(4)*n(26)+k34*n(8)*n(15)+k35*n(7)*n(15)+k51*n(15)*n(37)+k106*n(3)*n(25)+k114*n(14)*n(25)+k115*n(12)*n(25)+k116*n(18)*n(25)+k147*n(6)*n(7)-k10*n(1)*n(24)-k14*n(3)*n(24)-k19*n(4)*n(24)-k37*n(7)*n(24)-k52*n(15)*n(24)-k57*2*n(24)*n(24)-k58*n(24)*n(37)-k72*n(2)*n(24)-k90*n(8)*n(24)-k94*n(11)*n(24)-k98*n(19)*n(24)-k102*n(24)*n(23)-k103*n(24)*n(27)-k131*n(24)*n(43)-k145*n(6)*n(24);
k6*n(2)*n(30)+k16*n(5)*n(26)+k17*n(5)*n(32)+k18*n(5)*n(20)+k30*n(4)*n(21)+k36*n(7)*n(19)+k54*n(15)*n(27)+k72*n(2)*n(24)+k90*n(8)*n(24)+k94*n(11)*n(24)+k98*n(19)*n(24)+k102*n(24)*n(23)+k103*n(24)*n(27)-k106*n(3)*n(25)-k114*n(14)*n(25)-k115*n(12)*n(25)-k116*n(18)*n(25);
k4*n(1)*n(37)+k6*n(2)*n(30)+k7*n(2)*n(36)+k10*n(1)*n(24)+k11*n(1)*n(20)+k12*n(1)*n(35)+k28*n(4)*n(35)+k41*n(7)*n(13)+k42*n(7)*n(14)+k43*n(7)*n(9)+k45*n(7)*n(11)+k46*2*n(7)*n(35)+k69*n(1)*n(7)+k73*n(1)*n(27)+k93*n(9)*n(27)+k101*n(22)*n(27)+k103*n(24)*n(27)+k112*n(8)*n(28)+k142*n(3)*n(7)+k164*n(7)*n(1)*n(1)-k9*n(1)*n(26)-k16*n(5)*n(26)-k25*n(4)*n(26)-k26*n(4)*n(26)-k39*n(7)*n(26)-k56*n(15)*n(26)-k85*n(6)*n(26)-k89*n(8)*n(26)-k99*n(21)*n(26);
k62*n(2)*n(7)+k89*n(8)*n(26)+k99*n(21)*n(26)-k40*n(7)*n(27)-k54*n(15)*n(27)-k73*n(1)*n(27)-k93*n(9)*n(27)-k101*n(22)*n(27)-k103*n(24)*n(27);
k14*n(3)*n(24)+k44*n(7)*n(12)+k85*n(6)*n(26)-k112*n(8)*n(28);
k163*n(1)*n(15)*n(4);
k38*n(7)*n(32)+k53*n(15)*n(20)+k58*n(24)*n(37)-k6*n(2)*n(30)-k21*n(4)*n(30)-k22*n(4)*n(30)-k80*n(5)*n(30);
k80*n(5)*n(30);
k52*n(15)*n(24)+k145*n(6)*n(24)-k17*n(5)*n(32)-k20*n(4)*n(32)-k38*n(7)*n(32)-k97*n(19)*n(32)-k165*n(1)*n(32)*n(4);
k97*n(19)*n(32);
k51*n(15)*n(37)+k55*n(15)*n(22)+k141*n(3)*n(15)+k146*n(6)*n(22);
-k12*n(1)*n(35)-k28*n(4)*n(35)-k46*n(7)*n(35);
-k7*n(2)*n(36)-k24*n(4)*n(36);
-k4*n(1)*n(37)-k51*n(15)*n(37)-k58*n(24)*n(37)+k56*n(15)*n(26);
k165*n(1)*n(32)*n(4);
k144*n(4)*n(12);
k64*n(1)*n(13)+k138*n(1)*n(14)+k148*n(9)*n(12);
k149*n(12)*n(13);
k118*n(1)*n(43)+k119*n(3)*n(43)+k120*n(6)*n(43)+k121*n(12)*n(43)+k123*n(12)*n(43)+k125*n(14)*n(43)+k127*n(18)*n(43)+k136*n(1)*n(3)+k137*n(1)*n(12)+k138*n(1)*n(14)+k139*n(1)*n(6)+k140*n(3)*n(4)+k141*n(3)*n(15)+k142*n(3)*n(7)+k143*n(4)*n(6)+k144*n(4)*n(12)+k145*n(6)*n(24)+k146*n(6)*n(22)+k147*n(6)*n(7)+k148*n(9)*n(12)+k149*n(12)*n(13)+k150*n(9)*n(42)+k151*n(15)*n(42)+k152*n(15)*n(42)+k153*n(10)*n(42)+k156*n(18)*n(15)+k157*n(18)*n(16)+k158*n(18)*n(17)+k159*n(20)*n(42)+2*k160*n(20)*n(42)-k1*n(2)*n(42)-k2*n(5)*n(42)-k3*n(8)*n(42)-k59*n(11)*n(42)-k60*n(21)*n(42)-k132*n(1)*n(42)-k133*n(4)*n(42)-k134*n(9)*n(42)-k135*n(13)*n(42)-k150*n(9)*n(42)-k151*n(15)*n(42)-k152*n(15)*n(42)-k153*n(10)*n(42)-k159*n(20)*n(42)-k160*n(20)*n(42)-k161*n(42)*n(4)*n(15)-k162*n(42)*n(4)*n(15);
-k118*n(1)*n(43)-k119*n(3)*n(43)-k120*n(6)*n(43)-k121*n(9)*n(43)-k122*n(11)*n(43)-k123*n(12)*n(43)-k124*n(13)*n(43)-k125*n(14)*n(43)-k126*n(15)*n(43)-k127*n(18)*n(43)-k128*n(19)*n(43)-k129*n(20)*n(43)-k130*n(22)*n(43)-k131*n(24)*n(43)+k1*n(2)*n(42)+k2*n(5)*n(42)+k3*n(8)*n(42)+k61*n(2)*n(1)+k62*n(2)*n(7)+k63*n(2)*n(4)+k64*n(1)*n(13)+k65*n(1)*n(4)+k66*n(1)*n(9)+k67*n(1)*n(5)+k68*n(1)*n(1)+k69*n(1)*n(7)+k70*n(4)*n(4)+k71*n(8)*n(7)+k132*n(1)*n(42)+k133*n(4)*n(42)+k134*n(9)*n(42)+k135*n(13)*n(42)]);
[t,n]= ode15s(F,[0:5e-12:1e-7],IC);
plot(t,n)
[IDA ERROR] IDASolve
At t = 0 and h = 4.76837e-021, the corrector convergence failed repeatedly
or with |h| = hmin.
error: IDASolve failed
error: called from
ode15s at line 315 column 22
conc at line 244 column 6

 采纳的回答

Hi,
Don't specify the solver solution step here that enhances the solver's solution algorithm to adjust the step size. It is very important.
Here is the solution of your large ODE exercise:
...
OPTs = odeset('reltol', 1e-12, 'abstol', 1e-16, 'normcontrol', 'on', 'refine', 5); % ODE solver settings
[Time, SOL]=ode15s(F,[0, 1e-7],IC, OPTs); % NB: don't specify the step size that enhances the solver tools
loglog(Time,SOL), shg % log scale used to better visualize the computed solutions
Good luck.

7 个评论

Thank you so much sir .for all your help .
You are most welcome! It is a pleasure to help!
Hi sir.I'm asking for your help again. I would like to know how can I fix those ODESET parameters to get a calculus that won't take a lot of time. For exemple my IC is between 10**15 and 10**19 and I can choose an interval of time from (0 to 10**(-3)s) .how can I adjust my ODESeT to reduce my calculus time without changing my system. Thank you.
You can change from:
OPTs = odeset('reltol', 1e-12, 'abstol', 1e-16, 'normcontrol', 'on', 'refine', 5); % ODE solver settings
to this one:
OPTs = odeset('reltol', 1e-6, 'abstol', 1e-8, 'normcontrol', 'on', 'refine', 5); % ODE solver settings
or to this one:
OPTs = odeset('reltol', 1e-3, 'abstol', 1e-5, 'normcontrol', 'on', 'refine', 5); % ODE solver settings
Thank you so much sir. Just to understand because I'm really new to this .by improving the values of a abstol and reltol I will get results in shorter time .So it's actually a game of trying values . So is there any criteria that can help for choosing them more easily ???
Another approach here is chnaging the solver type, try ode45, ode23tb, ode113 and see which one gives the solution in the shortest time.
I've got this:
warning: Solving was not successful. The iterative integration loop exited
at time t = 0.000000 before the endpoint at tend = 0.001000 was reached. Thi
s may happen if the stepsize becomes too small. Try to reduce the value of '
InitialStep' and/or 'MaxStep' with the command 'odeset'.

请先登录,再进行评论。

更多回答(0 个)

类别

标签

Community Treasure Hunt

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

Start Hunting!

Translated by