Matlab指令碼和函式程式設計入門

2021-09-12 22:25:42 字數 3731 閱讀 2176

條件語句

向程式中新增注釋

執行**節

指令碼與函式

若您需要重複執行一系列命令或希望將其儲存供以後引用,請將其儲存在程式檔案中。matlab® 程式的最簡單型別是指令碼,其中包含一組命令,這些命令與您在命令列中鍵入的命令完全相同。要獲得更高的程式設計靈活性,請建立接受輸入並返回輸出的函式。要將**與嵌入式輸出、格式化文字、方程和影象合併到乙個互動式環境中,請建立實時指令碼或實時函式(matlab r2016a或更高的版本)。

迴圈特定次數,並通過遞增的索引變數跟蹤每次迭代。

例如,預分配乙個 10 元素向量並計算五個值:

x = ones(1,10);

for n = 2:6

x(n) = 2 * x(n - 1);

end

只要條件仍然為 true 就進行迴圈。

例如,計算使 factorial(n) 成為 100 位數的第乙個整數 n:

n = 1;

nfactorial = 1;

while nfactorial < 1e100

n = n + 1;

nfactorial = nfactorial * n;

end

每個迴圈都需要 end 關鍵字。最好對迴圈進行縮排處理以便於閱讀,特別是使用巢狀迴圈時(也即乙個迴圈包含另乙個迴圈)。您可以使用 break 語句以程式設計方式退出迴圈,也可以使用 continue 語句跳到迴圈的下一次迭代。

注意:如果意外建立了乙個無限迴圈(永遠不會自行結束的迴圈),請按 ctrl+c 停止執行迴圈。

% generate a random number

a = randi(100, 1);

% if it is even, divide by 2

if rem(a, 2) == 0

disp('a is even')

b = a/2;

end

通過使用可選關鍵字 elseif 或 else,if 語句可以包含備用選項。例如:

a = randi(100, 1);

if a < 30

disp('small')

elseif a < 80

disp('medium')

else

disp('large')

end

當您希望針對一組已知值測試相等性時,請使用 switch 語句。例如:

[daynum, daystring] = weekday(date, 'long', 'en_us');

switch daystring

case 'monday'

disp('start of the work week')

case 'tuesday'

disp('day 2')

case 'wednesday'

disp('day 3')

case 'thursday'

disp('day 4')

case 'friday'

disp('last day of the work week')

otherwise

disp('weekend!')

end

對於 if 和 switch,matlab® 執行與第乙個 true 條件相對應的**,然後退出該**塊。每個條件語句都需要 end 關鍵字。

一般而言,如果您具有多個可能的離散已知值,讀取 switch 語句比讀取 if 語句更容易。但是,無法測試 switch 和 case 值之間的不相等性。例如,無法使用 switch 實現以下型別的條件:

yournumber = input('enter a number: ');

if yournumber < 0

disp('negative')

elseif yournumber > 0

disp('positive')

else

disp('zero')

end

使用百分比 (%) 符號向 matlab® **中新增注釋。在實時指令碼和函式中,您還可以通過在**前後插入文字行來描述過程或**。文字行還提供其他靈活的功能,例如標準格式選項以及插入影象、超連結和方程。

注意:如果您 matlab **檔案 (.m) 中的文字所包含的字元編碼與您的平台編碼不同,則在您儲存或發布檔案時,matlab 會將這些字元顯示為亂碼。實時指令碼和函式 (.mlx) 支援所有區域設定的儲存和字元顯示。

注釋還可用於程式開發和測試,注釋掉無需執行的任何**。要注釋掉多個**行,可以使用塊注釋運算子,%:

a = magic(3);

%sum(diag(fliplr(a)))

% 運算子必須單獨顯示在幫助文字塊前後緊鄰的行上。不要在這些行中包括任何其他文字。

要注釋掉跨多行的部分語句,請使用省略號 (…) 代替百分比符號。例如,

header = ['last name, ',      ...

'first name, ', ...

... 'middle initial, ', ...

'title']

matlab® 檔案通常包含多個命令。您通常一次僅專注於程式中的某個部分,分塊操作**。同樣,向其他人解釋您的檔案時,通常分塊介紹您的程式。為幫助介紹這些過程,使用**節,也稱為**單元或單元模式。**節包含 matlab 指令碼中您想要作為一組求值的連續**行,以兩個注釋字元 (%%) 開頭。與 %% 位於同一行中的文字稱為節標題。可以選擇是否包含節標題,不過,節標題可提高檔案的可讀性並在您發布**時顯示為題頭。

編寫 matlab 程式檔案時,可以使用編輯器中「節」(「單元」)的功能逐節執行程式檔案。該方法有助於您試用和微調您的程式。您可以在各節之間導航並單獨執行每節。要執行某節,該節必須包含它需要的所有值,或這些值必須存在於 matlab 工作區中。

節執行功能執行當前以黃色高亮顯示的**節。matlab 在執行某個**節時不會自動儲存您的檔案。檔案無需位於您的搜尋路徑下。

在控制語句和函式內使用**節時會產生意外結果,因為 matlab 自動插入編輯器中未顯示的分節符,除非您顯式插入分節符。涉及巢狀**時尤其如此。在控制語句或函式的範圍內放置另乙個控制語句或函式時產生巢狀**。

matlab 根據以下條件自動定義**塊中的節界限:

如果在您插入分節符的同一行中自動插入分節符,它們會摺疊為乙個分節符。

指令碼和函式都允許您通過將命令序列儲存在程式檔案中來重用它們。指令碼是最簡單的程式型別,因為它們儲存命令的方式與您在命令列中鍵入命令完全相同。但是,函式更靈活,更容易擴充套件。注意:在指令碼中包含函式需要 matlab r2016b 或更高版本。

函式具有它們自己的工作區,與基礎工作區隔開。

基礎工作區儲存您在命令列中建立的變數。這包括指令碼建立的任何變數(假定您從命令列或編輯器中執行指令碼)。在您清除基礎工作區中的變數或結束您的 matlab® 會話之前,這些變數一直存在。

函式不使用基礎工作區。每個函式都有自己的函式工作區。每個函式工作區都與基礎工作區和所有其他工作區分開以保護資料的完整性。即使普通檔案中的區域性函式也有它們自己的工作區。某函式工作區的特定變數稱為區域性變數。在乙個函式呼叫轉到下乙個函式呼叫時,區域性變數通常不保留在記憶體中。

從函式中呼叫指令碼時,指令碼使用函式工作區。

和區域性函式一樣,巢狀函式也有它們自己的工作區。但是,這些工作區從以下兩個重要的獨特之處:

matlab程式設計之函式入門的用法

1 函式名稱要與.m檔案要一致,不然會報錯 maxv.m not found.2 編寫好函式以後,在控制台,輸入help 檔名 function a maxv x,y,z a x if y a a y endif z a a z end3 輸入函式名 引數 就可以了 格式如下 f arglist e...

Matlab程式設計 入門 二)

matlab 二 1.冒號表示式與子矩陣提取 1 冒號表示式在向量生成 子矩陣提取等方面很重要 冒號表示式原型為 v s1 s2 s3 該函式生成乙個行向量v,s1為向量起始值 s2為步距 該向量以 s1為起點,每隔步距 s2取乙個點 直至到不超過 s3的最大值,若 s2省略,則 s2的預設值為 1...

Matlab入門學習(程式設計)

一 迴圈 for,while for迴圈 for i begin step end endwhile迴圈 while condition end二 分枝 if,if else,switch case if condition else endswitch var case value1 case v...