设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1412|回复: 0

matlab子函数的使用

[复制链接]

19

主题

162

金钱

253

积分

入门用户

发表于 2019-9-11 15:44:57 | 显示全部楼层 |阅读模式

一、
在matlab的函数定义中,如果函数如果函数较长或较多,往往可以将各函数分别写在多个.m文件中,但有时函数可能很短,就几行,可能希望将多个函数定义放在同一个.m文件中,这里就存在一个子函数的定义问题。

对于函数文件,一个M文件只能定义一个主函数,即第一句function所定义的函数,而且整个M文件在外部使用时候表现出来的也只有这一个函数(主函数名和函数M文件名保持一致)。

在matlab中一个.m文件中可以有多个的子函数,可以互相调用,下面结合一个简单的例子来分析。

格式:
  1. function MainFunction
  2.     %主函数内容
  3.     function SubFunction1
  4.         %子函数内容
  5.     end
  6.     function SubFunction2
  7.         %子函数内容
  8.     end
  9.     function SubFunction3
  10.         %子函数内容
  11.     end
  12. end
复制代码


自定义函数:mathTest.m
  1. function [sum_result,sub_result,mul_result] = mathTest(x,y) %主函数
  2. sum_result=sum(x,y);  %子函数的调用
  3. sub_result=sub(x,y);
  4. mul_result=mul(x,y);

  5. %子函数定义:
  6. function result=sum(x,y) %+
  7. result = x+y;


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


  10. function result=mul(x,y) %*
  11. result = x*y;
复制代码


调用该函数M文件:
  1. %本函数测试M文件主函数调用(子函数被隐藏)
  2. clc;clear;
  3. a=2;b=3;

  4. [sum_result,sub_result,mul_result] = mathTest(a,b); %主函数调用
  5. fprintf('%d + %d的和是:%f\n',a,b,sum_result);
  6. fprintf('%d - %d的差是:%f\n',a,b,sub_result);
  7. fprintf('%d * %d的积是:%f\n',a,b,mul_result);
复制代码



第二、实际可以将以上文件:自定义函数文件和调用文件合在一起的(虽然不推荐)
里我们定义了一个没有输入没有输出的函数该函数将作为主函数,而其他的函数均为子函数,由主函数调用子函数,而子函数间是可以互相调用,但不能调用主函数。这时的m文件不需要任何输入,调用时可以直接点运行m文件的快捷键,或者在命令框中输入m文件名然后回车运行
举例 脚本文件:mathMain.m
  1. %本函数测试M文件主函数调用(子函数被隐藏)
  2. function [] =mathMain() %不能省略
  3. clc;clear;
  4. a=200;b=300;
  5. [sum_result,sub_result,mul_result] = mathTest(a,b); %主函数调用
  6. fprintf('%d + %d的和是:%f\n',a,b,sum_result);
  7. fprintf('%d - %d的差是:%f\n',a,b,sub_result);
  8. fprintf('%d * %d的积是:%f\n',a,b,mul_result);
  9. %结束
  10. %----------------------------------------------------------------
  11. function [sum_result,sub_result,mul_result] = mathTest(x,y) %主函数
  12. sum_result=sum(x,y);  %子函数的调用
  13. sub_result=sub(x,y);
  14. mul_result=mul(x,y);

  15. %子函数定义:
  16. function result=sum(x,y) %+
  17. result = x+y;


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


  20. function result=mul(x,y) %*
  21. result = x*y;
复制代码

其实,上面这个代码中,
mathTest(),
sum(x,y)
sub(x,y)
mul(x,y)都可以看作子函数,只不过mathTest对其它函数进行了调用,那么也就是所谓的嵌套功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表