MATLAB的簡單使用

本學期的物理作業中出現了不少需要計算機作圖的題目,之前學的半吊子MATLAB也算是派上了點用處。在這裡用一個例子總結整理一下,不需要任何編程基礎,希望能幫助到需要的人。

第一次在知乎上寫東西,若有不當之處請多多包涵。


MATLAB是什麼?

MATLAB是一個強大的數學軟體,功能極其豐富,在各個行業都有廣泛應用。MATLAB以矩陣運算為核心,語言相對較為簡單,對從未接觸過編程的人員來說,上手難度也並不高。

MATLAB的使用範圍極其廣泛(圖片來自MathWorks官網)

下載與安裝

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個變數,分別是電子電荷量 e ,電子質量  m ,弛豫時間 t ,電子密度 n ,並進行了賦值。1.6022e-19的含義是 1.6022	imes 10^{-19}

dc=n*e^2*t/m;

這裡定義了直流電導率dc,由公式 sigma_0=frac{ne^2t}{m} 給出,將計算結果賦值給dc。

x=(9:0.02:18);

前文提到過,MATLAB的核心是矩陣(前面的幾個常數本質上是 1	imes 1 矩陣)。這裡定義了一個 1	imes 451 矩陣(也可看做行向量) x,這個矩陣就是我們即將作的圖的橫坐標取值,我們的目的是在要求的作圖範圍上取一系列密集的點,這樣作出的圖看起來就是連續的。

該矩陣元素的值由括弧中的「 9:0.02:18 」給出,含義是 9,9.02,9.04,9. 06,cdotcdotcdot,18 共451個元素。也就是說在9到18之間每隔0.02取了一個點,足夠密集了。

frequency=10*10.^x;

由於我們的橫坐標是頻率乘以10之後的10指數,所以這裡要計算一下真正的頻率的取值,也就是 omega=10	imes10^{9},10	imes10^{9.02},10	imes10^{9.04},cdotcdotcdot,10	imes10^{18}

這裡有個非常值得注意的問題: x 是行向量! 10的 x 次冪是沒有意義的!所以這裡要使用「.^」,也就是說在次冪符號「^」前面加一個「.」,這樣的含義是按元素求冪,也就是說依次求10的9、9.02、9.04次冪,然後保存為一個新的 1	imes 451 矩陣,符合了我們的要求。

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為作圖命令,第一行以 x 為橫坐標, ac的實部為縱坐標作圖,然後將作出的曲線的線寬設置為了1.5(不設置的話默認為0.5)。第三行同理,以 x 為橫坐標, ac的虛部為縱坐標作圖,然後將線型設置為了虛線「--」。「hold on」命令是使當前作出的圖像保留,否則下一行作虛部圖像使會把之前的實部圖像覆蓋,「hold off」就是取消hold on的效果。

將圖像作出來之後,可以在圖像界面調整橫縱坐標、標題、字體大小、顏色等等,當然更好的方法是在代碼里就寫好,為了簡便起見,這裡就省略了。

進一步學習

如果對MATLAB有興趣或需求的話,最好是跟著一些書籍或者視頻教程系統地學習一遍。如果像我一樣只是想當成一個小工具用的話,那麼在實踐中學習可能是更好的選擇。MATLAB的官方文檔非常完善、詳細,通過官方文檔可以迅速獲得自己需要的方法和內容。官方文檔鏈接

MATLAB官方文檔,有完整的語法描述,以及豐富的例子。

如果你想使用MATLAB實現一些別的功能,但是自己不知道該怎麼做,直接在官方文檔里搜索即可。

如果你想做一些擬合

結語

自己並沒有系統地學習過MATLAB,很多東西只是自己的理解,任何沒有講清楚的地方,或者錯誤、不當之處,歡迎大家指正。接下來可能會寫一些LateX的東西,歡迎任何建議和意見。


推薦閱讀:

MATLAB 學習筆記 第 0 章
還有沒有類似傅里葉變換那麼有用的正交變換?
常見的MATLAB初學者問題中,哪些讓你非常無語或者覺得值得吐槽?
XML和MATLAB交互的基本操作[1]:讀取XML
如何評價 MATLAB R2017a (Prerelease)?

TAG:MATLAB | 物理学 | 学习 |