# HG changeset patch # User Carlo de Falco # Date 1450202456 -3600 # Node ID ebe061d6feeac61cfd95adfefab5982708f6270f # Parent 3d3da166dac57e220a74a5fe895f8ade470bd4c3 apply vectorization in dense output interpolators * scripts/ode/private/runge_kutta_interpolate.m: vectorialize computations. diff -r 3d3da166dac5 -r ebe061d6feea scripts/ode/private/runge_kutta_interpolate.m --- a/scripts/ode/private/runge_kutta_interpolate.m Tue Dec 15 18:50:58 2015 +0100 +++ b/scripts/ode/private/runge_kutta_interpolate.m Tue Dec 15 19:00:56 2015 +0100 @@ -108,7 +108,6 @@ ## H3 = - 5*s.^2 + 14*s.^3 - 8*s.^4; ## H4 = s.^2 - 3*s.^3 + 2*s.^4; - x_out = zeros (rows (x), length (t_out)); x_out = (1 - 11*s.^2 + 18*s.^3 - 8*s.^4) .* x(:,1) + ... ( s - 4*s.^2 + 5*s.^3 - 2*s.^4) .* (dt * der(:,1)) + ... ( 16*s.^2 - 32*s.^3 + 16*s.^4) .* u_half + ... @@ -121,12 +120,11 @@ ## solution at the time t_out using 3rd order hermite interpolation. function x_out = hermite_cubic_interpolation (t, x, der, t_out) - s = (t_out - t(1)) / (t(2) - t(1)); - x_out = zeros (size (x, 1), length (t_out)); - - for ii = 1:size (x, 1) - x_out(ii,:) = (1+2*s).*(1-s).^2*x(ii,1) + s.*(1-s).^2*(t(2)-t(1))*der(ii,1) ... - + (3-2*s).*s.^2*x(ii,2) + (s-1).*s.^2*(t(2)-t(1))*der(ii,2); - endfor + dt = (t(2) - t(1)); + s = (t_out - t(1)) / dt; + x_out = ((1 + 2*s) .* (1-s).^2) .* x(:,1) + ... + (s .* (1-s).^2 * dt ) .* der(:,1) + ... + ((3-2*s) .* s.^2 ) .* x(:,2) + ... + ((s-1) .* s.^2 * dt ) .* der(:,2); endfunction