找回密码
 注册
Simdroid-非首页
查看: 443|回复: 0

【原创】M-檔案 教學

[复制链接]
发表于 2003-6-7 06:12:20 | 显示全部楼层 |阅读模式 来自 台湾
MATLAB 有一個指令窗(Command window)在這個窗口下,每下一個指令,就執行一個動作。如果指令下錯了,只要用往上的箭號,即可返回上一指令並進行修改。
但是,如果發覺一一輸入太累人了,可以將一連串命令貯存在一個檔案中,以後再將這群指令以你訂的檔案名稱為新指令,集體同時執行。這種可執行的檔案稱為M-files,因為其檔案名稱之字尾均以 ".m"附屬
  
例如; myfirst.m 即表示其檔案名稱為 " myfirst",檔案型式為 M-file,你只要將目錄指向存放該檔案之檔案夾,就可在指令窗下打入" myfirst",開始執行該檔內之指令群。
  
若不知道檔案在那兒,則可利用以前dos系統所用的方法,打入dir,即可看到在目前檔案夾中之各項M-檔案。如果在此檔案夾中找不到,亦可改變目前的目錄位置,使用cd這個指令,如;
>>cd myfile
>>cd ..
  
M-檔案類型之檔案純為文字檔,故可在任何文書處理軟體中進行編輯或修改。只是MATLAB也有一個程式編輯器,可以在此編輯器中偵錯(Debug)或編輯,這個編輯器比其他文書處理具有不同的功能,新版中並有行號。
  
M-files依執行時之實質型式分為兩種,其一為敘述檔( script files),另一為函數檔(function files)。script 檔為一連串之正常指令之組合,故其名稱亦可作為指令在指令窗中直接執行。
例如,有一個script 檔之名稱為 mylove.m,則可在 MATLAB 指令窗中直接下"mylove" 這個指令執行這個檔案之內容。
script 檔常用於輸入大量資料,以構成一個新的矩陣,如此可以大大減少輸入時所可能發生之錯誤。設有一個名叫 mydata.m 的資料內容如下:
  
A=[1 2 3; 4 5 6]
A =
     1     2     3
     4     5     6
  
以 MATLAB 鍵入mydata 這個指令則會使上項內容被執行,因此一個以  A為名之矩陣即刻產生,將來有用到它的時候,即會跳出來為你效勞。值得注意的是大寫 A 與小寫 a 是不同的名稱,是不能混而一談的。
  
一個 M-檔案可以呼叫另一個 M-檔案。當然任一個檔案也可以呼叫function 檔。function 檔案的內容與script 檔大略相同。主要差別是,function 檔案之開頭一行需有一個函數名稱之宣告,然後用小括符包括其需要之輸入參數,函數名稱前可以有等號,在此等號之左方為其輸出之參數,方位不能弄錯。
  
function 輸出參數 = 函數名稱(輸入參數)  
  
特別注意的是這些參數變數,無論是輸入或輸出,均可能代表一個數值或一個矩陣。一般以代表一個矩陣為多,這點在觀念上應該特別注意,以往在其他程式語言中,矩陣之變數均需經過宣告,在function 檔案中,其所屬之變數均屬區域性的,除非特別另宣告為global參數。舉一個函數檔的例子如下:
  
function P = prodsqr (A, B)  
% PRODSCR Product of the square of two matrices  
P = A^2*B^2  
  
此時函數之名稱為 prodsqr,其輸入參數為A、B。輸出為P。在函數中,A、B、P均為區域性函數,只在這個函數執行期間有效
  
由於這是一個function 檔,它是不能自己執行的 (除非你是屬於高桿的程式寫作者,….) 。而且這個檔案要能被呼叫,必須在存檔時,以 prodsqr.m儲存,方能對應主程式的呼叫,亦即函數的名稱要與檔案的名稱相同。
  
由上述可知,function 檔之第一行宣告函數名稱、輸出及輸入參數。故沒有這一行,這個函數檔將變成script檔,可在 MATLAB 指令行中下令,例如: 
  
        z = prodsqr(x, y)
  
此時指令行中之變數 x與 y值將傳遞至函數中之參數 A 與 B。而其計算結果則被傳回至變數Z中,由於函數中之變數為區域性的,故其名稱與主程式中之環境變數無關。 一個函數亦可以使用多個輸出參數,或使用一個或多個矩陣變數,例如:
  
function [mean, stdev] = stat(x)  
  
% STAT Mean and standard deviation  
%     For a vector x, stat(x) returns the mean and standard deviation of x.  For a
%      matrix x, stat(x) returns two row vectors containing, respectively, the mean
%     and standard deviation of each  column.  
  
    [m, n] = size(x);  
 if m == 1  
         m = n; % handle case of a row vector  
 end  
 mean = sum(x)/m;  
 stdev = sqrt (sum(x.^2)/m - mean.^2)  
  
    一旦將上述內容置於一個叫 "stat.m"檔案中時,執行 MATLAB 指令 [xm, xd] = stat (x)之後,將會使整個輸入x之向量值進行統計運算,並會獲得該向量之平均值 xm及標準差 xd。而同樣的函數中,雖然原來輸出有兩項參數,但若僅需一項時,亦可修正指令為 xm = stat (x),則函數照樣會將其 x值置入 xm內,只是另一項xd則不見了。
  
     上述之function 檔案中,亦說明了一般計算之特性及 MATLAB所遵行的程式法則,雖然在討論矩陣變數之操作時,觀念上會略有不同,但在這裡,可以發現到其語法之簡潔,例如: x.^2是將x矩陣內之各項自行平方的意思,注意不要輕易丟掉”^”前面的’.’,因為它會將整個矩陣作平方。平方的工作執行完畢後,即將行向量累總,而 sqrt則是一個數量值,故除以m後,即 sum(x)/m 亦為行向量值。
  
此外,加上 %的符號。此代表在%以後的資料或敘述僅作說明之用, MATLAB 在執行時會忽略它,故可以作為註明之用。雖然如此,在函數宣告後的頭數行中,其開頭均以%帶頭。此數行可以作為描述該函數之特性與功能之用,因為在MATLAB 中若下help (指令),則這幾行之內容將會在螢幕中出現,作為一種解說之用。所以編輯函數檔時,不要忘記這項功能,否則你就求助無門了。例如若在指令行打入help stat,則窗口應會出現:   
  
STAT Mean and standard deviation  
        For a vector x, stat(x) returns the mean and standard deviation of x.  For a
           matrix x, stat(x) returns two row vectors containing, respectively, the mean
        and standard deviation of each  column.  
  
故寫作M-檔案內容時,多多利用%之註明陳述,
  
大家可以試試

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-7 07:06 , Processed in 0.033048 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表