MATLAB的簡單使用
本學期的物理作業中出現了不少需要計算機作圖的題目,之前學的半吊子MATLAB也算是派上了點用處。在這裡用一個例子總結整理一下,不需要任何編程基礎,希望能幫助到需要的人。
第一次在知乎上寫東西,若有不當之處請多多包涵。
MATLAB是什麼?
MATLAB是一個強大的數學軟體,功能極其豐富,在各個行業都有廣泛應用。MATLAB以矩陣運算為核心,語言相對較為簡單,對從未接觸過編程的人員來說,上手難度也並不高。
下載與安裝
MATLAB最新版本為2017b,官網上的最新報價:學生版本體29美元,本體+simulink套裝55美元,其餘工具箱均為每個16美元。另提供30的免費試用。官網鏈接
當然破解版也是很容易找到的,這裡就不說了。
界面介紹
對從未接觸過編程的人來說,這幾個區域的聯繫和區別可能會成很大的困擾,所以在這裡不求完全嚴謹,只求簡單易懂。
編輯器區域:簡單來說,這就是我們輸入代碼的地方,當點擊上面的運行後,計算機就會嘗試按順序執行編輯器內的所有代碼。打個比方:女朋友使喚男朋友去跑腿,於是找了一張紙條,在上面寫下命令:買一斤橘子、兩斤蘋果、拿快遞,然後把紙條塞給男朋友,說:去吧。過了一會男朋友買完東西拿完快遞迴來了,這就是編輯器的使用。
命令行區域:這是我們直接輸入命令,以及顯示程序輸出的地方,敲下回車後計算機會立即執行剛才輸入的命令。再打個比方:女朋友使喚男朋友去跑腿,對男朋友說:去買一斤橘子;片刻之後男朋友回來了,女朋友又說:去買兩斤蘋果;過了一會回來之後又說:快遞到了,去拿一下。這就是命令行的使用。
工作區:工作區是存儲變數的地方(說「存儲」其實不太恰當,但這裡為了方便理解)。相當於男朋友的記憶中存著「橘子=1」,「蘋果=2」。
那麼什麼情況下該使用編輯器,什麼情況下該使用命令行呢?很簡單,當你知道自己接下來每一步該幹什麼時,使用編輯器;當你只知道接下來一步時,使用命令行。
實例分析
接下來以那道計算交流電導率的題目為例,講解MATLAB的基本語句以及函數作圖方法。
代碼如下:
clc;clear;e=1.6022e-19;m=9.1095e-31;t=3.2e-14;n=2.65e28;dc=n*e^2*t/m;x=(9:0.02:18);frequency=10*10.^x;ac=(dc./sqrt(1+frequency.^2*t^2)).*exp(1i*atan(frequency*t));plot(x,real(ac),LineWidth,1.5);hold on;plot(x,imag(ac),--,LineWidth,1.5);hold off;
作出的圖像為:
先解釋一下句尾分號的含義:分號標誌著一個語句的結束。但不同於一些其他語言,MATLAB中的句尾分號不是必要的。不加分號的語句會使計算機把執行結果輸出在命令行,加了分號則不會輸出,實際使用中根據情況選擇(一般情況下都要加)。
接下來逐行解釋每個語句的含義:
clc;clear;
clc:清空命令行。clear:清空工作區。很好理解的命令,一般加在程序第一行(非必要)。
e=1.6022e-19;m=9.1095e-31;t=3.2e-14;n=2.65e28;
這裡定義了4個變數,分別是電子電荷量 ,電子質量 ,弛豫時間 ,電子密度 ,並進行了賦值。1.6022e-19的含義是 。
dc=n*e^2*t/m;
這裡定義了直流電導率dc,由公式 給出,將計算結果賦值給dc。
x=(9:0.02:18);
前文提到過,MATLAB的核心是矩陣(前面的幾個常數本質上是 矩陣)。這裡定義了一個 矩陣(也可看做行向量) ,這個矩陣就是我們即將作的圖的橫坐標取值,我們的目的是在要求的作圖範圍上取一系列密集的點,這樣作出的圖看起來就是連續的。
該矩陣元素的值由括弧中的「 」給出,含義是 共451個元素。也就是說在9到18之間每隔0.02取了一個點,足夠密集了。
frequency=10*10.^x;
由於我們的橫坐標是頻率乘以10之後的10指數,所以這裡要計算一下真正的頻率的取值,也就是 。
這裡有個非常值得注意的問題: 是行向量! 10的 次冪是沒有意義的!所以這裡要使用「.^」,也就是說在次冪符號「^」前面加一個「.」,這樣的含義是按元素求冪,也就是說依次求10的9、9.02、9.04次冪,然後保存為一個新的 矩陣,符合了我們的要求。
ac=(dc./sqrt(1+frequency.^2*t^2)).*exp(1i*atan(frequency*t));
該語句定義了交流電導率ac,並計算每個頻率frequency下的值。
「sqrt」為開平方,「1i」為虛數單位,「atan」為反正切函數,這三者是MATLAB中的既有規定,和我們平時的寫法有略微不同。
該語句還使用了按元素除法「./」、按元素求冪「.^」、按元素乘法「.*」原因同上。這裡有一個小技巧:如果你搞不清楚什麼時候該加點什麼時候不該加,但是你確定你的算式中沒有真正的矩陣乘法(包括求冪),那麼你可以在所有的乘法、除法、次冪前面都加上「.」,也就是全部按元素計算,一般來說這麼做不會出任何問題。
plot(x,real(ac),LineWidth,1.5);hold on; plot(x,imag(ac),--,LineWidth,1.5);hold off;
這裡將ac的實部和虛部分別作了圖。
plot為作圖命令,第一行以 為橫坐標, ac的實部為縱坐標作圖,然後將作出的曲線的線寬設置為了1.5(不設置的話默認為0.5)。第三行同理,以 為橫坐標, ac的虛部為縱坐標作圖,然後將線型設置為了虛線「--」。「hold on」命令是使當前作出的圖像保留,否則下一行作虛部圖像使會把之前的實部圖像覆蓋,「hold off」就是取消hold on的效果。
將圖像作出來之後,可以在圖像界面調整橫縱坐標、標題、字體大小、顏色等等,當然更好的方法是在代碼里就寫好,為了簡便起見,這裡就省略了。
進一步學習
如果對MATLAB有興趣或需求的話,最好是跟著一些書籍或者視頻教程系統地學習一遍。如果像我一樣只是想當成一個小工具用的話,那麼在實踐中學習可能是更好的選擇。MATLAB的官方文檔非常完善、詳細,通過官方文檔可以迅速獲得自己需要的方法和內容。官方文檔鏈接
如果你想使用MATLAB實現一些別的功能,但是自己不知道該怎麼做,直接在官方文檔里搜索即可。
結語
自己並沒有系統地學習過MATLAB,很多東西只是自己的理解,任何沒有講清楚的地方,或者錯誤、不當之處,歡迎大家指正。接下來可能會寫一些LateX的東西,歡迎任何建議和意見。
推薦閱讀:
※MATLAB 學習筆記 第 0 章
※還有沒有類似傅里葉變換那麼有用的正交變換?
※常見的MATLAB初學者問題中,哪些讓你非常無語或者覺得值得吐槽?
※XML和MATLAB交互的基本操作[1]:讀取XML
※如何評價 MATLAB R2017a (Prerelease)?