Mở đầuTiếp cận lập trình Matlab Một thủ tục chuẩn của việc sử dụng lập trình MatLab cho việc giải quyết một bài toán kỹ thuật bao gồm các bước: 1 Phân tích bài toán và xác định thuật giả
Trang 1Viện Toán ứng dụng và Tin học, ĐHBK Hà Nội
Hà Nội, tháng 8 năm 2015
Trang 25 Điều khiển luồng
6 Vector hóa (Vectorization)
7 Quản lý các biến Input, Output
8 Tính giá trị hàm một cách gián tiếp
9 Chú thích
10 Gỡ lỗi
11 Một số kinh nghiệm trong lập trình Matlab
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 3Mở đầu
Tiếp cận lập trình Matlab
Một thủ tục chuẩn của việc sử dụng lập trình MatLab cho việc giải quyết một bài toán
kỹ thuật bao gồm các bước:
1 Phân tích bài toán và xác định thuật giải (trên giấy)
2 Phác thảo các công thức tính toán (trên giấy)
3 Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger
4 Kiểm nghiệm và sửa lỗi
5 Giải bài toán
Trang 4Mở đầu
Tiếp cận lập trình Matlab
Một thủ tục chuẩn của việc sử dụng lập trình MatLab cho việc giải quyết một bài toán
kỹ thuật bao gồm các bước:
1 Phân tích bài toán và xác định thuật giải (trên giấy)
2 Phác thảo các công thức tính toán (trên giấy)
3 Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger
4 Kiểm nghiệm và sửa lỗi
5 Giải bài toán
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 5Mở đầu
Tiếp cận lập trình Matlab
Một thủ tục chuẩn của việc sử dụng lập trình MatLab cho việc giải quyết một bài toán
kỹ thuật bao gồm các bước:
1 Phân tích bài toán và xác định thuật giải (trên giấy)
2 Phác thảo các công thức tính toán (trên giấy)
3 Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger
4 Kiểm nghiệm và sửa lỗi
5 Giải bài toán
Trang 6Mở đầu
Tiếp cận lập trình Matlab
Một thủ tục chuẩn của việc sử dụng lập trình MatLab cho việc giải quyết một bài toán
kỹ thuật bao gồm các bước:
1 Phân tích bài toán và xác định thuật giải (trên giấy)
2 Phác thảo các công thức tính toán (trên giấy)
3 Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger
4 Kiểm nghiệm và sửa lỗi
5 Giải bài toán
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 7Mở đầu
Tiếp cận lập trình Matlab
Một thủ tục chuẩn của việc sử dụng lập trình MatLab cho việc giải quyết một bài toán
kỹ thuật bao gồm các bước:
1 Phân tích bài toán và xác định thuật giải (trên giấy)
2 Phác thảo các công thức tính toán (trên giấy)
3 Viết chương trình MatLab (M-file) sử dụng MATLAB Editor/Debugger
4 Kiểm nghiệm và sửa lỗi
5 Giải bài toán
Trang 8Mở đầu
Các chương trình MatLab được chứa trong các ”m-files”
â Là các file văn bản thông thường, không phải file nhị phân
â Các file phải có đuôi ”.m”
Các ”m-file’ phải được đặt trong đường dẫn hiện thời trong cửa sổ CommandWindow
â MatLab quản lý đường dẫn trong của nó
â Đường dẫn là một danh sách các thư mục mà MatLab sẽ tìm kiếmmột ”m-file” để thực thi
â Một chương trình có thể tồn tại và không có lỗi nhưng có thể vẫnkhông chạy nếu MatLab không tìm thấy nó
â Có thể thay đổi đường dẫn bằng cách dùng các lệnh path, addpath
và rmpath
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 95 Điều khiển luồng
6 Vector hóa (Vectorization)
7 Quản lý các biến Input, Output
8 Tính giá trị hàm một cách gián tiếp
9 Chú thích
10 Gỡ lỗi
11 Một số kinh nghiệm trong lập trình Matlab
Trang 10Các thủ tục (Script Files)
Không thực sự là các chương trình
â Không có các dữ liệu input/output
â Các biến thủ tục là một phần của không gian làm việc
Hữu ích cho các công việc cố định
Hữu ích như là một công cụ khi tạo các tài liệu cho các bài tập ở nhà
Lời khuyên
Các hàm (functions) có rất nhiều tiện ích so với các thủ tục (scripts)
=⇒ Luôn luôn sử dụng hàm thay cho thủ tục
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 11Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Tất cả các biến được tạo ra trong thủ tục sẽ được thêm vào không gian làm việc Điềunày sẽ có ảnh hưởng đáng kể bởi vì
Các biến đã tồn tại trong không gian làm việc có thể bị viết chồng lên
Sự thực thi của các thủ tục có thể bị ảnh hưởng bởi trạng thái của các biến trongkhông gian làm việc
Ví dụ 1
Thủ tục easyplot
% Load
D=load(’xy.dat’); % D is a matrix with two columns
x=D(:,1); y=D(:,2); % x is the first column, y is second one
xlabel(’x axis’)
ylabel(’y axis’)
title(’Plot of generic x-y data set’)
Trang 13Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi
Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
Trang 14Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi
Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 15Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi
Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
Trang 16Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi
Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 17Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi.Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
Trang 18Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi.Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 19Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi.Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
Trang 20Các thủ tục (Script Files)
Tác dụng phụ của các thủ tục
Nói chung, các tác dụng phụ:
Diễn ra khi một chương trình thay đổi các biến ngoại trừ input/output
Có thể gây các lỗi mà rất khó để phát hiện ra
Không phải lúc nào cũng tránh được
Các tác dụng phụ của thủ tục
Tạo ra và thay đổi các biến trong không gian làm việc
Không đưa ra khuyến cáo rằng các biến trong không gian làm việc đã bị thay đổi.Bởi vì các thủ tục có các tác dụng phụ, tốt hơn là gói gọn tất cả trong hàm ”m-file”
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 215 Điều khiển luồng
6 Vector hóa (Vectorization)
7 Quản lý các biến Input, Output
8 Tính giá trị hàm một cách gián tiếp
9 Chú thích
10 Gỡ lỗi
11 Một số kinh nghiệm trong lập trình Matlab
Trang 22Các dữ liệu đầu vào cho phép cùng một thủ tục tính toán (cùng thuật toán) ápdụng với các dữ liệu khác nhau Do đó, các hàm m-file có thể dùng lại nhiều lần.Các hàm có thể gọi các hàm khác
Các thủ tục riêng có thể gói vào trong một hàm Các tiếp cận này cho phép pháttriển lời giải cấu trúc của các bài toán phức tạp
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 23Các dữ liệu đầu vào cho phép cùng một thủ tục tính toán (cùng thuật toán) ápdụng với các dữ liệu khác nhau Do đó, các hàm m-file có thể dùng lại nhiều lần.Các hàm có thể gọi các hàm khác
Các thủ tục riêng có thể gói vào trong một hàm Các tiếp cận này cho phép pháttriển lời giải cấu trúc của các bài toán phức tạp
Trang 24Các dữ liệu đầu vào cho phép cùng một thủ tục tính toán (cùng thuật toán) ápdụng với các dữ liệu khác nhau Do đó, các hàm m-file có thể dùng lại nhiều lần.Các hàm có thể gọi các hàm khác
Các thủ tục riêng có thể gói vào trong một hàm Các tiếp cận này cho phép pháttriển lời giải cấu trúc của các bài toán phức tạp
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 25Các dữ liệu đầu vào cho phép cùng một thủ tục tính toán (cùng thuật toán) ápdụng với các dữ liệu khác nhau Do đó, các hàm m-file có thể dùng lại nhiều lần.Các hàm có thể gọi các hàm khác
Các thủ tục riêng có thể gói vào trong một hàm Các tiếp cận này cho phép pháttriển lời giải cấu trúc của các bài toán phức tạp
Trang 26Các dữ liệu đầu vào cho phép cùng một thủ tục tính toán (cùng thuật toán) ápdụng với các dữ liệu khác nhau Do đó, các hàm m-file có thể dùng lại nhiều lần.Các hàm có thể gọi các hàm khác
Các thủ tục riêng có thể gói vào trong một hàm Các tiếp cận này cho phép pháttriển lời giải cấu trúc của các bài toán phức tạp
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 27Các thủ tục riêng có thể gói vào trong một hàm Các tiếp cận này cho phép pháttriển lời giải cấu trúc của các bài toán phức tạp.
Trang 28Các thủ tục riêng có thể gói vào trong một hàm Các tiếp cận này cho phép pháttriển lời giải cấu trúc của các bài toán phức tạp.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 29Các hàm m-file
Cú pháp
Dòng đầu tiên của hàm ”m-file” có dạng
function [outArgs]=funName(inArgs)
trong đó outArgs là danh sách các biến đầu ra, được đặt trong [ ]
Các biến trong outArgs được cách nhau bởi dấu ”,”
[ ] là tùy chọn nếu chỉ có 1 tham số đầu ra
Hàm mà không có outArgs vẫn là hợp lệ
và danh sách các biến đầu vào inArgs được đặt trong ( )
Các biến trong inArgs được cách nhau bởi dấu ”,”
Hàm mà không có inArgs vẫn là hợp lệ
Có thể kiểm tra tính hợp lệ của tên hàm bằng cách dùng lệnh
>> isvarname funName
Trang 30Các hàm m-file
Input và Output
twosum.m: two inputs, no output
function twosum(x,y)
% twosum Add two matrices and print the result
% two inputs, no output
x+y
threesum.m: three inputs, one output
function s=threesum(x,y,z)
% threesum Add three matrices and return the result
% three inputs, one output
s=x+y+z;
addmult.m: two inputs, two outputs
function [s,p]=addmult(x,y)
% addmult Compute sum and product of two matrices
% two inputs, two outputs
s=x+y;
p=x*y;
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 32CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 33Các hàm m-file
Tóm tắt về các tham số Input và Output
Các giá trị được kết hợp thông qua các dữ liệu input và output
Các biến được định nghĩa trong một hàm là biến địa phương Các hàm khác vàmôi trường cửa sổ lệnh sẽ không ”nhìn” được chúng
Số lượng các biến trả về nên trùng với số lượng các biến output trong hàm
Trang 34Các hàm m-file
Tóm tắt về các tham số Input và Output
Các giá trị được kết hợp thông qua các dữ liệu input và output
Các biến được định nghĩa trong một hàm là biến địa phương Các hàm khác vàmôi trường cửa sổ lệnh sẽ không ”nhìn” được chúng
Số lượng các biến trả về nên trùng với số lượng các biến output trong hàm
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 35Các hàm m-file
Tóm tắt về các tham số Input và Output
Các giá trị được kết hợp thông qua các dữ liệu input và output
Các biến được định nghĩa trong một hàm là biến địa phương Các hàm khác vàmôi trường cửa sổ lệnh sẽ không ”nhìn” được chúng
Số lượng các biến trả về nên trùng với số lượng các biến output trong hàm
Trang 365 Điều khiển luồng
6 Vector hóa (Vectorization)
7 Quản lý các biến Input, Output
8 Tính giá trị hàm một cách gián tiếp
9 Chú thích
10 Gỡ lỗi
11 Một số kinh nghiệm trong lập trình Matlab
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 37Nhập, xuất dữ liệu
Các hàm nhập dữ liệu
Hàm input có thể được sử dụng để nhập dữ liệu từ bàn phím
Các tham số đầu vào của các hàm được ưa dùng hơn
Các hàm xuất dữ liệu
Hàm disp có thể được sử dụng cho các kết quả đơn giản
Dùng hàm fprintf cho các dữ liệu định dạng trước
Trang 38Nhập, xuất dữ liệu
Xuất dữ liệu với disp và fprintf
Xuất dữ liệu trong cửa sổ lệnh được thực hiện với hàm disp hoặc fprintf Nếu muốnghi dữ liệu vào file bắt buộc phải dùng hàm fprintf
Trang 40>> s=’Have a nice day’; disp(s)
Have a nice day
>> t=’You are using Matlab 7.10.0’;
>> disp([s;t])
??? Error using ==> vertcat
CAT arguments dimensions are not consistent
>> disp(char(s,t))
Have a nice day
You are using Matlab 7.10.0
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 43??? Error using ==> minus
Matrix dimensions must agree
Trang 45??? Error using ==> horzcat
CAT arguments dimensions are not consistent
Trang 46Nhập, xuất dữ liệu
Sử dụng num2str với disp
Thay vào đó, sử dụng hai lệnh disp để hiển thị cột của các vector hay ma trận
Trang 48Nhập, xuất dữ liệu
Hàm fprintf
Cú pháp
fprintf(outFormat, outVariables)
fprintf(filehandle, outFormat, outVariables)
sử dụng outFormat để chuyển outVariables thành các xâu được in ra Trong dạng đầutiên, kết quả sẽ hiển thị trong cửa sổ lệnh Trong dạng thứ hai, kết quả sẽ được lưu vàofile được tham chiếu bởi fileHandle
Trang 49Nhập, xuất dữ liệu
Hàm fprintf
Thành phần outFormat định rõ cách các outVariables được chuyển thành và hiển thị.Xâu outFormat có thể chứa bất kỳ một ký tự nào Nó cũng phải chứa một mã chuyểnđổi cho mỗi outVariables Các mã chuyển đổi cơ bản được cho dưới bảng sau:
\n chèn một dòng mới sau xâu kết quả
\t chèn một tab sau xâu kết quả
Trang 50sqrt(2e-11) 0.0000 4.472e-06 4.47214e-06 4.472136e-06
sqrt(2e11) 447213.5955 4.472e+05 447214 4.472136e+05
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 53Nhập, xuất dữ liệu
Hàm fprintf
Xuất dữ liệu ra file
Để ghi dữ liệu ra file cần phải tạo ra một fileHandle với lệnh fopen Tất cả tác dụngcủa các định dạng cũng như vector hóa đều có thể áp dụng
Trang 545 Điều khiển luồng
6 Vector hóa (Vectorization)
7 Quản lý các biến Input, Output
8 Tính giá trị hàm một cách gián tiếp
9 Chú thích
10 Gỡ lỗi
11 Một số kinh nghiệm trong lập trình Matlab
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 55Điều khiển luồng
Để có thể thực thi một thuật toán, một ngôn ngữ lập trình cần có các cấu trúc điềukhiển
Các cấu trúc lặp (Looping or Iteration)
Các cấu trúc điều kiện: rẽ nhánh (Branching)