资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三部分 自定义函数Matlab Date11. MATLAB 函数简介nM文件是脚本文件。n脚本文件只是用于存储MATLAB语句。n当一个脚本文件被执行时,和直接在命令窗口中 直接键入MATLAB 语句所产生的结果是一样的。n脚本文件分享命令窗口中的工作区,所以所有的 在脚本文件运行之前定义的变量都可以在脚本文 件中运行,所有在脚本文件中创建的变量在脚本 文件运行之后仍然存在工作区。n一个脚本文件没有输入参数,也不返回结果。n所有脚本文件可以通过存于工作区中的数据进行 交互。Date2nMATLAB 函数是一种特殊形式的M 文件, 它运行在独立的工作区。n它通过输入参数列表接受输入数据,它通 过输出参数列表返回结果给输出参数列表 。nMATLAB 函数的基本形式如下:Date3n在function 语句的第一个行注释被称为H1注释行 。n是对本函数功能的总结。n重要性在于,通过lookfor 命令它能被搜索到并显 示出来。n从H1 注释行到第一个空行或第一个可执行性语句 可以通过help 命令或帮助窗口搜索到。它们则应 包含如何使用这个函数的简单总结。n函数文件的文件名与函数名必须相同!Date4n自定义函数的简单例子。n函数dist2 用于计算笛卡尔坐标系中点(x1,y1 )与点(x2,y2)之间的距离。(把以下代码保 存成dist2.m 文件)n一个简单的利用这个函数的例子test_dist2ntest_dist2:脚本文件被执行时,它的结果显示n函数dist2 也支持MATLAB 帮助子系统。如果 你键入“help dist2”,将会得到的结果n键入“lookfor dist2”Date5n为了仔细观察工作区在函数执行前后的变 化,我们将在MATLAB 调试器中加载函数 dist2 和脚本文件test_dist2。在函数加载前, 加载中,加载后设置断点,观察工作区的 变量情况。Date62. 在MATLAB 中传递变量: 按值传递机制nmaltab 程序与它们函数之间的交互用是按值 传递机制。n当一个函数调用发生时,MATLAB 将会复 制实参生成一个副本,然后把它们传递给 函数。n这次复制是非常重要的,因为它意味着虽 然函数修改了输入参数,但它并没有影响 到调用者的原值。Date7例子: function out = sample(a, b) fprintf(In Sample: a = %f, b = %f %fn,a,b); a = b(1) + 2*a; b = a .* b; out = a + b(1); fprintf(In Sample: a = %f, b = %f %f n,a,b);Date8n调用这个函数的检测程序: a = 2; b = 6 4; fprintf(Before sample: a = %f, b = %f %fn, a, b); out = sample(a, b); fprintf(After sample: a = %f, b = %f %fn,a,b); fprintf(After sample: out = %f n, out);Date9n当这个程序被执行将产生如下的结果 test_sample Before sample: a = 2.000000, b = 6.000000 4.000000 In Sample: a = 2.000000, b = 6.000000 4.000000 In Sample: a = 10.000000, b = 60.000000 40.000000 After sample: a = 2.000000, b = 6.000000 4.000000 After sample: out = 70.000000n注意,a 和b 在函数sample 内都改变了,但这些改 变对调用函数中的值并没有任何的影响。Date10n例:直角坐标与极坐标的转换:n在笛卡尔平面上的一点的坐标既可以通过直角 坐标(x,y)来描述,也可以通过极坐标(r, )来描述。n编写两个函数rect2polar 和polar2rect,用来实现 两坐标体系的转换。其中 单位于为度。参看函数: rect2polar 和polar2rectDate11n例: 数据选择性排序n选择性排序的MATLAB 代码ssort.mn调用选择性排序函数的程序test_ssort.mDate123. 选择性参数n如何知道一个MATLAB 函数有几个输入输出 参数呢,以及函数相应的功能呢?nnargin 这个函数返回调用这个函数时所需要的实 际输入参数的个数nnargout 这个函数返回调用这个函数时所需要的实 际输出参数的个数nnargchk 如要一个函数调用被调用时参数过多或过 少,那么nargchk 函数将返回一个标准错误信息Date13nerror 显示错误信息,并中止函数以免它产生这 个错误。如果参数错误是致命的,这个函数将 会被调用。nwarning 显示警告信息并继续执行函数,如果参 数错误不是致命的,执行还能继续,则这个将 会被调用。ninputname 这个函数将会返回对于特定参数个数 的实际变量名。Date14n例如:nmessage = nargchk(min_args, max_args, num_args);其中min_args 是指参数的最小个数,max_args 是指数 的最大个数,num_args 是指参数的实际个数。如 果参数的个数不在允许的范围,将会产生一个标 准的错误信息。如果参数的个数在允许的范围之 内,那么这个函数将返回一个空字符。Date154.用全局内存分享数据n全局变量的声明基本形式: global var1,var2,var3 n在一个程序,可以利用全局内存,在函数 之间对大规模数据进行交换。Date16n例题:编写一个函数random0,使之产生一个数组 ,数组中包括一个或多个随机数,它的取值范围是0ran arr = random0(1,20000); mean(arr) ans = 0.5020 std(arr) ans = 0.2881 hist(arr,10); title(bf Historygram of the Output of random0); xlabel(Bin) ylabel(Count)Date20n在MATLAB 中,有两个产生随机数的内建 函数。nrand 用于产生等可能的随机数nrandn 用于产生普通的随机数n这两个函数要远比我们创建这个随机数发 生器要快得多,产生的随机数也多得多。 如果你需要在你的程序中创建一些随机数 ,可调用它们。n调用函数rand 和randn 的形式:nrand 产生一个随机数nrand(n) 产生一个nn 的随机数数组nrand(n, m) 产生一个nm 的随机数数组Date215. 在函数调用两次之间本地数据的 存储n当一个函数执行结束,由这个函数创建的 特定的工作区将会被破坏,所以在这个函 数中的所有本地变量将会消失。n在有些情况下,多次调用一个函数,存储 一些本地变量的信息还是有用的。例如, 我们想创建一个计数器,对函数调用的次 数进行计数。如果每一次函数结束执行, 计算器就会被破坏,那么计数不超过1。Date22n持久内存(persistent memory)是内存的一种类 型,在函数上一次调用之后,这一步调用 之前,本地变量被保存在持久内存,值不 变。n持久变量声明形式: persistent var1 var2 var3 .Date236. 函数的函数(function functions)n函数的函数(function functions)是指函数的输入参 数中含有其他的函数,传递给函数的函数的变量 名一般情况应用于这个函数执行的过程中。 fzero(cos,0 pi) ans = 1.5708 fzero(exp(x)-2,0 1) ans = 0.6931Date24n函数的函数操作的关键字有两个专门的 maltab 函数:eval 和feval。n函数eval 对一个字符串进行求值,就如它在命 令窗口中已经键入了一样。n函数feval 用一个特定的输入值对命名的函数进 行求值。Date25 x = eval(sin(pi/4) x = 0.7071 x = feval(sin, x = 0.7071Date267 . 子函数和私有函数n在一个单个的文件中我们可以创建多个函 数。如果超过1 个的函数出现在一个文件中 ,那么最上面的那个函数为普通函数,下 面的函数称为子函数或中间函数。n子函数看起来和普通函数一样,但是只能 被同一文件中的函数调用。Date27nfunction avg, med = mystats(u)n%MYSTATS Find mean and median with internal functions.n% Function MYSTATS calculates the average and mediann% of a data set using subfunctions.nn = length(u);navg = mean(u, n);nmed = median (u, n);nfunction a = mean(v, n)n% Subfunction to calculate average.na = sum(v) / n;nfunction m = median(v, n)n% Subfunction to calculate mediannw = sort(v);nif rem(n, 2) =1nm = w(n+1)/2);nelsenm = (w(n/2) + w(n/2 + 1)/2;nendDate28n作业:1. 道路交通密度。函数random0 将在0.0, 1.0产生一个等可能性随机数。如果随机事件结 果是等可能性,这个函数适合模拟这类随机事件。但是,很多事件的发生 都不是等可能性的,那么这个函数不适合模拟这类情况。例如,一交通工程师研究在一段时间隔t 内通过某一地点汽车数,发 现k 辆汽车通过一指定地点可能性为:! 它的分布符合指数分布。指数分布在科研和工程上有很多的应用。例 如,在时间t 内接打电话的次k,指定容器内的病毒k,以及复合系统的出 错次数k 都符合指数分布。编写一个函数,对任意k,t 和 求指数分布。通过计算在1 分钟内通 过高速路上指定一点1,2,3,4,5 辆汽车的概率。并画出相应的图象。 已知为1.5。Date29n生日问题:如果在一个房间有n 个人,那么有二个或多个人在同一天过生日的概率为多大?我们可以能过数学建模来解决这一问题。编写一个程序,计算在n 个人中有二个或多个人在同一天过生日的概率,n 为输入参数。编写一个程序来检测这个函数,当n=2,3,40 时,二个或多个人在同一天过生日的概率为多大?Date30
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号