Mercurial > repos > public > sbplib
annotate +time/+rk/rungekuttaDiscreteData.m @ 933:34b3d092a4d0 feature/timesteppers
Add methods timePoints and quadWeights to Rungekutta class.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Mon, 03 Dec 2018 16:49:43 -0800 |
parents | 34d882bffae4 |
children |
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 |