You are on page 1of 1

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

% thoi gian bat dau va thoi gian ket thuc


t0 = 0;
tf = 2;

% Tính toán thoi gian


t = 0:0.25:tf;

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


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

% Giai phuong trình bang phuong pháp Euler bien doi


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
yp = (1 - a*h)*y(k) + h*r;
y(k+1) = (1 - a*h/2)*y(k) + (2*r-a*yp)*h/2;
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 Euler', 'Nghiem noi suy');
title('Giai phuong trình vi phan bang phuong phap Euler bien doi');

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