Ðề tài: Điều khiển PID
View Single Post
Old 04-06-2006, 06:54 AM   #22
HaiAu2005
Đệ tử 9 túi
 
Tham gia ngày: May 2006
Bài gửi: 150
:
Sau khi thí nghiệm xong có dữ liệu, để xác định các tham số thì có thể dùng phương pháp bình phương nhỏ nhất (LSA = least squares algorithm) - một trong những phương pháp curve fitting phổ biến nhất. LSA có được trình bày trong cuốn Toán cao cấp của bác Nguyễn Đình Trí (nếu tôi nhớ không nhầm tên). Bạn có thể dùng Excel để tính. Còn nếu bạn dùng MATLAB và có Optimization Toolbox bạn có thể khai thác hàm 'lsqcurvefit' (least squares curve fitting), dùng lệnh > help lsqcurvefit để xem cách sử dụng hàm này. Còn nếu dùng MATLAB mà không có Optimization Toolbox bạn có thể làm theo cách "thủ công" là thiết lập hệ phương trình tuyến tính rồi dùng MATLAB giải hệ phương trình tuyến tính. Tuy nhiên cách "thủ công" này thì phải dùng nhiều dòng lệnh. Một cách làm ngắn gọn hơn và có thể dùng để lập chương trình cho nhiều trường hợp được trình bày như sau:

Giả sử mối quan hệ giữ y (output) và u (input) được biểu diển bằng một hàm xung số (discrete-time) như sau:



(có thể coi mối quan hệ tuyến tính y = ax + b là trường hợp đặc biệt của hàm xung số khi
,

).

Phương trình này có thể viết theo dạng véc tơ:



(Chú ý nếu trong các phương trình viết theo mã MATLAB, dấu ' có nghĩa là 'transpose').

trong đó:
là output,
- véc tơ số liệu đo được và
- véc tơ tham số.

Với kết quả thí nghiệm chúng ta đo được mỗi lần, chúng ta có phương trình biểu diễn sai số:

, trong đó e(k) là sai số

Nếu đo N lần chúng ta có thể biểu diễn kết quả đo thành dạng sau:



trong đó:
,
= véc tơ tham số ở trên, và

- véc tơ sai số.

Từ phương trình này áp dụng thuật toán bình phương nhỏ nhất chúng ta có kết quả tính véc tơ tham số như sau :

(để tính inverse matrix trong MATLAB chúng ta dùng hàm inv)

(Tôi xin lược phần diễn giải tìm ra công thức này. Hint: bạn nào quan tâm có thể dùng công thức Y = PHI' * theta, vì có sai số nên có thể viết thành dạng Y = PHI' * theta + E, E là véc tơ sai số có N phần tử, rồi tính tổng bình phương sai số J = sum of error squares tức là J = E' * E = Y - PHI' * theta, áp dụng tính cực tiểu cho hàm bình phương sai số sẽ rút được ra công thức tính theta.)

Nếu dùng MATLAB, chúng ta chỉ việc nhập số liệu đo được rồi sắp xếp số liệu theo các véc tơ và ma trận ở trên (tức là Y và PHI, phụ thuộc vào hàm xung số chúng ta chọn), rồi áp dụng công thức cuối cùng là có kết quả các tham số (véc tơ THETA).

Để tìm tham số trong phương trình vi phân, chúng ta phải tìm được phương trình hệ xung số tương đương với phương trình vi phân (dùng phép rời rạc hóa - discretization) và áp dụng phương pháp trên tính.

Từ thuật toán bình phương nhỏ nhất trình bày ở trên, các bạn có thể tự lập cho mình một chương trình tính tham số tiện lợi hơn cho nhiều mô hình xung số khác nhau bằng cách nhập số các tham số trong véc tơ tham số theta.

H.A.

thay đổi nội dung bởi: HaiAu2005, 04-06-2006 lúc 09:47 PM.
HaiAu2005 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn