12/08/2018, 15:27

Một số hàm thông dụng trong matlab để vẽ đồ thị

MATLAB là ngôn ngữ lập trình, do công ty MathWorks thiết kế. Mặc dù được phát triển như một ngôn ngữ lập trình toán học giúp người sử dụng tiếp cận với đại số cao cấp và xử lý hình ảnh, MATLAB cũng được đông đảo các nhà khoa học, kĩ sư và lập trình viên trong lĩnh vực xử lý hình ảnh và ứng dụng ...

  • MATLAB là ngôn ngữ lập trình, do công ty MathWorks thiết kế. Mặc dù được phát triển như một ngôn ngữ lập trình toán học giúp người sử dụng tiếp cận với đại số cao cấp và xử lý hình ảnh, MATLAB cũng được đông đảo các nhà khoa học, kĩ sư và lập trình viên trong lĩnh vực xử lý hình ảnh và ứng dụng trí tuệ nhân tạo sử dụng. MATLAB cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác.
  • MATLAB được sử dụng trong nhiều nghành nghề , nhiều lĩnh vực khác nhau , chính vì vậy mà các hàm trong MATLAB cũng rất nhiêu . Sau đây mình sẽ giới thiệu một vài hàm về đồ thị đơn giản và thông dụng trong MATLAB

1 ) Hàm Plot - Vẽ các điểm và đường trong mặt phẳng(2D)

Phần lớn các câu lệnh để vẽ đồ thị trong mặt phẳng đều là lệnh plot. Lệnh plot vẽ đồ thị của một mảng dữ liệu trong một hệ trục thích hợp và nối các điểm bằng đường thẳng.

  • Ví dụ :

x=linspace(0,2*pi,30); // Hàm linspace là lấy 30 điểm cách đều nhau trong khoảng từ 0 -> 2pi y=sin(x); plot(x,y);

  • Đồ thị nhận được được hiển thi trên cửa sổ figure
  • Chúng ta cũng có thể vẽ nhiều đồ thị bằng cách thêm

z=cos(x); plot(x,y,x,z);

  • Nếu thay đổi trật tự các đối số đồ thị sẽ xoay một góc 90

plot(y,x,z,x);**

MATLAB mặc định đường vẽ là đường liền, không đánh dấu, màu xanh da trời.Ta có thể thay đổi kiểu đường vẽ và đánh dấu lên đồ thị bằng cách đưa vào một đối số thứ ba. Các đối số tùy chọn này là một xâu kí tự, có thể chứa một hoặc nhiều hơn theo bảng dưới đây.

Kí tự Màu Kí tự Đánh dấu Kí tự Kiểu Nét Vẽ
b xanh da trời . chấm - nét liền
g xanh lá cây o vòng tròn : nét chấm
r đỏ x dấu x -. nét gạch - chấm
c xanh da trời nhạt + dấu + -- nét đứt
m đỏ tím * dấu hoa thị - nét liền
y vàng s hình vuông
k đen d hình thoi
w trắng ^ tam giác hướng xuống
v tam giác hướng lên
< tam giác hướng phải
> tam giác hướng trái
vp sao năm cánh
h sao sáu cánh
  • Ví dụ:

plot(x,y,'m*',x,y,'b--')

Ðộ rộng của đường vẽ (lines) được xác định kèm với mô tả Lineawidth trong lệnh plot. Ðộ rộng đường vẽ được mặc định là 0.5 point ~ 1/72 inch. Chiều cao của dấu (marker) được xác định kèm với mô tả Markersize trong lệnh plot. Chiều cao của dấu được mặc định là 6 point.

  • Ví dụ:

plot(x,y,'p-','lineawidth',4,'markersize',6)

Lệnh grid on sẽ thêm đường lưới vào đồ thị hiện tại. Lệnh grid off xóa bỏ các nét này. Ta có thể đưa tên trục x, y và tên của đồ thị vào hình vẽ nhờ các lệnh xlabel và ylabel. Lệnh title sẽ thêm vào đồ thị tiêu đề ở đỉnh. Dòng ghi chú được đưa vào đồ thị nhờ hàm legend. Trong legend thì màu và kiểu của mỗi loại đường phù hợp với các đường đó trên đồ thị.

  • Ví dụ:

x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,'mx-',x,z,'bp--') grid on xlabel('x') ylabel('y') title('do thi ham sin va cos') legend ('y = sinx','z =cosx')

Ta có thể thêm nét vẽ vào đồ thị đã có sẵn bằng cách dùng lệnh hold. Khi dùng lệnh hold on, MATLAB không bỏ đi hệ trục đã tồn tại trong khi lệnh plot mới đang được thực hiện, thay vào đó, nó thêm đường cong mới vào hệ trục hiện tại.Tuy nhiên, nếu dữ liệu không phù hợp hệ trục tọa độ cũ, thì trục được chia lại. Dùng lệnh hold off sẽ bỏ đi cửa sổ figure hiện tại và thay vào bằng một đồ thị mới. Lệnh hold không có đối số sẽ bật tắt chức năng của chế độ thiết lập hold trước đó

  • Ví dụ

x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y);

  • Hình vẽ sẽ hiện ra trên cửa sổ figure

hold on plot(x,z,'m')

  • Sẽ vẽ thêm 1 đồ thị khác vào cùng cửa sổ figure

hold off

  • Lệnh subplot(m,n,p) chia cửa sổ hiện tại thành một ma trận m x n khoảng để vẽ đồ thị, và chọn p là cửa sổ hoạt động. Các đồ thị thành phần được đánh số từ trái qua phải, từ trên xuống dưới, sau đó đến hàng thứ hai
  • Ví dụ:

subplot(2,2,1) plot(x,y) subplot(2,2,2) plot(y,x) subplot(2,2,3) plot(x,z) subplot(2,2,4) plot(z,x)

2) Hàm plot3 - Vẽ điểm và đường trong không gian

Hàm plot3 cho phép vẽ các điểm và đường trong không gian. Ngoài việc có thêm trục z, cách sử dụng hàm này giống như cách sử dụng hàm plot. View([a,b]): a là góc phương vị tính bằng độ ngược chiều kim đồng hồ từ phía âm của trục y. Giá trị mặc định của a là -37.5 độ. b là góc nhìn tính bằng độ xuống mặt phẳng x, y. Giá trị mặc định của b là 30 độ. Khi thay đổi các giá trị a và b sẽ nhìn được hình vẽ dưới các góc độ khác nhau.

  • Ví dụ :

t=linspace(0,10*pi); subplot(1,2,1); plot3(sin(t),cos(t),t); xlabel('sint'); ylabel('cost'); title('helix'); subplot(1,2,2); plot3(sin(t),cos(t),t); view([10,35]) ; xlabel('sint'); ylabel('cost'); title('helix')

3) Các hàm vẽ loglog, semilogx và semilogy vẽ các đường trong mặt phẳng

  • loglog: tương tự như plot nhưng thang chia là logarithm cho cả hai trục.
  • semilogx: tương tự như plot nhưng thang chia của trục x là logarithm còn thang chia trục y là tuyến tính.
  • semilogy: tương tự như plot nhưng thang chia của trục y là logarithm còn thang chia của trục x là tuyến tính. 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’)

4) Pie Chart

Ðể 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ới cú pháp pie(V) .Trong đó V là vectơ chứa các phần tử được thể hiện trên đồ thị bánh. Thứ tự phân chia trên đồ thị bánh 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.

  • 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'})

5) Đồ thị cột - Bar chart

Hàm barbar3 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)
  • 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.

  • 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)

6)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.

  • Để 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: z(x, y)xe^(-x^2) ^(-y^2)

x=-2:0.5:2; y=-2:1:2; [X,Y]=meshgrid(x,y) Z=X.*exp(-X.^2-Y.^2) 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')

  • Vẽ các mặt được tô bóng từ một ma trận bằng các lệnh surf, surfc 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…
  • Ví dụ

x=-2:0.5:2; y=-2:1:2; [X,Y]=meshgrid(x,y); Z=X.*exp(-X.^2-Y.^2); 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)

0