Skip to content

Commit d091291

Browse files
committed
updated solve_ivp
1 parent ad3a6ac commit d091291

File tree

1 file changed

+33
-30
lines changed

1 file changed

+33
-30
lines changed

toolbox/solve_ivp.m

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
% [t,y] = solve_ivp(__,method,wb)
99
%
1010
% Copyright © 2021 Tamas Kis
11-
% Last Update: 2022-06-04
11+
% Last Update: 2022-06-05
1212
% Website: https://tamaskis.github.io
1313
% Contact: tamas.a.kis@outlook.com
1414
%
@@ -131,61 +131,61 @@
131131

132132
% sets propagation function for single-step methods
133133
if strcmpi(method,'Euler')
134-
propagate = @(t,y) RK1_euler(f,t,y,h);
134+
g = @(t,y) RK1_euler(f,t,y,h);
135135
elseif strcmpi(method,'RK2')
136-
propagate = @(t,y) RK2(f,t,y,h);
136+
g = @(t,y) RK2(f,t,y,h);
137137
elseif strcmpi(method,'RK2 Heun')
138-
propagate = @(t,y) RK2_heun(f,t,y,h);
138+
g = @(t,y) RK2_heun(f,t,y,h);
139139
elseif strcmpi(method,'RK2 Ralston')
140-
propagate = @(t,y) RK2_ralston(f,t,y,h);
140+
g = @(t,y) RK2_ralston(f,t,y,h);
141141
elseif strcmpi(method,'RK3')
142-
propagate = @(t,y) RK3(f,t,y,h);
142+
g = @(t,y) RK3(f,t,y,h);
143143
elseif strcmpi(method,'RK3 Heun')
144-
propagate = @(t,y) RK3_heun(f,t,y,h);
144+
g = @(t,y) RK3_heun(f,t,y,h);
145145
elseif strcmpi(method,'RK3 Ralston')
146-
propagate = @(t,y) RK3_ralston(f,t,y,h);
146+
g = @(t,y) RK3_ralston(f,t,y,h);
147147
elseif strcmpi(method,'SSPRK3')
148-
propagate = @(t,y) SSPRK3(f,t,y,h);
148+
g = @(t,y) SSPRK3(f,t,y,h);
149149
elseif strcmpi(method,'RK4')
150-
propagate = @(t,y) RK4(f,t,y,h);
150+
g = @(t,y) RK4(f,t,y,h);
151151
elseif strcmpi(method,'RK4 3/8')
152-
propagate = @(t,y) RK4_38(f,t,y,h);
152+
g = @(t,y) RK4_38(f,t,y,h);
153153
elseif strcmpi(method,'RK4 Ralston')
154-
propagate = @(t,y) RK4_ralston(f,t,y,h);
154+
g = @(t,y) RK4_ralston(f,t,y,h);
155155
end
156156

157157
% sets propagation function for multi-step predictor methods
158158
if strcmpi(method,'AB2')
159-
propagate = @(t,F) AB2(f,t,F,h);
159+
g = @(t,F) AB2(f,t,F,h);
160160
elseif strcmpi(method,'AB3')
161-
propagate = @(t,F) AB3(f,t,F,h);
161+
g = @(t,F) AB3(f,t,F,h);
162162
elseif strcmpi(method,'AB4')
163-
propagate = @(t,F) AB4(f,t,F,h);
163+
g = @(t,F) AB4(f,t,F,h);
164164
elseif strcmpi(method,'AB5')
165-
propagate = @(t,F) AB5(f,t,F,h);
165+
g = @(t,F) AB5(f,t,F,h);
166166
elseif strcmpi(method,'AB6')
167-
propagate = @(t,F) AB6(f,t,F,h);
167+
g = @(t,F) AB6(f,t,F,h);
168168
elseif strcmpi(method,'AB7')
169-
propagate = @(t,F) AB7(f,t,F,h);
169+
g = @(t,F) AB7(f,t,F,h);
170170
elseif strcmpi(method,'AB8')
171-
propagate = @(t,F) AB8(f,t,F,h);
171+
g = @(t,F) AB8(f,t,F,h);
172172
end
173173

174174
% sets propagation function for multi-step predictor-corrector methods
175175
if strcmpi(method,'ABM2')
176-
propagate = @(t,F) ABM2(f,t,F,h);
176+
g = @(t,F) ABM2(f,t,F,h);
177177
elseif strcmpi(method,'ABM3')
178-
propagate = @(t,F) ABM3(f,t,F,h);
178+
g = @(t,F) ABM3(f,t,F,h);
179179
elseif strcmpi(method,'ABM4')
180-
propagate = @(t,F) ABM4(f,t,F,h);
180+
g = @(t,F) ABM4(f,t,F,h);
181181
elseif strcmpi(method,'ABM5')
182-
propagate = @(t,F) ABM5(f,t,F,h);
182+
g = @(t,F) ABM5(f,t,F,h);
183183
elseif strcmpi(method,'ABM6')
184-
propagate = @(t,F) ABM6(f,t,F,h);
184+
g = @(t,F) ABM6(f,t,F,h);
185185
elseif strcmpi(method,'ABM7')
186-
propagate = @(t,F) ABM7(f,t,F,h);
186+
g = @(t,F) ABM7(f,t,F,h);
187187
elseif strcmpi(method,'ABM8')
188-
propagate = @(t,F) ABM8(f,t,F,h);
188+
g = @(t,F) ABM8(f,t,F,h);
189189
end
190190

191191
% determines if the method is a single-step method
@@ -204,9 +204,12 @@
204204
% Preallocates arrays and stores initial conditions.
205205
% --------------------------------------------------
206206

207+
% state dimension
208+
p = length(y0);
209+
207210
% preallocates time vector and solution matrix
208211
t = zeros(10000,1);
209-
y = zeros(length(y0),length(t));
212+
y = zeros(p,length(t));
210213

211214
% stores initial conditions
212215
t(1) = t0;
@@ -228,7 +231,7 @@
228231
end
229232

230233
% state vector propagated to next sample time
231-
y(:,n+1) = propagate(t(n),y(:,n));
234+
y(:,n+1) = g(t(n),y(:,n));
232235

233236
% increments time and loop index
234237
t(n+1) = t(n)+h;
@@ -258,7 +261,7 @@
258261
% initializes F matrix (stores function evaluations for first m
259262
% sample times in first m columns, state vector at (m+1)th sample
260263
% time in (m+1)th column)
261-
F = zeros(length(y0),m+1);
264+
F = zeros(p,m+1);
262265
for n = 1:m
263266
F(:,n) = f(t(n),y(:,n));
264267
end
@@ -274,7 +277,7 @@
274277
end
275278

276279
% updates F matrix
277-
F = propagate(t(n),F);
280+
F = g(t(n),F);
278281

279282
% extracts/stores state vector propagated to next sample time
280283
y(:,n+1) = F(:,m+1);

0 commit comments

Comments
 (0)