2.4 函数编写与调试 2.4.1 基本结构 两种源程序文件格式:M-文件、M-函数。常用后者。 保留变量nargin和nargout用于确定函数的输入和输出变量的个数。 [输出变量列表]=函数名(输入变量列表),均用逗号分隔。 help 函数名:显示注释语句内容,但空格行下方的注释不被显示。 if abs(n-floor(n))>eps|n<0 error(‘n应该是非负整数’); 上面的代码涉及abs、floor、eps、error、|等符号,用于判定是否为非负整数。 函数可以递归调用: function srhf_fact(n) if n>1 k=n*srhf_fact(n-1); elseif any[0,1]==n k=1 end 2.4.2 可变输入输出个数 如何建立起无限个输入或输出变量的函数?这种方式被广泛采用。 conv(A,B)用于求多项式的乘积,多个多项式的乘积只能嵌套使用此函数,即conv(C, conv(A,B))。这样很不方便,可以考虑编写一个新的函数convs,其输入变量不限于2个,而是无限个,在MATLAB中“无限”并不是纯粹数学上的无限,而是指输入或输出变量的个数不再于函数编写时加以限制,所以在函数中需要知道用户在输入变量列表中给出了几个变量,这需要调用length函数。 函数输入变量列表可以是一个变量(实际上是一个向量) varargin,此变量是保留变量,它表示多个变量的集合,那么length(varargin)的输出变量是一个正整数,表示varargin中具体包含的变量数量。 function a=convs(varargin) a=1; varnum= length(varargin); for i=1:varnum a=conv(a,varargin{i}); end end 2.4.3 inline函数与匿名函数 一个简单的函数,没有必要单独创建一个.m文件,只用一行代码进行描述即可。 function a=f(x,y) a=sin(x.^2+y.^2) end 上面的函数是在.m文件中的代码,而有些情况下,如微分方程求解和最优化问题,这样的函数可以采用inline函数的形式给出。 f=inline(‘sin(x.^2+y.^2)’,’x’,’y’) 以上两种函数定义形式,无论采用哪种,都可以通过z=f(3,6)直接求出z=0.8509,显然inline函数更为简便。 匿名函数跟inline函数类似,区别有二:更简洁、可直接使用工作空间中的变量。 简洁体现在f=@(x,y) sin(x.^2+y.^2) 变量的优势十分明显:一般函数中的变量,无论是输入变量还是输出变量只在函数内部使用,跟工作空间中的变量是相对隔离的,工作变量作为输入变量代入函数,工作变量便替换函数变量进行计算,最后函数将输出变量的结果代入工作变量返回工作空间。这样做虽然严谨,有效避免了变量使用上的混乱,但有时不够方便,匿名函数的引入,有效地将工作变量和函数变量结合起来,使用上更为灵活,但有一点需要注意,匿名函数直接引用工作变量,只是引用当时的工作变量的值,引用完成之后,如果工作变量的值发生变化,匿名函数所引用的工作变量值不会随着变化,仍然是之前的值。 2.5 二维图形绘制 2.5.1基本函数:plot(t,y) t1,t2,t3时刻的函数值分别是y(t1),y(t2),y(t3),将其输入MATLAB就是两个向量t=[t1,t2,t3],y=[ y(t1),y(t2),y(t3) ],这种曲线实际上是各个时刻对应函数值之间的折线,当t向量足够密集,看起来就是曲线了,所以在某些特殊区间(慢变化区间)可以取点较稀疏,以提高运算速度,在另一些区间(快变化区间)则需要较密集,以得到这些特殊区间的较为准确的图形。 (1) t、y均为向量,如上,还有更为简单的形式plot([t1,t2,t3],[y1,y2,y3]) (2) t为向量,y为矩阵。将y矩阵的每一行作为y向量与t共同绘制一条曲线,曲线数量跟y矩阵行数相等,这要求y矩阵的列数跟t向量的元素个数相等。 (3) t、y均为矩阵。要求t、y矩阵行列数均相等,取t矩阵的一行与y矩阵的同一行组成向量对进行绘制。 (4) 以上三种组合形式,如果不止一对t、y,而是多对,那么不必多次使用plot函数,可以这样一次绘出所有的图形plot(t1,y1,t2,y2,t3,y3)或plot(t1,y1,Option1,t2,y2, Option2,t3,y3, Option3),Option的具体用法参见P30. 图形的附属命令: grid on/off:打开或关闭网格 hold on/off:保护当前坐标,以后再用plot函数时新的曲线将叠印在现有坐标系上 title():添加标题 xlabel()和ylabel():给坐标轴加标注 (abs(x)>n):将此式与其他解析式点乘,当x在(-n,n)区间以外此式取1,否则取0,这是分段函数在MATLAB中的表达方式。 所得图形中有多个对象,如曲线、坐标轴、图形窗口等,每个对象都可以设置具体属性,属性也可以被读取。 set(句柄,’属性名1’,属性值1,’属性名2’,属性值2…) v=get(句柄,’属性名1’) 属性名必须加单引号,属性值不加。 2.5.2 特殊意义的图形绘制函数:参见P32. 2.5.3隐函数的绘制 隐函数:f(x,y)=0 ezplot(‘f(x,y)’)或ezplot(‘f(x,y)’,[-m,n]) 仅在[-m,n]上绘制隐函数图形 2.6 三维图形绘制 2.6.1三维曲线绘制 plot3(x,y,z)或plot3(x1,y1,z1,选项1,…) 2.6.2 三维曲面绘制 已知z=f(x,y),先用meshgrid()绘制网格矩阵数据x,y,再基于此平面绘制三位曲面,mesh()网格图,surf()表面图,surfc()带等高线,surfl()带光照,contour()等高线,contour3()三维等高线。例: [x,y]=meshgrid(0:10,-5:5) %在(x,y)平面上绘制一个正方形网格矩阵 z=x.^2+y.^2 surf(x,y,z) axis(-31,31,0,62,0,1) %将所得图形的立方体内的部分放大,名为重设坐标系,增大可读性 shading faceted/interp/flat %修饰显示形式,默认第一个 set(gca,’xlim,[-5,5]) %将x轴限制在一个区间内 2.6.3 三位图形的视角 view(a,b),方位角a表示从-y轴向+x轴方向逆时向旋转的角度,仰角b表示从xy平面向+z轴方向旋转的角度,默认情况下a=-37.5,b=30. 下图是我用MATLAB绘制出的第一张图,纪念一下。 
z=x.^2+y.^2






















































科学松鼠会是一个致力于在大众文化层面传播科学的非营利机构,成立于2008年4月。松鼠会汇聚了当代最优秀的一批华语青年科学传播者,旨在“剥开科学的坚果,帮助人们领略科学之美妙”。关于蛋疼,松鼠会有话说。 微博上流传这么一个说法:“一个人类可以承受45del(单位)的痛楚。但是当女人生孩子的时候,要承受57del的痛楚,大概就是碎了20根骨头的样子。But,如果一个男人被T到蛋了,那种痛楚是9000del,换算过来就是同时分娩160个孩子或者断了3200根骨头。所以,女生们你确定你懂蛋疼吗?” 这条内容是真的吗?蛋疼和分娩痛真的如此难以承受,乃至双双突破人类极限吗? 考据:并无确凿的医学证据 若在网络搜索这条微博内容,对分娩痛描述的出现时间为9月20日前后,此前并未见有类似的网络描述。不过,若是将该内容转换为英文再进行搜索,就会发现有意思的事情了。两年前的yahoo问答就出现过类似的描述[1] ,仔细阅读会发现,中文的这条“生孩子的时候,要承受57del的痛楚”就是这条英文问答的翻译体。 这条关于“母亲分娩疼痛是57,人体所能承受的疼痛是45”的说法,到底是由何而来的呢?很遗憾,搜索网络、美国国立医学图书馆的PubMed,都没有找到这方面的文献。至于蛋疼那个骇人的9000数字更是无据可查。换句话说,人体所能承受的疼痛限度与分娩疼痛的数值,很可能是一次网络上的以讹传讹,并无确凿的医学证据或研究做支持。 其实,若较真这条微博,你就会发现尴尬的搞笑点——如果人体最多只能承受45单位疼痛,但女人分娩时疼痛达到57单位,而男人蛋疼居然能达到9000单位,那说明无论男女,都已经不是人类了嘛。 疼痛的度量和单位 那么,疼痛是否有单位呢?答案是有的。微博里的“del”其实是指dol,它是疼痛的拉丁文单词dolor的缩写。在上世纪40年代后期,美国康奈尔大学的三位研究者James D. Hardy、 Herbert G. Wolff和 Helen Goodell根据此前他人的研究成果,建立了这一疼痛度量标准[2] 。 最初,他们将其称为"Hardy-Wolff-Goodell" 等级,一共分为十级,他们创造了一个单位,也就是dol来描述这十个等级。 那么,1 dol的疼痛到底是什么呢?他们定义为最小可觉差(just noticeable difference),也就是对这一最小差异量的感觉能力。饶若细究1 dol疼痛到底是多少,那就需要一种测量疼痛的工具,也就是测痛仪(Dolorimeter)。最开始,康奈尔大学的研究者是用棱镜将光聚焦于人体皮肤上,随着人体温度的升高,看人体的忍受限度来进行疼痛定义,这些光可是来自一盏1000瓦的电灯泡。 遗憾的是,dol这一描述疼痛的单位,从来都没有被广泛应用,它像昙花一现般存在于学术研究里。由于三人的试验结果不能被重复,他们的疼痛测量方法与工具被学界否定,也被禁止应用。想想也是,疼痛似乎一种极为复杂的主观感受,运用疼痛测量仪划分dol等级,既不容易掌握,临床上一点都不实用。因此,dol也位列5大最怪异的科学度量单位[3] 。 疼痛是伤害性刺激作用于机体所引起的一种不愉快的主观体验,伴有感觉、知觉与情绪反应。人们对疼痛的体验与感受是因人而异的,对疼痛的敏感程度是不一样的,因此目前测量疼痛的金标准,依然是病人对所经历疼痛的表达。可是,如何准确度量只有自己知道的疼痛程度呢?目前临床上最常用的测量方法是视觉模拟评分法(VAS法),这个方法依然是依托于人们对疼痛的主观体验,并非绝对客观的测量方法。 在我的另一篇关于疼痛知识的文章 《怎样测量疼痛?》 中,对于VAS法是这样介绍的: VAS方法的主要道具“痛尺”其实是一把长约10厘米的游动标尺。尺的一面标有10个刻度,两端分别为0分端和10分端。而0分表示没有疼痛,10分代则表难以忍受的最剧烈的疼痛,从0到10依次表示疼痛的程度在不断增加,愈来愈难以忍受。在测量疼痛时,向病人说明这把尺的含义,然后将有刻度的一面背向病人,让病人在直尺上标出能代表自己疼痛程度的相应位置,医生再根据病人标出的位置为其评出分数。 如果分数在3分以下,那么恭喜你,你虽然感觉到疼痛但并太严重,不太会影响你的睡眠;但如果你的分数在7分以上,oh~my god!你很不幸,你现在肯定疼痛难忍,极需要医生给你用一些镇痛药物来帮助你度过痛关了。 VAS法现今已成为疼痛测量的最常用方法。当然,VAS方法现多用于外科手术的患者,评价他们手术后切口的疼痛程度。如果你曾做过手术,相信你对此并不陌生。不过,它让疼痛者说出自己所认为的疼痛程度,并非完全的客观指标评价。此外,对于小朋友,为了让他们说出痛的程度,图画式的方法则更简单直接,一个笑脸意味着不是很痛,一个哭脸则代表着痛的厉害。 分娩、蛋疼,到底有多疼? 孕妇生产时到底有多疼呢?这依然是个因人而异的问题。一般说来,在孕妇生产过程中,最开始是轻度的宫缩不适,犹如经期子宫痉挛一般,在随后的第一产程直至生产完毕时,疼痛的强度逐渐增强。就整体而言,初产妇分娩时疼痛程度显著高于再产妇。也有不少孕妇反映,就她们所经历的疼痛烈度而言,胆结石等所引起的胆绞痛比分娩痛要厉害许多。当然,作为一名男性来纵谈女性的分娩痛,总有些凭空抓瞎的感觉。每个人对疼痛的敏感程度、承受能力、描述用语都是不尽相同的,这里也只能从医学上来谈来描述。 分娩痛总是来时缓慢,逐渐增强,直至痛到顶点,最后又缓慢的褪去。有人曾诗意的形容它就像是海浪向岸边涌来,最开始平缓不急不徐,浪头逐渐增强,越来越大,直至称为冲击海岸的冲天浪涛,随后潮水慢慢褪去……目前,随着国内各地不少医院逐渐开展的分娩镇痛项目[4] ,分娩痛这一让女性“闻风丧胆”痛不欲生的体验,逐渐得以缓解。 至于蛋疼,李清晨在《“蛋疼”的真相》里已经有了详细的描述。外伤只是引起蛋疼的原因之一,即使经过详细诊疗,还有25%的蛋疼完全找不到原因,甚至有人确实因为长期蛋疼下定决心切掉了自己的疼痛部位…… 不过,大部分男性所经历的蛋疼并没有到非上镇痛药不可的地步,更不必说“超越人类疼痛的极限”了。 总而言之,人们对疼痛的体验与感受是因人而异的,对疼痛的敏感程度不一样,因此对疼痛的测量依托于人们对疼痛的主观体验,并非绝对客观的测量方法。“人体最多只能承受45del的疼痛,但在分娩时的痛却高达57del,男性蛋疼可达9000del”的说法没有医学证据,是网络上的以讹传讹。 

刚开始是这只雌螳螂大口大口的吞吃雄螳螂的腿,它吃得津津有味,像是在吃一道美味的开胃菜。
这张照片赋予了亲吻新意义。雌螳螂经常从咬掉情郎的脑袋开始它的性爱大餐,往往雄性的头被咬掉时,它们的交配还未结束。这种“先从脑袋下手”的方法在螳螂捕猎时也会用到。但是在交配过程中,雌性会用它杀掉情郎。
如果每次与伴侣云雨都是冒着会丢掉性命的危险,这种情况简直令人难以想象。脑袋被咬掉后,雄性的动作会变得更激烈、更有力。这也许有助于提高生育能力,把精子输入到雌性体内更深处。这张照片显示的是雌螳螂正在吃伴侣的眼睛。
尽管风险重重,但是雄螳螂非常顺从,同类相食能够让交配时间延长一倍,增加受精机会。一些人认为,这是雄螳螂的繁殖策略,增加了成功孕育后代的机会。
雌螳螂举着被斩首和肢解的情郎,这个时候它该结束性爱后的进餐了。一些人可能认为性食同类是应对丈夫不忠的一种极端手段,自然,那些成功避免被雌性吃掉的雄螳螂会与更多异性交配。对雄螳螂来说,成为奸夫事实上可能会更安全。
对雄螳螂来说,分开可能是性爱行为中最危险的阶段,因为此时它被雌性咬掉头的可能性最大。
一项研究发现,雄螳螂显然会更小心地靠近一只饥肠辘辘的雌螳螂,与它的伴侣周旋更长时间,这也许是因为雄性更希望与更多雌性交配。
学家认为,健康强壮的雄螳螂会等到安全时刻再从饥饿的雌性身上爬下来。对更健康的雄性来说,与成为爱人的牺牲品相比,逃跑是更好的选择。这只不幸的雄性的生殖器被雌性吃掉。
值得注意的是,与野外相比,性食同类更长出现在实验室里。这种情况到底是一种自然现象,还是由人类观察和灯光及科学家移动(这会对实验室里的螳螂产生干扰)造成的,目前这个问题还存在巨大争议。
这只雌螳螂吃掉情郎的最后一部分,这不禁令我们想起众所周知的说法:雌性比雄性更致命。