annotate +time/+rk/rungekuttaDiscreteData.m @ 989:e41c93d7ab08 feature/timesteppers

Merge with default
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 09 Jan 2019 08:56:42 +0100
parents 34d882bffae4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
930
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
1 % Takes one time step of size dt using the rungekutta method
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
2 % starting from @arg v.
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
3 %
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
4 % discreteData contains (a part of) the forcing function, already
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
5 % evaluated on the space-time grid.
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
6 %
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
7 % ODE: dv/dt = F(v,t) + discreteData(:, nt), where nt denotes the current time-point.
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
8 %
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
9 % coeffs is a struct holding the RK coefficients
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
10 % for the specific method.
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
11 % Also returns the stage approximations (V) and stage rates (K).
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
12 function [v, V, K] = rungekuttaDiscreteData(v, t , dt, F, coeffs, discreteData, n)
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
13 % Compute the intermediate stages k
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
14 K = zeros(length(v), coeffs.s);
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
15 V = zeros(length(v), coeffs.s);
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
16 for i = 1:coeffs.s
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
17 u = v;
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
18 for j = 1:i-1
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
19 u = u + dt*coeffs.a(i,j)*K(:,j);
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
20 end
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
21 V(:,i) = u;
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
22 K(:,i) = F(u,t+coeffs.c(i)*dt);
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
23 K(:,i) = K(:,i) + discreteData(:, n*coeffs.s + i);
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
24 end
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
25 % Compute the updated solution as a linear combination
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
26 % of the intermediate stages.
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
27 for i = 1:coeffs.s
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
28 v = v + dt*coeffs.b(i)*k(:,i);
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
29 end
34d882bffae4 Add stepping function for RK with discrete data.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
30 end