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

上传人:豆浆 文档编号:37541311 上传时间:2018-04-18 格式:DOCX 页数:4 大小:27.24KB
返回 下载 相关 举报
Matlab函数进阶使用匿名函数和内嵌函数处理多变量传递问题_第1页
第1页 / 共4页
Matlab函数进阶使用匿名函数和内嵌函数处理多变量传递问题_第2页
第2页 / 共4页
Matlab函数进阶使用匿名函数和内嵌函数处理多变量传递问题_第3页
第3页 / 共4页
Matlab函数进阶使用匿名函数和内嵌函数处理多变量传递问题_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《Matlab函数进阶使用匿名函数和内嵌函数处理多变量传递问题》由会员分享,可在线阅读,更多相关《Matlab函数进阶使用匿名函数和内嵌函数处理多变量传递问题(4页珍藏版)》请在金锄头文库上搜索。

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

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

3、函%数(x)(poly2(a,b,c,x)以便%将自变量限制为 x. function y=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)使用)使用 nested function编写函数保存为 intnest.m, 内容如下function y_int=intnest(a,b,c)y_

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

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

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

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

8、 stderr, 输出变量 err, 此三者皆写在关键字 function后面同一行。无需再使用 return 将 err 的值返回。注意:(1)函数文件的命名要使用文件内主函数声明的名称,否则出错。(2)函数内部可以嵌套子函数并为该文件的主函数调用,只需将子函数写在主函数代码后面。(3)一个函数可以有多个输入输出。如 function y1,y2=myfun(x1,x2,x3)例 1 中的 m 文件可在第一行前插入一行:function randplt保存后则该文件成为一个没有输入输出宗量的函数。一般来说 matlab 中执行同样的任务使用函数文件比脚本文件的效率高。3.函数句柄的使用函数句

9、柄起到 c 语言中函数指针的作用。例 3: 编写函数求出数组 arr1 和 arr2 的标准差(std)以及误差(stderr)。解: 编写如下文件并保存为 erreval.mfunction s1,s2=erreval(err,arr1,arr2)% err 为所调用的误差函数,s1,s2 分别返回 arr1 和 arr2 的误差.s1=feval(err,arr1);s2=feval(err,arr2);此文件的输入包含“函数变量“, 通过函数句柄实现函数变量 err 的赋值。运行时先运行如下命令建立数组 arr1,arr2:arr1=1;2;3;arr2=10;20;30;然后输入std1,std2=erreval(std,arr1,arr2)stderr1,stderr2=erreval(stderr,arr1,arr2)执行后返回四个误差值。std,stderr 为两误差函数的函数句柄。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号