Bài giảng Matlab: Chương 3 cung cấp cho người học những kiến thức cơ bản về lập trình Matlab. Những nội dung chính trong chương này gồm có: Các thủ tục; các hàm m-file; nhập, xuất dữ liệu; điều khiển luồng; vector hóa (vectorization); quản lý các biến input, output; tính giá trị hàm một cách gián tiếp; chú thích; gỡ lỗi; một số kinh nghiệm trong lập trình matlab.
CuuDuongThanCong.com (SAMI-HUST) Chương 3: Lập trình Matlab Viện Tốn ứng dụng Tin học, ĐHBK Hà Nội Hà Nội, tháng năm 2015 https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 1/87 tháng năm 2015 / 87 Mở đầu Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 2/87 tháng năm 2015 / 87 Mở đầu Mở đầu Tiếp cận lập trình Matlab Một thủ tục chuẩn việc sử dụng lập trình MatLab cho việc giải tốn kỹ thuật bao gồm bước: Phân tích tốn xác định thuật giải (trên giấy) Phác thảo cơng thức tính tốn (trên giấy) Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger Kiểm nghiệm sửa lỗi Giải toán CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 3/87 tháng năm 2015 / 87 Mở đầu Mở đầu Tiếp cận lập trình Matlab Một thủ tục chuẩn việc sử dụng lập trình MatLab cho việc giải tốn kỹ thuật bao gồm bước: Phân tích toán xác định thuật giải (trên giấy) Phác thảo cơng thức tính tốn (trên giấy) Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger Kiểm nghiệm sửa lỗi Giải toán CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 3/87 tháng năm 2015 / 87 Mở đầu Mở đầu Tiếp cận lập trình Matlab Một thủ tục chuẩn việc sử dụng lập trình MatLab cho việc giải tốn kỹ thuật bao gồm bước: Phân tích toán xác định thuật giải (trên giấy) Phác thảo cơng thức tính tốn (trên giấy) Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger Kiểm nghiệm sửa lỗi Giải toán CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 3/87 tháng năm 2015 / 87 Mở đầu Mở đầu Tiếp cận lập trình Matlab Một thủ tục chuẩn việc sử dụng lập trình MatLab cho việc giải toán kỹ thuật bao gồm bước: Phân tích tốn xác định thuật giải (trên giấy) Phác thảo cơng thức tính tốn (trên giấy) Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger Kiểm nghiệm sửa lỗi Giải toán CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 3/87 tháng năm 2015 / 87 Mở đầu Mở đầu Tiếp cận lập trình Matlab Một thủ tục chuẩn việc sử dụng lập trình MatLab cho việc giải toán kỹ thuật bao gồm bước: Phân tích tốn xác định thuật giải (trên giấy) Phác thảo cơng thức tính tốn (trên giấy) Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger Kiểm nghiệm sửa lỗi Giải tốn CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 3/87 tháng năm 2015 / 87 Mở đầu Mở đầu Các chương trình MatLab chứa ”m-files” ➢ Là file văn thông thường, file nhị phân ➢ Các file phải có ”.m” Các ”m-file’ phải đặt đường dẫn thời cửa sổ Command Window ➢ MatLab quản lý đường dẫn ➢ Đường dẫn danh sách thư mục mà MatLab tìm kiếm ”m-file” để thực thi ➢ Một chương trình tồn khơng có lỗi khơng chạy MatLab khơng tìm thấy ➢ Có thể thay đổi đường dẫn cách dùng lệnh path, addpath rmpath CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 4/87 tháng năm 2015 / 87 Các thủ tục Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 5/87 tháng năm 2015 / 87 Các thủ tục Các thủ tục (Script Files) Không thực chương trình ➢ Khơng có liệu input/output ➢ Các biến thủ tục phần không gian làm việc Hữu ích cho cơng việc cố định Hữu ích công cụ tạo tài liệu cho tập nhà Lời khuyên Các hàm (functions) có nhiều tiện ích so với thủ tục (scripts) =⇒ Luôn sử dụng hàm thay cho thủ tục CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 6/87 tháng năm 2015 / 87 Tính giá trị hàm cách gián tiếp Các hàm inline MatLab giới thiệu mở rộng lập trình hướng đối tượng (object-oriented programming - OOP) Hàm inline đơn giản giúp chương trình linh hoạt Cụ thể, ta khơng cần viết hàm m-files để tính giá trị số hàm có cơng thức đơn giản dùng hàm feval Thay function y=myFun(x) y=x.^2-log(x); ta dùng myFun=inline(’x.^2-log(x)’); Cả hai dạng khai báo myFun cho phép biểu thức dạng z=myFun(3); s=linspace(1,5); t=myFun(s); CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 73/87 tháng năm 2015 73 / 87 Chú thích Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 74/87 tháng năm 2015 74 / 87 Chú thích Chú thích Cú pháp : % Matlab comment line Các thích đặc biệt ➢ Các khối comment liền m-file phần help m-file đó: >> help filename =⇒ Khi viết hàm m-file, cố gắng thêm thích: mơ tả mục đích hàm, yêu cầu biến input định dạng biến output ➢ Mã "cells" phân định %% Cell title Trình soạn thảo Matlab Editor có khả đặc biệt để làm việc với "cells" Sử dụng publish(’file.m’) để thực thi file.m tạo ouput dễ nhìn % publish all m-files in current directory files=dir(’*.m’); cellfun(@(x) publish(x,struct(’evalCode’,false)), {files.name},’UniformOutput’,false); CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 75/87 tháng năm 2015 75 / 87 Gỡ lỗi Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 76/87 tháng năm 2015 76 / 87 Gỡ lỗi Gỡ lỗi MatLab hỗ trợ trình gỡ lỗi tương tác Các lệnh type dbtype hiển thị toàn nội dung m-file Lệnh error hiển thị lời nhắn hình dừng hẳn chương trình Hàm warning hiển thị lời nhắn lên hình nhiên khơng dừng chương trình Các lệnh pause keyboard dùng để tạm dừng chương trình Để khỏi chế độ gỡ lỗi (debug-mode) tiếp tục chương trình dùng lệnh return, dbcont, dbquit CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 77/87 tháng năm 2015 77 / 87 Gỡ lỗi Gỡ lỗi Sử dụng lệnh keyboard function r = quadroot(a,b,c) % quadroot Roots of quadratic equation and demo of keyboard command % % Synopsis: r = quadroot(a,b,c) % % Input: a,b,c = coefficients of a*x^2 + b*x + c = % % Output: r = column vector containing the real or complex roots d = b^2 - 4*a*c; if d> profile on >> profile clear CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 80/87 tháng năm 2015 80 / 87 Một số kinh nghiệm lập trình Matlab (The Profiler) Bây giờ, chạy thử chương trình >> example1(50000); Sau đó, nhập vào lệnh >> profile report Profiler tạo thông báo dạng HTML chương trình khởi tạo cửa sổ trình duyệt Tùy theo hệ thống máy tính mà kết hiển thị dạng khác CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 81/87 tháng năm 2015 81 / 87 Một số kinh nghiệm lập trình Matlab Tiền cấp phát nhớ cho mảng Các biến ma trận MatLab có khả điều chỉnh số hàng số cột cách linh động Ví dụ >> a=2 a = >> a(4,4)=1 a = 0 0 0 0 0 0 0 MatLab tự động điều chỉnh kích cỡ ma trận Do đó, nhớ dành cho liệu ma trận cần phải tiền cấp phát với cỡ lớn CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 82/87 tháng năm 2015 82 / 87 Một số kinh nghiệm lập trình Matlab Tiền cấp phát nhớ cho mảng Ví dụ 21 Xét đoạn mã a(1)=1; b(1)=0; for k=2:8000 a(k)=0.99803 * a(k-1) - 0.06279 * b(k-1); b(k)=0.06729 * a(k-1) + 0.99803 * b(k-1); end Thời gian thực thi đoạn mã 0.147 giây CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 83/87 tháng năm 2015 83 / 87 Một số kinh nghiệm lập trình Matlab Tiền cấp phát nhớ cho mảng Sau vòng lặp for kết thúc kích thước hai mảng a,b 10000 Do đó, để tiền cấp phát nhớ, tạo hai vector hàng a,b với 10000 phần tử 0: a = zeros(1,10000); b = zeros(1,10000); a(1) = 1; b(1) = 0; for k = 2:10000 a(k) = 0.99803 * a(k-1) - 0.06279 * b(k-1); b(k) = 0.06729 * a(k-1) + 0.99803 * b(k-1); end Với thay đổi này, thời gian thực thi 0.005 giây (nhanh gần lần) CuuDuongThanCong.com (SAMI-HUST) https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 84/87 tháng năm 2015 84 / 87 Một số kinh nghiệm lập trình Matlab Giới hạn giá trị mà không dùng cấu trúc if Để giới hạn giá trị khoảng cho trước, cách trực tiếp để lập trình if x < lowerBound x = lowerBound; elseif x > upperBound x = upperBound; end Tuy nhiên, cách thực thi chậm Một phương pháp nhanh dùng hàm max x = max(x,lowerBound); % Clip elements from below, x >= lowerBound x = min(x,upperBound); % Clip elements from above, x > twosum(2,2) ans = >> x=[1 2]; y= [3 4]; >> twosum(x,y)... Các hàm m-file Các hàm m-file Trong MatLab tên hàm phải trùng với tên file có m Hàm chương trình con: ➢ Các hàm sử dụng tham số đầu vào/ra để kết hợp chúng với hàm khác lệnh window ➢ Các hàm... https://fb.com/tailieudientucntt Lập trình Matlab Hà Nội, 11/87 tháng năm 2015 11 / 87 Các hàm m-file Các hàm m-file Trong MatLab tên hàm phải trùng với tên file có m Hàm chương trình con: ➢ Các hàm sử dụng tham số đầu