Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 112 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
112
Dung lượng
548,98 KB
Nội dung
Chương 3: Lập trình Matlab Trần Minh Tồn (1) Viện Toán ứng dụng Tin học, ĐHBK Hà Nội Hà Nội, tháng năm 2012 (1) Email: toantm24@gmail.com T.M Toàn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 1/87 / 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 2/87 / 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 3/87 / 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 3/87 / 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 3/87 / 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 tốn T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 3/87 / 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 tốn T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 3/87 / 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 4/87 / 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 5/87 / 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 6/87 / 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); T.M Toàn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 73/87 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 74/87 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); T.M Toàn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 75/87 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 76/87 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 77/87 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 80/87 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 81/87 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 T.M Toàn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 82/87 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 T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 83/87 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) T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 84/87 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 > clear >> x = 4; y = -2 ; >> twosum(1,2) ans = >> x+y ans = >> disp([x y]) -2 ... lập trình Matlab T.M Tồn (SAMI-HUST) Lập trình Matlab Hà Nội, tháng năm 2012 17/87 17 / 87 Nhập, xuất liệu Nhập, xuất liệu Các hàm nhập liệu Hàm input sử dụng để nhập liệu từ bàn phím Các tham số