BÀI GIẢNG MATLAB - Trang 75

69

Dưới đây là ba m-file được soạn.

% file_name = ptvp_vantoc.m

function dydt=ptvp_vantoc(t,y)

global m b F0 % khai bao cac bien tong the

dydt=1/m*(F0-b*y);

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

% file_name = Euler_method.m

function [t, z]=Euler_method(ptvp, t0, tf, y0, N)

% Cac bien:

% ptvp - ten file chua ve phai cua phuong trinh vi phan can
giai

% t0 - thoi diem dau

% tf - thoi diem cuoi (t0 < tf)

% y0 - gia tri ham tai thoi diem dau

% N - so doan ma khoang thoi gian (tf-t0) duoc chia ra

global m b F0

% khai bao cac bien tong

h = (tf - t0)/N; % buoc thoi gia

t = t0+[0:N]'*h;

% vector chua cac diem c

z(1,:) = y0;

for k = 1:N

z(k + 1,:) = z(k,:)+h*ptvp(t(k),z(k,:));

end

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

% file_name = tuy_chon__.m

% chuong trinh chinh

global m b F0 % khai bao cac bien tong the

m=1; b=0.2; F0=4; % Gan gia tri cho cac tham so

t0=0; tf=10; N=20; y0=0;

% nghiem gan dung z

[t, z]=Euler_method(@ptvp_vantoc, t0, tf, y0, N);

%nghiem chinh xac

y=F0/b*(1-exp(-b/m.*t));

figure(1)

subplot(211)

plot(t,y,'k',t,z,'-.k','Linewidth',1);

% so sanh ket qua tinh voi nghiem chinh xac

legend('y','z')

ylabel('y, z [m/s]');

subplot(212)

plot(t,abs(z-y),'k','Linewidth',1);

% sai so cua phuong phap

xlabel('t [s]'); ylabel('|y-z|');