summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasil Zlatanov <v@skozl.com>2017-02-17 14:43:22 +0000
committerVasil Zlatanov <v@skozl.com>2017-02-17 14:43:22 +0000
commitd4660bb996f1177593d90ac4c518c436fe621156 (patch)
tree322d237a81de23a9979aa010a9da7c026cc06c0f
downloade2-matlab-d4660bb996f1177593d90ac4c518c436fe621156.tar.gz
e2-matlab-d4660bb996f1177593d90ac4c518c436fe621156.tar.bz2
e2-matlab-d4660bb996f1177593d90ac4c518c436fe621156.zip
general approximation techniques developed from exercise sheets
-rw-r--r--general/euler.m25
-rw-r--r--general/heun.m27
-rw-r--r--general/midpoint.m27
-rw-r--r--general/ralston.m27
4 files changed, 106 insertions, 0 deletions
diff --git a/general/euler.m b/general/euler.m
new file mode 100644
index 0000000..72360b8
--- /dev/null
+++ b/general/euler.m
@@ -0,0 +1,25 @@
+function [xa, ya] = euler(derivative, x_initial, y_initial, step, x_final)
+ % Define intial values for x and y
+ %x_initial=0;
+ %y_initial=2;
+
+ %% Set the step size between calculations
+ %step=0.0003;
+
+ %% Define an endpoint
+ %x_final=1;
+
+ %% Define a dy/dx
+ %derivative=@(x,y) x+y;
+
+ % Determine how many times to step forward
+ N=round((x_final-x_initial)/step); % use this determine size
+
+ % Define and initialise arrays to contain coordinates
+ ya=zeros(1,N); xa=zeros(1,N);
+ xa(1)=x_initial; ya(1)=y_initial;
+
+ for j=1:N-1 % loop for N-1 steps
+ ya(j+1)=ya(j) + step*feval(derivative, xa(j),ya(j)); % next value
+ xa(j+1)=xa(j)+step; % increase x by stepsize
+ end
diff --git a/general/heun.m b/general/heun.m
new file mode 100644
index 0000000..e3d91b0
--- /dev/null
+++ b/general/heun.m
@@ -0,0 +1,27 @@
+function [xa, ya] = heun(derivative, x_initial, y_initial, step, x_final)
+ % Define intial values for x and y
+ %x_initial=0;
+ %y_initial=2;
+
+ %% Set the step size between calculations
+ %step=0.0003;
+
+ %% Define an endpoint
+ %x_final=1;
+
+ %% Define a dy/dx
+ %derivative=@(x,y) x+y;
+
+ % Determine how many times to step forward
+ N=round((x_final-x_initial)/step); % use this determine size
+
+ % Define and initialise arrays to contain coordinates
+ ya=zeros(1,N); xa=zeros(1,N);
+ xa(1)=x_initial; ya(1)=y_initial;
+
+ % da is the value of the derivative at xa, ya
+ for j=1:N-1 % loop for N-1 steps
+ da = feval(derivative, xa(j), ya(j));
+ ya(j+1)=ya(j) + step/2*(da + feval(derivative, xa(j)+step, ya(j)+step*da)) ;
+ xa(j+1)=xa(j)+step; % increase x by stepsize
+ end
diff --git a/general/midpoint.m b/general/midpoint.m
new file mode 100644
index 0000000..cecef44
--- /dev/null
+++ b/general/midpoint.m
@@ -0,0 +1,27 @@
+function [xa, ya] = midpoint(derivative, x_initial, y_initial, step, x_final)
+ % Define intial values for x and y
+ %x_initial=0;
+ %y_initial=2;
+
+ %% Set the step size between calculations
+ %step=0.0003;
+
+ %% Define an endpoint
+ %x_final=1;
+
+ %% Define a dy/dx
+ %derivative=@(x,y) x+y;
+
+ % Determine how many times to step forward
+ N=round((x_final-x_initial)/step); % use this determine size
+
+ % Define and initialise arrays to contain coordinates
+ ya=zeros(1,N); xa=zeros(1,N);
+ xa(1)=x_initial; ya(1)=y_initial;
+
+ % da is the value of the derivative at xa, ya
+ for j=1:N-1 % loop for N-1 steps
+ da = feval(derivative, xa(j), ya(j));
+ ya(j+1)=ya(j) + step*feval(derivative, xa(j)+step/2, ya(j)+step/2*da);
+ xa(j+1)=xa(j)+step; % increase x by stepsize
+ end
diff --git a/general/ralston.m b/general/ralston.m
new file mode 100644
index 0000000..2d18571
--- /dev/null
+++ b/general/ralston.m
@@ -0,0 +1,27 @@
+function [xa, ya] = ralston(derivative, x_initial, y_initial, step, x_final)
+ % Define intial values for x and y
+ %x_initial=0;
+ %y_initial=2;
+
+ %% Set the step size between calculations
+ %step=0.0003;
+
+ %% Define an endpoint
+ %x_final=1;
+
+ %% Define a dy/dx
+ %derivative=@(x,y) x+y;
+
+ % Determine how many times to step forward
+ N=round((x_final-x_initial)/step); % use this determine size
+
+ % Define and initialise arrays to contain coordinates
+ ya=zeros(1,N); xa=zeros(1,N);
+ xa(1)=x_initial; ya(1)=y_initial;
+
+ % da is the value of the derivative at xa, ya
+ for j=1:N-1 % loop for N-1 steps
+ da = feval(derivative, xa(j), ya(j));
+ ya(j+1)=ya(j) + step/4*(da + 3*feval(derivative, xa(j)+2/3*step, ya(j)+2/3*step*da)) ;
+ xa(j+1)=xa(j)+step; % increase x by stepsize
+ end