Впредь постараюсь быть внимательнее. Вот исправленные данные для Математики:
Код:
ClearAll[s]; s = NDSolve[{x''[t] - 100*(1 - x[t]^2)*x'[t] + x[t] == 0, x[0] == 2, x'[0] == 0}, x[t], {t, 0, 21}] // RepeatedTiming
{0.0045, {{x[t] -> InterpolatingFunction[{{0., 21.}}, <>][t]}}}
ClearAll[u, s]; u = NDSolve[{x''[t] - 100*(1 - x[t]^2)*x'[t] + x[t] == 0, x[0] == 2, x'[0] == 0}, x[t], {t, 0, 21}]
{{x[t] -> InterpolatingFunction[{{0., 21.}}, <>][t]}}
x[t] /. u /. t -> 20.0
{1.85823}
Все равно Математика в несколько раз быстрее.
-- 20.11.2016, 14:46 --Цитата:
Кстати, пожалуй, интервал времени был маловат, до интересного места Maple не добралась (а Mathematica и не могла). Можно поменять коэффициент
на
, а конечной точкой взять
.
Код:
restart; sol := CodeTools:-Usage(dsolve({((D@@2)(x))(t)-(20*(1-x(t)^2))*(D(x))(t)+x(t) = 0, x(0) = 2, (D(x))(0) = 0}, x(t), numeric, range = 0 .. 41), iterations = 100);
memory used=297.32KiB, alloc change=44.34MiB, cpu time=16.09ms, real time=35.45ms, gc time=0ns
proc(x_rkf45) ... end;
sol(40);
[t = 40., x(t) = HFloat(1.8078111787164883),
d
--- x(t) = HFloat(-0.03981528821224333)]
dt
Код:
ClearAll[s]; s = NDSolve[{x''[t] - 20*(1 - x[t]^2)*x'[t] + x[t] == 0, x[0] == 2, x'[0] == 0}, x[t], {t, 0, 41}] // RepeatedTiming
{0.0084, {{x[t] -> InterpolatingFunction[{{0., 41.}}, <>][t]}}}
ClearAll[u, s]; u = NDSolve[{x''[t] - 20*(1 - x[t]^2)*x'[t] + x[t] == 0, x[0] == 2, x'[0] == 0}, x[t], {t, 0, 41}];
x[t] /. u /. t -> 40.0
{1.80781}