《2022年MATLAB自定义函数及局部变量.docx》由会员分享,可在线阅读,更多相关《2022年MATLAB自定义函数及局部变量.docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源MATLAB自定义函数及局部变量 2021-11-20 09:17在开头学习 MATLAB的时候并没有发觉这个软件有着这么强大的功能,随着课题 的不断深化, 也在逼迫着自己不断的去应用新的公式并开发新的算法,这就牵涉到了如何在 MATLAB中自定义函数的问题,随之而来自然就是全部编程语言所面 临的问题,函数调用、局部变量等等;下面就我自己整理的一些心得与大家沟通;期望对你也有所帮忙;1、编写自定义函数时尽量分以下四部分:(1) 函数定义行: functionout1,out2,.=filenamein1,in2,.,输入和输出参数个数分别由nargin和 nargout 两个 MA
2、TLAB保留的变量来给出;(2) 第一行帮忙行,以 %开头,作为 lookfor指令搜寻的行(3) 函数体说明及有关注解:以( %)开头,用以说明函数的作用及有关内容;假如不期望显示某段信息,可在它的前面加空行(4) 函数体:函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的全部变量都是局部变量, 即在该函数返回之后, 这些变量会自动在 MATLAB的工作空间中清除掉;假如期望这些中间变量成为在整个程序中 都起作用的变量,就可以将它们设置为全局变量;例如下面就是一个标准的自字义函数;function A=myhilbn, m% MYHILB是一个示范性的 M-fun
3、ction.% A=MYHILBN, M 会生成一个 NM的 Hilbert矩阵 A.% A=MYHILBN会 生成一个 NN的 Hilbert矩阵.% MYHILBN,M 仅仅显示一个 Hilbert矩阵,而不会返回任何矩阵;%这些内容在用 help 时不会显示if nargout1, errorToo many output arguments.; end if nargin=1, m=n;elseif nargin=0 | nargin2errorWrong number of iutput arguments.;欢迎下载精品学习资源end A1=zerosn,m; for i=1: n
4、for j=1:m A1i,j=1/i+j-1;end endif nargout=1, A=A1;elseif nargout=0, dispA1; end把该函数储存在 MATLAB的某个搜寻路径中 比如 work 目录中 ,在命令窗口输入: help myhilbMYHILB是一个示范性的 M-function.A=MYHILBN, M 会生成一个 NM的 Hilbert矩阵 A.A=MYHILBN会 生成一个 NN的 Hilbert矩阵.MYHILBN,M 仅仅显示一个 Hilbert矩阵,而不会返回任何矩阵; lookfor myhilbMYHILB是一个示范性的 M-functio
5、n.2、MATLAB中全局变量与局部变量有什么区分?答:假如一个函数内的变量没有特别声明, 那么这个变量只在函数内部使用, 即为局部变量; 假如两个或多个函数共用一个变量 (或者说在子程序中也要用到主程序中的变量, 留意不是参数) ,那么可以用 global来将它声明为全局变量;全局变量的使用可以削减参数传递, 合理利用全局变量可以提高程序执行的效率;欢迎下载精品学习资源假如需要用到其他函数的变量; 就要利用在主程序与子程序中分别都声明全局变量的方式实现变量的传递;否就函数体内使用的都为局部变量;比如下例:文件名:exam1.m文件名: prods.mfunctionglobal aresul
6、t=prodsxx=1:100;global aa=2;result=a*sumx;c=prodsx exam1c =101003、怎样编写递归函数?答:在建立数学模型时, 经常会遇到利用递归表达的式子,这种数学表达式简洁明白,在 MATLAB中实现该模型,对应的需要建立递归函数;写一个好的递 归函数, 关键是找到递归的边界条件, 和在中间某步骤中会发生的各种情形, 然后再对应到程序中即可; 试看 Hanoi 塔例子: 要将塔座 A 上的 n 个圆盘全部转移到塔座 C上,如 n=1,直接把这一片移到目标柱子即可;如n1,可以先把塔座A上的个圆盘想法转移到塔座 B上,然后把塔座 A 上的最终一个
7、大圆盘转移到塔座 C上,最终再把塔座 B 上的个圆盘转移到塔座 C上;把上面思想对应到递归程序中,就得到如下代码:function result=hanoidisknum,beginpillar,midpillar,endpillar,schif disknum=1% 添加一行移动方式,递归的边界result=sch;1,beginpillar,endpillar;else%下面一句相当于把上面n-1 片移到中间柱子result=hanoidisknum-1,beginpillar,endpillar,midpillar,sch;%然后把最终一片移到目标柱子上result=result;disknum,beginpillar,endpillar;欢迎下载精品学习资源%把中间当作第一根 ,原先第一根当作中间柱子 ,连续移动result=hanoidisknum-1,midpillar,beginpillar,endpillar,result; end欢迎下载