本文參考了該篇博客: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對其它函數進行了調用,那么也就是所謂的嵌套功能