- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料輸出
- MATLAB - 資料標準化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - If End 語句
- MATLAB - If Else 語句
- MATLAB - If…Elseif Else 語句
- MATLAB - 巢狀 If 語句
- MATLAB - Switch 語句
- MATLAB - 巢狀 Switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - For 迴圈
- MATLAB - While 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - Break 語句
- MATLAB - Continue 語句
- MATLAB - End 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - 返回語句
- MATLAB - 空函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - 對映函式
- MATLAB - 平均值函式
- MATLAB - 結束函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - Try...Catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 2D 線形圖
- MATLAB - 3D 圖形
- MATLAB - 格式化圖形
- MATLAB - 對數座標軸圖形
- MATLAB - 繪製誤差線
- MATLAB - 繪製 3D 等值線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 2D 陣列插值
- MATLAB - 3D 陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 2D 逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 雜項
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 函式
函式是一組執行特定任務的語句。在 MATLAB 中,函式在單獨的檔案中定義。檔案和函式的名稱應相同。
函式在其自己的工作區(也稱為區域性工作區)中操作變數,該工作區與您在 MATLAB 命令提示符下訪問的工作區(稱為基本工作區)分開。
函式可以接受多個輸入引數,並且可以返回多個輸出引數。
函式語句的語法如下:
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
示例
以下名為mymax的函式應寫入名為mymax.m的檔案中。它將五個數字作為引數,並返回這些數字中的最大值。
建立一個名為 mymax.m 的函式檔案,並在其中鍵入以下程式碼:
function max = mymax(n1, n2, n3, n4, n5) %This function calculates the maximum of the % five numbers given as input max = n1; if(n2 > max) max = n2; end if(n3 > max) max = n3; end if(n4 > max) max = n4; end if(n5 > max) max = n5; end
函式的第一行以關鍵字function開頭。它給出函式的名稱和引數的順序。在我們的示例中,mymax函式有五個輸入引數和一個輸出引數。
緊跟在函式語句之後的註釋行提供了幫助文字。當您鍵入以下內容時,將列印這些行:
help mymax
MATLAB 將執行上述語句並返回以下結果:
This function calculates the maximum of the five numbers given as input
您可以像這樣呼叫函式:
mymax(34, 78, 89, 23, 11)
MATLAB 將執行上述語句並返回以下結果:
ans = 89
匿名函式
匿名函式類似於傳統程式語言中的行內函數,在單個 MATLAB 語句中定義。它由單個 MATLAB 表示式和任意數量的輸入和輸出引數組成。
您可以在 MATLAB 命令列或函式或指令碼中定義匿名函式。
這樣,您就可以建立簡單的函式,而無需為它們建立檔案。
從表示式建立匿名函式的語法為
f = @(arglist)expression
示例
在這個例子中,我們將編寫一個名為 power 的匿名函式,它將接收兩個數字作為輸入,並返回第一個數字的第二個數字次冪。
建立一個指令碼檔案,並在其中鍵入以下程式碼:
power = @(x, n) x.^n; result1 = power(7, 3) result2 = power(49, 0.5) result3 = power(10, -10) result4 = power (4.5, 1.5)
執行該檔案時,它將顯示:
result1 = 343 result2 = 7 result3 = 1.0000e-10 result4 = 9.5459
主函式和子函式
除匿名函式之外的任何函式都必須在檔案中定義。每個函式檔案都包含一個必需的主函式(首先出現)和任意數量的可選子函式(出現在主函式之後並由其使用)。
主函式可以從定義它們的外部檔案(從命令列或其他函式)呼叫,但子函式不能從命令列或其他函式(在函式檔案外部)呼叫。
子函式僅對定義它們的函式檔案中的主函式和其他子函式可見。
示例
讓我們編寫一個名為 quadratic 的函式,它將計算二次方程的根。該函式將接收三個輸入,二次係數、線性係數和常數項。它將返回根。
函式檔案 quadratic.m 將包含主函式quadratic和子函式disc,後者計算判別式。
建立一個函式檔案quadratic.m,並在其中鍵入以下程式碼:
function [x1,x2] = quadratic(a,b,c) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficients of x2, x and the %constant term % It returns the roots d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of quadratic function dis = disc(a,b,c) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function
您可以從命令提示符下呼叫上述函式,如下所示:
quadratic(2,4,-4)
MATLAB 將執行上述語句並返回以下結果:
ans = 0.7321
巢狀函式
您可以在另一個函式的主體中定義函式。這些稱為巢狀函式。巢狀函式包含任何其他函式的任何或所有元件。
巢狀函式在另一個函式的作用域內定義,並且它們共享對包含函式的工作區的訪問許可權。
巢狀函式遵循以下語法:
function x = A(p1, p2) ... B(p2) function y = B(p3) ... end ... end
示例
讓我們重寫上一個示例中的quadratic函式,但是這次disc函式將是一個巢狀函式。
建立一個函式檔案quadratic2.m,並在其中鍵入以下程式碼:
function [x1,x2] = quadratic2(a,b,c) function disc % nested function d = sqrt(b^2 - 4*a*c); end % end of function disc disc; x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of function quadratic2
您可以從命令提示符下呼叫上述函式,如下所示:
quadratic2(2,4,-4)
MATLAB 將執行上述語句並返回以下結果:
ans = 0.73205
私有函式
私有函式是僅對有限數量的其他函式可見的主函式。如果您不想公開函式的實現,則可以將其建立為私有函式。
私有函式駐留在具有特殊名稱private的子資料夾中。
它們僅對父資料夾中的函式可見。
示例
讓我們重寫quadratic函式。但是這次,計算判別式的disc函式將是一個私有函式。
在工作目錄中建立一個名為 private 的子資料夾。將以下函式檔案disc.m儲存在其中:
function dis = disc(a,b,c) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function
在您的工作目錄中建立一個函式 quadratic3.m,並在其中鍵入以下程式碼:
function [x1,x2] = quadratic3(a,b,c) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficient of x2, x and the %constant term % It returns the roots d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of quadratic3
您可以從命令提示符下呼叫上述函式,如下所示:
quadratic3(2,4,-4)
MATLAB 將執行上述語句並返回以下結果:
ans = 0.73205
全域性變數
全域性變數可以由多個函式共享。為此,您需要在所有函式中將變數宣告為全域性變數。
如果您想從基本工作區訪問該變數,則在命令列中宣告該變數。
全域性宣告必須在函式中實際使用變數之前發生。最好對全域性變數的名稱使用大寫字母,以將其與其他變數區分開來。
示例
讓我們建立一個名為 average.m 的函式檔案,並在其中鍵入以下程式碼:
function avg = average(nums) global TOTAL avg = sum(nums)/TOTAL; end
建立一個指令碼檔案,並在其中鍵入以下程式碼:
global TOTAL; TOTAL = 10; n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42]; av = average(n)
執行該檔案時,它將顯示以下結果:
av = 35.500