Phụ lục MỘTSỐPHƯƠNGPHÁPGIẢICÁCPHƯƠNGTRÌNHVIPHÂNTRÊNMÁYTÍNHĐIỆNTỬ Ngày nay có rất nhiều phần mềm ứng dụng cho phép nghiên cứu thuận lợi các hệ thống động học, thí dụ Control system toolbox, Simulink. Tuy nhiên, việc áp dụng chúng trong mộtsố trường hợp cũng gặp khó khăn. Control system toolbox chỉ được áp dụng cho các hệ tuyến tính. Trong Simulink, nhiều khâu phi tuyến trong thực tế chưa có sẵn trong thư viện. Khi sử dụng Simulink để mô phỏng các hệ thống tự dẫn KCB, ta không biết chính xác thời gian tự dẫn, vì vậy, không thể đặt thời gian mô phỏng chính xác. Ta sẽ gặp nhiều khó khăn khi tối ưu tham số của hệ thống điều khiển tự động trong Simulink. Vì vậy, trong nhiều trường hợp, việc chúng ta tự giải hệ phươngtrìnhviphân mô tả động học của hệ thống là thuận lợi hơn cả. Để giảicácphươngtrìnhviphântrênmáytínhđiện tử, ta cần viết chúng dưới dạng hệ cácphươngtrìnhviphân bậc nhất (dạng Kôsi), thí dụ )( ,, tx yfy = . Sau đó ta có thể sử dụng một trong cácphươngpháp sau để giải chúng trênmáytínhđiện tử. 1. PHƯƠNGPHÁP ƠLE Đây là một trong cácphươngpháp đơn giản nhất, theo đó lời giải của phươngtrình )( ,, tx yfy = tại bước tích phân thứ i được xác định như sau y(i) = y(i-1) + f[y(i-1), x(i-1)]T k , trong đó T k -bước tích phân. Để tính hàm giá trị của y tại bước tích phân đầu tiên ta sử dụng điều kiện ban đầu y(t 0 )=y 0 . Phươngpháp này có độ chính xác lớn nhất khi được sử dụng để để dựng đặc tính quá độ của khâu tích phân. Phươngpháp này có độ chính xác thấp hơn so với cácphươngpháp khác khi được sử dụng để mô phỏng các khâu động học khác có quán tính. 2. PHƯƠNGPHÁP TASTIN HAY PHƯƠNGPHÁP “HÌNH THANG” Đây là phươngpháp có độ chính xác rất cao. Theo phươngpháp Tastin, lời giải của phươngtrình )( ,, tx yfy = tại bước tích phân thứ i được xác định như sau y(i) = y(i-1) + (T k /2){3f[y(i-1), x(i-1)]- f[y(i-2), x(i-2)]}. Thí dụ 1: giả sử hàm truyền của phần tuyến tính của hệ truyền động có dạng 1 )()( )( )( 1 + == p T p K p x py p K . Hàm truyền trên tương ứng với hệ hai phươngtrình bậc nhất +−= = , 1 ; )()()( )()( 22 21 tx T K t y T t y t y t y trong đó các biến số y 1 (t), y 2 (t) có nghĩa như sau: y 1 (t)=y(t)-toạ độ ra; )()( 12 t y t y = ; x(t)-toạ độ vào. Khi sử dụng phươngpháp Ơle, ta nhận được lời giải của hệ hai phươngtrìnhtrên ở bước tích phân thứ i như sau y 1 (i) = y 1 (i-1) + T k y 2 (i-1); y 2 (i) = (1-T k /T) y 2 (i-1) + (T k /T)Kx(i-1). Khi sử dụng phươngpháp Tastin, ta nhận được lời giải của hệ hai phươngtrìnhtrên ở bước tích phân thứ i như sau y 1 (i) = y 1 (i-1) + (T k /2)[3y 2 (i-1) - y 2 (i-2)]; y 2 (i) = y 2 (i-1) + (T k /2T)[y 2 (i-2) + 3Kx(i-1) - 3y 2 (i-1) - Kx(i-2)]. 3. PHƯƠNGPHÁP RUNGE - KUTTA Đây là phươngpháp có độ chính xác rất cao. Theo đó lời giải của hệ phươngtrình = = ,,, ;,, )( )( 2122 2111 t yyfy t yyfy tại bước tích phân thứ i được xác định như sau ++++−= ++++−= , 622 1 ; 622 1 /)()()( /)()()( 42322212 22 41312111 11 kkkki y i y kkkki y i y trong đó k 11 = T k f 1 (y 1 (i-1), y 2 (i-1)); k 12 = T k f 2 (y 1 (i-1), y 2 (i-1)); k 21 = T k f 1 (y 1 (i-1) + k 11 /2, y 2 (i-1) + k 12 /2); k 22 = T k f 2 (y 1 (i-1) + k 11 /2, y 2 (i-1) + k 12 /2); k 31 = T k f 1 (y 1 (i-1) + k 21 /2, y 2 (i-1) + k 22 /2); k 32 = T k f 2 (y 1 (i-1) + k 21 /2, y 2 (i-1) + k 22 /2); 2 k 41 = T k f 1 (y 1 (i-1) + k 31 , y 2 (i-1) + k 32 ); k 42 = T k f 1 (y 1 (i-1) + k 31 , y 2 (i-1) + k 32 ). Thí dụ 2: Dựng đặc trưng quá độ của khâu tích phân pp x py p K 1 )( )( )( == . Hàm truyền trên tương ứng với phươngtrìnhviphân )()( txt y = . Để dựng đặc trưng quá độ của khâu tích phân cần bổ xung thêm phươngtrình 0 )( = tx (vì x(t) = 1). Khi sử dụng phươngpháp Runge - kutta để tích phânphươngtrìnhtrên ta có T ixk k )( 1 11 −= ; )/)(( 21 2 21 TT ixk kk +−= ; )//)(( 421 32 31 TTT ixk kkk ++−= ; )//)(( 421 432 41 TTTT ixk kkkk +++−= ; Vì vậy +++−+−= = . 24 6 211 ; 1 )///)(()()( )( 432 TTTT ixi y i y ix kkkk (1) Thông thường, khi tích phântrênmáytínhđiệntử ta thường sử dụng vòng lặp while-end; hoặc if-end. Khi đó, bằng việc sơ bộ tính biểu thức )///( 24 6 2 432 TTTT kkkk +++ (đối với thí dụ trên, còn với cácphươngtrình khác ta sẽ có biểu thức dưới dạng khác) bên ngoài vòng lặp while-end; hoặc if-end ta sẽ tiết kiệm được thời gian tính toán so với hai phươngpháp Ơle và Tastin. Chương trình tích phân thí dụ trên được viết trong môi trường Matlab với x(t)=1 có dạng clear all; clc; Tk=0.01; a1=Tk; a2=Tk^2/2; a3=Tk^3/6; a4=Tk^4/24; 3 x(1)=1; y(1)=0; t(1)=0; n=2; while n<=5002 n1=n-1; x(n)=1; y(n)=y(n1)+x(n1)*(a1+a2+a3+a4); t(n)=n1*Tk; n=n+1; end plot(t(1:n1),x(1:n1),'k'); hold on; plot(t(1:n1),y(1:n1),'k'); grid on; Đồ thị đặc trưng quá độ của khâu tích phântrên được thể hiện trên H.pl-1. Khi áp dụng phươngpháp Tastin thì chương trình dựng đặc trưng quá độ của khâu tích phântrên trong môi trường Matlab có dạng clear all; clc; Tk=0.01; Tk1=Tk/2; x(1)=1; x(2)=1; y(1)=0; y(2)=0; t(1)=0; t(2)=0; n=3; while n<=5003 n1=n-1; n2=n-2; x(n)=1; y(n)=y(n1)+Tk1*(3*x(n1)-x(n2)); t(n)=n2*Tk; n=n+1; end 4 plot(t(2:n2),x(2:n2),'k'); hold on; plot(t(1:n1),y(1:n1),'k '); grid on; Đồ thị đặc trưng quá độ của khâu tích phântrên được thể hiện trên H.pl-1. Trong tài liệu [2] các hệ số k 41 và k 42 có dạng k 41 = T k f 1 (y 1 (i-1) + k 31 /2, y 2 (i-1) + k 32 /2); k 42 = T k f 1 (y 1 (i-1) + k 31 /2, y 2 (i-1) + k 32 /2), theo nghiên cứu của tác giả, nó không làm thay đổi đáng kể kết quả tích phân. Nếu ta sử dụng giá trị k 41 và k 42 này thì kết quả tích phân bước thứ i của thí dụ 2 có dạng +++−+−= = .488 12 5 11 ; 1 )///)(()()( )( 432 TTTT ixi y i y ix kkkk (2) 5 Phươngpháp Tastin Hình PL-1. Đặc trưng quá độ của khâu tích phân t, s y(t) Phươngpháp Runge - kutta Biểu thức của y(i) trong (1) và (2) chỉ khác nhau không đáng kể các hệ số của cácsố hạng bậc cao của bước tích phân. Với bước tích phân nhỏ (nhỏ hơn rất nhiều so với 1) thì kết quả của hai cách tính không khác nhau đáng kể. Thí dụ 3: Dựng đặc trưng quá độ của khâu khuyếch đại quán tính 1 )( )( )( + == Tp K p x py p K . Hàm truyền trên tương ứng với phươngtrìnhviphân )()()()()( 1 txbt y atx T K t y T t y +−=+−= . Giá trị của hàm y(t) tại bước tích phân thứ i được tính như sau )///)](()([)()( 24 6 2111 4 3 3 2 2 T a T a T a T ixbi y ai y i y kkkk −+−−+−−+−= . Chương trình được viết trong môi trường Matlab có dạng như sau clear all; clc; T=0.1; K=1; a=1/T; b=K/T; Tk=0.01; a1=Tk; a2=-a*Tk^2/2; a3=a^2*Tk^3/6; a4=-a^3*Tk^4/24; x(1)=0; y(1)=0; t(1)=0; n=2; while n<=1000 n1=n-1; x(n)=1; y(n)=y(n1)+(-a*y(n1)+b*x(n1))*(a1+a2+a3+a4); t(n)=n1*Tk; n=n+1; 6 end plot(t(1:n1),x(1:n1),'b'); hold on; plot(t(1:n1),y(1:n1),'r'); grid on; Khi sử dụng phươngpháp Runge-Kutta để giảicácphươngtrìnhvi phân, thời gian tính toán hết ít hơn so với phươngpháp Tastin (với cùng bước tích phân). Tuy nhiên khi thời gian tích phân càng dài thì độ chính xác của phươngpháp Tastin càng cao hơn (bạn đọc có thể dễ dàng kiểm tra, thí dụ H.PL-1). Tuy nhiên, đây là hai phươngpháp tích phân có độ chính xác rất cao. Trong thí dụ 2, tại thời điểm 45 s sai số của phươngpháp Runge-Kutta vào khoảng 0,45 %, còn với phươngpháp Tastin sai số đạt tới ≈ 0 %. 4. MỘT SỐ PHƯƠNGPHÁPGIẢI HỆ PHƯƠNGTRÌNHVIPHÂN CÓ SẴN TRONG PHẦN MỀM MATLAB. Trong phần mềm Matlab có sẵn rất nhiều thuật giải hệ phươngtrìnhvi phân, thí dụ ode45; ode23; ode113; ode15s; ode23s; ode23t; ode23tb. Đây là các thuật giải phươngtrìnhviphân có độ chính xác rất cao và dễ sử dụng. Khi sử dụng chúng, ta không cần đưa ra bước tích phân, mà thuật giảitự chọn bước tích phân phù hợp để đảm bảo độ chính xác. Đối với xác phươngtrìnhviphân tuyến tính, thuật giảitự chọn bước tích phân thay đổi. Cú pháp của các thuật giải như sau: [T,Y] = solver(odefun,tspan,y0); hoặc [T,Y] = solver(odefun,tspan,y0,options); hoặc [T,Y] = solver(odefun,tspan,y0,options,p1,p2 ); hoặc [T,Y,TE,YE,IE] = solver(odefun,tspan,y0,options) hoặc sol = solver(odefun,[t0 tf],y0 ), trong đó, solver là một trong các thuật giải ode45, ode23, ode113, ode15s, ode23s, ode23t, or ode23tb. [T, Y] là các ma trận cột thời gian và các hàm cần tìm; odefun là tên file chương trình con mô tả cácphươngtrìnhvi phân; thí dụ, tên file chương trình con là “rigid” sẽ được viết như sau 'rigid' tspan là véc tơ chỉ khoảng thời gian tích phân; thí dụ, khoảng thời gian tích phântừ 0 tới 10 s được thể hiện như sau [0 10] 7 y0 là véc tơ điều kiện ban đầu của các hàm cần tìm; options cho phép thay đổi các tham số tích phân. Thí dụ 4. Giải hệ phươngtrìnhviphân −= −= = ,51,0 ; ; 213 312 321 yyy yyy yyy Với điều kiện ban đầu y 1 (0)=0; y 2 (0)=1; y 3 (0)=1, thời gian tích phân 12 giây. Trước hết, ta tạo file chương trình con function dy = rigid(t,y) dy = zeros(3,1); % a column vector (số 3 chỉ sốphương trình) dy(1) = y(2) * y(3); dy(2) = -y(1) * y(3); dy(3) = -0.51 * y(1) * y(2); Giả sử ta sử dụng options=odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); thuật giải ode45. Cú pháp của thuật giải có dạng sau [T,Y] = ode45('rigid',[0 12],[0 1 1],options); plot(T,Y(:,1),'-',T,Y(:,2),' ',T,Y(:,3),'.'); Thí dụ 5. Sử dụng thuật giải phươngtrìnhviphân trong Matlab để dựng đặc trưng quá độ của khâu quán tính trong thí dụ 3. File chương trình con có dạng: function dy = rigid1(t,y) T=0.1; K=1; a=1/T; b=K/T; dy = zeros(2,1); % a column vector dy(1)=-a*y(1)+b*y(2); dy(2) = 0; Cú pháp của thuật giải có dạng [T,Y] = ode45('rigid1',[0 10],[0 1]); 8 plot(T,Y(:,1),'-',T,Y(:,2),' '); hold on; grid on; 9 . phương trình vi phân trên máy tính điện tử, ta cần vi t chúng dưới dạng hệ các phương trình vi phân bậc nhất (dạng Kôsi), thí dụ )( ,, tx yfy = . Sau đó ta có thể sử dụng một trong các phương. phương pháp sau để giải chúng trên máy tính điện tử. 1. PHƯƠNG PHÁP ƠLE Đây là một trong các phương pháp đơn giản nhất, theo đó lời giải của phương trình )( ,, tx yfy = tại bước tích phân. Phụ lục MỘT SỐ PHƯƠNG PHÁP GIẢI CÁC PHƯƠNG TRÌNH VI PHÂN TRÊN MÁY TÍNH ĐIỆN TỬ Ngày nay có rất nhiều phần mềm ứng dụng cho phép nghiên cứu thuận lợi các hệ thống động học,