You are on page 1of 2

function RK(t, T, m, N, xinit, f)

vector1 = [0 0];
vector2 = [0 0];
n
r
e
%

= 0;
= 0.1;
= 0;
delta = 0.1;

% Pasul
dt = (T - t)/N;
t = t;
x = zeros(1, m);
% x primeste x intial
for j = 1:m
x(j) = xinit(j);
end
fprintf('t = %.2f;', t);
for i = 1:m
fprintf(' x(%d) = %.10f;', i, x(i));
end
fprintf('\n');
k = zeros(4, m);
while t <= T
% while e >=0 && e <= 0.04
for j = 1:m
k(1, j) = dt*f{j}(t, x);
end
for j = 1:m
k(2, j) = dt*f{j}(t + dt/2, x + (1/2)*k(1));
end
for j = 1:m
k(3, j) = dt*f{j}(t + dt/2, x + (1/2)*k(2));
end
for j = 1:m
k(4, j) = dt*f{j}(t + dt, x + k(3));
end
e = (2^r)/(2^r-1)*norm((x+k(3)) - (x + (1/2)*k(1)))
% if ( e > 0.9 * delta)
%
dt = dt * (((0.9 * delta)/e)^(1/(r+1)));
% end
for j = 1:m
x(j) = x(j) + (k(1, j) + 2*k(2, j) + 2*k(3, j) + k(4, j))/6;
end
% if e > 0
% dt = dt * ((delta/e)^(1/r));

% else
% dt = dt - 0.001;
t = t + dt;
n = n + 1;
fprintf('t = %.2f;', t);
for k = 1:m
fprintf(' x(%d) = %.10f;', k, x(k));
end
vector1(n) = x(1);
vector2(n) = x(2);
fprintf('\n');
% plot(n, vector1, 'o',n, vector2, 'x');
end
end
F1 = @(t, u) 3*u(1) + 2*u(2) - (2*t^2 + 1)*exp(2*t);
F2 = @(t, u) 4*u(1) + u(2) + (t^2 + 2*t - 4)*exp(2*t);
t = 0; T = 1; xinit = [0 0]; m = 2; dt = 0.01; N = (T - t)/dt;
RK(t, T, m, N, xinit, {F1 F2});

You might also like