帶你從零開始,快速學會 Matlab GUI

GitChat技術雜談發表於2017-11-16

640.gif?wxfrom=5&wx_lazy=1

本文來自作者 木木小迷哥 在 GitChat 上分享「Matlab GUI 零基礎學員快速入門」,閱讀原文」檢視交流實錄

文末高能

編輯 | 洛肯

Matlab廣泛地應用於數學分析、計算、自動控制、系統模擬、數字訊號處理、影象處理、數理統計、人工智慧、通訊工程和金融系統等領域。

本活動針對零基礎學員,結合個人經驗,使 Matlab 新手少走彎路、快速入門(相應的程式碼用斜體表示)。具體內容如下:

  • Matlab 基礎知識

  • Matlab 繪圖

  • Matlab GUI 程式設計

  • 相關知識介紹

  • 交流討論

1. Matlab 基礎知識

1.1 Matlab操作環境

Matlab為使用者提供了簡潔易用的介面操作環境,主介面上顯示的常用主要功能模組包括:新建指令碼、當前工作目錄、命令列視窗、工作空間、Simulink工具等。如下圖所示。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

注1.1:程式設計時候通常ctrl+n新建一個指令碼檔案,然後點選ctrl+s把檔案儲存到當前工作目錄。然後可以在新建的指令碼檔案裡寫程式碼,執行程式碼後產生的資料結果將在工作空間顯示。

1.2 常用命令介紹

Matlab提供了一些簡單的命令,平時經常用到。總結在下表中。

  • clc                        清空命令列視窗

  • clear                     清除工作空間所有變數

  • clear all                清除工作空間所有變數和函式

  • close all                關閉圖形視窗

  • save name            儲存工作空間變數到檔案name.mat中

  • save name x y       儲存工作空間變數x,y到檔案name.mat中

  • load name             載入name.mat檔案中的所有變數到工作空間

  • load name x y        載入name.mat檔案中的的變數x,y到工作空間

  • “ 向上箭頭”             呼叫上一次的命

  • “ 向下箭頭”             呼叫下一行的命令

  • Tab    函式自動補全

注1.2:瞭解常用命令即可,不必死記硬背。使用時,可百度查詢相應的命令或者查詢幫助文件。

1.3 M檔案編輯器

程式碼通常可寫在Matlab的M檔案編輯器中,這樣便於除錯程式碼。使用時可通過快捷鍵ctrl+n或者點選Matlab主介面的“新建指令碼”來建立空白的M檔案。然後可在M檔案中編寫程式碼。此外,筆者個人習慣上在M檔案開頭寫上clc; clear all; close all;等命令,如下圖所示。

0

1.4 Matlab使用幫助

  1. 可通過help命令查詢相關函式使用說明

  2. 可在網際網路查詢相關函式使用說明,並往往可以查到多個例項,便於初學者使用。

1.5 Matlab數值運算

1)加減乘除例項

0?wx_fmt=png

可以看到在M檔案(上圖右側)編寫程式碼的話,運算過程和結果(上圖左側)都較為清晰,同時方便對原始碼(上圖右側)進行修改。

2)矩陣運算例項

0?wx_fmt=png

1.6 Matlab符號運算

Matlab符號運算種類很多,支援常用的代數運算、積分、微分、極限等。

1)極限例項

0?wx_fmt=png

可以看到,結果為:1。

2)微分例項

0?wx_fmt=png

3)積分例項

0?wx_fmt=png

此外,Matlab還支援其他一些常用的符號計算。相應的函式如下:

  • 合併表示式    collect

  • 展開表示式    expand

  • 因式分解    factor

  • 巢狀表示式    horner

  • 計算最小分母公因式    Numden

  • 求反函式    finverse

2. Matlab 繪圖

2.1 繪二維圖形

1)例項1:繪製正弦曲線(使用的函式:plot)。程式碼如下:

clc
clear all
close all
%%
x = -10:0.1:10;
figure(1)
plot(x,sin(x));

相應的圖形如下:

0?wx_fmt=png

2)例項2:繪製餘弦曲線。程式碼如下:

clc
clear all
close all
%%
x = -10:0.1:10;
y = sin(x);
figure(1)
plot(x,y);

相應的圖形如下:

0?wx_fmt=png

3)例項3:同時繪製多個圖形(使用函式hold on)繪製正餘弦曲線,程式碼如下:

clc
clear all
close all
%%
x = -10:0.1:10;
y1 = sin(x);
y2 = cos(x);
figure(1)
plot(x,y1);
hold on;
plot(x,y2)

相應的圖形如下:

0?wx_fmt=png

2.2 設定曲線屬性

  • -       實線

  • :      虛線

  • -.     點劃線

  • —     雙劃線

  • b    藍色

  • g    綠色

  • r    紅色

  • c    青色

  • m    品紅

  • y    黃色

  • k    黑色

  • w    白色

Matlab中,除了可以設定曲線形狀和顏色外,還可以為曲線中的資料點設定屬性。這樣就可以選擇不同的資料點行,從而方便的將不同的曲線區分開來。Matlab中的資料點行的屬性如下:

  • .    實心黑點

  • +    +字元號

  • ^    上三角符

  • d    菱形

  • h    六角星

  • o    空心圓圈

  • p    五角星

  • s    方塊符

  • x    差字元號

1)例項說明程式碼如下:

clc
clear all
close all
%%
x = -6pi:0.1:6pi;
y = sin(x);
figure(1)
plot(x,y,’r—‘,’linewidth’,2);

圖形如下:

0?wx_fmt=png

2)設定座標軸範圍,使用的函式 axis,例項:

clc
clear all
close all
%%
x = 0:0.01:pi/2;
plot(x,tan(x),’-ro’);
axis([0 pi/2 0 50])
grid on

相應的圖形如下:

0?wx_fmt=png

3)圖形標識:legend函式,title函式,xlabel函式,ylabel函式,text函式等…..

例項如下:繪製sin(x)和cos(x),分別為紅色實現和藍色點劃線。

clc
clear all
close all
%%
x = -3pi:0.1:3pi;
y1 = sin(x);
y2 = cos(x);
figure(1)
plot(x,y1,’r-‘);
hold on
plot(x,y2,’b—‘)
legend(‘sin(x)’,’cos(x)’);
axis([-12 12 -1.5 1.5])
grid on

相應的圖形如下:

0?wx_fmt=png

4)其他圖形繪製函式介紹

Matlab還支援其他形狀的圖形繪製。現總結如下:

函式名稱    功能介紹
subplot    繪製多子圖
plotyy    繪製雙座標軸
area    繪製面積圖
bar    繪製直方圖
pie    繪製二維餅圖

Matlab繪圖命令非常豐富,未能一一詳細列舉,如有用到可上網查詢。

3. Matlab GUI程式設計

圖形使用者介面(GUI)是為方便使用者和計算機資訊交流而設計的計算機程式,它是由視窗、選單、圖示、游標、按鍵、對話方塊、文字框等組成的使用者介面。它讓使用者定製與Matlab的互動方式,而命令視窗不是唯一與Matlab的互動方式。

3.1 圖形使用者介面開發環境(GUIDE)

Matlab提供了一套視覺化的建立圖形視窗的工具,使用圖形使用者介面開發環境可方便地建立GUI應用程式,它可以根據使用者設計的GUI佈局,自動生成M檔案的框架,使用者使用這一框架編制自己的應用程式。

同時,Matlab提供了一套視覺化的建立圖形使用者介面(GUI)的工具,如下圖所示:

0?wx_fmt=png

下面對其進行詳細介紹。

1)佈局編輯器(Layout editor)如下:

0?wx_fmt=png

佈局編輯器用於從控制元件選擇板上選擇控制元件物件並拖拽到佈局區合適的位置去。 在命令視窗輸入GUIDE命令即可開啟空白的佈局編輯器圖形使用者介面。

2)位置調整工具(Alignment tool)如下:

0?wx_fmt=png

利用該工具,可對GUI物件設計區的多個物件的位置對齊調整。

3)屬性檢視器

0?wx_fmt=png

利用物件屬性檢視器,可以檢視每個物件的屬性值,也可以修改、設定物件的屬性值。

4)選單編輯器(Menu Editor)如下

0?wx_fmt=png

選單編輯器包括選單的設計和編輯,選單編輯器有八個快捷鍵,可以利用它們任意新增或刪除選單,可以設定選單項的屬性,包括名稱(Label)、標識(Tag)、選擇是否顯示分隔線(Separator above this item)、是否在選單前加上選中標記(Item is checked)、呼叫函式(Callback)。利用選單編輯器,可以建立、設定、修改下拉式選單和快捷選單。

5)物件瀏覽器(Object Browsers)

0?wx_fmt=png

利用物件瀏覽器,可以檢視當前設計階段的各個控制程式碼圖形物件。可以在物件瀏覽器中選中一個或多個控制元件來開啟該控制元件的屬性編輯器。

6)Tab順序編輯器(Tab Order Editor)

0?wx_fmt=png

3.2 控制元件物件及屬性

Matlab中的控制元件大致可分為兩種,一種為動作控制元件,滑鼠點選這些控制元件時會產生相應的響應。一種為靜態控制元件,是一種不產生響應的控制元件,如文字框等。常用的控制元件屬性及其描述如下:

  • BackgroundColor:取值為顏色的預定義字元或RGB數值;預設值為淺灰色;

  • Callback:取值為字串,可以是某個M檔名或一小段Matlab語句,當使用者啟用某個控制元件物件時,應用程式就執行該屬性定義的子程式;

  • Enable:取值為on(預設值),inactive和off;

  • Extend:取值為四元素向量[0, 0, width, height],記錄控制元件物件標題字元的位置和尺寸;

  • ForegroundColor:取值為顏色的預定義字元或RGB數值,該屬性定義控制元件物件標題字元的顏色;預設值為黑色;

  • Max,Min:取值都為數值,預設值分別為1和0;

  • String:取值為字串矩陣或塊陣列,定義控制元件物件標題或選項內容;

  • Style:取值可以是pushbutton(預設值), radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox;

  • Units:取值可以是pixels (預設值), normalized(相對單位), inches, centimeters(釐米)或points(磅);

  • Value:取值可以是向量,也可以是數值,其含義及解釋依賴於控制元件物件的型別;

  • FontAngle:取值為normal(正體,預設值), italic(斜體), oblique(方頭);

  • FontName:取值為控制元件標題等字型的字型檔名;

  • FontSize:取值為數值;

  • FontUnits:取值為points(預設值), normalized, inches, centimeters或pixels;

  • FontWeight:取值為normal(預設值), light,demi和bold,定義字元的粗細;

  • HorizontalAligment:取值為left,center (預設值) 或 right,定義控制元件物件標題等的對齊方式。

3.3 GUI程式設計思路介紹

1)(控制元件屬性設定檢視)往佈局編輯器新增一個控制元件,並雙擊,會出現一個介面。介面左側是該控制元件的屬性,包括“BackgroundColr”、“BeingDeleted”、“BusyAction”等,介面右側是與每個屬性相對應的屬性值。

2)(控制元件名字)每個物件都有一個“名字”,即Tag屬性,之所以稱之為名字,是因為我們在使用這個物件的時候是通過這個Tag來找到該物件的。即通過一個非常重要的get()函式來實現。

3)(get(), set()函式)通過物件的名字(Tag屬性)找到該物件以後,對該物件的操作是通過set()函式來實現。

4)(hObject, handles)使用者按下某個按鍵,必然是想觸發某個響應,即呼叫callbackfunction(回撥函式)來執行這個響應。在這個過程中,資料通過hObject和handles.物件名來傳遞。

3.4例項演示(視訊講解)

1)兩個數相加

命令列視窗輸入guide,彈出如下視窗:

0?wx_fmt=png

選擇第一個空白GUI,點“確定”按鈕。彈出如下未命名GUI介面:

0?wx_fmt=png

點選“檔案”—“另存為”,儲存當前GUI介面,命名為GUI_test:

0?wx_fmt=png

拖拽三個“可編輯文字”控制元件,兩個“靜態文字”控制元件,一個“按鈕”控制元件,並在適當位置擺放好(可使用對齊工具進行控制元件間對齊),效果如下:

0?wx_fmt=png

雙擊每個控制元件,對其物件屬性(Tag)進行設定,屬性分別設定為三個“可編輯文字”控制元件:string屬性的屬性值均為“空”;tag屬性的屬性值分別為number_1, number_2, number_3(對tag屬性進行設定,相當於給每個控制元件起個不同的名字,便於後面對每個控制元件進行操作)。

兩個“靜態文字”控制元件:string屬性的屬性值分別為“+”和“=”;tag屬性的屬性值預設即可(因為此例中我們不需要對這兩個控制元件的屬性進行操作)。

一個“按鈕”空間:string屬性的屬性值為“Run”;tag屬性的屬性值為“run_button”。

設定後的效果如下圖:

0?wx_fmt=png

下面進行程式設計。

點選儲存按鈕,會跳轉到M檔案編輯器,右鍵run_button控制元件,點選“檢視回撥”—“callback”,會進入到相應的程式碼編輯區,效果圖如下:

0?wx_fmt=png

下面進行程式碼編輯。注意get() set() hObject, handles的使用,充分理解資料如何獲得和在空間之間進行傳遞。程式碼如下:

data_1_str = get(handles.number_1, ‘string’);
data_1_num = str2num(data_1_str);
data_2_string = get(handles.number_2, ‘string’);

data_2_num = str2num(data_2_string);
sum_num = data_1_num + data_2_num;

sum_str = num2str(sum_num);
set(handles.number_3, ‘string’, sum_str);

0?wx_fmt=png

效果圖如下:

0?wx_fmt=png

2)按下按鈕去繪製sin(x)

3.5 GUI高階程式設計

  • 1)對話方塊

  • 2)串列埠

  • 3)檔案和IO

  • 4)推薦書籍  《MATLAB GUI 設計學習手記 第2版 羅華飛》

4. 相關知識介紹

Matlab應用領域非常廣泛,包括數值分析、數值和符號計算、工程與科學繪圖、控制系統的設計與模擬、數字影象處理技術、數字訊號處理技術、MATLAB在通訊系統設計與模擬的應用、MATLAB在通訊系統設計與模擬的應用、通訊系統設計與模擬、財務與金融工程、管理與排程優化計算(運籌學)等各個領域,我們不可能對每個領域的都很擅長,因此結合自身研究方向,選擇合適的參考資料進行學習。

這裡給出一個比較好的學習網站(不僅限於Matlab):www.youtube.com,Google和百度裡也有非常多的學習資料。

學習建議:針對Matlab GUI,理解所列舉的核心思想;針對自己的研究課題,以任務為導向,有針對性學習某方向的知識;藉助網際網路,搜尋相關資料。

 近期熱文

Java 多執行緒程式設計核心技術有哪些

Python 的 C 擴充套件開發慣例

如何成為一名程式設計師麵霸

輕鬆入門 | 用 WordPress 和主題模板做網站

Java 8 Stream API 實用指南

GitChat 與 CSDN 聯合推出

《GitChat 達人課:AI 工程師職業指南》

0?wx_fmt=jpeg

「閱讀原文」看交流實錄,你想知道的都在這裡

相關文章