THÍ NGHIỆM CƠ ĐIỆN TỬ

Saturday, September 6, 2014

Bài 5: Đặc tính mở rộng của Matlab

Bài 5: Các tính năng mở rộng của MATLAB
Theo bài giảng của Danilo Scepanovíc
Trong bài này, chúng ta sẽ tìm hiểu những tính năng được xây dựng từ nền tính toán của MATLAB, bao gồm
1. Tính toán với biểu thức chữ (Symbolics)
2. Simulink
3. Xuất nhập dữ liệu từ file bên ngoài
4. GUI - Lập giao diện người dùng

1.Tính toán với biểu thức chữ (Symbolics Toolbox)
Các biến biểu tượng (Symbolic Variables)
Các biến biểu tượng là 1 loại dữ liệu đặc biệt, vừa giống với double, vừa giống với char
Để tạo các biến biểu tượng sử dụng lệnh sym
 >> a=sym(‘1/3’);
>> b=sym(‘4/5’);
>> mat=sym([1 2; 3 4]);
Để tạo các phân số >> c=cym(‘c’,’positive’); % 'positive': tags để thu hẹp phạm vi của biến
% Gõ help sym sẽ thấy được 1 list các tags

Hoặc có thể khởi tạo biến sử dụng lệnh syms >> syms x y real % Cũng tương đương với x=sym(‘x’,’real’); y=sym(‘y’,’real’);
Các biểu thức tính toán với biến biểu tượng
Biểu diễn phép nhân, cộng, chia.
>> d=a*b % Thực hiện 1/3*4/5=4/15;
>> expand((a-c)^2);
ans =
          1/9-2/3*c+c^2
>> factor(ans)
% Biểu diễn dưới dạng thừa số.
ans =
          1/9*(3*c-1)^2
>> matInv= inv(mat) % Tính ma trận nghịch đảo
ans =
           [-2 , 1]
           [3/2, -1/2]
Làm gọn các biểu thức chữ: MATLAB hỗ trợ nhiều cách làm gọn các biểu thức tính toán chữ
Lệnh pretty: làm biểu thức trông dễ nhìn hơn 
 >> pretty((a-c)^2)
ans =
1/9 - 2/3c +c^2

Lệnh collect: nhóm các số hạng tương tự lại với nhau

>> collect(3*x+4*y-1/3*x^2-x+3/2*y)
ans=
           2*x+11/2*y-1/3*x^2
Lệnh simplify : đơn giản hóa biểu thức
>>simplify(cos(x)^2+sin(x)^2)
ans =
          1
Lệnh sub : thay thế biến bởi một số hoặc một biểu thức khác

>> subs(‘c^2’,c,5)
ans =
             25
>> subs(‘c^2’,c,x/7)
ans =
             1/49*x^2

Chúng ta có thể tính toán bằng các biến biểu tượng với các ma trận.
Tính toán ma trận với các phần tử ma trận là các biến biểu tượng 
 >> mat=sym(‘[a b;c d]’);
>> mat2=mat*[1 3;4 -2]

     mat2 =
                [a+4*b, 3*a-2*b]
                [c+4*d, 3*c-2*d]
Tính định thức
>> d=det(mat)
d =
a*d-b*c

Tính ma trận nghịch đảo
>> i = inv(mat)
i =
[d/(a*d-b*c) , -b/(a*d-b*c)]
[-c/(a*d-b*c), a/(a*d-b*c)]

Việc truy cập tới các thành phần của ma trận này giống như với ma trận thường
>> i(1,2)
ans =
           -b/(a*d-b*c)

Bài tập
1. Phương trình của đường tròn bán kính r tọa độ (a,b) được đưa ra như sau:
(x-a)^2+(y-b)^2=r^2
Sử dụng solve để giải phương trình theo x và sau đó là cho y.
2. Tính tích phân từng phần dưới đây.
Sử dụng lệnh int để tính tích phân theo biến và sau đó tính toán giá trị số bằng cách thay thế a = 0 và b = 2.

Hướng dẫn:
1. Giải phương trình. Nên tìm hiểu về lệnh solve trước khi làm bài (gõ help solve)
>>syms a b r x y
>>solve(‘((x-a)^2+(y-b)^2=r^2’,’x’)
>>solve(‘((x-a)^2+(y-b)^2=r^2’,’y’)

2. Tính tích phân (gõ help int để xem cách dùng lệnh int)
>>Q=int(x*exp(x),a,b)
>>subs(Q,{a,b},{0,2})

2. SIMULINK
Simulink® là một môi trường giúp mô phỏng và thiết kế theo hướng mô hình hóa cho các hê thống động và các hệ nhúng. Nó cung cấp một môi trường đồ họa tương tác và một lượng lớn các khối thư viện chức năng giúp người sử dụng thiết kế, mô phỏng, thực hiện, kiểm tra rất nhiều hệ thống dựa thời gian, bao gồm viễn thông, điều khiển, xử lý tín hiệu, xử lý ảnh và video,...
Simulink được tích hợp với MATLAB, mang lại khả năng kết nối với rất nhiều công cụ thiết kế thuật thuật toán, phân tích và biểu diễn số liệu, tạo các mã nguồn, tùy chỉnh mô hình, và định nghĩa tín hiệu, tham số, kiểm tra dữ liệu
Trong Matlab bắt đầu Simulink bằng 2 cách:
Trên Command Window gõ:
>> simulink
hoặc click vào biểu tượng Simulink
khoi dong

  • Tạo 1 file simulink mới

new simu
  • Thư viện SIMULINK
    • Trình duyệt thư viện bao gồm đa dạng các khối mà bạn có thể thêm vào mô hình của bạn
    • Ví dụ sử dụng SIMULINK:
      • Click vào thư viện : “Sources”
      • Kéo khối ” Band limited white noise”  vào file Simulink mới tạo
      • Tìm đến thư viện “ Sinks”
      • Kéo 1 khối “Scope” vào file Simulink
lay khoi vao simulink

  • Kết nối
    • Click trên mũi tên bên phải của khối Band limited white noise

ket noi

  • Kéo đường đó tới Scope
  • Bạn sẽ nhận được một gợi ý nói rằng bạn có thể nhanh chóng kết nối các khối bằng nhấp nút Ctrl rồi click vào khối muốn nối tới.
  • Các sự kết nối giữa các đường đại diện cho việc kết nối các tín hiệu.
  • Click nút Play để bắt đầu việc mô phỏng

play button

  • Nhấp đúp vào khối Scope : sẽ mở ra 1 đồ thị của biến vẽ trên trục thời gian mô phỏng.
  • Để chỉnh sửa các thuộc tính của một khối- click đúp vào nó và điền vào giá trị của các đặc tính.

chinh dinh khoi

  • Thay đổi các tham số của mô phỏng: Simulation”-> “Configuration Parameters” ở đầu mục menu. Ở đây người dùng có thể chỉnh cách mô phỏng bằng cách đổi phương pháp giải phương trình vi phân (ode solver), đổi độ chính xác tối thiểu, đổi độ dài 1 bước mô phỏng, thuật toán kiểm tra lỗi, ...

config params

Kết luận: SIMULINK của MATLAB là một môi trường tích hợp rất mạnh trong mô phỏng, thiết kế. Để sử dụng thành thạo SIMULINK, bạn nên tham khảo các bài viết về SIMULINK trên trang web (chúng tôi sẽ sớm cập nhật trong mục Toolbox Guides). Các bạn có thể tham khảo các Demo về SIMULINK có sẵn trong MATLAB.
Bài tập: Simulink
Lấy 1 khối tín hiệu nhiễu ồn trắng và phân chia nó thành các thành phần tần số cao và thấp bằng cách dùng các mạch lọc thông cao, thông thấp có các hàm truyền:
LP = 1/(0.1s+1)
HP = 0.1/(0.1s+1)
(Gợi ý : Sử dụng Khối Transfer Function từ thư viện Continuous để tạo các hàm truyền trên.)
Kết nối các đầu vào và đầu ra của 2 hàm truyền với 2 khối Scope để hiển thị kết quả mô phỏng. 
Đưa tín hiệu vào/ra tới Work Space bằng cách sử dụng khối 'To work space' trong thư viện 'Sinks'
Hướng dẫn: File simulink của bạn cần tương tự như sau
bai giai

3. Nhập xuất dữ liệu bên ngoài
Nhập dữ liệu từ ngoài: MATLAB là hỗ trợ khá nhiều cho xử lý các file dữ liệu ngoài. Giả sử bạn có tập tin văn bản textfile.txt với một vài dữ liệu như sau:
Jane joe Jimy
10    11  12
5       4    2
5       6    4

Để nhập dữ liệu từ tập tin trên ổ cứng, sử dụng lệnh importdata
>> a=importdata(‘textFile.txt’); % a là 1 cấu trúc gồm data, textdata, và colheaders
a =
       data: [3x3 double]
       textdata: {‘jane’ ‘joe’ ‘jimmy’}
       colheaders: {‘jane’ ‘joe’ ‘jimmy’}
>> x=a.data;

>> names=a.colheaders;
Với importdata, bạn có thể thêm dấu phân cách, thể hiện rằng các thông tin bạn muốn nhập được ngăn cách bởi dấu phân cách đó. Ví dụ, cho các giá trị được ngăn cách bởi dấu phẩy, sử dụng:
>>a=importdata(‘filename’, ‘, ‘); % Đối số thứ 2 chỉ ra rằng các biểu tượng của giá trị được
                                                      % Ngăn cách bởi các dấu phẩy hoặc dấu cách.

Để đọc các tập tin với điều khiển nhiều hơn, sử dụng các lệnh fscanf ( tương tự C/ Java), textread, textscan. Các bạn hãy gõ help hoặc doc + các lệnh trên để biết cách dùng chúng.
MATLAB và Excel
Matlab bao gồm các hàm trợ giúp cho việc đọc và ghi các tập tin Microsoft Excel
Để ghi một ma trận tới 1 tập tin Excel, sử dụng lệnh xlswrite
>>[s,m]=x1swrite(‘randomNumbers’,rand(10,4),’Sheet1’);% Chúng ta chỉ định tên bảng
Bạn cũng có thể viết 1 mảng di động nếu bạn có dữ liệu hỗn hợp.
>>C={‘hello’,’goodbye’;10,-2;-3,4};
>>[s,m]=xlswrite(‘randomNumbers’,C,’mixedData’);
%s và m bao gồm thông báo về việc đã
                                         % hoàn thành việc xuất dữ liệu đầu ra “success” và “message” của lệnh viết
Gõ doc xlswrite để tìm hiểu thêm cách sử dụng lệnh
Đọc dữ liệu từ file Excel
Để đọc từ 1 dữ liệu Excel sử dụng lệnh xlsread
>>[num,txt,raw]= xlsread(‘randomNumbers.xls’); %Đọc trang đầu tiên
% num bao gồm các số, txt bao gồm các xâu, raw chứa mọi kiểu dữ liệu

>>[num,txt,raw]= xlsread(‘randomNumbers.xls’,’mixedDara’);
% Đọc bảng số liệu với nhiều kiểu dữ liệu lẫn lộn
>>[num,txt,raw] = xlsread(‘randomNumbers.xls’,-1);
Mở tập tin bằng Excel và cho phép bạn click vào dữ liệu bạn muốn nhập
Gõ doc xlsread để biết thêm các tùy chọn nhập dữ liệu.
4. Giao diện đồ họa cho người dùng (GUI - Graphical User Interface)
Bắt đầu thiết kế các giao diện đồ họa
Các GUI giúp cho người sử dụng dễ dàng làm các công việc xử lý dữ liệu mà không phải quan tâm đến các câu lệnh thực hiện việc xử lý đó. Người sử dụng GUI chỉ cần chọn, ấn nút và xem kết quả thực hiện.
Làm các giao diện đồ họa (GUI) trong Matlab khá đơn giản. Nếu bạn đã từng sử dụng Visual Basic thì sẽ dễ thấy những sự tương tự của 2 phần mềm.
Để mở môi trường phát triển giao diễn đồ họa, đánh guide
>> guide
Chọn Blank GUI

Vẽ giao diện đồ họa
Chọn các đối tượng bên trái (bao gồm các Push Button (nút ấn), radio button (nút chọn), image (hình vẽ), ..., mỗi đối tượng này có một chức năng và các tùy chỉnh khác nhau) và đặt chúng tại nơi mong muốn. Trong ví dụ này hãy đặt 2 Push Button và một đồ thị như trên hình vẽ dưới.

Thay đổi các thiết lập đối tượng
Click đúp vào các đối tượng để mở Inspector. Ở đây bạn có thể thay đổi các đặc tính của đối tượng. Trong ví dụ này hãy đổi tên Push Button 1 thành Draw Image (ở mục String trong cửa sổ Inspector), còn Push Button 2 đổi tên thành Change Colormap.

Lưu giao diện đồ họa.
Khi bạn đã thay đổi tất cả các đặc tính, bạn nên save giao diện đồ họa lại. Trong ví dụ này save GUI vừa tạo với tên testGUI


Matlab lưu giao diện đồ họa như 1 tập tin đuôi .fig, và tạo ra 1 mfile tương ứng. Mfile này chứa các hàm Callback, là các hàm được gọi khi người dùng tương tác với GUI (ví dụ như khi bạn ấn Push Button thì tương ứng MATLAB sẽ chạy một hàm nào đó do bạn lập trình)
Thêm theo chức năng cho giao diện
Để thêm theo chức năng tới các nút ấn của bạn, thêm các lệnh đến hàm ‘Callback’ trong tập tin testGUI.m. Ví dụ khi người sử dụng click vào nút Draw Image, hàm drawimage_Callback sẽ được gọi lại và thực hiện. Bạn hãy mở testGUI.m và gõ lại các dòng lệnh như sau:

Tất cả dữ liệu cho giao diện đồ họa được lưu trữ trong các handles, vì vậy sử dụng set và get để nhận dữ liệu và thay đổi nó nếu cần thiết. Ví dụ như khi bạn nhập vào GUI một số, muốn GUI đọc được số đó để thực hiện việc tiếp theo bạn phải dùng lệnh get.
Bất kỳ lúc nào bạn thay đổi các handles, lưu nó sử dụng guidata
>> guidata(handles. Figurel, handles);
Chạy giao diện đồ họa
Để chạy giao diện đồ họa, chỉ đánh tên của nó trong cửa sổ lệnh và giao diện đồ họa sẽ xuất hiện nếu không có lỗi lập trình nào.
Chương trình DEBUG sẽ chỉ cho bạn biết các lỗi bên trong của GUI khi bạn mắc lỗi lập trình.
Về phần lập GUI trong MATLAB, chúng tôi sẽ dành riêng một mục trong Toolbox guide để hướng dẫn các bạn kĩ lưỡng hơn.
Share:

0 nhận xét:

Post a Comment

codientuvina

VIDEO

Tìm kiếm Blog này