Giáo Trình Về Matlab

40 342 0
Giáo Trình Về  Matlab

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Hàng triệu kỹ sư và các nhà khoa học trên toàn thế giới sử dụng MATLAB ® để phân tích và thiết kế các hệ thống và các sản phẩm biến đổi thế giới của chúng tôi. MATLAB là trong các hệ thống an toàn chủ động ô tô, tàu vũ trụ liên hành tinh, thiết bị theo dõi sức khỏe, lưới điện thông minh, và các mạng di động LTE. Nó được sử dụng cho máy tính học tập, xử lý tín hiệu, xử lý ảnh, tầm nhìn máy tính, truyền thông, tài chính tính toán, thiết kế điều khiển, robot, và nhiều hơn nữa

CHƯƠNG 1: MATLAB c BẢN §1 CÁC TOÁN TỬ C BẢN CỦA MATLAB Các toán tử bản: Matlab phần mềm cao cấp dùng để giải toán Để khởi động MATLAB ta bấm đúp vào icon Các file MATLAB có dạng *.m chạy môi trường MATLAB MATLAB xử lí sô' liệu ma trận Khi ta đánh lệnh vào cửa sổ lệnh, thi hành kết lên hình Nếu ta không muôn cho kết lên hình sau lệnh ta đặt thêm dâu Nêu lệnh dài, không vừa dòng dòng đánh lệnh nhiều dòng cuôi dòng đặt thêm dấu xuống dòng Khi soạn thảo lệnh ta dùng phím tắ t: Ctrl-P gọi lại lệnh trước t gọi lệnh sau ị Ctrl-N Ctrl-B Ctrl-F tiên lên kí tự Ctrl—> Ctrl-R sang phải từ Ctrl-< X - 1 x\ + 4X2 - 2x\ 2x1 x - Muốn thê'ta tạo file/z.m sau: function y = fl(x ) y = l./(l+8*x.A2); file/2.m: function y=f2(x) y ( l) = x (l)* x (l)+ * x (2 )* x (2 ) -5; y(2) = 2*x(l)*x(l)-2*x(l)-3*x(2) -2.5; Khi nhập lệnh fl(2) ta có giá trị hàm fl X = Khi nhập lệnh/2([2 4]) ta có giá trị hàm f2 XI = X = Lệnh, ỷevalựp-', 2) fevalựf2', [2 4]) cho kết tương tự Cách thứ hai để biểu diễn hàm toán học biên dòng lệnh tạo đôi tượng inline từ biểu thức chuỗi Ví dụ ta nhập từ dòng lệnh hàm sau: f l = in lin e('l./(l + *x.A2 ) '/ x ') ; fl([0 1]), fevaKfl, [0 1]) Ta viết: f l = 'l / ( l + 8*X.A2 )'; x = [0 1]; eval(fl) Nêu hàm đa thức ta cần nhập ma trận hệ số từ sô' mũ cao Ví dụ với đa thức P4(x) = X + 4x3 + 2x + ta viết: p = [l 1] Để nhân hai đa thức ta dùng lệnh conv; để chia đa thức ta dùng lệnh deconv Muổh tính trị số đa thức ta dùng lệnh polyval lệnh polyvalm dùng đa thức ma trận c Cắc lệnh xử lí hàm: Lệnh fplot vẽ đổ thị hàm toán học giá trị cho Ví dụ: fplotCil', [-5 ]) grid on Cho hàm toán học biên, ta dùng lệnh ỷmỉnbnd MATLAB để tìm cực tiểu địa phương hàm khoảng cho Ví dụ: / = in lin e('l./((x - ).A2 + 0 ) + l./((x - ).A2 + 0.04) - '); X =fm in bn d (f, ,1 ) Lệnh fminsearch tương tự hàm fminbnd dùng để tìm cực tiểu địa phương hàm nhiều biến Ta có hàm biến lưu file threejvar.m sau: function b = three_var(v) X = v (l); y = v(2); z = v(3); b = x.A2 + 2.5*sỉn(y) - zA2*xA2*yA2; Bây tìm cực tiểu đối vói hàm X = -0.6 , y = -1.2 z = 0.135 lệnh: v = [-0.6-1.2 0.135]; a =fminsearch('three_var', v) Lệnh fzero dùng để tìm điểm zero hàm biên Ví dụ để tìm giá trị không hàm lân cận giá trị -0.2 ta viết: / = inline('l./((x - 0.3).A2 + 0.01) + l./((x - 0.9).A2 + 0.04) - 6'); a =fzero(f, -0.2) Zero found in the interval: [-0.10949, -0.264] a-0.1316 Các phép toán ma trận vec tơ: a Khái niệm chung: Giả sử ta tạo ma trận a b lệnh: a = [l 3; 6]; b = [3 -2 í]; Ta sửa đổi chúng: A = [a;7 ] B = [b] [1 -1]]' Toán tử ' dùng để chuyển vị ma trận thực chuyển vị liên hợp ma trận phức Nêu muốn chuyển vị ma trận phức, ta dùng thêm toán tử àt!' nghĩa phải viết Ví dụ: c = [l+2*i - 4*i; + i - * ;] ; x =c Y =c/ b Chỉ sốí Phần tử hàng i cột j ma trận mxn có kí hiệu A(i, j) Tuy nhiên ta tham chiêu tói phần tử mảng nhờ sô', ví dụ A(k) với k = i + (j - l)m Cách thường dùng để tham chiếu vec tơ hàng hay cột Trong trường hợp ma trận đủ xem ma trận cột dài tạo từ cột ma trận ban đầu Như viêlt A(5) có nghĩa tham chiếu phần tử A(2, 2) Để xác định kích thước ma trận ta dùng lệnh length(trả kích thước lớn nhất) hay size(số hàng cột) Ví dụ: c = [ l 4; 8\, length(c) [m, fl] = size(c) c Toán tử : Toán tử toán tử quan trọng MATLAB Nó xuất nhiều dạng khác Ví dụ: 1:10 tạo vec tơ hàng chứa 10 số nguyên từ đến 10 Lệnh: 100: -7:50 tạo dãy số từ 100 đến 51, giảm lần Lệnh: 0: pi/4: pi tạo dãy số từ đến pi, cách pi/4 Các biểu thức sô' tham chiếu tói phần ma trận Viết A(l:k, j) tham chiêu đến k phần tử cột j Ngoài toán tử tham chiêu tói tất phần tử hàng hay cột Ví dụ: B = A(:, [ ]) tạo ma trận B từ ma trận A cách đổi thứ tự cột từ [1 3] thành [13 2] ã Tạo ma trận hàm có sẵn: MATLAB cung cấp sô' hàm để tạo ma trận bản: zeros tạo ma trận mà phần tử zeros z = zeros(2, 4) ones tạo ma trận mà phần tử X = ones(2, 3) y = 5*ones(2, 2) rand tạo ma trận mà phần tử ngẫu nhiên phân bô' d = rand(ế, 4) randn tạo ma trận mà phần tử ngẫu nhiên phân bô' trực giao e = randn(3, 3) magic(n) tạo ma trận cấp n gồm sô' nguyên từ đến n2 với tổng hàng tổng cột n phải lớn hay pascal(n) tạo ma trận xác định dương mà phần tử lây từ tam giác Pascal pascal(4) eye(n) tạo ma trận đơn vị eỵe(3) eye(m, n) tạo ma trận đơn vị mở rộng eye(3, 4) e Lắp ghép: Ta lắp ghép(concatenation) ma trận có sẵn thành ma trận mói Ví dụ: a = ones(3, 3) b = 5*ones(3,3) c =[ a + 2',b] f Xoá hàng cột : Ta xoá hàng cột từ ma trận dùng dấu [] Để xoá cột thứ ma trận b ta viết: 2) = [] Viết x(l: 2: 5) = [] nghĩa ta xoá phần tử đến phần tử thứ cách xếp lại ma trận g Các lệnh xử lí ma trận: Cộng Trừ Nhân Chia : x= A + B : x= A - B : x= A * B X.*A nhân phần tử tương ứng vói X = A/B lúc X*B = A X = A\B lúc A*x = B X=A./B chia phần tử tương ứng vói X = AA2 Luỹ thừa X = A.A2 X = inv(A) Nghịch đảo d = det(A) Định thức Tạo số ngẫu nhiên: MATLAB có lệnh tạo sô' ngẫu nhiên rand randn tạo sô' ngẫu nhiên theo phân bô' Gauss rand(m, n) tạo ma trận sô' ngẫu nhiên phân bô' đồng nhâ't randn(m, n) tạo ma trận số ngẫu nhiên theo phân bố chuẩn Gauss rand(3,3) 10 ys = spline(t, y, ts); plot(xs, ys, 'c-'); hold off 14 Vẽ vectơ: Có nhiều hàm MATLAB dùng hiển thị vec tơ có hướng vec tơ vận tốíc Ta định nghĩa vec tơ bàng cách dùng hay đổi số Các đôi sô' mô tả thành phần X thành phần y vec tơ Nêu ta dùng đôi s ố đôi sô' thứ mô tả thành phần X đôi sô' thứ mô tả thành phần y Nếu ta dùng đốỉ sô' MATLAB xử lí sô' phức, phần thực thành phần X phần ảo thành phần y Các hàm vẽ vec tơ gồm: compass vẽ véc tơ gốic toạ độ hệ toạ độ cực feather vẽ vec tơ đường thẳng quiver vẽ vec tơ 2D có thành phần (u, v) quiver3 vẽ vec tơ 3D có thành phần (u, V, w) a Hàm compass: Ta xét ví dụ vẽ hưóng tốc độ gió Các vec tơ xác định hướng (góc tính độ) tốc độ gió (km/h) là: hg = [4 90 3 335 270 335 335]; td = [6 9 10 14 12]; Ta biên đổi hướng gió thành radian trưóc biên đổi thành toạ độ vuông góc hgl = h g * pi/180; [x, y] = pol2cart(hgl, td); compassix, y) tạo ghi đổ thị: gc = ỰHuong gio sue gio tai san bay Da Nang') text(-28,15, gc) b Hàm feather: Hàm feather hiển thị vec từ đường thẳng song song với trục X Ví dụ để tạo vec tơ có góc từ 90° đến 0° độ dài ta viết chương trình ctl_30.m: theta = 90: -10: 0; 26 r = ones(size(theta)); trưóc vẽ, chuyển sô' liệu sang toạ độ vuông góc tăng độ lớn thành r để dễ nhìn: [u, v] = pol2cart(theta*pi/180, r*10); feather(u, v) axis equal Nếu đôi sô' sô' phức z feather coi phần thực X phần ảo y Ta xét chương trình ctl_31.m: t = 0: 0.3:10; s = 0.05 + i; z = exp(-s*t); feather(Z) c Hàm quiver: Hàm quiver hiển thị vec tơ điểm cho mặt phẳng Các vec tơ xác định thành phần X y Ví dụ để tạo 10 contour hàm peaks ta dùng chương trình ctl_32.m: n = -2.0: 2:2.0; [X,Y,Z] = peaks(n); contour(X, Y, z, 10) Bây dùng hàm gradient để tạo thành phần vec tơ dùng làm đôi sô' cho quiver: [ư , V] = gradient(Z, 2); Đặt hold on để thêm đường contour: hold on quiver(X,Y,U,V) hold off 27 d Hàm quiver3: Hàm quỉver3 hiển thị vec tơ có thành phần (u,v,w) điểm (x, y, z) Ví dụ ta biểu diễn quỹ đạo vật ném theo t Phương trình chuyển động là: z(t) = v0t + ^ Ta viết chương trình ctl_33.m Trước hết ta gán vận tốc ban đầu gia tốc a: vO = 10;% Van toc ban dau a = -32; % gia toc Tiếp theo tính z thời điểm: t = 0:.1:1; z = vz*t + l/2*a*t.A2; Tính vị trí theo hướng X y: vx = 2; X = v x*t; vy = 3; y = vy*t; Tính thành phần vec tơ vận tốc hiển thị dùng quiver3: u = gradient(x); V - gradỉent(y); w = gradient(z); scale = 0; quiver3(x, y, z, u, V, lư, scale) axis square §3 GIAO DIỆN ĐÔ HOẠ Khái niệm chung: Để tiện dụng ta tạo nên giao diện đổ hoạ(GUI Graphic User Interface) người dùng MATLAB Trong giao diện ta xuất liệu dạng: văn đổ hoạ Mỗi GUI có hay nhiều layout(diện mạo) Việc tạo GUI tạo nên công cụ đổ hoạ phục vụ 28 nhập xuất liệu cách trực giác, râ't thuận tiện Ngoài dùng GUI để giám sát trình, hiển thị đối tượng, Nhập xuất kí tự, số liệu GUI: a Tạo khung hình: Ta xét lệnh sau(ctl_35.m): f = input('Nhap nhiet do(do K ):'); c = ( f - 32)*5/9; fprintf(l/nhiet do(dỡ C) la: %g\n', c) Ba dòng lệnh thực công việc sau: - nhập giá trị đầu vào - thực phép tính quy đổi nhiệt độ - xuất kết hình Bây ta tìm cách cài dòng lệnh cho chúng thực khuôn khổ khung đổ hoạ có dạng Các lệnh sau(ctlJ36.m) thực công việc trên: set(gcf, 'DefauUUicontrolllnit', 'Normalized') frame_l = uicontroKgcf, Style'Fram e', P osition [0.1 0.1 0.8 0.3]); frame_2 = uicontroKgcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]); setịframe_l, 'BackgroundColor', [0.5 0.5 0.5]); set(frame_2, 'BackgrounảCoỉọr', [0.5 0.5 0.5]); ' J 29 text_f= uicontroKgcf, 'Style', 'Text', 'String', 'Fahrenheit: ' Pos i t i o n [0.3 0.7 0.2 0.05], 'HorizontalAlignment'Left'); ed itj= uicontroligcf, 'Style', 'Edit', 'String', '168.0', 'Position', [0.6 0.7 0.1 0.05 ], 'HorizontalAlignment'Right 'Callback', 'ctl_38'); text_cl = uicontrol(gcf, ' S t y l e ' T e x t 'String', 'Celcius: 'Position', [0.3 0.3 0.2 0.05], 'H o rizo n ta lA lign m en t 'Left'); text_c2 = uicontroKgcf, ' S t y l e ' T e x t 'String', '100.0', 'Position', [0.6 0.3 0.1 0.05], 'HorizontalAlignment'Left'); Bây ta xem lệnh hoạt động Các lệnh sau: set(gcf, 'DeỷauỉtUicontroỉUnỉt'Normalized') framel = uicontroKgcf,'Style', 'Frame', 'Position', [0.10.10.8 0.3]); frame2 = uicontroligcf/Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3Ỉ); setiframel, 'BackgroundCoỉor', [0.5 0.5 0.5Ỉ); set(frame2/BackgroundColor', [0.5 0.5 0.5]); tạo hai khung hình chữ nhật cửa sổ Figure hành vói màu xám Hai khung (Frames) có toạ độ góc trái (0.1, 0.1) (0.1, 0.6), chiều cao 0.3 đơn vị bề rộng 0.8 đon vị Đom vị tính % kích cỡ Figure Vậy ta diễn giải sau: - Khung thứ nhât có góc trái dưói điểm có toạ độ 10% chiều ngang 10% chiều cao khung Figure - Khung thứ có góc trái phía dưói điểm có toạ độ ứng với 10% chiều ngang 60% chiều cao khung Figure - Cả hai khung có chiều cao 30% chiều cao bề ngang 80% bề ngang khung Figure 30 b Dùng lệnh edit text đ ể nhập xuất kí tự s ố liệu: Trên ta dùng lệnh uicontrol để tạo xác định vị trí hai khung hình Đoạn lệnh sau sử dụng uicontrol để viết chuỗi kí tự "Fahrenheit" lên khung bên trên: text_f= uicontroKgcf, 'Style','Text', 'String','Fahrenheit: 'Position ,[0.3 0.7 0.2 0.05]/HorizontalAlignment'/Left'); Chuỗi kí tự "Fahrenhaeit" đặt vào vị trí dồn trái ô có Position ghi đoạn chương trình Đoạn lệnh sau dùng Edit để viết chuỗi kí tự "68.0” vào vị trí bên cạnh "Fahrenheit" Chuỗi kí tự có vị trí dồn phải ô (Position Box) edỉtj:= uicontroKgcf/Style’, 'Edit', 'String', '168.0', 'Position', [0.6 0.7 0.1 0.05 ], 'HorizontalAlignment'Right 'Callback', 'ctl_38'); Do sử dụng edit, chuỗi kí tự "68.0" chuỗi viết lại trực tiếp GUI Sau nhấn nút trên, giá trị mói viết lại tiếp nhận MATLAB gọi lệnh viết phần callback ctl_38.m Cuổỉ ta phải dùng uicontrol để tạo ta chuỗi text, hiển thị chuỗi "Celcius" "20.0" khung bên text_cl - uicontroKgcf,'Style'/Text','String','Celcỉus: 'Position',[0.3 0.3 0.2 0.05]/HorizontalAlignment'/Left'); text_c2 = uicontroKgcf, 'Style', 'Text', 'String', '20.0', 'Position [0.6 0.3 0.1 0.05]/HorỉzontalAlignment'/Left'); c Tự động cập nhật giá trị lên GUI: Để hoàn thiện ví dụ GUI ta thực chương trình với nhiệm vụ tính quy đổi từ độ K sang độ c tự động điền kết vào ô bên cạnh chuỗi Celcius Đoạn mã sau phục vụ mục đích callback (hoàn trả giá trị) lưu vào file ctl_38.m có nội dung sau: / = get(edit_f, 'String'); f = str2num(f); c = (f-32)*5/9; 31 c numlstr(c); = set(text_c2, 'Stringc); Đoạn mã nhận giá trị lệnh uicontrol "edit" đọc vào dạng chuỗi (string) sau đó: - biên đổi từ dạng string sang dạng sô' - tính quy đổi từ nhiệt độ fahrenheit sang nhiệt độ celcius - biên đổi từ số sang string - xuâ't kết dạng string GUI nhờ text_c2 Nhập số liệu từ trượt: Ngoài cách nhập sô' liệu từ bàn phím, ta nhập số liệu từ trượt Ta muôn tạo giao diện sau: Trong giao diện này, trượt làm thay đổi giá trị nhiệt độ đua vào nhiệt độ quy đổi tính theo độ c thay đổi tương ứng Các lệnh tạo giao diện (ctl_37.m) là: set(gcf, 'DefaultUicontrolUnit', 'Normalized') frameJL = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]); frame_2 = uicontroKgcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]); set(frame_l, 'BackgroundColor' ,[0.5 0.5 0.5]); set(frame_2, 'BackgroundColor', [0.5 0.5 0.5]); text_f= uicontroKgcf, 'Style', 'Text', 'String', 'Fahrenheit: '/Position', [0.3 0.7 0.2 0.05], 'HorizontalAlignment', 'Left'); ed itj= uicontroKgcf, 'Style', 'Edit', 'String', '168.0'.,,, 'Position', [0.6 0.7 0.1 0.05 ], ’HorizontalAlignment'Right 'Callback', 'ctl_38'); text_cl= uicontroKgcf/Style', 'Text', 'String', 'Celcius: 'Position', [0.3 0.3 0.2 0.05], 'HorizontalAlignment'Left'); text_c2= uicontroKgcf/Style', 'Text', 'String', '100.0', 'Position', [0.6 0.3 0.1 0.05], 'HorizontalAlignment'Left'); sliderJ = uicontroKgcf/Style', 'Slider', M m , 32.0, 'Max', 212.0, 'Value', 68.0, 'Position', [0.60.8 0.2 0.05], 'Callback', 'ctl_39; ctl_38'); Để tạo trượt ta dùng lệnh: sliderJ = uicontroKgcf, 'Style', 'Slider', 'Min',32.0, 'Max',212.0, 'Value',68.0/Position',[0.6 0.8 0.2 0.05], 'Callback','ctl_39; ctl_38'); Như Callback gọi chuỗi lệnh MATLAB, phân cách dâu châm than hay dấu phẩy Chuỗi callback gọi ctl_39.m: f = get(slỉderj, 'Value'); f = num2str(f); set(edit_f,'String',f,'CallBack','ctl_40; ctl_38'); với tác dụng nhập nhiệt độ giữ *'Value' slider_f vào vị trí bên cạnh ô chứa chuỗi "Fahrenheit" Sau Callback gọi tiếp ctl_38.m để tính quy đổi giá trị nhiệt độ gán vào ô cạnh chuỗi "Celcius" File ctl_40.m sau: / = get(edit_f, 'String'); f = str2num(f); setisliderj,'Value ',f); 33 có nhiệm vụ cập nhật giá trị giữ Value' slider_f để sau ctl_38.m làm nốt phần việc lại: tính đổi nhiệt độ gán vào vị trí cạnh ô chứa chuỗi "Celcius" Chọn lựa xuấỉ số liệu: a Khái niệm chung: Ngoài khả xuất liệu cô' định theo kiểu string hay kiểu sô', ta xuâ't liệu theo danh mục Để minh hoạ, ta tạo file ctl_41.m sau: f = inputCNhap nhiet do: '); r = f +459.7; c = (f-32)*5/9; k = c + 273.15; choice = input(['Nhap cho Rankie', '2 cho Celcius', '3 cho Kelvin: ']); if choice = = fprintfd, 'Nhiet (do R) la: %g\n', r); elseif choice = = fprintf(2, 'Nhiet (do C) la: %g\n', c); elseif choice = = fprintf(2, 'Nhiet (do C) la: %g\n', c); end Từ cửa sổ lệnh, nhập lệnh ctl_41 MATLAB hỏi nhiệt độ đích quy đổi hiển thị kết Tuy nhiên công cụ GUI MATLAB cho phép ta thực việc lựa chọn thuận lợi Ta chọn phương xuât liệu sau đây: - dùng popupmenu - dùng list box - dùng radio button - dùng check box b Dùng popupmenu: Ta tạo giao diện sau: 34 Các lệnh thực công việc (ctl_42.m) là: set(gcf, 'De/àùỉtllicộntrộlllnit', 'Normalized') frameJL = uicontroKgcf, 'Style', 'Frame',.,, 'Position', [0.10.1 0.8 0.3]); frame_2 = uicontroKgcf, 'Style', ’Frame’, ' 'Position', [0.10.6 0.8 0.3]); set(frame_l, 'BackgroundColor', [0.5 0.5 0.5]); set(frame_2!, 'BackgroundColor' ,[0.5 0.5 0.5]); text_f= uicontroKgcf/style', 'Text', 'String', Fahrenheit: P o s it io n [0.3 0.7 0.2 0.05], 'HorizontalAlignment 'Left '); edit_f= uicontroKgcf,'Style', 'Edit', S t n n g '168.0 'Position', [0.6 0.7 0.1 0.05 ], 'HorizontalAlignment', 'Right',, 'Callback', 'ctl_38')ỉ pợpup_c = uicontroKgcf, ' Style'Papupmenu S trin g 'Rankine Celcius Kelvin, 'Value',2, 'Position ,[0.3 0.3 0.2 0.05], ' ' # I I 'Callback','ctl_43; ctl_45'); text_c2 = uicontroUgcf, 'Style', 'Text', 35 'String', '100.0', 'Position', [0.6 0.3 0.1 0.05], 'HorizontalAlignment'Left'); slider_f= uicontroKgcf, 'Style', 'Slider', 'Min , 32.0, 'Max', 212.0, 'Value', 68.0, 'Position', [0.60.8 0.2 0.05], 'Callback', 'ctl_39; ctl_45'); Khi kích chuột vào Popupmenu , có ba khả chọn lựa xuất Tiếp tục nháy chuột vào khả đ ó , Popupmenu biên lại đơn vị chọn Khi dùng chuột kéo trượt frame phía trên, ta có giá trị quy đổi sang đơn vị chọn hiển thị phía Trong đoạn mã trên, giá tr ị' Value' đặt sẵn Khi Callback gọi ctl_43.m: choice = get(popup_c/Value'); giá trị biên choice đưa tới 'Value' Sau Callback gọi tiếp ctl_45.m để xem kết giữ choice File ctl_45.m sau: f = get(edit_f, 'String'); f = Str2num(f); r = f + 459.7; c —(f - 32)*5/9; k = c + 273.15; choice = inputd'Nhap cho Rankie', '2 cho Celcius', '3 cho Kelvin: ']); if choice = = t = r; elseif choice = = t = c; elseif choice = = t-k end t = numlstr(t); set(text_c2, 'String',t); 36 Bằng cách thay 'Popupmenu' 'Ràdiobutton' uicontrol ta có phương án Raảỉobutton Giao diện có dạng: Các lệnh thực công việc (ctl_46.m) là: sẹt(gcf, 'DefauUUiconirolÜmt'Normalized') frame_ĩ = uicontroKgcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]); fram ejz = uicontroKgcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]); set(frame_l,'BackgroundColor', [0.5 0.5 0.5]); set(jrame_2,'BackgrọụndC0Ỉ0Y', [0,5 0.5 0,5]); text_f= uicontroKgcf, 'Style', 'Text', 'String', 'Fahrenheit: '/Position', [0.3 0.7 0.2 0.051 ’HorizontalAlignment’, 'Left'); edit_f=uicontrol(gcf/ 'Style', 'Edit', 'String'/168.0', 'Position', [0.6 0.7 0.1 0.051 'HorizontalAUgnment 'Right','Callback','ctl_41'); strings = ['Rankine';'Ceĩcius'Kelvine']; show = [ 0; 1; 0]; ys = [ 3; 2; 1]*0.075 + 0.075; for i = 1:3 radio_c(i) = uicontroKgcf, 'Style', 'Radiobutton', 37 'String', strings(i), ’Value, show(i), 'Position', [0.3ys(i) 0.2 0.05], 'Callback', ’ctl_47; ctl_45'); end text_c2= uicontroKgcf, 'Style', 'Text', 'String'/100.0', 'Position', [0.6 0.3 0.1 0.05], 'HorizontalAlignment', 'Left'); slider_f = uicontroKgcf, 'Style', 'Slider', 'M in,32.0, 'Max', 212.0, 'Value', 68.0, 'Position', [0.6 0.8 0.2 0.051 'Callback', 'ctl_39; ctl_45'); File ctl_47.m: for i = 1:3 ifgcbo = = radio_c(i) choice = i; set(radio_c(i), ’Value, 1); elseif set(radio_c(i), ’Value, 0); end; end; Đoạn lệnh vòng lặp, so sánh số (handle) Callback thu (giá trị hàm gcbo trả về) với handle nút Nút có sô' trùng đóng (turn o n ,yValue' = 1) nút khác số bị ngắt (turn off,7Value' = 0) Cuổi Callback gọi ctl_45.m để thực việc tính quy đổi chọn hiển thị kết Điểm khác chọn, Popupmenu chứa phần tử radiobutton thời chứa nhiều phần tử Cuổì ta xét phương án dùng listbox Giao diện cần tạo sau: 38 a J ~L 1G8.Ũ Fahrenheit: Các mã tạo giao diện (ctl_48.m) là: set(gcf, DefaultUicontrolUnit Normalized') frameJL = uicontroHgcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]); frame_2 = uicontroUgcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]); set(frame_l, 'BackgroundColor', [0.5 0.5 0.5]); set(frame_2, BackgroundColor[0.5 0.5 0.5]); text_f= uicontroKgcf, 'Style', 'Text', 'String', 'Fahrenheit: ' Position [0.3 0.7 0.2 0.051 'HorizontalAlignment', 'Left'); edit_f= uicontroKgcf, 'Style', 'Edit', S tr in g '168.0', 'Position', , [0.6 0.7 0.1 0.051 'HorizontalAlignment', 'Right', 'Callback', 'ctl_38'); listboxjc = uicontroKgcf, 'Style',' Listbox' 'String', 'Rankine I Ceỉcius I Kelvin, 'Value', 2, 'Position', [0.3 0.3 0.2 0.051 'Callback', 'ctl_49;ctl_45')ỉ text_c2 = uiconfroKgcf, 'Style', 'Text', 'Sừing', '100.0', 'Position', ' ' ' ' [Ồ.6 0.3 0.1 0.05], HorizontalAlignment’, 'Left'); ' slider_f= uicọnừọỉ(gcf, 'Style', 'Slider', 'Mm',32.0, 'Max', 212,0, 'Value', 68.0, 'Position', [0.6 0.8 0.2 0.05], 'Callback', 'ctl_39; ctl_45'); Công cụ đồ hoạ ỉạo GUI a Tạo G in công cụ đ ể hoạ: Trên ta xem xét cách tạo GUI phương pháp thủ công Ta tạo GUI công cụ đổ hoạ Khi nhập lệnh guide ta gọi trình đồ hoạ (Graphics User Interface Development Environment) để soạn thảo layout, Kết ta có layout rỗng sau: Việc ta thiết k ế giao diện mong muốn Ta dùng chuột kéo phần tử cần dùng từ bên trái thả vào layout rỗng bên phải Ta dịch chuyển phần tử đê' vị trí mong muốn cân chỉnh công cụ Alignment Vói phần tử ta cấn xác định thuộc tính cho cách bấm đúp vào phẩn tử hay bấm vào cổng cụ soạn thảo tính Sau thiết k ế xong ta lưu lại Lúc MATLAB tự động tạo file *.fig dùng lưu giao diện vừa tạo file *.m chưa mã lệnh cần thực Việc cuôì viết mã lệnh vào file *.m Trong trình thiết k ế ta chạy thử xem sau bước thiết k ế đạt yêu cầu chưa cách bâm vào ô chạy thử Một s ố v í dụ tạo GUI: Đêm s ố lần bếm chuột Ta thiết kê' giao diện sau: 40 [...]... các thuộc tính của trục toạ độ đang có gca trở về trục toạ độ cũ MATLAB chọn các giới hạn trên trục toạ độ và khoảng cách đánh dấu dựa trên sô' liệu dùng để vẽ Dùng lệnh axis có thể đặt lại giói hạn này Cú pháp của lệnh: axis[ xm in, xm ax, ym in, ymax] Ta xét chương trình ctl_13.m như sau: 16 X = 0:0.025:pi/2; plotix, tan(x), '-ro') axis([0 pi/2 0 5]) MATLAB chia vạch trên trục dựa trên phạm vi dữ... thay đổi toạ độ X, y và z một lượng nhỏ nhờ một vòng lặp Ta có thể tạo ra các hiệu ứng khác nhau nhờ các cách xoá hình khác nhau Chúng gồm: none MATLAB không xoá đôĩ tượng khi nó di chuyển background MATLAB xoá đổỉ tượng bằng cách vẽ nó có màu nền xor MATLAB chỉ xoá đôi tượng Ta tạo ra M-file có tên là ctl_23.m như sau: A = [ -8/3 0 0; 0-10 10; 0 28 -1 1 y = [35 -10-7]'; h = 0.01; p = plot3(y(l),... = int2str(x); dispd'Do la so: numx]); end e break: phát biểu break để kết thúc vòng lặp fo r hay while mà không quan tâm đến điều kiện kết thúc vòng lặp đã thoả mãn hay chưa §2 ĐỔ HOẠ TRONG MATLAB 1 Các lệnh vẽ: MATLAB cung cấp một loạt hàm để vẽ biểu diễn các vec tơ sô' liệu cũng như giải thích và in các đường cong này plot đổ họa 2-D vói sô' liệu 2 trục vô hướng và tuyên tính plot3 đồ họa 3-D với... Mã - — Kiểu đường đường liền đường đứt nét Mã • Kiểu đường đường châm châm đường châm gạch 14 Ta xét chương trình ctl_8.m như sau: X = - p i : p i /1 0 : pi; y - tan(sỉn(x)) - sin(tan(x)); plot(x, y, '—rs', 'LineWidth', 2, 'MarkerEdgeColor', 'k' 'MarkerFaceColor', 'g', 'MarkerSỉze', 10) Chương trình này sẽ vẽ đường cong y = f(x) có các đặc tả sau : - đường vẽ là đường đứt nét(—) - khổĩ đánh dấu hình... thì MATLAB không xoá đồ thị đang có Nó thêm sô' liệu vào đồ thị mới này Nêu phạm vi giá trị của đổ thị mới vượt quá các giá trị của trục toạ độ cũ thì nó sẽ định lại tỉ lệ xích 6 Chỉ vẽ các điểm số liệu: Để vẽ các điểm đánh dấu mà không nổi chúng lại với nhau ta dùng đặc tả nói rằng không có các đường nôì giữa các điểm, nghĩa là ta gọi hàm plot chỉ với đặc tả màu và điểm đánh dâu Ta xét chương trình. .. kiểu điểm Ta xét chương trình ctl_10.m: X = 0:pi/15:4*pi; y = exp(2*sin(x)); plot(x, y, '-r', X, y, 'ok') dùng vẽ đường cong y = f(x) có đường nôi liền, màu đỏ Điểm đánh dấu là 15 chữ o có màu đen 8 Vẽ với hai trục y: Lệnh plotyy cho phép tạo một đổ thị có hai trục y Ta cũng có thể dùng plotyy để cho giá trị trên hai trục y có kiểu khác nhau nhằm tiện so sánh Ta xét chương trình ctljLl.m : t = 0:900;... 'semilogy'plot'); 9 Vẽ đường cong với số liệu 3 - D: Nếu X, y, z là 3 vec tơ có cùng độ dài thì plot3 sẽ vẽ đường cong 3D Ta viết chương trình ctl_12.m: t = 0:pi/50:10*pỉ; plot3 (sin(t),cos(t), t) axis square; grid on 10 Đặt các thông số cho trục: Khi ta tạo một hình vẽ, MATLAB tự động chọn các giới hạn trên trục toạ độ và khoảng cách đánh dấu dựa trên số liệu dùng để vẽ Tuy nhiên ta có thể mô tả lại phạm...randn(3, 3) 8 Các lệnh dùng lập trình: a Các phát biểu điểu kiện if, else, elseif Cú pháp của if: if end Nêu cho kết quả đúng thì phần lệnh trong thân của if được thực hiện Các phát biểu else và leseif cũng tương tự Ví dụ: Ta xét chương trình) ctl_4 m để đoán tuổi như sau: clc dispCXin chao! Han hanh duoc... liệu và chia đều Ta có thể mô tả cách chia nhờ thông số xtick và ytick bằng một vec tơ tăng dần Ví dụ xét chương trình ctl_14.m: X = -pi: 1: pi; y = sin(x); plot(x, y) setigca, 'xtỉck', -pi :pi/2:p); setigca, 'xtỉcklabeV, {'-pi', '-pi/2', '0', 'pi/2', 'pi'}) 11 Ghi nhãn lên các trục toạ độ: MATLAB cung cấp các lệnh ghi nhãn lên đổ hoạ g ồ m : thêm nhãn vào đổ hoạ title thêm nhãn vào trục X xlabel thêm... text Ta có chương trình ctl_15.m: X = -pi: 1: pi; y = sin(x); plot(x, y) xlabeict = 0 to 2 \pi', 'Fontsize', 16) ylabelCsỉnit)', 'Fontsize, 16) 17 title('\it{Gia tri cua sin tu zero đến 2 pi}', 'Fontsize', 16) text(3*pi/4, sin(3*pi/4)/\leftarrowsin(t ) = 0.707', 'FontSize', 12) 12 Định vị văn bản trên hình vẽ: Ta có thể sử dụng đôĩ tượng văn bản để ghi chú các trục ở vị trí bât kì MATLAB định vị văn

Ngày đăng: 15/12/2016, 01:06

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan