matlab 子函數的使用


本文參考了該篇博客:http://www.cnblogs.com/MarshallL/p/4048846.html

對其進行學習,為我所用吧。

一、

在matlab的函數定義中,如果函數如果函數較長或較多,往往可以將各函數分別寫在多個.m文件中,但有時函數可能很短,就幾行,可能希望將多個函數定義放在同一個.m文件中,這里就存在一個子函數的定義問題。

對於函數文件,一個M文件只能定義一個主函數,即第一句function所定義的函數,而且整個M文件在外部使用時候表現出來的也只有這一個函數(主函數名和函數M文件名保持一致)。

在matlab中一個.m文件中可以有多個的子函數,可以互相調用,下面結合一個簡單的例子來分析。

格式:

function MainFunction
    %主函數內容
    function SubFunction1
        %子函數內容
    end
    function SubFunction2
        %子函數內容
    end
    function SubFunction3
        %子函數內容
    end
end

自定義函數:mathTest.m

function [sum_result,sub_result,mul_result] = mathTest(x,y) %主函數
sum_result=sum(x,y);  %子函數的調用
sub_result=sub(x,y);
mul_result=mul(x,y);

%子函數定義:
function result=sum(x,y) %+
result = x+y;


function result=sub(x,y) %-
result = x-y;


function result=mul(x,y) %*
result = x*y;

調用該函數M文件:

%本函數測試M文件主函數調用(子函數被隱藏)
clc;clear;
a=2;b=3;

[sum_result,sub_result,mul_result] = mathTest(a,b); %主函數調用
fprintf('%d + %d的和是:%f\n',a,b,sum_result);
fprintf('%d - %d的差是:%f\n',a,b,sub_result);
fprintf('%d * %d的積是:%f\n',a,b,mul_result);

第二、看那篇博客發現一個有用的功能,實際是可以將以上文件:自定義函數文件和調用文件合在一起的(雖然不推薦)

這里我們定義了一個沒有輸入沒有輸出的函數該函數將作為主函數,而其他的函數均為子函數,由主函數調用子函數,而子函數間是可以互相調用,但不能調用主函數。這時的m文件不需要任何輸入,調用時可以直接點運行m文件的快捷鍵,或者在命令框中輸入m文件名然后回車運行

舉例 腳本文件:mathMain.m

%本函數測試M文件主函數調用(子函數被隱藏)
function [] =mathMain() %不能省略
clc;clear;
a=200;b=300;
[sum_result,sub_result,mul_result] = mathTest(a,b); %主函數調用
fprintf('%d + %d的和是:%f\n',a,b,sum_result);
fprintf('%d - %d的差是:%f\n',a,b,sub_result);
fprintf('%d * %d的積是:%f\n',a,b,mul_result);
%結束
%---------------------------------------------------------------- function [sum_result,sub_result,mul_result] = mathTest(x,y) %主函數 sum_result=sum(x,y); %子函數的調用 sub_result=sub(x,y); mul_result=mul(x,y); %子函數定義: function result=sum(x,y) %+ result = x+y; function result=sub(x,y) %- result = x-y; function result=mul(x,y) %* result = x*y;

其實,上面這個代碼中,

mathTest(),
sum(x,y)
sub(x,y)
mul(x,y)都可以看作子函數,只不過mathTest對其它函數進行了調用,那么也就是所謂的嵌套功能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM