[differential_equations] bugs and tests fixed
[scilab.git] / scilab / modules / differential_equations / tests / nonreg_tests / bug_13121.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- CLI SHELL MODE -->
9 //
10 // <-- Non-regression test for bug 13121 -->
11 //
12 // <-- Bugzilla URL -->
13 //http://bugzilla.scilab.org/show_bug.cgi?id=13121
14 //
15 // <-- Short Description -->
16 // ode "rk" option crashed Scilab when the user derivative function failed.
17
18 t0=0;
19 x0=0; y0=0;
20
21 // снаряд
22 c = 0.2;
23 s = 0.07;
24 m0 = 15;
25 tT=-1; mT=m0;
26 v0 = 50; teta0 = 0.6;
27 // ракета
28 c = 0.2;
29 s = 0.25;
30 m0 = 500;
31 tT = 1; mT = 250;
32 v0 = 50; teta0 = 0.6;
33 T0=10000;
34
35 r = 1.29; g = 9.8;
36
37 function y=m(t)
38     if t <= tT then
39         y = m0*(1-t/tT) + mT*t/tT;
40     else
41         y = mT;
42     end
43 endfunction
44
45 function y=der_m(t)
46     if t <= tT then
47         y = 1 - (m0 - mT)/tT;
48     else
49         y = 0;
50     end
51 endfunction
52
53 function y=T(t)
54     if t <= tT then
55         y = T0(1-t/tT);
56     else
57         y = 0;
58     end
59 endfunction
60
61 function ydot=right(t,pl)
62     x = pl;
63     x(1) = max(x(1),0);
64     x(2) = max(x(2),0);
65     //if x(2) <= 0 & t > 0 then
66     //    disp(t,"tf");
67     //end;
68     ydot(1) = x(3) * cos(x(4));
69     ydot(2) = x(3) * sin(x(4));
70     ydot(3) = 1/m(t)*(T(t)-0.5*c*r*s*x(3)*x(3)) - der_m(t)/m(t)*x(3) - g*sin(x(4));
71     ydot(4) = -g/x(3)*cos(x(4));
72     //    end
73 endfunction
74
75 t=0:0.01:40;
76
77 refMsg = [msprintf(_("Invalid index."));
78 msprintf(_("%s: An error occured in ''%s'' subroutine.\n"), "ode", "lsrgk")];
79 assert_checkerror("res=ode(""rk"",[x0;y0;v0;teta0;],t0,t,right)", refMsg);