天天看點

matlab機關函數定義,MATLAB 函數(一)

概述

過了很久才更一次的 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 函數部分的内容确實比較多,以我拙劣的水準隻能多花些時間挑出來,盡可能無誤地、簡明地寫完。