Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 100 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
100
Dung lượng
1,53 MB
Nội dung
Đại Học Quốc Gia Tp Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA NGUYỄN ĐẠI THỂ NHẬN DẠNG VÀ ĐIỀU KHIỂN CON LẮC NGƯC ĐƠN HAI BẬC TỰ DO DÙNG MẠNG NEURON Chuyên ngành : Điều khiển học kỹ thuật LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 01 năm 2008 CÔNG TRÌNH ĐƯC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH Cán hướng dẫn khoa học: PGS.TS Nguyễn Thị Phương Hà Cán chấm nhận xét 1: TS Nguyễn Đức Thành Cán chấm nhận xét 2: TS Nguyễn Thiện Thành Luận văn thạc só bảo vệ HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA, ngày 18 tháng 01 năm 2008 TRƯỜNG ĐẠI HỌC BÁCH KHOA PHÒNG ĐÀO TẠO SĐH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC Tp HCM, ngày 18 tháng 01 năm 2008 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: NGUYỄN ĐẠI THỂ Ngày, tháng, năm sinh: 22-08-1980 Chuyên ngành: ĐIỀU KHIỂN HỌC KỸ THUẬT Phái: NAM Nơi sinh: ĐÀ NẴNG MSHV: 01504379 I- TÊN ĐỀ TÀI: NHẬN DẠNG VÀ ĐIỀU KHIỂN CON LẮC NGƯC ĐƠN HAI BẬC TỰ DO DÙNG MẠNG NEURON II- NHIỆM VỤ VÀ NỘI DUNG: Trình bày tóm tắt logic mờ, mạng neuron Nghiên cứu phương pháp huấn luyện mạng neuron, ứng dụng nhận dạng điều khiển hệ phi tuyến Giới thiệu, phân tích xây dựng mô hình toán hệ thống lắc ngược đơn hai bậc tự Nhận dạng hệ thống lắc ngược đơn dùng mạng neuron Nghiên cứu, triển khai số phương pháp điều khiển hệ thống lắc ngược đơn sở sử dụng mô hình mờ mạng neuron Trình bày so sánh kết điều khiển chương trình m-file mô Simulink Matlab Các nhận xét, kết luận hướng phát triển đề tài nêu phần cuối luận văn III- NGÀY GIAO NHIỆM VỤ : / IV- NGÀY HOÀN THÀNH NHIỆM VỤ: /2007 / /200 V- CÁN BỘ HƯỚNG DẪN: PGS.TS Nguyễn Thị Phương Hà CÁN BỘ HƯỚNG DẪN PGS.TS Nguyễn Thị Phương Hà CN BỘ MÔN QL CHUYÊN NGÀNH TS Nguyễn Đức Thành Nội dung đề cương luận văn thạc só Hội đồng chuyên ngành thông qua Ngày TRƯỞNG PHÒNG ĐT – SĐH tháng năm 200 TRƯỞNG KHOA QL NGÀNH LỜI CẢM ƠN Đầu tiên, cho phép gửi lời cảm ơn chân thành sâu sắc đến PGS.TS Nguyễn Thị Phương Hà, người dạy dỗ, truyền đạt cho kiến thức bổ ích năm qua tận tình hướng dẫn, bảo suốt trình thực luận văn Xin gửi lời cảm ơn đến thầy cô môn Điều khiển tự động giảng dạy, truyền đạt nhiều kiến thức mới, bổ ích suốt trình học Cao học Xin cảm ơn gia đình người thân chung quanh ủng hộ, động viên lúc khó khăn tưởng chừng khó vượt qua Xin gửi lời cảm ơn đến người bạn động viên, giúp đỡ có ý tưởng bổ ích Sự giúp đỡ quý báu bạn mặt chuyên môn khích lệ to lớn cho suốt thời gian qua thực luận văn vừa qua Nguyễn Đại Thể TÓM TẮT Hầu hết đối tượng điều khiển thực tế có tính phi tuyến biến đổi theo thời gian, vậy, việc mô tả cách xác mô hình toán học để phục vụ cho mục đích điều khiển đối tượng gặp nhiều khó khăn Vì lý thuyết điều khiển kinh điển lẫn đại không đáp ứng tốt việc điều khiển đối tượng Việc nhận dạng hệ thống cần thiết nhằm thiết kế điều khiển hệ thống phi tuyến mà dựa vào mô hình toán xác hệ thống Trên sở đó, tác giả đề xuất số phương pháp nhận dạng điều khiển hệ thống lắc ngược đơn hai bậc tự dựa sở sử dụng mạng neuron logic mờ Việc sử dụng hệ thống lắc ngược hệ thống phi tuyến, không ổn định vòng hở hay sử dụng để nghiên cứu, kiểm chứng phương pháp điều khiển ABSTRACT Many plants are nonlinear and time-varing It is difficult to describe these plants in a mathematical way precisely Therefore both classical and modern control theories that based on mathematical models take poor effect on controlling them Fortunately, neural network control has made great progress in modeling and controlling of nonlinear systems Multilayer neural networks can be considered as general tools for modeling nonlinear functions Compared with traditional methods, the controller using neural networks doesn't rely on the mathematical model of systems, and it has strong adaptive and learning ability With these advantages, it is effective to control an uncertain nonlinear system using Neural Networks (NN) In this thesis, fuzzy logic and neural network will be used to identify and control for inverted pendulum system MỤC LỤC CHƯƠNG GIỚI THIỆU CHƯƠNG CƠ SỞ LÝ THUYẾT VỀ LOGIC MỜ 2.1 Tập mờ 2.1.1 Định nghóa tập kinh điển (tập rõ) 2.1.2 Định nghóa tập mờ 2.1.3 Biểu diễn tập mờ 2.1.4 Hàm liên thuộc mờ 2.1.5 Các phép toán tập mờ 2.2 Quan hệ rõ quan hệ mờ 2.3 Cơ sở tri thức mờ 10 2.4 Kyõ thuật suy diễn mờ 11 2.5 Giaûi mờ 12 2.6 Moät số hệ thống điều khiển mờ 14 2.6.1 Cô sở luật điều khiển mờ với mô hình luật chuẩn Mamdani 15 2.6.2 Cơ sở luật điều khiển mờ với mô hình luật mờ Singleton 15 2.6.3 Cơ sở luật điều khiển mờ với mô hình luật mờ TSK 16 CHƯƠNG 18 MẠNG NEURON NHÂN TẠO 18 3.1 Cơ sở sinh học mạng neuron nhân taïo 18 3.2 Các thành phần neuron nhân tạo 19 3.2.1 Troïng số kết nối 19 3.2.2 Ngưỡng 20 3.2.3 Hàm kích hoạt 20 3.3 Mạng neuron lớp 23 3.4 Mạng neuron nhiều lớp 24 3.5 Mạng hồi quy 27 3.6 Mạng hàm sở xuyên tâm 27 CHƯƠNG 31 NHẬN DẠNG HỆ THỐNG CON LẮC NGƯC ĐƠN DÙNG MẠNG NEURON 31 4.1 Cơ sở nhận dạng hệ thoáng 31 4.2 Xây dựng mô hình toán hệ thống lắc ngược đơn 32 4.3 Nhận dạng hệ thống lắc ngược đơn dùng mạng Neuron 37 4.3.1 Nhận dạng hệ thống với mạng neuron ngõ vào 43 4.3.2 Nhận dạng hệ thống với mạng neuron nhiều ngõ vào 47 CHƯƠNG 53 ĐIỀU KHIỂN HỆ THỐNG CON LẮC NGƯC ĐƠN DÙNG MẠNG NEURON 53 5.1 Điều khiển hệ thống dùng điều khiển Mờ – PD 54 5.1.1 Cơ sở thiết kế điều khiển mờ PD 54 5.1.2 Thiết kế mô điều khiển mờ PD điều khiển lắc ngược đơn 55 5.2 Điều khiển hệ thống dùng phương pháp neuron PD 61 5.3 Điều khiển hệ lắc ngược đơn dùng mạng neuron 64 5.3.1 Điều khiển học giám sát hệ lắc ngược đơn dùng mạng neuron 64 5.3.2 Điều khiển hệ lắc ngược đơn dùng mạng neuron thích nghi 69 CHƯƠNG 75 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 75 6.1 Kết luận chung 75 6.2 Hướng phát triển đề tài 76 TAØI LIỆU THAM KHẢO 78 PHUÏ LUÏC 80 Mã nguồn chương trình tạo cửa sổ giao diện 80 Mã nguồn chương trình tạo giao diện cửa sổ bước 81 Mã nguồn chương trình tạo giao diện cửa sổ thiết lập thông số nhận dạng 82 Mã nguồn điều khiển mờ PD 84 Mã nguồn điều khieån neuron PD 88 Mã nguồn chương trình huấn luyện mạng neuron học điều khiển 91 LÝ LỊCH TRÍCH NGANG 92 Giới thiệu Chương CHƯƠNG GIỚI THIỆU Ngày việc áp dụng Robot vào thực tế sống để thay cho hoạt động người lớn Do nhà nghiên cứu, kỹ sư điều khiển không ngừng đưa phương pháp điều khiển cho đối tượng Tuy nhiên đối tượng điều khiển thực tế có tính chất phi tuyến không chắn, việc xác định mô hình toán xác đối tượng khó khăn chí không thực Hầu hết phương pháp điều khiển kinh điển, chẳng hạn điều khiển PID dựa vào mô hình toán đặc tính tónh đối tượng để mô hình hóa ước lượng thông số cho điều khiển Trong thực tế, đối tượng điều khiển có tính phi tuyến cao, nên khó đưa mô hình toán xác Các kỹ thuật thông thường mô tả đầy đủ sai số mô hình thiếu tính bền vững Tuy nhiên, logic mờ hướng tiếp cận đầy hứa hẹn việc thiết kế điều khiển Khác với kỹ thuật thiết kế điều khiển thông thường, kỹ thuật điều khiển mờ đưa công thức điều khiển đối tượng dạng phát biểu ngôn ngữ giống cách hành xử người thay dựa vào thuật toán tạo từ mô hình toán học đối tượng Cùng với phát triển rộng rãi mạng neuron, nhiều nỗ lực nghiên cứu nhằm thiết kế điều khiển thông minh sử dụng logic mờ mạng neuron Việc thiết kế điều khiển thích nghi bền vững đáp ứng thời gian thực cho đối tượng phi tuyến thử thách lớn kỹ sư điều khiển Trong luận văn này, tác giả triển khai số phương pháp nhận dạng điều khiển hệ thống lắc ngược đơn sở sử dụng mô hình mờ mạng neuron Trình bày so sánh kết điều khiển chương trình m-file Giới thiệu Chương mô Simulink Matlab Các nhận xét, kết luận hướng phát triển đề tài nêu phần cuối luận văn Cấu trúc luận văn bao gồm chương sau: Chương – Giới thiệu – Đặt vấn đề cần giải quyết, trình bày nhiệm vụ cần thực bố cục luận văn Chương – Cơ sở lý thuyết Logic mờ – Trình bày tóm tắt tập mờ logic mờ Chương – Mạng neuron nhân tạo – Trình bày tóm tắt mạng neuron nhân tạo Nghiên cứu giải thuật huấn luyện mạng neuron Các kiến thức tảng cho việc nhận dạng điều khiển đối tượng chương Chương – Nhận dạng hệ thống lắc ngược đơn dùng mạng neuron – Trình bày phương pháp nhận dạng hệ thống dùng mạng neuron, kết nhận xét rút sau trình nhận dạng Chương – Điều khiển hệ thống lắc ngược đơn dùng mạng neuron – Triển khai thực số phương pháp điều khiển hệ thống lắc ngược đơn sở sử dụng logic mờ mạng neuron Chương – Kết luận hướng phát triển đề tài – Đánh giá kết đạt trình thực luận văn vấn đề chưa giải Đề xuất hướng phát triển đề tài TÀI LIỆU THAM KHẢO [1] L.A Zadeh, Fuzzy Sets, Information and Control Vol.8, 338-353, (1965) [2] E.H Mamdani, Application of fuzzy algorithms for simple dynamic plant, Proc.IEEE, 121, No.12, 1585-1588, (1974) [3] Meng Joo Er, Zengrong Li, A nonlinear transversal fuzzy filter with online clustering, Fuzzy Sets and Systems Vol.3, 1585-1593, (2004) [4] J.J.Shann, H.C.Fu, A fuzzy neural networks for rule acquiring on fuzzy control systems, Fuzzy Sets and Systems 71, 345-357, (1995) [5] Buøi Công Cường, Nguyễn Doãn Phước, Hệ mờ, mạng neural ứng dụng, Nhà xuất khoa học kỹ thuật, Chương 2, 39-74, (2001) [6] Nguyễn Phùng Quang, Matlab Simulink dành cho kỹ sư điều khiển tự động, NXB KHKT , Hà nội 2004 [7] Yeihui Chen, Hybrid Soft Computing Approach to Identification and Control of Nonlinear Systems, Kumamoto University, (2001) [8] Junhong Nie & Derek Linkens, Fuzzy-Neural Control, Prentice Hall, 1995, ISBN 0-13-337916-7 [9] Chin-Teng Lin, C.S.George Lee, Neural fuzzy systems : A neural fuzzy synergism to Intelligent systems, Prentice Hall, 1996, ISBN 0132351692 [10] T.Takagi, M.Sugeno, NN-driven fuzzy reasoning, Internat J Approx Reasoning 5, 191-212, (1991) [11] M.A Denai, F Palis, A Zeghbib, Modeling and control of nonlinear systems using soft computing techniques, Applied Soft Computing In Press (2006) 78 [12] ShiqianWu, Meng Joo Er, Dynamic Fuzzy Neural Networks – A Novel Approach to Function Approximation, IEEE Transactions on systems, Man, and Cybernetics – Part B: Cybernetics, Vol.30, No.2, April 2000 [13] Meng Joo Er, S Q Wu and Y Gao, Dynamic Fuzzy Neural Networks: Architectures, Algorithms and Applications New York: McGraw-Hill, 2003 [14] M.J.Er, Tien Peng Tan, Sin Yee Loh, Control of a mobile robot using generalized dynamic fuzzy neural networks, Microprocessors and Microsystems Vol 28, 491-498, (2004) [15] Lennart Ljung, System Identification, Theory for the User, PTR Prentice Hall Information and System Science Series, Chapter 7, 203-205 (1999) [16] Tim Callinan, Artificial Neural Network identification and control of the inverted pendulum, August 2003 [17] Huyønh Thái Hoàng, Bài giảng Mô hình hóa, nhận dạng hệ thống, Trường ĐH Bách Khoa TPHCM, Tài liệu giảng dạy, Chương 4, trang 34-38 [18] Seul Jung and Hyun Taek Cho, Decoupled Neural Network Reference Compensation Technique for a PD Controlled Two Degrees-of-Freedom Inverted Pendulum, International Journal of Control, Automation and Systems, Vol 2, No 1, March 2004 [19] The MathWorks Inc., 1998, SIMULINK – Writing S-Functions [20] The MathWorks Inc., 1998, Application Programming Interface – User’s Guide 79 PHUÏ LỤC Mã nguồn chương trình tạo cửa sổ giao diện function varargout = main(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @main_OpeningFcn, 'gui_OutputFcn', @main_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end %********************************************************************* function main_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes main wait for user response (see UIRESUME) % uiwait(handles.main_figure); % - Outputs from this function are returned to the command line %********************************************************************* function varargout = main_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; %********************************************************************* function nhandang_pb_Callback(hObject, eventdata, handles) delete(handles.main_figure) cd('NHANDANG') nhandang %********************************************************************* 80 function dieukhien_pb_Callback(hObject, eventdata, handles) delete(handles.main_figure) cd('DIEUKHIEN\supervised_learning_control') open('NN_controller.mdl'); %********************************************************************* function exit_pb_Callback(hObject, eventdata, handles) evalin('base','clear all'); delete(handles.main_figure); Mã nguồn chương trình tạo giao diện cửa sổ bước function varargout = nhandang(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @nhandang_OpeningFcn, 'gui_OutputFcn', @nhandang_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end %******************************************************************* function nhandang_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); pic_axesH = axes('Unit','Pixels','Position',[30 90 500 300]); imshow(imread(' \2dof_IP.bmp')); %******************************************************************* function varargout = nhandang_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; %******************************************************************* function thongso_pb_Callback(hObject, eventdata, handles) set(findobj('Style','PushButton'),'Enable','Off'); 81 thietlap; set(findobj('Style','PushButton'),'Enable','On'); %******************************************************************* function MH_1_ngo_vao_Callback(hObject, eventdata, handles) open('MLP_1_input_ident.m'); %******************************************************************* function back_pb_Callback(hObject, eventdata, handles) if ~isempty(find_system('Name','Nhan_dang_mo_hinh_nguoc')) save_system('Nhan_dang_mo_hinh_nguoc'); close_system('Nhan_dang_mo_hinh_nguoc'); end delete(handles.buoc1_figure) cd(' ') main % - Executes on button press in MH_3_ngo_vao function MH_3_ngo_vao_Callback(hObject, eventdata, handles) open('MLP_3_input_ident.m'); % - Executes on button press in exit_pb function exit_pb_Callback(hObject, eventdata, handles) delete(handles.buoc1_figure); cd(' ') main % - Executes on button press in TTSL_pb function TTSL_pb_Callback(hObject, eventdata, handles) open('Raw_controller_for_sampling.mdl'); Mã nguồn chương trình tạo giao diện cửa sổ thiết lập thông số nhận dạng function varargout = thietlap(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @thietlap_OpeningFcn, 'gui_OutputFcn', @thietlap_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end 82 if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end %********************************************************************* function thietlap_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); % pic_axesH = axes('Unit','Pixels','Position',[5 50 500 300]); % imshow(imread(' \2dof_IP.bmp')); load thongso.mat l m Mx g N T; set(handles.l_edit,'string',num2str(l)); set(handles.m_edit,'string',num2str(m)); set(handles.Mx_edit,'string',num2str(Mx)); set(handles.g_edit,'string',num2str(g)); set(handles.N_edit,'string',num2str(N)); set(handles.T_edit,'string',num2str(T)); uiwait(handles.thietlap_figure); %********************************************************************* function varargout = thietlap_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; delete(handles.thietlap_figure); buoc1_figure = findobj('Tag','buoc1_figure'); if ~isempty(buoc1_figure) set(buoc1_figure,'Visible','on'); end %********************************************************************* function OK_Callback(hObject, eventdata, handles) l = str2num(get(handles.l_edit,'string')); m = str2num(get(handles.m_edit,'string')); Mx = str2num(get(handles.Mx_edit,'string')); g = str2num(get(handles.g_edit,'string')); N = str2num(get(handles.N_edit,'string')); T = str2num(get(handles.T_edit,'string')); err_param = ''; if (~isscalar(N) | rem(N,1)~=0), err_param = ' N'; end if ~isscalar(T), err_param = [err_param ' T']; end 83 if ~isscalar(l), err_param = [err_param ' l']; end if ~isscalar(m), err_param = [err_param ' m']; end if ~isscalar(Mx), err_param = [err_param ' Mx']; end if ~isscalar(g), err_param = [err_param ' g']; end if length(err_param)~=0 errordlg(['Thong so [' err_param ' ] khong hop le'],'Error parameter'); else save thongso.mat l m Mx g N T; % evalin('base','updatethongso'); uiresume(handles.thietlap_figure); end %********************************************************************* function cancel_Callback(hObject, eventdata, handles) uiresume(handles.thietlap_figure); %********************************************************************* function thietlap_figure_CloseRequestFcn(hObject, eventdata, handles) uiresume(handles.thietlap_figure); Mã nguồn điều khiển mờ PD %Beginning of program %ref | | +-E [GE] + [ FUZZY ] -[Gu] [INVERTED_PENDULUM] +-> % | _| | | | % - /|\ |_CE [GC] | | % | | % + -+ %Tao tap tin voi ten file fyappr1.fis clear a = newfis('fyappr'); % Xay dung cac ham lien thuoc va cac luat mo % Dinh nghia ham lien thuoc cho bien vao Errror a = addvar(a,'input','Error',[-1 1]); a = addmf(a,'input',1,'NL','trimf',[-1.5 -1 -0.5]); a = addmf(a,'input',1,'NS','trimf',[-1 -0.5 0.0]); a = addmf(a,'input',1,'ZE','trimf',[-0.5 0.0 0.5]); a = addmf(a,'input',1,'PS','trimf',[0.0 0.5 1.0]); a = addmf(a,'input',1,'PL','trimf',[0.5 1.0 1.5]); % Dinh nghi ham lien thuoc cho bien vao Cerror a = addvar(a,'input','Cerror',[-1 1]); 84 a = addmf(a,'input',2,'NL','trimf',[-1.5 -1 -0.5]); a = addmf(a,'input',2,'NS','trimf',[-1 -0.5 0.0]); a = addmf(a,'input',2,'ZE','trimf',[-0.5 0.0 0.5]); a = addmf(a,'input',2,'PS','trimf',[0.0 0.5 1.0]); a = addmf(a,'input',2,'PL','trimf',[0.5 1.0 1.5]); % Dinh nghia cac ham lien thuoc cho bien a = addvar(a,'output','Control',[-1 1]); a = addmf(a,'output',1,'NL','trimf',[-1.5 -1.0 -0.5]); a = addmf(a,'output',1,'NS','trimf',[-1.0 -0.5 0.0]); a = addmf(a,'output',1,'ZE','trimf',[-0.5 0.0 0.5]); a = addmf(a,'output',1,'PS','trimf',[0.0 0.5 1.0]); a = addmf(a,'output',1,'PL','trimf',[0.5 1.0 1.5]); % Dinh nghia bang luat mo rule = [ 11511 12511 13511 14411 15311 21511 22511 23411 24311 25211 31511 32411 33311 34211 35111 41411 42311 43211 44111 45111 51311 52211 53111 54111 5 1 1]; 85 a = addrule(a,rule); figure(1) subplot(3,1,1) plotmf(a,'input',1) subplot(3,1,2) plotmf(a,'input',2) subplot(3,1,3) plotmf(a,'output',1) writefis(a,'fyappr'); % Ghi Fis len dia % Test program listing clear fis = readfis('fyappr'); % Doc file fyappr1 x = [0 0]'; l = 1.0; m = 1; M = 10; g = 9.8; step = 0.2; GE = -pi/8; GC = pi/16; GU = 30; % Dinh nghia cac hang so hieu chinh for k = 1:1000 % ref(k) = 0.5*sin(k*pi/100); ref(k) = 0.5*sin(0.1*k + pi)*exp(-k/150); y(k) = x(1); e(k) = (ref(k) - y(k)); ee(k) = e(k)*GE; if k == ce(k) = 0; else ce(k) = e(k)-e(k-1); end cee(k) = ce(k)*GC; mu(k) = evalfis([ee(k) cee(k)], fis); u(k) = mu(k)*GU; if (u(k) >= 30) u(k) = 30; elseif(u(k)