matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题

matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题

ID:13956196

大小:27.24 KB

页数:4页

时间:2018-07-25

matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题_第1页
matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题_第2页
matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题_第3页
matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题_第4页
资源描述:

《matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Matlab函数进阶:使用匿名函数(AnonymousFunction)和内嵌函数(NestedFunction)处理多变量传递问题(Matlab7.0以上)问题:有一个多变量函数f(abcx),现需要分别在a=a0b=b0c=c0和a=a1b=b1c=c1的条件下对f(abcx)进行某一操作。此类问题常在数值积分时出现。解决方案:1.使用全局变量可在主调函数和被调函数中分别将a,b,c声明为全局变量(globalabc),这时f通过全局变量传递abc,定义时可以只有一个参数x。2.使用anonymousfunction3.使用nes

2、tedfunction下面举例说明anonymousfunction和nestedfunction的使用。例:对任意二次多项式ax2+bx+c进行数值积分(此处显然可以解析得到,此例使用anonymousfunction做演示)解:(1)使用匿名函数编写文件intpoly2.m如下functiony_int=intpoly2(a,b,c)y_int=quad(@(x)(poly2(a,b,c,x)),0,1);%此处利用matlab内部函%数quad(fun,x0,xt)进行积分,%被积函数fun我们使用匿名函%数"@(x)

3、(poly2(a,b,c,x))"以便%将自变量限制为x.functiony=poly2(ai,bi,ci,x)%此处定义一个多变量的子函数poly2(a,b,c,x)y=ai.*x.^2+bi.*x+ci;%此处使用矩阵元素运算(.*和.^)等便于%被矩阵化的内部函数调用,且提高程序效率执行:保存该文件并将matlab切换至该文件目录下,命令行输入intpoly2(1,2,3),便给出积分结果ans=4.33(2)使用nestedfunction编写函数保存为intnest.m,内容如下functiony_int=intn

4、est(a,b,c)y_int=quad(@poly2,0,1);%此处利用matlab内部函%数quad(fun,x0,xt)进行积分,%被积函数fun我们使用内嵌函%数poly2(x)的句柄@poly2functiony=poly2(x)%此处定义一个内嵌函数poly2(a,b,c,x)y=a.*x.^2+b.*x+c;%直接调用母函数中的变量a,b,cend%结束内嵌函数poly2end%结束母函数intpoly2保存后执行,同样效果。可见nestedfunction只是将主调函数和被调函数封装到了一起以共享主调函数的变量。注意

5、:一般函数不需要end,当出现nestedfunction时,主调函数和被调函数都必须有end来结束!附:M脚本文件和M函数文件、函数句柄m文件分两种:函数和脚本。1、matlabscriptfile:脚本文件没有输入输出,对工作空间(workspace)中的变量进行操作。任何可执行的matlab命令都可以写入脚本文件。先来看一个简单的例子:例1:产生一个20元素的一维随机数组并画出。解:新建一个m文件命名为randplt.m(或者任何你喜欢的名字),在其中加入如下两行代码:data=randn(1,20);plot(data);保存

6、后选择debug/run菜单或按F5键运行,观察workspace中多出了一个变量data。脚本文件执行时,就如同将文件中的每一条命令依次输入到matlab命令行中一样,顺次执行。你可以尝试在commandhistory窗口中按住ctrl键选择几行执行过的命令并单击鼠标右键在快捷菜单中选择creatMfile来快速创建一个m文件。2、matlabfunction函数文件可以接受输入和给出输出,当然也可以没有,就像c语言的函数。matlab函数最大的书写特点(同C比起来)是它的输出变量定义在函数名前面。看一例:例2:matlab内部函数

7、std给出数组的标准差std=sqrt(sum(X)/N),编写函数stderr求实验误差err=sqrt(sum(X)/(N*(N-1))),代码如下:functionerr=stderr(arr)%实验误差(标准差估计)%caculatealongeachcolumnofarrerr=std(arr)./sqrt(size(arr,1)-1);文件存为stderr.m,运行时输入a=[1;2;3];建立一个列数组a,然后输入stderr(a)则给出a的方差。(若输入行数组则发散,因N-1=0)此例中输入变量为arr,函数名为std

8、err,输出变量err,此三者皆写在关键字function后面同一行。无需再使用return将err的值返回。注意:(1)函数文件的命名要使用文件内主函数声明的名称,否则出错。(2)函数内部可以嵌套子函数并为该文件的主函

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。