BÀI GIẢNG ĐIỆN TỬ

TIN HỌC ỨNG DỤNG TRONG KỸ THUẬT ĐỊA CHẤT & DẦU KHÍ

MATLAB

Tác giả : ThS. Đỗ Quang Khánh

ThS. Bùi Tử An

Bộ môn : Khoan & Khai thác dầu khí

Copyright 2007

 Tổng quan về MATLAB

 Các phép toán, biểu thức và hàm cơ bản

 Lập trình trong MATLAB

 Đồ họa cơ bản

 Cấu trúc chƣơng trình

 BÀI TẬP

Copyright 2007

MATLAB CĂN BẢN

2

MATLAB

 Symbolic trong MATLAB

 Ma trận và đại số tuyến tính

 Hàm số và phƣơng trình

 Đồ họa nâng cao

 Vấn đề tạo giao diện

 BÀI TẬP

Copyright 2007

CÁC VẤN ĐỀ NÂNG CAO TRONG MATLAB

3

MATLAB

 MATLAB (Matrix Laboratory) là một ngôn ngữ thông dịch,

cho phép thực hiện nhanh chóng các giải thuật, hiển thị dữ liệu (dƣới dạng đồ thị 2D, 3D, hình ảnh và thậm chí chuỗi hình ảnh) và thực hiện các giao tiếp đồ họa dễ dàng.

 Ƣu điểm:

 Cung cấp một công cụ tính toán và lập trình bậc cao dễ sử dụng, hiệu quả và thân thiện. SIMULINK giúp ngƣời sử dụng thực hiện các bài toán mô hình hóa, mô phỏng trên máy tính.

 Có tính mở, các hàm và các toolbox không ngừng đƣợc bổ sung theo sự phát triển của khoa học bởi chính The Mathworks Ins và cả ngƣời sử dụng trên toàn thế giới

 Có công cụ trợ giúp phong phú trực tuyến, trên mạng

hay các tài liệu dạng pdf.

Copyright 2007

TỔNG QUAN VỀ MATLAB

4

MATLAB

 Môi trƣờng phát triển: gồm các công cụ và tiện nghi giúp viết chƣơng trình, sử dụng các hàm Matlab và các file

 Thƣ viện các hàm toán học của Matlab: Các

Sức mạnh của MATLAB

 Ngôn ngữ Matlab: Các lệnh cao cấp xử lý ma

hàm sơ cấp: tổng, sin, tính số phức… các hàm phức tạp: Bessel, nghịch đảo ma trận, tính trị riêng, biến đổi Fourier nhanh, wavelet…

 Xử lý đồ họa: Hiển thị dữ liệu dạng đồ họa

trận, lệnh rẻ nhánh, vòng lặp, xuất nhập, cấu trúc dữ liệu, lập trình hƣớng đối tƣợng…

Copyright 2007

2D, 3D, hoạt hình, xử lý ảnh và cả GUI

5

MATLAB

 Thƣ viện API của Matlab: Cho phép liên kết các

Sức mạnh của MATLAB (tt)

 Các hộp công cụ (Toolbox): Tập hợp các hàm

Matlab đƣợc viết sẵn để giải quyết các vấn đề thuộc các chuyên ngành khác nhau. Các toolbox khiến cho Matlab có thể ứng dụng vào nhiều lĩnh vực kỹ thuật khác nhau: Điện tử, Điều khiển tự động, Kỹ thuật điện, Viễn thông, Cơ khí, Động

chƣơng trình C và Fortran… Các ngôn ngữ khác có thể gọi các hàm dll đƣợc tạo bởi Matlab.

Copyright 2007

lực, Dầu khí, Địa chất, hóa học,…

6

MATLAB

Các khái niệm cơ bản

Cửa sổ lệnh

Khi chạy chƣơng trình MATLAB, thì cửa sổ này sẽ xuất hiện

Cửa sổ không gian làm việc

Cửa sổ lịch sử lệnh

Copyright 2007

7

MATLAB

 Hoạt động trong MATLAB

 Command window (cửa sổ lệnh)

− Dấu “>>” dùng để chạy lệnh, viết chƣơng trình, Chạy

chƣơng trình.

 Command history window (cửa sổ lịch sử lệnh)

− Liệt kê tất cả các lệnh đã sử dụng trƣớc đó kèm theo

thời gian làm việc.

 Current Directory (cửa sổ thƣ mục hiện tại)

− Cho biết thƣ mục hiện tại làm việc. Mặc định khi cài

MATLAB701\work (Version 7.01)

 Workspace (cửa sổ không gian làm việc)

− Cho biết các biến đƣợc sử dụng trong chƣơng trình.

Copyright 2007

Các khái niệm cơ bản (tt)

8

MATLAB

 Một số lệnh hệ thống

Các khái niệm cơ bản

Lệnh

Ý nghĩa

 clc

xóa cửa sổ lệnh

 clf

xóa cửa sổ đồ họa

 help

xem phần trợ giúp một số lệnh

 quit, exit

Thoát Matlab

 Ctrl+c

Dừng chƣơng trình

 pause

Ngừng tạm thời chƣơng trình

 edit

Gọi chƣơng trình soạn thảo type đọc nội dung file.m

 input

Nhập dữ liệu từ bàn phím

 demo

Gọi chƣơng trình demo

 echo on/off

Tắt mở hiển thị các lệnh trong M-files

Copyright 2007

9

MATLAB

 CÁC TOÁN TỬ VÀ KÍ TỰ ĐẶC BIỆT

• plus (+)

cộng

• uplus (+)

Cộng unary

• minus ( - )

Trừ

• uminus (-)

Trừ unary

• mtimes(. *)

Nhân ma trận

times (*)

Nhân mảng

• mpower (^)

lũy thừa ma trận

• power (. ^ )

lũy thừa mảng

• mldivide (\ )

Chia trái ma trận

• Mrdivide( /)

Chia phải ma trận

ldivide (.\ )

Chia trái mảng

• mdivide (./ )

Chia phải ma trận

kron

Sản phẩm cơ năng

Copyright 2007

Các khái niệm cơ bản (tt)

10

MATLAB

 Toán tử quan hệ

• eq (== )

Các khái niệm cơ bản (tt)

• ne ( ~= )

Bằng

Không bằng

• gt (>)

lt (< ) Nhỏ hơn

Lớn hơn

• ge (>= )

le (<= ) Nhỏ hơn hoặc bằng

Copyright 2007

Lớn hơn hoặc bằng

11

MATLAB

 Toán tử logic

• and (&)

Các khái niệm cơ bản (tt)

• or ( | )

Logic và

• not ( ~ )

Logic hoặc

• xor

Logic phủ định

• any

Logic hoặc phủ định

True nếu mọi phần tử của vector

• all

True nếu tất cả các phần tử khác

không

Copyright 2007

khác không.

12

MATLAB

Các khái niệm cơ bản (tt)

Các kí tự đặc biệt

: Dấu hai chấm

()

Dấu ngoặc đơn

[ ]

Dấu ngoặc vuông

{ } Dấu ngoặc nhọn

. Dấu thập phân

.

Truy nhập cấu cấu trúc trƣờng

..

Thƣ mục mẹ

... Dấu tiếp tục

, Dấu phẩy

;

Dấu chấm phẩy

Copyright 2007

% Dấu chú thích

13

MATLAB

Các khái niệm cơ bản (tt)

%

Dấu chú thích

!

Liên quan câu lệnh của hệ điều hành

= Gán

transpose(.‟)

Chuyển vị

ctranspose(„ )

Chuyển vị số phức liên hợp

„ Nhảy

horzcat [, ] Ghép chuỗi theo chiều ngang

subsasgn

Gán subscripted

bsref

Tham chiếu subscripted

vertcat[; ] Ghép chuỗi theo chiều đứng

Copyright 2007

subsindex Chỉ số subscripted

14

MATLAB

 BIẾN

 Quy định về tên biến:

− Giống các ngôn ngữ khác, Matlab có những quy định về tên biến phải là một từ, không chứa dấu cách, và phải tuân thủ theo các quy tắc sau:

 Có thể chứa nhiều nhất 31 kí tự, còn các kí tự sau kí tự

31 sẽ bị lờ đi.

Ví du: Thoi_gian_dong_cua_vuaximang100, …

 Tên biến bắt đầu phải là chữ cái, tiếp theo có thể là chữ

số, dấu gạch dƣới.

Thí dụ: Do_bien_thien, Heso, heso, Donhot,

donhot…

 Kí tự chấm “.” không đƣợc dùng vì nó có ý nghĩa đặc

biệt

Copyright 2007

Các khái niệm cơ bản (tt)

15

MATLAB

 Một số biến đƣợc đĩnh nghĩa trƣớc:

− 1/0

Warning: Divide by zero.

(Type "warning off MATLAB:divideByZero" to suppress this warning.)

ans = Inf

− 0/0

Warning: Divide by zero.

(Type "warning off MATLAB:divideByZero" to suppress this warning.)

ans = NaN

− Eps

ans = 2.2204e-016

Copyright 2007

BIẾN (tt)

16

MATLAB

Một số biến đƣợc định nghĩa trƣớc (tt)

Ý

Copyright 2007

17

MATLAB

 Độ lớn của biến

− Xác định độ lớn hay chiều dài của biến vector cũng

nhƣ ma trận thông qua một số hàm sau đây:

 Size(A)

Trả về 1 vector chứa kích thƣớc A,

gồm số hàng và số cột của A.

 Length(A) Trả về chiều dài của A, giá trị lớn nhất

của hàng và cột.

 Ngoài ra còn có các hàm: Size(A,p); [m,n] =

size(A)

Copyright 2007

18

MATLAB

 Thí dụ:

>> A = [1 2 3; 4 5 6]

A = 1 2 3

4 5 6

>> [m,n] = size(A)

m = 2

n = 3

>> length(A)

ans = 3

>>size(A,1)

ans = 2

Copyright 2007

BIẾN (tt)

19

MATLAB

 BIẾN MÔI TRƢỜNG (Environmental Variable)

Thí dụ:

BIẾN (tt)

>> a = 1

a =

1

>> b = „MATLAB‟

b =

Matlab

Ta nói, a, b là các biến môi trường.

Copyright 2007

20

MATLAB

 Khi làm việc trong MATLAB ở trong cửa sổ lệnh cũng

nhƣ các giá trị đã đƣợc tạo ra. Những lệnh và biến này đƣợc thƣờng trú trong môi trƣờng làm việc của MATLAB (Workspace) và có thể đƣợc nạp trở lại khi muốn.

 Đời sống của những biến chấm dứt khi ta thoát khỏi

chƣơng trình MATLAB.

 Nhƣ Thí dụ trên, a đƣợc hiểu la một biến số, b là một

chuỗi.

 Khi định nghĩa biến môi trƣờng, nếu gán giá trị cho nó thì kiểu biến sẽ phụ thuộc vào kiểu giá trị đã gán cho nó.

Copyright 2007

BIẾN (tt)

21

MATLAB

 BIẾN CỤC BỘ (Local Variable)

 Biến này chỉ tồn tại trong một hàm MATLAB và

BIẾN (tt)

không hiện hữu trong cửa sổ lệnh.

Thí dụ:

n = length(x);

mean = sum(x)/n;

stdev = sqrt(mean);

 Trong trƣờng hợp này n là biến cục bộ và chỉ

function[mean,stdev] = stat(x);

Copyright 2007

đƣợc truy xuất trong một hàm.

22

MATLAB

 BIẾN TOÀN CỤC (Global Variable)

BIẾN (tt)

 Đƣợc định nghĩa bằng từ khóa global. Việc

xóa biến toàn cục dùng lệnh clear global

 Isglobal(ten_bien): trả về 1 (ten_bien là biến toàn cục), 0 (ten_bien không phải là biến toàn cục)

Thí dụ:

Global x y z

Copyright 2007

x, y, z là các biến toàn cục.

23

MATLAB

BIẾN (tt)

Thƣờng mỗi hàm trong MATLAB đƣợc viết dƣới

dạng M File, có riêng những biến cục bộ cho

từng hàm và đƣợc lƣu trữ trong một vùng biến

truy xuất biến này.

 Nên dùng KÍ TỰ HOA để đặt tên biến toàn cục

để tránh trùng tên với các biến trong Workspace.

Copyright 2007

đặc biệt, việc gọi hàm trong một hàm đều có thể

24

MATLAB

 BIẾN SYMBOLIC

 Symbolic processing là thuật ngữ dùng mô tả cách thức máy tính thực hiện tính các biểu thức toán học (Thí dụ, rút gọn một đa thức, đặt thừa số chung, tính giá trị một biểu thức đại số, giải phƣơng trình đại số, giải phƣơng trình vi phân, …)

 Khởi tạo biến symbolic:

x = sym(„x‟): Tạo biến symbolic có tên là x.

x = sym(„x‟,‟real‟): Tạo biến symbolic có tên x và là biến

không bị ràng buộc phải là biến thực.

k = sym(„p‟,‟positive‟): Tạo biến symbolic k là biến thực,

dƣơng.

 Khởi tạo hằng symbolic: Nhằm tránh mắc sai lầm khi làm

tròn.

Copyright 2007

BIẾN (tt)

25

MATLAB

 Khởi tạo hằng symbolic

Thí dụ:

>> hai_phan_ba = sym(„2/3‟);

>> pi = sym(„pi‟);

>> hai_phan_ba =

hai_phan_ba =

2/3 % Không hiển thị giá trị xấp xỉ

>> Pi

Pi =

pi % không hiển thị giá trị xấp xỉ.

- Liệt kê các biên symbolic hiện hành, sử dụng hàm

Copyright 2007

BIẾN (tt)

26

MATLAB

13

BIẾN (tt) - Symbolic

 Liệt kê các biến Symbolic >> syms x y; >> p = 2*x + 3*y; % Tạo biến symbolic p thông qua biểu thức symbolic >> u = sqrt(x^2 + y^2); % Tạo biến symbolic u thông qua biêu thức symbolic >> d = subs(u, {x,y},{2,3}) % Tính giá trị biểu thức u khi x = 2, y = 3. d = >> v = subs(u,{x,y},{3,4}) % Tính giá trị biểu thức khi x = 3; y = 4; v = 5 >> syms „r‟

„s‟

„x‟

„y‟

Copyright 2007

27

MATLAB

 Khởi tạo ma trận symbolic bằng biến symbolic.

Thí dụ:

>> n = 3;

>> syms x;

>> A = x.^ [[0:n]‟.* [0:n]];

BIẾN (tt) - Symbolic

% Dùng phép biến đổi lũy thừa mảng

A = [1,

1,

1]

1,

[1,

x^2,

x^3]

x,

[1,

x^2,

x^4,

x^6]

[1,

x^3,

x^6,

x^9]

Copyright 2007

28

MATLAB

 Tìm biến symbolic trong một hàm

Thí dụ:

>> syms b x y z;

>> findsym(5*b + 2*z)

% Hàm này tìm biến symbolic trong một hàm

ans =

b, z

Copyright 2007

BIẾN (tt) - Symbolic

29

MATLAB

 LƢU và NẠP Biến

BIẾN (tt)

− Dùng lệnh: clear all

− Thoát chƣơng trình MATLAB

 Biến sẽ bị xóa sạch khi:

− Để sử dụng lại cho phiên làm việc sau; dùng tất cả các biến do lệnh (lƣu Workspace đang quản lý(tên, kích thƣớc, giá trị) vào một tập tin nhị phân (binary file) có tên matlab.mat

Copyright 2007

 Lưu biến:

30

MATLAB

 Nạp biến:

− Dùng lệnh Nạp tất cả các biến đã lƣu vào

Workspace để dùng lại

 Nếu không muốn dùng

tập

tin mặc định

matlab.mat, ta sử dụng lệnh để

lƣu tất cả biến vào tập tin có tên filename.mat và

muốn nạp lại biến khi dùng lệnh

 Lƣu một vài biến trong cửa sổ workspace

− Lệnh

 Nói chung cách đơn giản nhất là: Từ cửa sổ Menu

File ở cửa sổ lệnh chọn

Đặt tên tập tin (có đuôi mở rộng là *.mat)

Copyright 2007

BIẾN (tt)

31

MATLAB

 Tất cả các văn bản đằng sau kí hiệu phần trăm

Câu chú thích

(%) đều là câu giải thích.

 Thí dụ:

> heso_a = 10 % Hệ số a ptb2

10

>> heso_b = 20 % Hệ số b ptb2

heso_b =

20

Copyright 2007

heso_a =

32

MATLAB

 Một trong những điểm mạnh nhất của MATLAB là làm việc

với số phức.

 Các hàm đặc biệt của số phức:

 real(x)

Phần thực của X

 imag(x)

Phần ảo của X

 conj(x)

Liên hợp phức của X

 abs(x)

Độ lớn, trị tuyệt đối của X

 angle(x)

Góc pha của số phức

 complex(x)

Tạo số phức từ phần thực và ảo

Copyright 2007

Số phức

33

MATLAB

 Thí dụ:

Số phức (tt)

>> a=1+3i

a = 1.0000 + 3.0000i

>> b=2-4i

b = 2.0000 - 4.0000i

>> a+b

ans = 3.0000 - 1.0000i

>> abs(a)

ans = 3.1623 % độ lớn của a

>> real(b) % phần thực của số phức b

ans = 2

>> imag(b) %phần ảo của số phức b

ans = -4

>> complex(2,2)

ans = 2.0000 + 2.0000i

Copyright 2007

34

MATLAB

Một số hàm toán học thông thƣờng

Tên hàm

Mô tả, kết quả trả về

Any(x)

All(x)

Isnan(x)

Isinf(x) Finite(x) Isstr(x) Issym(x) Abs(x) Acos(x) Acosh(x) Ceil(x) Atan(x) Asin(x)

1 hoặc vecto hàng đơn vị nếu bất kỳ phần tử nào của vecto hoặc ma trận x khác 0. là 1 hoặc vecto hàng đơn vị nếu tất cả các phần tử nào của vecto hoặc ma trận x khác 0. Là một tại những vị trí NaN (Not a Number, Thí dụ 0/0) trong x Là 1 tại những vị trí Inf (Infinitive, 1/0) trong x. Là 1 tại những vị trí có giá trị hữu hạn trong x. Là 1 nếu x là một string (chuỗi) Là 1 nếu x là một biến sym Trị truyệt đối hoặc biên độ số phức Hàm cosin ngƣợc Hyperbolic cosin ngược Làm tròn về phía trên Hàm số tang ngược Hàm số sin ngƣợc

Copyright 2007

35

MATLAB

Một số hàm toán học thông thƣờng

Tên hàm

Mô tả, kết quả trả về

cos(x)

Hàm cosin

cosh(x) exp(x) fix(x) floor(x) log(x) log10(x) round(x)

sign(x)

sin(x) sinh(x)

Hyperbol cosin Hàm mũ ex Xấp xỉ không Làm tròn về phía zero Hàm logarit tự nhiên Hàm logarit thập phân Làm tròn về số nguyên gần nhất Hàm dấu, Thí dụ: sign(1.2) = 1,sign(-23.4) = -1, sign(0) = 0 Hàm sin Hàm Hyperbol sin

Căn khai căn bậc hai

sqrt(x)

gdc(x,y) lcm(x,y) x^y

Bội số chung lớn nhất của hai số nguyên x và y. Bội số chung nhỏ nhất của hai số nguyên x và y. Hàm mũ

Copyright 2007

36

MATLAB

Một số hàm toán cơ bản

Tên hàm

Mô tả, kết quả trả về

rem(x,y)

Số dư phép chia x/y

sum(v)

Tổng các phần tử vector

prod(v)

Tích các phần tử vector

min(v)

Phần tử vector bé nhất

max(v)

Phần tử vector lớn nhất

mean(v)

Giá trị trung bình cộng

sign(x)

Hàm dấu (= 1 nếu x>0;

= -1 nếu x<0;

= 0 nếu x=0)

Copyright 2007

37

MATLAB

 Thí dụ:

>> v=[1 2 3];

>> x=4;

>> min_v=min(x)

>> sqrt(x)

min_v = 1

ans = 2

>> mean(x)

>> exp(x)

ans = 2

ans = 54.5982

>> sum(x)

>> sign(x)

ans = 6

ans = 1

>> rem(x,3)

ans = 1

Copyright 2007

Một số hàm cơ bản (tt)

38

MATLAB

 Đa thức đƣợc biểu diễn bằng vecto bậc một có bậc giảm

dần.

 Cho hai đa thức f, g lần lƣợt đƣợc biểu diễn bởi a và b. Ta

sẽ có các hàm sau:

Conv(a,b) Nhân hai đa thức

Deconv(a,b) Chia hai đa thức

a + b

Tổng hai đa thức

a – b

Hiệu hai đa thức

roots(a)

nghiệm của đa thức f đƣợc biểu diễn bởi vecto a.

poly(r)

Trả về các hệ số của đa thức có nghiệm là vecto r.

 Lưu ý: Khi cộng và trừ các đa thức phải có cùng kích thước.

Copyright 2007

Các Hàm liên quan đến ĐA THỨC

39

MATLAB

 Thí dụ: Giải phƣơng trình: x4 + 10x3 + 0x - 1 = 0

Giải: Ta biểu diễn đa thức x4 + 10x3 + 0x - 1 bằng một vectơ

hàng với các phần tử là các hệ số của đa thức sắp xếp theo

thứ tự bậc giảm dần.

>> a = [1 10 -2 0 -1];

Nghiệm của đa thức có thể đƣợc tính bằng hàm: roots(a)

>> R = roots(a)

R =

-10.1971

0.5291

-0.1660 + 0.3972i

-0.1660-0.3972i

Copyright 2007

Hàm ĐA THỨC (tt)

40

MATLAB

 Từ các nghiệm của đa thức có thể xây dựng lại đa

Hàm ĐA THỨC (tt)

thức bằng hàm: poly(a);

 Thí dụ:

>>a = poly(R)

>>a = [1 2 3 4]; % x3+2x2+3x+4

>>b = [5 6 7 8]; % 5x3+6x2+7x+8

>>Tich = conv(a,b)

a = 1.0000 10.0000 -2.0000 0.0000 -1.0000

Tich = 5 16 34 60 61 52 32

Copyright 2007

41

MATLAB

Hàm ĐA THỨC (tt)

>>Thuong = deconv(a,b)

Thuong = 0.2000

>>Tong = a + b

Tong = 6 8 10 12

>>Hieu = a – b

Hieu = -4 -4 -4 -4

Copyright 2007

42

MATLAB

 Vòng lặp FOR:

CÁC LỆNH ĐIỀU KIỆN VÀ LẶP

 Cấu trúc:

for i = n:m %n = phần tử đầu, m = phần tử cuối

end

Copyright 2007

 Thí dụ vòng lặp FOR: Tính giai thừa của 100?

43

MATLAB

 Vòng lặp WHILE: lặp vòng khi biểu thức logic là true.

 Cấu trúc:

while

CÁC LỆNH ĐIỀU KIỆN VÀ LẶP

end

 Thí dụ 1:

n=1;

while prod(1:n) < 1e100

% prod tính tích các phần

n = n+1;% tử cột của vectơ hay

End % ma trận

Copyright 2007

44

MATLAB

 Lệnh if else elseif

if

 Cấu trúc:

if

elseif

CÁC LỆNH ĐIỀU KIỆN VÀ LẶP

if

else

end

end

 Nếu là true thì đƣợc

end

thi hành, nếu không thì thực hiện các lệnh sau

Copyright 2007

end.

45

MATLAB

 Thí dụ 1:

CÁC LỆNH ĐIỀU KIỆN VÀ LẶP

if rem(a,2)==0

disp('la mot so chan')

b=a/2;

End

if n<0

disp('la so duong')

elseif n==0

disp('la so 0')

else

disp('la so am')

end

Copyright 2007

46

MATLAB

 Thí dụ 2: Hàm ngay_trong_thang.m

CÁC LỆNH ĐIỀU KIỆN VÀ LẶP

function y = ngay_trong_thang(th,nam)

if (th==4)|(th==6)|(th==9)|(th==11)

y = 30

elseif (th==2)

if (rem(nam,4)~=0)

y=28

else

y=29

end

else

y=31

end

Copyright 2007

47

MATLAB

 Lệnh switch case: chọn nhiều trƣờng hợp

 Cấu trúc:

CÁC LỆNH ĐIỀU KIỆN VÀ LẶP

switch

case

case

otherwise

hợp mọi trƣờng hợp>

end

Copyright 2007

48

MATLAB

 Thí dụ:

CÁC LỆNH ĐIỀU KIỆN VÀ LẶP

switch input_num

case -1

disp(„negative one‟);

case 0

disp(„zero‟);

case 1

disp(„positive one‟);

otherwise

disp(„other value‟);

end

Copyright 2007

49

MATLAB

 Tổng quát về đồ họa trong MATLAB

ĐỒ HỌA CĂN BẢN

 MATLAB cho phép ngƣời lập trình sử dụng “bộ nhớ ảo”, khi đó có thể ghi các biến làm việc thành tập tin *.mat trên đĩa và có thể nạp bộ nhớ khi cần thiết. Nhờ vậy, MATLAB có thể giải đƣợc các bài toán lớn và phức tạp.

 MATLAB có các hàm đồ họa để vẽ các đặc tuyến bất kỳ trên mặt phẳng 2D, 3D, cho phép tạo ra đối tƣợng đồ họa điều khiển đƣợc.

Copyright 2007

 Ngoài ra, MATLAB còn phép quản lý tập tin dữ liệu trong chính môi trƣờng MATLAB mà không cần đến môi trƣờng windows.

50

MATLAB

 Màu sắc và kiểu đƣờng vẽ

ĐỒ HỌA CĂN BẢN (tt)

Ký hiệu

Màu

Ký hiệu

Kiểu nét

y

Yellow

.

Point

m

Magenta

o

Circle

c

Cyan

x

X-mark

r

Red

+

Plus

g

Green

*

Star

b

Blue

-

Solid line

w

White

:

Dotted line

-.

Dash-dot line

k

Black

--

Dased line

Copyright 2007

51

MATLAB

ĐỒ HỌA CĂN BẢN (tt)

Các kiểu data marker

Ký hiệu trong plot

Dấu chấm (dot .)

.

Dấu sao (asterisk *)

*

Dấu gạch chéo (cross x)

x

Vòng tròn (circle o)

o (chữ o thường)

Dấu cộng (plus sign + )

+

Hình vuông (square )

s

Diamond ( )

d

Ngôi sao ()

p

Copyright 2007

52

MATLAB

 Đồ họa không gian 2 chiều trong MATLAB

 Lệnh plot: Đồ thị tuyến tính X-Y, vẽ trong mặt

ĐỒ HỌA CĂN BẢN (tt)

 Lệnh fplot: đƣợc dùng để vẽ hàm số một cách “thông minh”, nó tự động phân tích hàm phải vẽ và chọn số điểm thích hợp cần phải thể hiện để phản ánh các đặc điểm của hàm.

− Cú pháp: fplot(„string‟, [xmin,xmax])

− Dạng đầy đủ: fplot(„string‟, [xmin xmax ymin ymax]

Copyright 2007

phẳng hai chiều.

53

MATLAB

ĐỒ HỌA CĂN BẢN – Plot() (tt)

Thí dụ:

>>x = linspace(0,2*pi,30);

%Tạo mảng x gồm 30 phần tử có giá trị trong

khoảng 0 – 2*

>>plot(x,y) %vẽ đồ thị hàm y theo x

>>xlabel(„x [0-2*pi]); ylabel(„y‟);

>>y = sin(x);

%đặt nhãn trục tọa độ x và y

>>title(„y = sin(x)‟) % đặt tên đồ thị

>>grid on % Tạo lưới cho đồ thị

Copyright 2007

54

MATLAB

Copyright 2007

ĐỒ HỌA CĂN BẢN – Plot() (tt)

55

MATLAB

 Để vẽ hai đồ thị trên cùng một trục tọa độ

ĐỒ HỌA CĂN BẢN – Plot() (tt)

>>z = cos(x);

>>plot(x,y,‟b-*‟,x,z,‟r‟)

xanh, z là đường -- màu đỏ

% Vẽ y và z trên cùng đồ thị, y là đường -* màu

>>legend(„y = sin(x)‟,‟z=cos(x)‟) % chú thích trên

Copyright 2007

đồ thị

56

MATLAB

>>legend(„y = sin(x)‟,‟z=cos(x)‟)

Copyright 2007

ĐỒ HỌA CĂN BẢN – Plot() (tt)

57

MATLAB

 Để vẽ nhiều hàm trên cùng một đồ thị ta có thể

ĐỒ HỌA CĂN BẢN (tt)

dùng lệnh “hold on” và “hold off”

>> t=0:pi/20:2*pi;

>> plot(t,sin(t),'-r*')

>> hold on

>> plot(sin(t-pi/2),'mo')

>> plot(sin(t-pi),':bs')

>> hold off

Copyright 2007

58

MATLAB

 Lệnh plot vẽ trong SỐ PHỨC

ĐỒ HỌA CĂN BẢN (tt)

Copyright 2007

 Nếu chỉ cố một đối số, hàm plot(y) sẽ vẽ các giá trị của vector y theo chỉ số 1,2,3, … Nếu y là số thực, hàm plot(y) trong trƣờng hợp này sẽ vẽ phần ảo theo phần thực tƣơng ứng, nghĩa là tƣơng đƣơng với plot(real(y),imag(y))

59

MATLAB

 Thí dụ:

>> x = .1+.9i;

>> u = [0:0.01:10];

>> plot(x.^u),xlabel('So thuc'),ylabel('Phan ao')

>> title('Do thi voi doi so phuc tap trong ham SO PHUC')

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

60

MATLAB

 Thí dụ lệnh fplot trong số phức:

>> f='cos(tan(x))-tan(sin(x))';

>> fplot(f,[1 2])

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

61

MATLAB

 Các lệnh vẽ trong các tọa độ đặc biệt

ĐỒ HỌA CĂN BẢN (tt)

Polar(t,r): vẽ đồ thị trong tọa độ cực

Semilogx(x,y): Vẽ hàm y theo x với trục y vẽ theo thang log

Semilogy(x,y): Vẽ hàm y theo x với trục x vẽ theo thang log

Loglog(x,y) Vẽ hàm y theo x với thang log cho cả 2 trục tọa

độ

Plotyy(x,y,’function’): Vẽ đồ thị với 2 trục y theo kiểu vẽ

được chọn trong function. Trong đó function nhận các giá trị plot, semilogy, semilogx…

Plot3(x,y,z): vẽ đường trong không gian 3 chiều.

Subplot(m,n,p): Chia cửa sổ figure ra nhiều ô, m ô theo

chiều đứng, n ô theo chiều ngang, vẽ đồ thị trong ô thứ p.

Copyright 2007

62

MATLAB

 Thí dụ:

 Lệnh polar(t,r): Vẽ đồ thị góc t (radian) trong tọa độ cực theo

bán kính r.

 Lệnh polar(t,r,‟linestype‟): Vẽ góc t với đƣờng vẽ và nét xác

định „linestype‟.

ĐỒ HỌA CĂN BẢN (tt)

>>t = 0:.1:2*pi;

>>polar(t,sin(2*t))

>>polar(t,sin(2*t),'m-')

Copyright 2007

63

MATLAB

 Thí dụ, vẽ đường xoắn ốc Archimeder r = 2Ѳ với Ѳ thuộc [0,

ĐỒ HỌA CĂN BẢN (tt)

4pi]

>> r = 2*t;

>> polar(t,r),title('Duong xoan oc Archimede r = 2\t');

Copyright 2007

64

MATLAB

 Thí dụ lệnh loglog(x,y)

>> x = logspace(-1,2);

>> loglog(x,exp(x))

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

65

MATLAB

 Thí dụ lệnh semilogx(x,y)

>> x = logspace(-2,3);

>> y = x.^12 + 10;

>> semilogx(x,y) %tương tự cho lệnh semilogy()

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

66

MATLAB

ĐỒ HỌA CĂN BẢN (tt)

Thí dụ :

>> t=0:pi/20:6*pi;

>> x=sin(t);

>> y=sin(t-pi/2);

>> z=t;

>> subplot(121)

>> plotyy(t,x,t,y,'plot')

>> grid on

>> subplot(122)

>> plot3(x,y,z)

>> grid on

Copyright 2007

67

MATLAB

 Các lệnh vẽ liên quan đến SỐ PHỨC

ĐỒ HỌA CĂN BẢN (tt)

quiver(x,y): vẽ các vector xuất phát từ các vị trí khác

nhau.

fearther(x,y): Vẽ các vector xuất phát từ trục x.

compass(x,y): Vẽ các vector từ một điểm gốc trong

hệ tọa độ cực.

rose(x)

Copyright 2007

68

MATLAB

 Giả sử ta có một trƣờng vector nhƣ sau trong không gian R2:

 P(x,y) =

, Q(x,y) =

, thử vẽ hình ảnh của trƣờng

trong phạm vi x thuộc [1,5] và y thuộc [1,5].

 Trƣớc hết ta viết một sript file (lƣu file này với tên Quiver.m)

nhƣ sau:

Copyright 2007

Thí dụ-Lệnh quiver

69

MATLAB

 Sau đó, ta chạy file sript này(Gõ tên file này trong cửa sổ

lệnh->Enter), ta đƣợc hình ảnh sau:

Copyright 2007

Thí dụ-Lệnh quiver (tt)

70

MATLAB

 Các lệnh thao tác và điều khiển

ĐỒ HỌA CĂN BẢN (tt)

Hiển thị cửa sổ đồ họa hiện hành figure(gef)

figure

Tạo ra cửa sổ đồ họa figure(„propertyname‟,‟propertyvalue‟,…)

hold

Chuyển từ trạng thái hold là on sang off và ngược lại

hold on

Giữ lại tất cả màn hình đã vẽ

hold off

Xóa các màn hình đã vẽ chỉ thể hiện màn hình hiện hành mới (Chế độ mặc định)

axis

Cân chỉnh trục tọa độ và hình dạng của nó

grid

Grid On/ grid off/ grid: Tạo/ tắt lưới cho đồ thị

shg

Hiển thị đồ thị trên màn hình

clg

Xóa đồ thị trên màn hình

zoom

Co vào hoặc dãn ra của đồ thị

Copyright 2007

71

MATLAB

 CÁC LỆNH VĂN BẢN TRÊN MÀN HÌNH ĐỒ HỌA

title(„text‟,‟property 1‟,‟property 2‟,…): Tiêu đề cho đồ thị

xlabel(„text‟,‟property 1‟,‟property 2‟,…): Nhãn trục hoành độ

ylabel(„text‟,‟property 1‟,‟property 2‟,…): Nhãn trục tung độ

text(x,y,z,„chuỗi „): Văn bản ở bất kỳ vị trí nào trên đồ thị. X, Y là

tọa độ tâm bên trái của đồ thị.

legend(x,y): Chú thích của đƣờng trên đồ thị

gtext(„C‟): Văn bản ở vị trí con trỏ.

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

72

MATLAB

 ĐỌC DỮ LIỆU TỪ MÀN HÌNH ĐỒ HỌA

 Lấy tọa độ diểm trên đồ thị, khi một đồ thị đƣợc vẽ xong, nếu muốn lấy tọa độ của một số điểm trên đƣờng này, ta sẽ dùng lệnh [x,y] = ginput(n); n là số điểm cần lấy tọa độ.

 Khi đồ thị hiện ra, ta nhấn phím trái chuột vào các vị trí mong muốn lấy tọa độ trên đồ thị, các hoành độ sẽ đƣợc chứa trong vector và tung độ trong vector y.

 Nếu quan hệ giữa hai đại lƣợng x, y cần đƣợc vẽ bằng các điểm rời rạc, thay vì là đƣờng nối các điểm (x,y) nhƣ vẽ hàm, hàm plot sẽ dùng các điểm đƣợc đánh dấu (data makers)

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

73

MATLAB

 Thí dụ, vẽ đồ thị từ số liệu rời rạc bằng cách sử dụng điểm đánh

dấu.

>> x=[5:18];

>> y=[1,2,3,5,4,5,5,7,8,6,9,11,14,20];

>> plot(x,y,'r s')

ĐỒ HỌA CĂN BẢN (tt)

R: màu đỏ, s: hình vuông

Copyright 2007

74

MATLAB

 Thí dụ:

Nếu muốn nối liền các điểm đƣợc đánh dấu này bằng các

đoạn thẳng, chúng ta có thể vẽ 2 lần.

>>plot(x,y,'r o',x,y)

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

75

MATLAB

 Ngoài ra trong lệnh plot ta có thể đƣa các thông số „lineWidth‟ để định độ rộng của đƣờng vẽ, thông số „MarkerSize‟ để định độ lớn (chiều cao) của các điểm đƣợc đánh dấu và thông số “Color” để định màu của đồ thị.

 Thí dụ: >>plot(x,y,‟o-

‟,‟LineWidth‟,3,‟MarkerSize‟,8,‟Color‟,‟red‟)

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

76

MATLAB

- Điền tiêu đề cho đồ thị, ta sử dụng lệnh: title(„text‟).

- Tạo lƣới cho đồ thị: grid on

 Thí dụ: <

Copyright 2007

ĐỒ HỌA CĂN BẢN (tt)

77

MATLAB

 Kiến tạo hệ trục tọa độ

ĐỒ HỌA CĂN BẢN (tt)

Mô tả

Lệnh

Axis([xmin xmax ymin ymax])

Thiết lập các giá trị min, max của hệ trục dùng các giá trị được đưa ra trong vecto hàng.

V= axis

V là vector cột có chứa thang chia cho đồ thị hiện tại: [xmin xmax ymin ymax]

Axis auto

trả lại giá trị mặc định thang chia

Axis(„auto‟)

Xmin=min(x), xmax = max(x)…

Axismanual

Giới hạn thang chia nh thang chia hiện tại

Axis xy

Sử dụng (mặc định) hệ tọa độ decac trong đó gốc tọa độ ở góc thấp nhất bên trái, trục ngang tăng từ trái qua phải, trục đứng tăng từ dưới lên.

Copyright 2007

78

MATLAB

ĐỒ HỌA CĂN BẢN (tt)

Lệnh

Mô tả

Axis ij

Sử dụng hệ tọa độ ma trận, trong đó góc tọa độ ở đỉnh góc trái, trục đứng tăng từ đỉnh xuống, trục ngang từ trái qua phải.

Axissquare

Thiết lập đồ thị hiện tại là hình vuông, so với mặc định là hình chữ nhật.

Axisequal

Thiết lập thang chia giống nhau cho cả hai hệ trục

Axis tightequal

Tương tự như axisequal nhưng hộp đồ thị vừa đủ đối với dữ liệu

Axis normal

Tắt đi chế độ axis, equal, tight và vis3d

Axis off

Tắt bỏ chế độ nền trục, nhãn, lưới, và hộp, dấu. Thoát khỏi chế độ lệnh title và bất cứ lệnh label nào và thay đổi bởi lệnh text và gtext.

Ngược lại với axis off nếu chúng có thể

Axis on Copyright 2007

79

MATLAB

ĐỒ HỌA CƠ BẢN (tt)

Thí dụ:

>>x=linspace(0,2*pi,30);

>>y=sin(x);

>>z=cos(x);

>>plot(x,y,x,z)

>>box off

% Sau khi sử dụng lệnh

>>axis off

>>axis ij

>>axis square equal

>>axis xy normal

Copyright 2007

80

MATLAB

 Các lệnh vẽ trong tọa độ Đềcac ba chiều

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU

plot3: Vẽ đƣờng thẳng và điểm trong không gian 3

chiều

Thí dụ:

x =e-0.05tsint

y =e-0.05tcost

z = t [0,10]

Copyright 2007

Vẽ đƣờng cong tham số:

81

MATLAB

 Thực hiện

>> t = [0:pi/50:10*pi];

>> x = exp(-0.05*t).*sin(t);

>> y = exp(-0.05*t).*cos(t);

>> z = t;

>> plot3(x,y,z),xlabel(„x‟),ylabel(„y‟),zlabel(„z‟)

>> zlabel(„z‟),grid;

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

82

MATLAB

 CÁC LỆNH VẼ BIÊN DẠNG (contour)

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

contour: Vẽ các đƣờng đồng mức

Copyright 2007

clabel: Nhãn

83

MATLAB

 CÁC LỆNH TẠO LƢỚI (grid)

Meshgrid(x,y)

Meshgrid(x,y,z)

Cylinder(r,u)

[X,Y,Z] = CYLINDER(R,N) forms the unit cylinder based on the generator curve in the vector R. Vector R contains the radius at equally spaced points along the unit height of the cylinder. The cylinder has N points around the circumference. SURF(X,Y,Z) displays the cylinder.

[X,Y,Z] = CYLINDER(R), and [X,Y,Z] = CYLINDER default to N

= 20 and R = [1 1].

Sphere(n)

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

SPHERE Generate sphere.

[X,Y,Z] = SPHERE(N) generates three (N+1)-by-(N+1) matrices so that SURF(X,Y,Z) produces a unit sphere.

[X,Y,Z] = SPHERE uses N = 20.

Copyright 2007

84

MATLAB

 Tạo một lƣới các điểm trong mặt phẳng xy

 Cú pháp:

[X,Y] = meshgrid(x,y)

Trong đó:

x = [xmin,x,xmax]

y = [ymin,y,ymax]

 Chức năng:

− Hàm meshgrid sẽ phát sinh các tọa độ của một lƣới chữ nhật có m.n điểm với một góc (xmin,ymin) còn góc kia là (xmax,ymax).

− Ma trận X có kích thƣớc m.n gồm n cột giống nhau là vector x‟ và ma trận Y cũng có kích thƣớc m.n hàng giống nhau là vector y.

− Mỗi ô lƣới sẽ có kích thƣớc x, và y.

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

85

MATLAB

Các lệnh vẽ tƣơng tự

meshc(X,Y,Z)

meshz(X,Y,Z)

MESHZ(...) or MESHC(…) is the same as MESH(...) except

that a "curtain" or reference plane is drawn beneath.

surf(X,Y,Z)

SURF('v6',...) creates a surface object instead of a surface

plot object for compatibility with MATLAB and earlier.

surfc(X,Y,Z) vẽ mặt giống nhƣ thực hiện mesh hay meshc

nhƣng mặt đƣợc tô bóng (shaded surface).

surfnorm

[Nx,Ny,Nz] = SURFNORM(Z) returns the surface normal components for the surface Z.

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

86

MATLAB

 CÁC LỆNH VẼ MẶT LƢỚI TRONG 3D

 Mesh

− MESH returns a handle to a surface plot object.

 Meshz: Vẽ bề mặt với các đƣờng thẳng đứng viền quanh

đồ thị.

 Waterfall: Vẽ bề mặt với các đƣờng lƣới theo một hƣớng

nhƣ thác đổ.

 WATERFALL(...) is the same as MESH(...) except that the column lines of the mesh are not drawn - thus producing a "waterfall" plot. For column-oriented data analysis, use WATERFALL(Z') or WATERFALL(X',Y',Z').

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

87

MATLAB

 Thí dụ: Vẽ mặt

 Thực hiện:

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

>> x = [-2:.1:2];

>> y = [-2:.1:2];

>> [X,Y] = meshgrid(x,y); % Tạo lƣới các điểm trong mặt

phẳng xy

>> Z = X.* exp(-X.^2-Y.^2);

>> mesh(X,Y,Z) % Vẽ các đƣờng đồng mức dƣới mặt.

>> xlabel(„Truc x‟), ylabel(„Truc y‟),zlabel(„Truc z‟)

Copyright 2007

88

MATLAB

>> meshz(X,Y,Z)

Copyright 2007

Thí dụ lệnh MESHZ

89

MATLAB

>> Meshc(X,Y,Z)

Copyright 2007

Thí dụ lệnh MESHC

90

MATLAB

>> waterfall(X,Y,Z)

Copyright 2007

Thí dụ lệnh WATERFALL

91

MATLAB

>> surf(X,Y,Z)

Copyright 2007

Thí dụ lệnh SURF

92

MATLAB

>> surfc(X,Y,Z)

Copyright 2007

Thí dụ lệnh SURFC

93

MATLAB

>> surfnorm(X,Y,Z)

Copyright 2007

Thí dụ lệnh SURFNORM

94

MATLAB

>> contour(X,Y,Z)

Copyright 2007

Thí dụ lệnh CONTOUR

95

MATLAB

 CÁC LỆNH QUAN SÁT

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

 View

 Rot90

 Slice

 Colormap

Copyright 2007

 colorbar

96

MATLAB

 Lệnh view

view([,])

Trong đó:

: Là góc phƣơng vị tính bằng độ ngƣợc chiều kim đồng hồ

từ phía trên của trục ngang (mặc định  = -37.5o)

: Góc nhìn tính bằng độ xuống mặt phẳng xy (mặc định  =

30o)

Thí dụ: view([0,90]) : Vẽ 2D là một trƣờng hợp đặc biệt của

phép vẽ 3D.

- Hiển thị đồ thị 3D đã tạo ra dƣới dạng 2D theo góc phƣơng vị và góc nhìn.

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

97

MATLAB

>> view([0,90]) và >> view([30,30])

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

% Hiển thị hình đã vẽ trong lệnh surfc(X,Y,Z)

Copyright 2007

98

MATLAB

 Lệnh rot90

ROT90 Rotate matrix 90 degrees.

ROT90(A) is the 90 degree counterclockwise rotation of

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

matrix A..

ROT90(A,K) is the K*90 degree rotation of A, K = +-1,+-

2,...

Example:

A = [1 2 3 B = rot90(A) = [ 3 6

4 5 6 ]

2 5

1 4 ]

Copyright 2007

99

MATLAB

>>[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-:.16:2);

v = x .* exp(-x.^2 - y.^2 - z.^2);

slice(x,y,z,v,[-1.2 .8 2],2,[-2 -.2])

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

100

MATLAB

Thí dụ về lệnh Colormap và colorbar

>> [x,y] = meshgrid(-2:.2:2);

>> z = x.^(-x.^2-y.^2);

>> [C,h] = contour(x,y,z);

>> Clabel(C,h); %Nhãn biểu đồ contour

>> Surf(peaks(30))

>> Colormap cool; %Chọn biểu đồ màu

>> Colorbar % Hiển thị thanh biểu đồ màu

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

101

MATLAB

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

102

MATLAB

 Các lệnh đồ họa khác trong đồ họa 3D

1. fill3: Tô đa giác 3 mặt trong không gian 3D.

Cú pháp:

fill3(x,y,z,c): Tô đa giác 3D đƣợc định nghĩa bởi 3 vector x, y, z với màu tô đƣợc xác định bởi c.

fill3(x1,y1,z1,c1,x2,y2,z2,c2,…): Tô đa giác 3D xác định nhiều vùng tô.

2. comet3(z)

3. comet3(x,y,z)

4. comet3(x,y,z,p)

5. comet3

Các lệnh vẽ đƣờn viền 3 chiều trong 3D

6. contour3(z): Vẽ đƣờng viền 3D cho tới mức z

7. contour3(z,n): Vẽ đƣờng n viền 3D

8. contour3(x,y,z): Tƣơng tự nhƣ trên, nhƣng ma trận x,y để giới hạn

trục x,y.

Copyright 2007

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

103

MATLAB

 Lƣu ý:

ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)

 MATLAB cho phép chuyển đồ thị qua word…

− Từ cửa sổ

Sau đó trở lại cửa sổ mà ta muốn chèn và nó vào một nơi ta mong muốn.

Copyright 2007

 Cách làm:

104

MATLAB

 Việc nhập lệnh từ dấu nhắc (>>) thì nhanh và hiệu quả, nhƣng khi thực hiện một lúc nhiều lệnh hoặc muốn thay đổi giá trị của một hoặc nhiều biến và lặp lại một số lệnh thì việc nhập lệnh ở dấu nhắc sẽ kém hiệu quả.

 M-FILE tiện dụng cho việc giải bài toán lớn, MATLAB cung cấp thủ tục để tạo hàm riêng cho ngƣời sử dụng với hình thức một text file.

 Giải pháp:

− Tập hợp các lệnh vào một file với phần mở rộng là (*.m)

 Cụ thể:

− Để soạn thảo một M-File thì

− Để hiển thị những lệnh trong M-File khi chúng đƣợc thực

thi thì sử dụng lệnh echo on.

− Hiệu chỉnh M-FILE:

Copyright 2007

M-FILE, or SCRIPT

105

MATLAB

 MỘT SỐ LÊNH QUẢN LÝ TẬP TIN

M-FILE, or SCRIPT (tt)

thƣ mục …

− d: Chuyển đổi thƣ mục

− Chdir/cd

− dir: liệt kê tất cả thƣ mục hiện hành (tƣơng

tự lệnh IS)

− delete:

 Cho phép liệt kê, xem, xóa, sửa, chuyển đổi

− type: Hiển thị tập tin M-FILE trong cửa sổ

lệnh.

− what: Hiển thị tất cả M-FILE trong thƣ mục

hiện hành.

− which: Hiển thị thƣ mục …

Copyright 2007

Xóa tập tin M-FILE

106

MATLAB

 CẤU TRÚC MỘT CHƢƠNG TRÌNH

M-FILE, or SCRIPT (tt)

1. function[các biến đầu ra] = filename(các đối số)

function filename(các đối số)

function[các biến đầu ra] = filename

2. % là lời chú thích của chƣơng trình

3. global ten_bien1 ten_bien2 …

Copyright 2007

4. Chƣơng trình (các câu lệnh)

107

MATLAB

 CẤU TRÚC MỘT CHƢƠNG TRÌNH

M-FILE, or SCRIPT (tt)

Thí dụ:

Giải phƣơng trình bậc hai: ax2 + by + c = 0

a. Khi biết các hệ số

Copyright 2007

b. Nhập 3 hệ số ở cửa sổ lệnh

108

MATLAB

a. Chƣơng trình có tên ptb2_a.m

function x = ptb2(a,b,c)

% Giải phƣơng trình bậc hai khi biết hệ số

p = [a b c];

roots(p);

x0 = -b/(2*a);

x = (x0 -10):.1:(x0+10);

y = a*x.2 + b*x + 10;

plot(x,y), title(„Do thi bac hai‟);

Trong cửa sổ lệnh:

>> x = ptb2(1,2,1)

x =

0 -1 -1

Copyright 2007

M-FILE, or SCRIPT (tt)

109

MATLAB

b. Chƣơng trình có tên ptb2_b.m

% chú thích

a = input(„Nhập a = „);

b = input(„Nhập b = „);

c = input(„Nhập c = „);

p = [a b c ]; % Khởi tạo vecto hệ số

x = roots(p);

disp(„Nghiệm của phƣơng trình bậc 2:‟)

disp(x)

x = (x0 -10):.1:(x0+10);

y = a*x.^2 + b*x + 10;

plot(x,y)

title(„Do thi bac hai‟);

Copyright 2007

M-FILE, or SCRIPT (tt)

110

MATLAB

 Giải PTB2 bằng M-FILE

Copyright 2007

M-FILE, or SCRIPT (tt)

111

MATLAB

M-FILE, or SCRIPT (tt)

>> ptb2

Nhap a = 1

Nhap b = -2

Nhap c = 1

Nghiem cua phuong trinh bac 2:

1

Copyright 2007

1

112

MATLAB

 SỬ DỤNG FILE SCRIPT

M-FILE, or SCRIPT (tt)

 Chúng ta có thể soạn một script file theo cấu

trúc đề nghị nhƣ sau:

các dòng chú thích cho chƣơng trình.

 Dòng 1: Tên của chƣơng trình và các từ khóa mô tả chƣơng trình (dòng này đƣợc MATLAB gọi là dòng H1 và lệnh lookfor của MATLAB sẽ tìm thông tin ở dòng H1 này khi có yêu cầu)

Copyright 2007

a. Phần chú thích (comments section): Viết

113

MATLAB

 Dòng 2: Tên ngƣời viết chƣơng trình, ngày viết.

 Định nghĩa các tên biến đầu vào và đầu ra. Có thể thêm vào định nghĩa tên các biến trung gian. Lƣu ý là phải xác định rõ đơn vị đo lường. Cho tất cả các biến đầu vào và đầu ra.

 Tên của từng hàm tự tạo đƣợc sử dụng trong

M-FILE, or SCRIPT (tt)

chƣơng trình.

c. Phần tính toán (calculation section)

d. Phần trình bày kết quả: Dùng một số hàm của

b. Phần đƣa vào các giá trị đầu vào (input section)

Copyright 2007

MATLAB để trình bày kết quả.

114

MATLAB

 Thí dụ:

M-FILE, or SCRIPT (tt)

 Soạn Script file tính diện tích hình tam giác ABC, khi biết tọa độ ba điểm trong không gian R3. Diện tích tam giác đƣợc tính bằng công thức:

 Trong đó, ký hiệu (^) chỉ tích có hƣớng của hai

Copyright 2007

vectơ AB và AC.

115

MATLAB

Trong cửa sổ Editor/Debugger, ta soạn các dòng lệnh nhƣ sau:

Copyright 2007

M-FILE, or SCRIPT (tt)

116

MATLAB

 Trong chƣơng trình trên hàm cross(u,v) sẽ trả về một vectơ

là vectơ tích có hƣớng của 2 vectơ u và v.

Lƣu ý: vectơ u (hoặc v) đƣợc xác định bởi các thành phần số của nó.

Thí dụ:

u = [1,-2,4], v = [-4,2,0]

 Hàm norm(p) sẽ tính module của vectơ p. Lệnh clear xuất hiện trong đầu chƣơng trình sẽ xóa toàn bộ các biến mà WORKSPACE đang quản lý và dành vùng nhớ để quản lý các biến của chƣơng trình.

 Dòng lệnh disp(S) sẽ hiện thị giá trị biến S ra cửa sổ lệnh- command windows(so sánh với lệnh disp(„text‟), hiển thị chuỗi ký tự).

Copyright 2007

M-FILE, or SCRIPT (tt)

117

MATLAB

THỰC HIỆN % File dt_tamgiac.m: Chương trình tính diện tích hình tam giác,

% Tên người lập trình % Dữ liệu đầu vào: Tọa ba điểm A,B,C

% Dữ liệu đầu ra: Diện tích S của ABC % Biến trung gian p chỉ vectơ tích có hướng của hai vectơ AB x AC

clear disp(„CHUONG TRINH TINH DIEN TICH HINH TAM GIAC‟)

disp(„KHI BIET TOA DO BA DIEM‟) disp(„=========================================‟)

a = input(„Tọa điểm A = „); b = input(„Tọa điểm B = „);

c = input(„Tọa điểm C = „); p = cross(b-a,c-a); % Tích có hƣớng của hai vectơ AB x AC

S = 0.5*norm(p); % Diện tích ABC disp(„Dien tich tam giac ABC:‟)

disp(S)

Copyright 2007

M-FILE, or SCRIPT (tt)

118

MATLAB

 Khi chạy chƣơng trình cho kết quả:

>> DT_Tamgiac

CT TINH DIEN TICH HINH TAM GIAC

KHI BIET TOA DO BA DIEM

==================================

Toa do diem A = [2,0,0]

Toa do diem B = [4,0,0]

Toa do diem C = [3,2,0]

Dien tich tam giac ABC:

2

Copyright 2007

M-FILE, or SCRIPT (tt)

119

MATLAB

 MATLAB dùng các biểu thức ở dạng biểu tƣợng (symbolic) nhƣ các chuỗi kí tự để phân biệt với các biến hay phép toán dạng số học (numberic)

 Xem Thí dụ dƣới đây:

>> x = sym('x'); %Tao bien symbolic x

>> eq = 'x^2+2*x+a=0'; %Dinh nghia PT voi bien symbolic x

>> solve(eq) %Ham dung de giai PT tren

ans =

-1+(1-a)^(1/2)

-1-(1-a)^(1/2)

Copyright 2007

Toolbox Symbolic

120

MATLAB

 Định nghĩa biểu thức symbolic

Biểu thức

Trong MATLAB

„1/(2*x^n)‟

M = sym(„[a,b;c,d]‟)

f = int(„x^3/sqrt(1-x)‟,‟a‟,‟b‟)

Copyright 2007

Toolbox Symbolic

121

MATLAB

Toolbox Symbolic

 Hàm symbolic cho phép tính toán với các biểu

thức, Thí dụ:

>>diff(„cos(x)‟) % Tính đạo hàm của cos(x)

ans =

>>M=sym(„[a,b;c,d]‟)

ans =

[a

b]

[c

d]

Copyright 2007

-sin(x)

122

MATLAB

Toolbox Symbolic

 Ở đây, „cos(x)‟ là một chuỗi, diff(„cos(x)‟) là một biểu thức symbolic chứ không phải là một hàm số học. Ở Thí dụ 2, M=sym(„[a,b;c,d]‟) là một biểu thức symbolic.

 Sử dụng symbolic để xây dựng các hàm toán học

dạng symbolic.

− sym(x)

− sym x

− syms x

Copyright 2007

 Khai báo biến (nhƣ đã trình bày các slide trƣớc)

123

MATLAB

Toolbox Symbolic

 Các lệnh toán học sử dụng symbolic

 f và g là hai hàm symbolic

− f+g

symadd(f,g)

− f-g

symsub(f,g)

− f*g

symmul(f,g)

− f/g

symdiv(f,g)

− f^g

sympow(f,g)

Copyright 2007

124

MATLAB

diff(f)

Đạo hàm bậc nhất theo biến x

diff(f,‟a‟)

Đạo hàm bậc nhất theo biến a

diff(f,‟a‟,n) Đạo hàm bậc n theo biến n

int(f)

Tính tích phân theo biến x

int(f,‟a‟)

Tính tích phân theo biến a

int(f,1,2)

Tính tích phân theo biến x từ 1 đến 2.

int(f,‟a‟,1,2) Tính tích phân theo biến a từ 1 đến 2.

int(f,‟n‟,‟m‟) Tính tích phân theo biến x từ n đến m

solve(f)

Giải phƣơng trình f = 0

dsolve(f)

Giải phƣơng trình vi phân

dsolve(f,‟a‟) Giải PT vi phân với ĐK ban đầu

ezplot(f)

Vẽ đồ thị hàm mà không cần giá trị của biến.

Copyright 2007

Toolbox Symbolic

125

MATLAB

F=fourier(f)

Toolbox Symbolic

Biến đổi Fourier f(x)->F(w)

f=ifourier(F)

Biến đổi Fourier ngược F(w)->f(x)

F=fourier(f,v)

Biến đổi Fourier f(x)->F(v)

F=fourier(f,t,v)

Biến đổi Fourier ngược f(t)->F(v)

F=ztrans(f)

Biến đổi z f(n)->F(z)

f=ztrans(F)

Biến đổi z ngược F(z)->f(n)

F=ztrans(f,w)

Biến đổi z f(n)->F(w)

F=ztrans(F,k,w)

Biến đổi z ngược f(k)->F(w)

F=laplace(f)

Biến đổi Laplace f(t)->F(s)

f=laplace(F)

Biến đổi Laplace F(s)->f(t)

Copyright 2007

126

MATLAB

 Simulink 5.0 (Simulation and Link - R13) đƣợc MatWorks

giới thiệu vào tháng 6 năm 2003. Nó cho phép phân tích,

mô hình hóa và mô phỏng các hệ thống động tuyến tính và

phi tuyến, liên tục và rời rạc một cách trực quan trong môi

trƣờng giao tiếp đồ họa, bằng các thao tác chuột đơn giản.

Có thể nói, không tận dụng đƣợc Simulink là một thiệt thòi

lớn cho ngƣời làm công tác mô phỏng!

 Khởi động Simulink bằng một trong các cách sau:

 nhập:

>>simulink

 hoặc nhấp chuột vào trên menubar của Matlab

Copyright 2007

SIMULINK

127

MATLAB

 Thƣ viện simulink hiện ra nhƣ hình sau:

 Trƣớc tiên, sinh viên hãy nhấp chuột vào các thanh cuộn của thƣ viện để có cái nhìn thân thiện về simulink.

 Từ đây, để có thể tạo mô hình bằng simulink, hãy:

Nhấp chuột vào biểu tƣợng của thƣ viện simulink

Chọn: File – New – Model trong Menu của thƣ viện Simulink

Chọn: File – New – Model trong cửa sổ lệnh của Matlab

Copyright 2007

SIMULINK

128

MATLAB

 Môi trƣờng soạn thảo của Simulink

 Cửa sổ này cho phép ta „nhấp - kéo - thả‟ vào

từng khối chức năng trong thƣ viện simulink. Thí dụ, đặt vào đây khối „Sine Wave‟ trong thƣ viện simulink nhƣ hình sau:

Copyright 2007

SIMULINK

129

MATLAB

SIMULINK

Lấy một khối từ thư viện

Copyright 2007

130

MATLAB

 Mảng một chiều

MẢNG và MA TRẬN

 Mảng một chiều (vecto) là tập hợp các số đƣợc

 length(u): Tính số phần tử trong mảng một

sắp xếp có thứ tự.

chiều u.

ten_mang(n);

 Muốn truy xuất phần tử thứ n trong mảng thì:

 Các phần tử của mảng đựơc phân cách nhau bởi dấu phẩy và đƣợc đặt trong đôi móc vuông [ ] (kiểu dòng).

 Các phần tử trong mảng phân cách nhau dấu

Copyright 2007

chấm phẩy thì gọi là mảng kiểu cột.

131

MATLAB

 Cách tạo mảng:

* Ten_mang = [m1, m2, m3, …] % Mảng kiểu dòng

* Ten_mang = [m1; m2; m3, …] % Mảng kiểu cột

* Ten_mang = [m1 m2 m3 …] % Vectơ dòng

* Ten_mang = [m1

m2

m3

…]

* Ten_mang = [a::b] % Mảng kiểu cách đều.

 Thí dụ:

>> x = [0:2:9]

x =

0 2 4 6 8

Copyright 2007

MẢNG và MA TRẬN

132

MATLAB

• x = linspace(x1,x2,n)

MẢNG và MA TRẬN

% Tạo một vectơ dòng có các phẩn tử cách

đều, với x1 là cận dưới, x2 là cận trên, và n là số điểm của dãy (kể cả 2 điểm x1, x2). Nếu n bị bỏ qua, giá trị mặc định của nó là 100.

Thí dụ:

>> z = linspace(2,8,7)

Copyright 2007

z = 2 3 4 5 6 7 8

133

MATLAB

 x = logspace(a,b,n)

MẢNG và MA TRẬN

% Sẽ tạo ra 1 vectơ dòng có n phần tử cách

Thí dụ:

khoảng theo thang logarit, phần tử đầu là 10a và phần tử cuối là 10b, các phần tử giữa có dạng 10x, trong đó x là 1 điểm cách đều giữa a và b. Có (n-2) điểm nhƣ vậy. Nếu n bỏ đi trong câu lệnh thì mặc định của nó là 50.

>> u = logspace(-1,1,4)

u =

Copyright 2007

0.1000 0.4642 2.1544 10.0000

134

MATLAB

 Các hàm liên quan đến mảng một chiều

MẢNG và MA TRẬN

a. roots(Ten_mang)

Nghiệm của một đa thức Ten_mang là một đa thức đƣợc mô tả là một mảng có các phần tử là các hệ số đa thức, bắt đầu ở bậc cao nhất. Mảng kiểu cột.

b. poly(r)

Copyright 2007

Trả về một mảng kiểu đòng với các phần tử là các hệ số của đa thức có nghiệm trƣớc là các phần tử của mảng r (bài toán ngƣợc)

135

MATLAB

MẢNG và MA TRẬN

c. polyval(a,x)

chứa trong mảng a tại các điểm thuộc mảng x.

Kết quả là một mảng có kích thƣớc bằng với mảng

Dùng để tính giá trị của một đa thức có các hệ số

x.

d. find(x)

khác 0 trong mảng.

Trả một mảng chứa các chỉ số của các phần tử

e. find(x

Copyright 2007

Trả về một mảng chứa các chỉ số của các phần tử trong mảng x (hay y) thỏa điều kiện x < y. x có kích thƣớc bằng y.

136

MATLAB

MẢNG và MA TRẬN

f. Chuyển vectơ hàng sang vectơ cột:

Thí dụ:

>> v = [3 5 9 7]‟

v =

3

Chuyển vị (transpose), dùng kí hiệu dấu nháy đơn „ bên phải vectơ (mảng một chiều) và ngƣợc lại.

5

9

Copyright 2007

7

137

MATLAB

MẢNG và MA TRẬN

Chúng ta có thể tạo vectơ mới bằng cách kết nối

g. Kết nối các vectơ:

các vectơ thành phần đã biết.

Thí dụ:

>> x = [2,5,6];

>> z = [x,y]

z = 2 5 6 7 8 1

Copyright 2007

>> y = [7,8,1];

138

MATLAB

MẢNG và MA TRẬN

i. Truy xuất một phần tử từ một vectơ:

Chúng ta có thể truy xuất một phần tử vectơ hay trích ra một nhóm các phần tử của vectơ theo một điều kiện nào đó (phát sinh ra vectơ mới).

Thí dụ:

>> u = [0,2,4,6,8,10];

>> u(3) % truy xuất phần tử thứ 3 của vectơ u

ans =

4

>> u(2:5) %Truy xuất phần tử thứ 2 đến thứ 5 của vectơ u

ans =

2 4 6 8

>> u([1 3 5]) %Truy xuất phần tử thứ 1, thứ 3, thứ 5 của

vectơ u.

>> n = length(u) % Trả về số phần tử của vectơ u thuộc N.

n =

6

Copyright 2007

139

MATLAB

 MẢNG 2 CHIỀU (MA TRẬN)

 Một mảng trong MATLAB còn có thể có nhiều dòng, nhiều cột; một mảng 2 chiều nhƣ vậy đƣợc gọi là MA TRẬN (matrix).

 Nếu một ma trận A có m dòng và n cột, ta nói kích thƣớc A là m.n. Đôi khi ma trận A còn đƣợc viết dƣới dạng [aij], trong đó i, j lần lƣợt là các chỉ số DÒNG và chỉ số CỘT của phần tử aij.

 Hai ma trận A và B đƣợc gọi là BẰNG NHAU nếu chúng có cùng kích thƣớc và tất cả các phần tử tƣơng ứng đều bằng nhau (aij = bij, với mọi i, j)

 Các vectơ đƣợc MATLAB xem là các mảng 2 chiều đặc biệt: Chúng có kích thƣớc 1xn (vectơ dòng) hoặc mx1 (vectơ cột). MATLAB xếp vectơ và mà trận vào lớp double array trong WORKSPACE.

Copyright 2007

MẢNG và MA TRẬN

140

MATLAB

MẢNG và MA TRẬN

a. Cách tạo một ma trận trong MATLAB

 Thí dụ:

 Các phần tử thuộc cùng một dòng đƣợc phân cách nhau bởi dấu phẩy(,), còn các dòng thì phân cách nhau bằng dấu chấm phẩy (;)

>> A = [2,4,6;3,5,7]

A =

2 4 6

Copyright 2007

3 5 7

141

MATLAB

MẢNG và MA TRẬN

b. Kết nối một vectơ vào 1 ma trận:

Nếu r = [-1, 0, 1] là một vectơ dòng có

cùng số cột với ma trận A thì lệnh B = [A:r] sẽ nối vectơ dòng r vào ma trận A, để tạo ra ma trận B có 3 dòng, 3 cột nhƣ sau:

B =

2

4

6

3

5

7

-1

0

1

Copyright 2007

142

MATLAB

MẢNG và MA TRẬN

c. Ma trận chuyển vị (chuyển trí):

 Nếu A là một ma trận có kích thƣớc m.n thì ma trận chuyển vị (transpose) của A là một ma trận có kích thƣớc n.m. Các cột thứ 1, thứ 2, thứ 3… Trong AT chính là dòng thứ 1, 2, 3 trong ma trận A.

 MATLAB dùng dấu nháy đơn đặt bên phải ma trận để tạo ma

trận chuyển vị.

Thí dụ:

>> A = [1 0;-4 2]

A =

-1

0

-4

2

>> AT=A‟

AT =

1

-4

0

2

Copyright 2007

143

MATLAB

MẢNG và MA TRẬN

d. Truy xuất một phần tử của ma trận (trích vectơ

dòng, cột, ma trận con)

 Với một ma trận cho trƣớc, chúng ta có thể truy xuất từng phần tử của ma trận, trích ra một vectơ dòng hoặc một vectơ cột nào đó, hoặc trích ra một ma trận con gồm nhiều dòng, nhiều cột của ma trận A.

Copyright 2007

 Khi tạo xong một ma trận A nào đó, phát hiện phần tử dòng 2, cột 3 bị gõ sai và chúng ta muốn sửa lại phần tử này là 6, ta chỉ cần gõ lệnh A(2,3) = 6. Trong MATLAB A(2,3) là ký hiệu chỉ phần tử dòng 2, cột 3 của ma trận.

144

MATLAB

>> A = [1,2,3,4;6,7,8,9;0,5,10,15;-3,-4,-5,-6]

MẢNG và MA TRẬN

 Thí dụ: A =

1 2 3 4 6 7 8 9 0 5 10 15 -3 -4 -5 -6

>> A(2,3) % truy xuất phần tử dòng 2, cột 3.

ans = 8 >> A(:,2) %Trích vectơ cột thứ 2 ans = 2 7 5 -4 >> A(4,:) % Trích vectơ dòng thứ 4 ans =

-3 -4 -5 -6

Copyright 2007

145

MATLAB

>> A(:,2:4) % Tạo một ma trận con gồm các cột 2,3,4 của A

ans =

2 3 4

7 8 9

5 10 15

-4 -5 -6

>> A(1:2,:) %Tạo 1 ma trận con gồm các dòng 1,2 của A

ans =

1 2 3 4

6 7 8 9

>> A([1 3], [2 4]) % Tạo một ma trận con gồm các phần

tử thuộc dòng 1,3 và cột 2,4.

Copyright 2007

MẢNG và MA TRẬN

146

MATLAB

 Tóm tắt:

MẢNG và MA TRẬN

 A(k,:) : Véctơ dòng thứ k.

 A (:,l): Vectơ cột thứ l.

 A(k:m,:): Ma trận con có dòng thứ k, cột thứ m

nào, cột nào cần trích ra.

Copyright 2007

 A([array1], [array2]): Vectơ dòng để ghi số dòng

147

MATLAB

 Mảng trống hoặc mảng không (empty or null

MẢNG và MA TRẬN

array)

là mảng không có phần tử nào cả. Các hàng

hoặc các cột của một ma trận có thể đƣợc bỏ

 MATLAB dùng kí hiệu [ ] để chỉ 1 mảng trống

đi, bằng cách gán chúng bằng với mảng trống.

 Thí dụ: A(2,:) = [ ], sẽ bỏ dòng thứ 2 của ma

của ma trận A ban đầu.

Copyright 2007

trận A và nhƣ vậy sẽ làm thay đổi kích thƣớc

148

MATLAB

MẢNG và MA TRẬN

Thí dụ:

>> A

A =

1 2 3 4

5 6 7 8

0 5 10 15

-3 -4 -5 -6

>> A(2,:) = [ ]; % Bỏ dòng thứ 2 của ma trận A

>> A

A =

1 2 3 4

0 5 10 15

-3 -4 -5 -6

Copyright 2007

149

MATLAB

MẢNG và MA TRẬN

Thí dụ:

>> A

A =

1 2 3 4

0 5 10 15

-3 -4 -5 -6

>> A(:,4) = [ ]; % Bỏ tiếp cột thứ 4

>> A

A =

1 2 3

0 5 10

-3 -4 -5

Copyright 2007

150

MATLAB

 Các ma trận đặc biệt

MẢNG và MA TRẬN

 M = eye(n): tạo ra ma trận đơn vị cấp n

 M = ones(m,n): Tạo ra ma trận có size = m.n,

có các phần tử đều bằng 1.

có các phần tử đều bằng 0.

 M = zeros(n); M = ones(n): Tạo ra ma trận vuông M cấp n có tất cả các phần tử đều bằng o hoặc bằng 1.

Copyright 2007

 M = zeros(m,n): Tạo ra ma trận có size = m.n,

151

MATLAB

 Phép cộng trừ

CÁC PHÉP TOÁN MA TRẬN

 A+B

 A-B

1 trong hai là đại lƣợng vô hƣớng.

 Phép nhân

 A*B %Tích hai ma trận. Số cột của A bằng số

% A và B là 2 ma trận có cùng kích thƣớc, hoặc

hàng của B.

Copyright 2007

 A.*B % Nhân từng phần tử của A với từng phần tử của B tƣơng ứng. A và B có cùng kích thƣớc.

152

MATLAB

 Phép chia:

CÁC PHÉP TOÁN MA TRẬN

 A\B % Chia trái ma trận.

 A.\B % Chia trái mảng

 A/B % Chia phải ma trận

 Phép lũy thừa:

 A./B %Chia phải mảng

phát sinh nếu cả A và k đều là ma trận.

 A.^B % Lũy thừa mảng. Là một ma trận mà các

 A^k % Lũy thừa ma trận A bậc k. Lƣu ý: Lỗi sẽ

Copyright 2007

số hạng là A(i,j)^B(i,j)

153

MATLAB

 Ma trận chuyển vị:

 A‟

 Ma trận nghịch đảo

 inv(a) % Tƣơng đƣơng kí hiệu A-1

 Định thức ma trận

 det(A) % A phải là ma trận vuông

 Phép quay ma trận

 Rot90(A,n) % Các phần tử của ma trận đƣợc quay đi một góc 90o theo ngƣợc chiều kim đồng hồ. A là ma trận vuông, n số lần quay.

 Phép đảo ma trận

 Fliplr(A) %đảo các phần tử của A từ trái sang phải.

 Flipud(A) %đảo các phần tử của A từ trên xuống dƣới

Copyright 2007

CÁC PHÉP TOÁN MA TRẬN

154

MATLAB

 Phƣơng pháp nghịch đảo ma trận

 Inv(A)

 Invhilb(n):

 pinv(A): Tính giả nghịch đảo ma trận nxm với m ≠ n.

 Phƣơng pháp khử Gauss

 rref([A f])

 Phƣơng pháp khử Gauss-Jordan

 Phƣơng pháp phân rã ma trận LU

 lu(A)

 Cú pháp: [L, U, P]=lu(A)

− trả về ma trận tam giác dƣới L, tam giác trên U và ma trận hoán đổi P (ma trận đơn vị mà các cột bị hoán chuyển). Ta có, L*U = P*A => X = U\(L\b)

Copyright 2007

HỆ PHƢƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH

155

MATLAB

HỆ PHƢƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH

− lu(A)

− Cú pháp: [L, U, P]=lu(A)

 Trả về ma trận tam giác dƣới L, tam giác trên U và ma trận hoán đổi P (ma trận đơn vị mà các cột bị hoán chuyển). Ta có, L*U = P*A => X = U\(L\b)

 Trả về ma trận tam giác trên U, còn ma trận LP‟=L*P. Ta có, LP*U = A => X = U \ (LP\b)

Copyright 2007

 Phƣơng pháp phân rã ma trận LU

156

MATLAB

 Bài thí nghiệm này trang bị cho sinh viên một số kiến thức cơ bản để xây dựng giao diện ngƣời dùng trong môi trƣờng Matlab, nhằm hoàn thiện một chƣơng trình ứng dụng nhất định.

 Cũng nhƣ các ngôn ngữ cấp cao khác, Matlab hổ trợ nhiều công cụ chức năng cho phép lập trình tạo giao diện sử dụng đẹp và nhanh chóng. Thí dụ, các dạng nút ấn, cửa sổ soạn thảo, các dạng menu, …

Copyright 2007

TẠO GIAO DIỆN

157

MATLAB

TẠO GIAO DIỆN

Các công cụ hổ trợ giao diện

Copyright 2007

158

MATLAB

 Để tạo GIAO DIỆN dùng công cụ GUIDE của MATLAB

>> guide

TẠO GIAO DIỆN

Hoặc File/Show GUI layout tool. Cửa sổ Guide Control Panel xuất hiện. Từ cửa sổ này có thể truy xuất đến các cửa sổ khác.

Có thể chọn các mẫu giao diện có sẵn hay bấm OK để chọn GUI trống.

Copyright 2007

159

MATLAB

 Cửa sổ biên soạn GUI hiện ra

Vùng bên trái chứa danh sách các thành phần đối tƣợng, vùng có ô lƣới là vùng hiển thị, nơi đặt các component, bạn bấm chuột trái vào các component muốn tạo, sau đó đƣa con chuột ra vùng layout nơi muốn đặt component, bấm chuột trái dùng kích thƣớc component. Muốn thay đổi kích chuột phải vào vùng layout, vào menu chọn thuộc tính bấm chuột trái, cửa sổ sau xuất hiện, vào BackGroundColor chọn màu nền thích hợp.

TẠO GIAO DIỆN (tt)

Cửa sổ thuộc tính

Copyright 2007

160

MATLAB

 Nếu muốn mở file.fig có sẵn, ta có thể chọn ngay từ cửa sổ

lệnh

TẠO GIAO DIỆN (tt)

>> guide ten_file.fig

Hay vào menu File rồi chọn Open. Hay Ctrl + O

Copyright 2007

161

MATLAB

 Align Objects (căn lề các đối tƣợng)

 Tools/Align Objects…/

Copyright 2007

TẠO GIAO DIỆN (tt)

162

MATLAB

 Bấm kép chuột component trong vùng layout để soạn tính chất của component, Thí dụ bấm kép vào Push Buton sẽ hiện ra cửa sổ Property Inspector hoặc cũng có thể bấm chuột phải để hiện ra Context Menu (hình bên), sau đó Inspector. Mỗi bấm Property component là mỗi Object đƣợc điều khiển bởi uicontrol (User Interface Control)

Copyright 2007

TẠO GIAO DIỆN (tt)

163

MATLAB

 Các component mà GUI cho phép là:

 Axes: vẽ hệ trục

 Check box: là hộp kiểm tra cho phép đƣa vào các chọn lựa khi

bấm chuột vào đó.

 Edit text: Là hộp văn bản đƣa chuỗi kí tự vào đó.

 Frame: Khung bao một cửa sổ hình.

 List box: Gồm một bảng các mục để chọn lựa

 Pop-up menu: Menu sổ xuống trình bày một bảng các chọn

lựa khi bấm chuột vào.

 Push button: Tƣơng tự Checkbox nhƣng chỉ chọn đƣợc một,

 Radio button: (nút bật) giống push button nhƣng có hiển thị

trạng thái thay đổi mỗi khi nhấn.

 Popup Menu: Tạo menu.

Copyright 2007

TẠO GIAO DIỆN (tt)

164

MATLAB

 Một số component sẽ gây ra hành động khi tác

TẠO GIAO DIỆN (tt)

dùng phải soạn thảo. Sau khi đã biên tập các

thuộc tính và gọi hàm, có thể cất figure và file áp

động vào nó bằng cách goi một hàm M mà ngƣời

dụng M đi kèm bằng cách vào menu File-Save

 Muốn chạy chƣơng trình gọi ten_file.m (hoặc

dùng các lệnh openfig, open, hgfile.fig), file này

sẽ khởi động file ten_file.fig và xuất hiện cửa sổ

hay File-Save as và đánh tên file.

component đã soạn thảo.

Copyright 2007

hình ảnh ten_file.fig mà ta sẽ thao tác trên các

165

MATLAB

 Tool – GUI Options để chọn các option cho giao diện

Các chọn lựa cho GUI

Copyright 2007

TẠO GIAO DIỆN (tt)

166

MATLAB

 Resize behavior có 3 lựa chọn:

 Non-resizable: không thay đổi kích thƣớc cửa FIG (mặc định).

 Proportional: Ngƣời dùng có thể điều chỉnh kích thƣớc cửa sổ

và các component trong đó sẽ tự điều chỉnh phù hợp

 Other: Dùng hàm ResizeFcn để điều chỉnh.

 Ô Command-Line accessibility có các lựa chọn:

 Off: Các lệnh đánh sau dâu >> không tác động đến cửa sổ FIG.

 On: Các dòng lệnh tác động đến cửa sổ FIG, GUI là current

figure

 Callback: GUI là current fugure đối với các lệnh callback

 Other: Phụ thuộc cửa sổ Property Inspector (thuộc tính

HandleVisibility và IntegerHandle)

Copyright 2007

TẠO GIAO DIỆN (tt)

167

MATLAB

 XÂY DỰNG GIAO DIỆN

TẠO GIAO DIỆN (tt)

Start

Xác định công việc

Draw GUI

TEST DESIGN

Viết code

Test code

Stop

Copyright 2007

168

MATLAB

 Sau khi xác định đƣợc hình dáng của giao diện, dùng chuột kéo các đối tƣợng cần sử dụng sang figure, sắp xếp theo đúng ý tƣởng thiết kế.

 Thay đổi các thuộc tính của đối tƣợng.

 Viết chƣơng trình callback.

 Chuyển sang chế độ active để thử chƣơng trình.

 Thí dụ 1: Tạo giao diện để giải và vẽ đồ thị

TẠO GIAO DIỆN (tt)

Copyright 2007

phƣơng trình bậc 2. Giao diện gồm có 5 text, 5 edit, 2 push, 1check, 1 axes.

169

MATLAB

 Bài tập:

 XÂY DỰNG GIAO DIỆN

Tag

EditA

EditB

EditC

EditX1

EditX2

TẠO GIAO DIỆN (tt)

a. Control

b. Active

Giao diện ở chế độ thiết kế và thực thi

Copyright 2007

170

MATLAB

 Thí dụ 2: xây dựng một giao diện đơn giản sau

Copyright 2007

TẠO GIAO DIỆN (tt)

171

MATLAB

 Tạo cửa sổ chính figure – „Welcome to User Interface‟s

Giude‟ theo cách sau:

 Mở Matlab Editor

 Nhập nội dung sau:

% User Interface's Guide % Matlab Experiments 2003 % TcAD, CIT, Cantho University % ---------------------------------------------------------------------------------- % Initialize whole figure... namefig = 'Welcome to User Interface''s Guide'; figpos = get(0,'DefaultFigurePosition'); % lay vi tri mac nhien figpos(1)= figpos(1)-10; figpos(2)= figpos(2)-10; figpos(3)= figpos(3)+10; figpos(4)= figpos(4)+10; % Tao figure fig=figure( ... 'Name', namefig, ... 'NumberTitle','off', ... 'Position',figpos);

Copyright 2007

TẠO GIAO DIỆN (tt)

172

MATLAB

 Lƣu thành file giaodien.m

>>giaodien % thi hanh

 Quan sát kết quả trên hình sau (Lƣu ý các thuộc tính: Name, Position)

TẠO GIAO DIỆN (tt)

>>set(fig) % xem thuộc tính của figure trong cửa sổ lệnh

Copyright 2007

173

MATLAB

 Thêm vào figure một axes cho phép hiển thị đồ họa:

 Nhập tiếp nội dung sau vào file giaodien.m

% ----------------------------------------------------------------------------

% main axes

axs=axes('Position',[0.05 0.4 0.65 0.55]);

 Lƣu và thi hành file này.

Copyright 2007

TẠO GIAO DIỆN (tt)

174

MATLAB

 Hiển thị dòng „Matlab Experiments‟ bên dưới axes:

Nhập tiếp nội dung sau vào file giaodien.m

TẠO GIAO DIỆN (tt)

% -------------------------------------------

% text

txtpos=[10 50 425 50];

txt=uicontrol(...

'Style','text',...

'BackgroundColor',[0.8 0.8 0.8],...

'ForegroundColor',[0.4 0.5 0.3],...

'String','Matlab Experiments',...

'Position',txtpos,...

'Fontname','Courier',...

'FontWeight','Bold',...

'FontSize',26);

Copyright 2007

175

MATLAB

 Lưu và thi hành file này.

Copyright 2007

TẠO GIAO DIỆN (tt)

176

MATLAB

 Tạo một frame có shadow bên phải figure để đặt các nút chức

TẠO GIAO DIỆN (tt)

năng. Nhập tiếp nội dung sau vào file giaodien.m % ---------------------------------------------- % Console frames p1=0.755; p2=0.05; p3=0.2; p4=0.90; frm1pos = [p1 p2 p3 p4]; frm2pos = [p1-0.005 p2+0.005 p3 p4]; % shadow frame frm1=uicontrol( ... 'Style','frame', ... 'Units','normalized', ... 'Position',frm1pos, ... 'ForegroundColor',[0.4 0.4 0.4],... 'BackgroundColor',[0.4 0.4 0.4]); % main frame frm2=uicontrol( ... 'Style','frame', ... 'Units','normalized', ... 'Position',frm2pos, ... 'ForegroundColor',[0.7 0.7 0.7],... 'BackgroundColor',[0.65 0.65 0.65]);

Copyright 2007

177

MATLAB

 Lưu và thi hành file này.

Copyright 2007

TẠO GIAO DIỆN (tt)

178

MATLAB

 Tạo nút „Close‟ có chức năng đóng cửa sổ figure hiện hành:

 Nhập tiếp nội dung sau vào file giaodien.m

% ------------------------------------------------------------

% Close button

closeHndl=uicontrol(...

'Style','pushbutton', ...

'Units','normalized', ...

'Position',[p1+0.01 p2+0.05 p3-0.025 0.05], ...

'String','Close', ...

'Foregroundcolor','b',...

'Fontsize',9,...

'Callback','close');

 Lƣu và thi hành file này.

Copyright 2007

TẠO GIAO DIỆN (tt)

179

MATLAB

 Vấn đề quan trọng nhất đối với một nút chức

TẠO GIAO DIỆN (tt)

năng là thi hành công việc tƣơng ứng khi

cho phép: thi hành một lệnh của Matlab dƣới

dạng chuỗi (bao gồm lệnh gọi hàm, script file,

ngƣời sử dụng thao tác. Thuộc tính „CallBack‟

biểu thức toán, …). Sinh viên thử thay lệnh

và quan sát đáp ứng.

 Tạo nút Sphere để vẽ một hình cầu 3D:

close bằng một lệnh khác, chẳng hạn demos

Copyright 2007

 Nhập tiếp nội dung sau vào file giaodien.m

180

MATLAB

Copyright 2007

TẠO GIAO DIỆN (tt)

181

MATLAB

 Lưu và thi hành file này.

Copyright 2007

TẠO GIAO DIỆN (tt)

182

MATLAB

 Tạo nút Picture để hiển thị ảnh màu:

 Nhập tiếp nội dung sau vào file giaodien.m

% --------------------------------------------------------------

% Picture button

pic=uicontrol( ...

'Style','pushbutton', ...

'Units','normalized', ...

'Position',[p1+0.01 p4-0.125 p3-0.025 0.05], ...

'String','Picture', ...

'Foregroundcolor','b',...

'Fontsize',9,...

'Callback',['imshow(imread(''flowers.tif''))']);

Copyright 2007

TẠO GIAO DIỆN (tt)

183

MATLAB

 Lưu và thi hành file này.

Copyright 2007

TẠO GIAO DIỆN (tt)

184

MATLAB

 Sinh viên lƣu ý cách biểu diễn nhiều lệnh ở dạng chuỗi cho „CallBack‟. Trong trƣờng hợp có quá nhiều lệnh phục vụ chức năng này, ta nên đƣa chúng vào một script file hoặc một hàm khác. Ngoài ra, nếu ta tạo giao diện dƣới dạng một hàm (function) thì thuộc tính „CallBack‟ cho phép gọi một hàm con đƣợc viết ngay trong file này.

Copyright 2007

TẠO GIAO DIỆN (tt)

185

MATLAB

 Sinh viên hãy tạo thêm nút „About‟ sao cho khi ngƣời sử dụng ấn nút sẽ mở cửa sổ mới nằm ngay giữa màn hình

Copyright 2007

TẠO GIAO DIỆN (tt)

186

MATLAB

 Cho hai ma trận:

1

2

1

0

A =

; B =

3

4

0

1

Dùng MATLAB để tính các biểu thức sau:

C = A + B; D = A – B; E = A*B; F = B*A; G = A.*B;

H = B.*A; I = A\B; J = A.\B; K = A/B; L = A./B;

M = A.^B; N = A^2,0; O = 2,0.^A

Copyright 2007

BÀI TẬP 1

187

MATLAB

 Cho vectơ hàng A = [4 5 6] và B = [1 2 3]

 Dùng MATLAB để tính các biểu thức sau:

C = A+B; D = A – B; E = A*B; F = B*A;

 Cho ma trận A = [4 5 6;2 0 5;1 3 4 ]

và B = [1 0 0]

Dùng MATLAB tính các biểu thức sau:

C =3*A; D = A*3; E = A.*3; F = 3.^A;

G = A/5; H = A./5; I = A\5; J = A.\5

Copyright 2007

BÀI TẬP 2

188

MATLAB

3. Viết chƣơng trình giải phƣơng trình bậc n và vẽ đồ thị của hàm theo 2 phƣơng pháp nhập biến: nhập khi gọi hàm và nhập bằng câu lệnh input. So sanh ƣu nhƣợc điểm khi dùng hai phƣơng pháp này.

4. Viết chƣơng trình cho phép chọn kiểu vẽ 2D (plot), 3D

(mesh) để vẽ đồ thị của hàm một biến và hai biến bất kỳ. Ngƣời sử dụng sẽ phải cung cấp kiểu vẽ, hàm số và khoảng giá trị của biến cần vẽ. Nếu kiểu vẽ là 2D và hàm hai biến, yêu cầu nhập lai cho đúng.

5. Viết chƣơng trình giải phƣơng trình hoặc hệ phƣơng trình bằng biến symbolic. Ngƣời sử dụng sẽ chọn lựa giải phƣơng trình hoặc giải hệ phƣơng trình. Nếu giải hệ phải cung cấp số phƣơng trình.

Copyright 2007

BÀI TẬP

189

MATLAB

6. Viết chƣơng trình tìm đạo hàm và tích phân của

BÀI TẬP

7. Viết chƣơng trình giải phƣơng trình vi phân.

8. Làm lại bài 2 với biến symbolic

Copyright 2007

một hàm và vẽ đồ thị của hàm, vi phân, tích phân của hàm trên cùng một đồ thị. Ngƣời sử dụng có thể chọn biến của hàm. Ngƣời sử dụng có thể nhập khoảng giá trị biến cần vẽ hoặc không.

190

MATLAB

9. Tạo giao diện nhƣ hình vẽ. Nhập các thông số a, b, c , d. Nhấn „Vẽ‟, vẽ đồ thị. Nhấn „Giải nghiệm‟, thì xuất nghiệm ở x1, x2, x3. Khi chọn „PTB2‟ thì các ô d và x3 ở chế độ enable off.

Copyright 2007

BÀI TẬP (tt)

191

MATLAB

10. Tạo giao diện nhƣ ở hình dƣới. Ngƣời sử dụng nhập hàm cần vẽ vào ô edit, sau đó chọn lực kiểu vẽ, colormap.

Copyright 2007

BÀI TẬP (tt)

192

MATLAB