概述
過了很久才更一次的 MATLAB 筆記。
這次主要講講 MATALB 中的函數的基礎部分。函數就是有封裝的特定功能的代碼實作,說白了就是一段可以實作自定義功能的代碼。使用函數的好處在于簡化了代碼同時增加了代碼的可讀性。
編寫 MATLAB 函數
方法一:使用 MATLAB 的自動生成
點選工具欄标簽 new 下拉菜單中的 function 按鈕,系統自動建立一個未命名的函數 Untitled ,
進入編輯狀态,格式如下:
function [ output_args ] = Untitled( input_args )
%UNTITLED 此處顯示有關此函數的摘要
% 此處顯示詳細說明
end
這裡逐項來解釋以上内容:
function 是 MATLAB 中的一個關鍵字(保留字,隻允許作為文法結構使用),可以用于定義函數。
[ output_args ] 輸出參數清單
= 指派符号
Untitle 函數名,可以自定義隻要與檔案名字相同(檢索的時候隻根據檔案名檢索)
( input_args ) 輸入參數清單
第二行的 % 及之後的内容 函數的摘要(可以被 lookfor 指令檢索的内容)
之後的% 及之後的内容 函數的幫助文檔(可以簡單介紹一下變量的含義,友善修改)
接着就是函數的主體
end 宣告函數已經寫完
方法二:依照函數文法編寫 m 檔案
依照 MATLAB 給出的标準函數格式,你也可以直接使用 edit 指令編寫一個新的 m 檔案,依照文法編寫後,MATLAB 會自動儲存為相應的函數檔案。
當你熟悉了 MATLAB 文法後,即可使用方法二定義自己需要的函數,在此之前,建議先使用方法一快速建立 MATLAB 函數。
自定義 MATLAB 函數
既然已經各個組分的含義,不妨自己來修改它。
嘗試将函數名改為 my_fun(一般取一些有意義且不要重名的函數名)。
輸出參數設為 y (隻有一個變量時可不加中括号)
輸入參數設為 x
函數内容寫上: y = x * x;
Ctrl + S 儲存檔案名為 my_fun.m
function [ y ] = my_fun(x)
%UNTITLED 此處顯示有關此函數的摘要
% 此處顯示詳細說明
y = x * x;
end
恭喜你,第一個能夠計算平方的 MATLAB 函數大功告成。
調用 MATLAB 函數
在指令行或者腳本檔案(同一個檔案夾)中使用 my_fun(x) 可以調用該函數。
>> y1 = my_fun(3)
y1 =
9
>> x2 = 4;
>> y2 = my_fun(x2)
y2 =
16
那麼問題來了:函數可不可以調用另一個函數呢?可以!
建立另一個 MATLAB 函數,儲存到同一個檔案夾,像指令行使用即可。
function [ y ] = my_fun_2(x)
%UNTITLED 此處顯示有關此函數的摘要
% y = x*(x+1)
y = my_fun(x) + x;
end
大膽的想法
函數可不可以調用他自己呢?
可以的!在函數主體中調用自身就可以了。為了不至于發生死循環(無窮無盡的調用下去),可以通過限制調用的次數并逐次傳回函數結果。這種方法叫做遞歸,斐波那契數列就可以用這種方法解決。
更多需求
需求一:更多輸出參數
% 将多個輸出參數在括号中用中逗号隔開即可
% 這時中括号不可省略
function [y1,y2] = my_mutiply(x1)
y1 = x * x;
y2 = x * x * x;
end
需求二:更多輸入參數
% 将多個輸入參數在括号中用逗号隔開即可
function y = my_add(x1,x2,x3)
y = x1 + x2 + x3;
end
需求三:不需要輸入參數
% 這時加不加小括号都可以
% function y = my_rand_100()
% function y = my_rand_100
function y = my_rand_100
% 産生一個 1-100 的随機整數
y = randperm(100,1);
end
需求四:不需要輸出
% function 後直接加函數名字即可
function my_print(x1,x2)
y2 = x1 + x2;
disp(y2);
end
需求五:不想寫 end
function my_say_hello
disp('hello');
需求六:互動方式使用函數
function a = my_square
a = input('enter your number');
a = a^2;
end
需求七:輸入參數是矩陣
% MATLAB 才不會管你輸入的是什麼
% 傳遞的變量都可以在函數裡操作
function average = my_average(x)
average = sum(x)/length(x);
end
設計 MATLAB 函數
我們該如何從頭開始設計一個 MATLAB 函數?以計算存款的利息為例:
有複利計算公式如下
利息=本金*(1+利率)^存期-本金
思路
先确定需要的函數成分:輸入參數、輸出參數和中間變量
輸入參數:三個
本金(present_value)
計息期數(number_of_periods)
利率(interest_rate)
輸出參數:利息(interest)
中間變量:終值(future_value)
函數名:interest_calculator
編寫
function interest = interest_calculator(present_value,number_of_periods,interest_rate)
% interest calculator with present_value, number_of_periods and interest_rate
% 原理:利息=本金*(1+利率)^計息期數-本金
future_value = present_value * (1 + interest_rate)^number_of_periods;
interest = future_value - present_value;
end
調試
這樣一來函數就完成了。
想得美,每段代碼都應該經過重複重複再重複的調試。在腳本檔案中鍵入以下内容并運作:
my_present_value = 10000;
my_number_of_periods = 2;
my_interest_rate = 0.02;
my_interest = interest_calculator(my_present_value,my_number_of_periods,my_interest_rate)
輸出結果為
my_interest =
404
(多次)确認沒有問題後就可以宣告結束了。
小結
MATLAB 函數部分的内容确實比較多,以我拙劣的水準隻能多花些時間挑出來,盡可能無誤地、簡明地寫完。