Giáo trình Matlab - Chương 4: Đồ họa với Matlab

Lệnh surfc (X,Y,Z): vẽmặt có các đườn contour phía dưới.

Lệnh surfl (X,Y,Z,s): vẽmặt có bóng sáng. Đối sốs xác định hướng của nguồn

sáng trên bềmặt vẽ. s là một vectơtuỳchọn trong hệtoạ độdecac hay trong toạ

độcầu. Nếu không khai báo giá trịmặc định của s là 45

o

theo chiều kim đồng hồ

từvịtrí người quan sát.

Khi vẽ đồthịta có thểthay đổi một số đặc điểm của đồthịnhưtỉlệtrên các trục,

giá trịgiới hạn của các trục, màu và kiểu đường cong đồthị, hiển thị

legend ngay trên figure bằng cách vào menu tools rồi vào mục axes properties,

line properties hay show legend

pdf16 trang | Chuyên mục: MATLAB | Chia sẻ: dkS00TYs | Lượt xem: 6828 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình Matlab - Chương 4: Đồ họa với Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
g
y 
tu
ye
n 
tin
h
0 50 100
102
103
104
semilogy(x,y)
x tuyen tinh
y 
lo
g
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 62
-1
0
1
-1
0
1
0
0.2
0.4
0.6
0.8
1
x
Ve 3D voi truc z tuyen tinh
y
z
-1
0
1
-1
0
1
10-2
10-1
100
x
Ve 3D voi truc z logarith
y
z 
lo
g
>> subplot(1,2,2) 
>>semilogy(x,y,'.') 
>>title('semilogy(x,y)') 
>>xlabel('x tuyen tinh') 
>>ylabel('y log') 
>>grid on 
MATLAB không có các hàm vẽ tương ứng với loglog, semilogx, semilogy trong 
không gian. Vì vậy, muốn vẽ với hệ tọa độ logarithm trong không gian 3D, ta 
phải sử dụng hàm plot3. Chế độ tuyến tính luôn được mặc định. Ðể thay đổi tỷ lệ 
trên các trục sang tỷ lệ logarithm, ta dùng lệnh: 
set(gca,’Xscale’,’log’) 
Ví dụ: 
>> t=[0.01:0.005:0.99]; 
>> x=cos(20*pi*t); 
>> y=sin(20*pi*t); 
>> z=t; 
>> subplot(1,2,1) 
>>plot3(x,y,z) 
>>set(gca,'Zscale','linear') 
>>title('Ve 3D voi truc z 
tuyen tinh') 
>>xlabel('x') 
>>ylabel('y') 
>>zlabel('z') 
>> grid on 
>>subplot(1,2,2) 
>>plot3(x,y,z) 
>>set(gca,'Zscale','log') 
>>title('Ve 3D voi truc z 
logarith') 
>>xlabel('x') 
>>ylabel('y') 
>>zlabel('z log') 
>> grid on 
4.1.7. Ðồ thị bánh (pie) và đồ thị cột (bar) 
4.1.7.1. Ðồ thị bánh 
Ðể vẽ đồ thị bánh trong mặt phẳng ta dùng hàm pie, còn muốn vẽ trong không 
gian, ta dùng hàm pie3. Về mặt cú pháp hai hàm pie và pie3 giống nhau. Cú pháp 
có dạng: pie(V) 
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 63
Trong đó V là vectơ chứa các phần tử được thể hiện trên đồ thị bánh. Nếu tổng 
các phần tử trong vectơ nhỏ hơn hoặc bằng 1 thì đồ thị bánh sẽ thể hiện các phần 
tử như là thành phần phần trăm. Nếu tổng các phần tử lớn hơn 1, thì mỗi phần tử 
được chia cho tổng đó để xác định phần chia trên đồ thị bánh ứng với mỗi phần 
tử. 
Thứ tự phân chia trên đồ thị bánh theo đúng thứ tự phần tử mô tả trong vectơ. 
Ðường chia đầu tiên là đường nối tâm và điểm cao nhất trên đường tròn, các 
đường kế tiếp được phân chia theo thứ tự ngược chiều kim đồng hồ. 
Muốn tách phần chia nào đó ra khỏi đồ thị thì ta thêm vào hàm pie một vectơ nữa 
có cùng kích thước với vectơ được mô tả ở trên. Phần tử của vectơ này tương 
ứng với phần cần tách ra khỏi đồ thị thì ta cho giá trị khác 0, phần tử tương ứng 
với phần không tách ra ta cho giá trị bằng 0. 
Các màu của từng phần trong đồ thị bánh được MATLAB lựa chọn không trùng 
nhau và rất dễ phân biệt. 
Ví dụ: 
Trong một sản phẩm hoàn thiện có 5 chi tiết của phân xưởng A, 12 chi tiết của 
phân xưởng B, 15 chi tiết của phân xưởng C và 20 chi tiết của phân xưởng D. Ta 
thể hiện số phần trăm chi tiết của mỗi phân xưởng trong sản phẩm hoàn thiện đó 
trên đồ thị bánh bằng hàm pie như sau: 
>> subplot(2,1,1) 
>> pie([5 12 15 20]) 
>> subplot(2,1,2) 
>> pie([5 12 15 20],[0 0 0 1]) 
>> pie([5 12 15 20],{'xuong A','xuong B','xuong C','xuong D'}) 
10%
23%
29%
38%
10%
23%
29%
38%
xuong A
xuong B
xuong C
xuong D
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 64
4.1.7.4. Đồ thị cột (bar) 
Hàm bar và bar3 cho phép vẽ đồ thị trong mặt phẳng và trong không gian. 
Hàm barh và hàm barh3 cho phép vẽ đồ thị cột nằm ngang trong mặt phẳng và 
trong không gian. 
Cú pháp: bar(Vx, Vy, kích thước) 
Trong đó Vx và Vy là những vectơ có cùng kích thước, các giá trị độ cao của cột 
trong Vy sẽ tương ứng với các giá trị trên trục ngang của Vx, điều chú ý quan 
trọng là các giá trị trong Vx phải đơn điệu tăng hoặc giảm. Tham số kích thước 
xác định bề rộng của cột. 
Ví dụ: Vẽ đồ thị cột với các số liệu: 
X Y 
2 7.5 
3 5.2 
4 3 
>> bar([2 3 4],[7.5 5.2 3],0.4) 
Nếu ta không đưa vào các giá trị của X, nghĩa là trong hàm bar vừa sử dụng ta bỏ 
[2 3 4], thì MATLAB sẽ mặc định các giá trị của X là [1 2 3]. Trong trường hợp 
Vy là ma trận thì số nhóm cột chính bằng kích thước của vectơ Vx. 
2 3 4
0
1
2
3
4
5
6
7
8
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 65
Ví dụ: thể hiện đồ thị cột với các số liệu sau: 
X Y 
1 7.5 
6 
4 
3 5.2 
3 
5 
>> bar([1 3],[7.5 6 4;5.2 3 5],0.4) 
1 3
0
1
2
3
4
5
6
7
8
4.4. Vẽ các mặt 
4.4.1. Vẽ các mặt từ một ma trận bằng các lệnh mesh, meshz, meshc, 
waterfall 
MATLAB định nghĩa bề mặt lưới bằng các điểm theo hướng trục z ở trên đường 
kẻ ô hình vuông trên mặt phẳng x - y. Nó tạo lên mẫu một đồ thị bằng cách ghép 
các điểm gần kề với các đường thẳng. Kết quả là nó trông như một mạng lưới 
đánh cá với các mắc lưới là các điểm dữ liệu. Đồ thị lưới này thường được sử 
dụng để quan sát những ma trận lớn hoặc vẽ những hàm có hai biến. 
Bước đầu tiên là đưa ra đồ thị lưới của hàm hai biến z = f(x,y), tương ứng với ma 
trận X và Y chứa các hàng và các cột lặp đi lặp lại, MATLAB cung cấp hàm 
meshgrid cho mục đích này: 
X,Y] = meshgrid (x,y): tạo một ma trận X, mà các hàng của nó là bản sao của 
vetơ x, và ma trận Y có các cột của nó là bản sao của vectơ y. Cặp ma trận này 
sau đó được sử dụng để ước lượng hàm hai biến sử dụng đặc tính toán học về 
mảng của MATLAB. 
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 66
Để vẽ bề mặt ta sử dụng các hàm: 
mesh (X,Y,Z): nối các điểm với nhau trong một lưới chữ nhật. 
meshc (X,Y,Z): vẽ các đường contour bên dưới đồ thị. 
meshz (X,Y,Z): vẽ các đường thẳng đứng viền quanh đồ thị. 
waterfall X,Y,Z): vẽ mặt với hiệu ứng như thác đổ. 
Ví dụ: Vẽ mặt xác định bởi phương trình: ( ) 22, yxxeyxz −−= 
>> x=-2:0.5:2; 
>> y=-2:1:2; 
>> [X,Y]=meshgrid(x,y) 
X = 
 Columns 1 through 6 
 -4.0000 -1.5000 -1.0000 -0.5000 0 0.5000 
 -4.0000 -1.5000 -1.0000 -0.5000 0 0.5000 
 -4.0000 -1.5000 -1.0000 -0.5000 0 0.5000 
 -4.0000 -1.5000 -1.0000 -0.5000 0 0.5000 
 -4.0000 -1.5000 -1.0000 -0.5000 0 0.5000 
 Columns 7 through 9 
 1.0000 1.5000 4.0000 
 1.0000 1.5000 4.0000 
 1.0000 1.5000 4.0000 
 1.0000 1.5000 4.0000 
 1.0000 1.5000 4.0000 
Y = 
 -2 -2 -2 -2 -2 -2 -2 -2 -2 
 -1 -1 -1 -1 -1 -1 -1 -1 -1 
 0 0 0 0 0 0 0 0 0 
 1 1 1 1 1 1 1 1 1 
 2 2 2 2 2 2 2 2 2 
>> Z=X.*exp(-X.^2-Y.^2) 
Z = 
 Columns 1 through 6 
 -0.0007 -0.0029 -0.0067 -0.0071 0 0.0071 
 -0.0135 -0.0582 -0.1353 -0.1433 0 0.1433 
 -0.0366 -0.1581 -0.3679 -0.3894 0 0.3894 
 -0.0135 -0.0582 -0.1353 -0.1433 0 0.1433 
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 67
 -0.0007 -0.0029 -0.0067 -0.0071 0 0.0071 
 Columns 7 through 9 
 0.0067 0.0029 0.0007 
 0.1353 0.0582 0.0135 
 0.3679 0.1581 0.0366 
 0.1353 0.0582 0.0135 
 0.0067 0.0029 0.0007 
>> subplot(1,2,1) 
>> mesh(X,Y,Z) 
>> xlabel('x') 
>> ylabel('y') 
>> zlabel('z') 
>> title('ve mat voi lenh mesh') 
>> subplot(1,2,2) 
>> meshc(X,Y,Z) 
>> xlabel('x') 
>> ylabel('y') 
>> zlabel('z') 
>>title('ve mat voi lenh meshc') 
>> subplot(1,2,1) 
>> meshz(X,Y,Z) 
>> xlabel('x') 
>> ylabel('y') 
>> zlabel('z') 
>> title('ve mat voi lenh meshz') 
>> subplot(1,2,2) 
>> waterfall(X,Y,Z) 
>> xlabel('x') 
>> ylabel('y') 
>> zlabel('z') 
>> title('ve mat voi lenh 
waterfall') 
Lưu ý khi sử dụng hàm mesh khi có các số phức hoặc đại lượng không phải là số 
(NaN - not a number) 
Ví dụ: phương trình của một bán cầu: 221 yxz −−= 
>> x=-1:0.2:1; 
>> y=-1:0.2:1; 
-2
0
2
-2
0
2
-0.4
-0.2
0
0.2
0.4
x
ve mat voi lenh meshz
y
z
-2
0
2
-2
0
2
-0.4
-0.2
0
0.2
0.4
x
ve mat voi lenh waterfall
y
z
-2
0
2
-2
0
2
-0.4
-0.2
0
0.2
0.4
x
ve mat voi lenh mesh
y
z
-2
0
2
-2
0
2
-0.4
-0.2
0
0.2
0.4
x
ve mat voi lenh meshc
y
z
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 68
>> [X,Y]=meshgrid(x,y); 
>> Z=sqrt(1-X.^2-Y.^2); 
>> mesh(X,Y,Z) 
??? Error using ==> surface 
X, Y, Z, and C cannot be complex. 
Nhận thấy rằng trong ma trận Z có một số phần tử phức. Vì vậy khi dùng lệnh 
mesh MATLAB thông báo lỗi. 
Do đó, để vẽ bán cầu này ta phải giải quyết vấn đề nảy sinh với số phức như sau: 
Cách 1: Thay tất cả các phần tử phức trong ma trận Z bằng phần tử 0. 
>> Z=real(Z); 
>> mesh(X,Y,Z) 
Cách 2: Thay tất cả các phần tử phức của ma trận Z bằng đại lượng NaN. Trong 
trường hợp này MATLAB sẽ không vẽ lưới đến các điểm đó. 
>> I=find(imag(Z)~=0) % tìm chỉ số của các vị trí các phần tử có phần ảo khác không 
I = 
 [] 
>> Z(I)=NaN; 
>> mesh(X,Y,Z) 
4.4.4.Vẽ các mặt được tô bóng từ một ma trận bằng các lệnh surf, surfc 
Ví dụ: 
>> x=-2:0.5:2; 
>> y=-2:1:2; 
>> [X,Y]=meshgrid(x,y); 
>> Z=X.*exp(-X.^2-Y.^2); 
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
0
0.2
0.4
0.6
0.8
1
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 
 69
>> surf(X,Y,Z) 
>> colormap(hot) 
 Ta có thể tạo nhiều lưới hơn để có một mặt mịn hơn: 
>> x=-2:0.2:2; 
>> y=-2:0.4:2; 
>> [X,Y]=meshgrid(x,y); 
>> Z=X.*exp(-X.^2-Y.^2); 
>> surf(X,Y,Z) 
>> colormap(cool) 
Lệnh surfc (X,Y,Z): vẽ mặt có các đườn contour phía dưới. 
Lệnh surfl (X,Y,Z,s): vẽ mặt có bóng sáng. Đối số s xác định hướng của nguồn 
sáng trên bề mặt vẽ. s là một vectơ tuỳ chọn trong hệ toạ độ decac hay trong toạ 
độ cầu. Nếu không khai báo giá trị mặc định của s là 45o theo chiều kim đồng hồ 
từ vị trí người quan sát. 
Khi vẽ đồ thị ta có thể thay đổi một số đặc điểm của đồ thị như tỉ lệ trên các trục, 
giá trị giới hạn của các trục, màu và kiểu đường cong đồ thị, hiển thị 
legend…ngay trên figure bằng cách vào menu tools rồi vào mục axes properties, 
line properties hay show legend… 
-2
0
2
-2
0
2
-0.4
-0.2
0
0.2
0.4
-2
0
2
-2
0
2
-0.5
0
0.5

File đính kèm:

  • pdfGiáo trình Matlab - Chương 4_Đồ họa với Matlab.pdf