You are on page 1of 1

function [] = bai26(a,r,y0,h)

%thoi gian bat dau va ket thuc


t0 = 0;
tf = 2;

% Tính toán thoi gian


t = 0:0.01:tf;

% Tính toán nghiem giai tích


yt = 1 - exp(-a*t);

% Giai phuong trình bang phuong pháp RK4


klast = (tf-t0)/h;
% Su dung vector hóa
y = zeros(1, klast+1);
y(1) = y0;
tvec = zeros(1, klast+1);
tvec(1) = t0;

for k = 1:klast
k1 = h * (r - a * y(k));
k2 = h * (r - a * (y(k) + 0.5 * k1));
k3 = h * (r - a * (y(k) + 0.5 * k2));
k4 = h * (r - a * (y(k) + k3));
y(k+1) = y(k) + (k1 + 2*k2 + 2*k3 + k4) / 6;
tvec(k+1) = tvec(k) + h;
end

% Noi suy tìm yt tuong ung voi t


yt_interp = interp1(t,yt,tvec);

% Tính toán sai so


E = abs(y - yt_interp); % sai so tuyet doi
varepsilon = E./yt_interp; % sai so tuong doi

% Hien thi ket qua


plot(t, yt, 'k');
hold on;
plot(tvec, y, 'b');
plot(tvec, yt_interp, 'r');
legend('Nghiem giai tich', 'Nghiem RK4', 'Nghiem noi suy');
title('Giai phuong trình vi phan bang phuong phap RK4');

fprintf('Sai so tuyet doi tai t = 1: %f\n', E(tvec == 1));


fprintf('Sai so tuyet doi tai t = 2: %f\n', E(end));
fprintf('Sai so tuong doi tai t = 1: %f\n', varepsilon(tvec == 1));
fprintf('Sai so tuong doi tai t = 2: %f\n', varepsilon(end));
end

You might also like