




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLAB自带有绘制三维柱状图的函数bar3,有版友反映不好控制柱子的颜色,特别是bar3不能绘制渐变色的柱子,并且bar3不能根据用户指定的散点数据绘制柱状图。为此,我编写了一个函数(scatterbar),用来绘制带渐变色的三维彩色柱状图。下面给出示例。 【例】根据.MATLAB自带有绘制三维柱状图的函数bar3,有版友反映不好控制柱子的颜色,特别是bar3不能绘制渐变色的柱子,并且bar3不能根据用户指定的散点数据绘制柱状图。为此,我编写了一个函数(scatterbar),用来绘制带渐变色的三维彩色柱状图。下面给出示例。【例】根据散点数据绘制三维彩色柱状图代码1:x,y = meshgrid(-6:6,-3:0.5:3);z = mvnpdf(x(:),y(:),0,0,4,0;0,1);scatterbar(x,y,z)效果图1:代码2:x = 0:0.1:2*pi;y = sin(x);scatterbar(x,y,y,100);效果图2:代码3:t = 0:0.1:2*pi;x = cos(t);y = sin(t);z = abs(y);scatterbar(x,y,z,100);效果图3:scatterbar函数源代码:function scatterbar(x,y,z,scale)% 根据散点数据绘制3维彩色柱状图% scatterbar(x,y,z,scale) x,y,z是实值数组,用来指定柱子顶面中心点三维坐标。% scale是大于0的标量,用来指定柱子的粗细,scale越大,柱子越细,默% 认情况下根据坐标点自动计算柱子的粗细。% CopyRight:xiezhh(谢中华)% 2011.10.31% Example:% x,y = meshgrid(-6:6,-3:0.5:3);% z = mvnpdf(x(:),y(:),0,0,4,0;0,1);% scatterbar(x,y,z)% scatterbar(x,y,z,50);% 输入参数类型判断if nargin 0);dy = abs(diff(y);dy = min(dy(dy0);% 自动计算柱子的粗细if nargin = 3 if isempty(dx) hx = dx/2; else hx = 0.5; end if isempty(dy) hy = dy/2; else hy = 0.5; endend% 根据用户输入参数scale计算柱子的粗细if nargin = 4 if isreal(scale) | scale 0 error(第四个输入应为正的标量); end if rx = 0 & ry = 0 rx = 0.5*scale; ry = rx; elseif rx = 0 | ry = 0 rx = max(rx,ry); ry = rx; end hx = rx/scale; hy = ry/scale;end% 通过循环绘制三维彩色柱状图figurehold onXp = ;Yp = ;Zp = ;for i = 1:n xp,yp,zp = Vertices(x(i),y(i),z(i); Xp = Xp;xp; Yp = Yp;yp; Zp = Zp;zp;end%通过surf函数生成彩色的立方体盒子h = surf(Xp,Yp,Zp,Zp,FaceColor,interp);%set(h,FaceAlpha,0.25); %设置立方体盒子透明度grid onview(3)hold off%-% 求柱子顶点的子函数%-function xp,yp,zp = Vertices(x,y,z) % 由长方体底面中心坐标求顶点坐标 xp = x-hx x-hx x+hx x+hx x-hx x-hx x-hx x+hx x+hx x-hx x-hx x-hx x+hx x+hx x-hx x-hx x-hx x+hx x+hx x-hx x x x x x NaN NaN NaN NaN NaN; yp = y-hy y+hy y+hy y-hy y-hy y-hy y+hy y+hy y-hy y-hy y-hy y+hy y+hy y-hy y-hy y-hy y+hy y+hy y-hy y-hy y y y y y NaN NaN NaN NaN NaN; zp = repmat(linspace(0,z,4),1,5);z z z z z;NaN NaN NaN NaN NaN;endend在pattern recognition 与 machine learning 的相关研究中,经常会将 dataset 分为 training 跟 test 这两个 subsets,前者用以建立 model,后者则用来评估该 model 对未知样本进行预测时的精确度,正规的说法是 generalizationability。在往下叙述之前,这边就必须点出一个极为重要的观念:只有 training data 才可以用在 model 的训练过程中,test data 则必须在 model 完成之后才被用来评估 model 优劣的依据。 怎么将完整的 dataset 分为 training set 与 test set 也是学问,必须遵守两个要点:1.training set 中样本数量必须够多,一般至少大于总样本数的 50%。2. 两组子集必须从完整集合中均匀取样。其中第 2 点特别重要,均匀取样的目的是希望减少 training/test set 与完整集合之间的偏差(bias),但却也不易做到。一般的作法是随机取样,当样本数量足够时,便可达到均匀取样的效果。然而随机也正是此作法的盲点,也是经常是可以在数据上做手脚的地方。举例来说,当辨识率不理想时,便重新取样一组training set 与 test set,直到 test set 的辨识率满意为止,但严格来说这样便算是作弊了。Cross-validation 正是为了有效的估测 generalization error 所设计的实验方法,可以细分为double cross-validation、k-fold cross-validation 与leave-one-out cross-validation。Double cross-validation 也称 2-fold cross-validation(2-CV),作法是将 dataset 分成两个相等大小的 subsets,进行两回合的分类器训练。在第一回合中,一个 subset 作为 training set,另一个便作为 test set;在第二回合中,则将 training set 与 test set 对换后,再次训练分类器,而其中我们比较关心的是两次 test sets 的辨识率。不过在实务上 2-CV 并不常用,主要原因是 training set 样本数太少,通常不足以代表母体样本的分布,导致 test 阶段辨识率容易出现明显落差。此外,2-CV 中分 subset的变异度大,往往无法达到实验过程必须可以被复制的要求。K-fold cross-validation (k-CV)则是 double cross-validation 的延伸,作法是将 dataset 切成 k 个大小相等的 subsets,每个 subset 皆分别作为一次 test set,其余样本则作为 training set,因此一次 k-CV 的实验共需要建立 k 个models,并计算 k 次 test sets 的平均辨识率。在实作上,k 要够大才能使各回合中的 training set 样本数够多,一般而言 k=10 算是相当足够了。最后是 leave-one-out cross-validation (LOOCV),假设 dataset 中有 n 个样本,那 LOOCV 也就是 n-CV,意思是每个样本单独作为一次 test set,剩余 n-1个样本则做为 training set,故一次 LOOCV 共要建立 n 个 models。相较于前面介绍的 k-CV,LOOCV 有两个明显的优点:每一回合中几乎所有的样本皆用于训练 model,因此最接近母体样本的分布,估测所得的 generalization error 比较可靠;实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。但 LOOCV 的缺点则是计算成本高,因为需要建立的 models 数量与总样本数量相同,当总样本数量相当多时,LOOCV 在实作上便有困难,除非每次训练 model 的速度很快,或是可以用平行化计算减少计算所需的时间。在MATLAB中,用户可以使用cvpartition、repartition等命令对数据集进行拆分,完成交叉验证。MATLAB绘图下方显示标题 by 蜀山掌门V 查查MATLAB中title的doc: Syntax title(string)title(fn.2013年09月02日 16:34:18 MATLAB绘图下方显示标题查查MATLAB中title的doc:Syntax title(string)title(fname)title(.,PropertyName,PropertyValue,.)title(axes_handle,.)h = title(.)DescriptionEach axes graphics object can have one title.The title is located at the top and in the center of the axes.从关于title的帮助文档中可知,MATLAB中绘图只能将标题显示在正上方居中。如果说我就要将标题显示在正下方怎么办呢?或者你会想自己用text命令来写标题吧。这不失为一种方法。但修改起来不够方便。绘制很多图时也不够方便。这里,我编写了一个文件,通过调整坐标轴axes的位置、title的位置实现了标题在下方的效果。使用方法:先按一般方法绘图,加标题。最后运行我编写的这个程序。btitle程序源代码:function btitle(haxes)%by baby_wolf%date 2011-11-11%see also if nargin=0haxes=gca; %默认获取当前坐标轴的句柄end%set(gca,position,0.13 0.11 0.1 0.815) %默认值%调整axes的位置set(haxes,position,0.13 0.15 0.775 0.815);%调整 标题title的位置htitle=get(gca,title);AXIS=axis;pos=AXIS(1) AXIS(3)+AXIS(2)-AXIS(1) AXIS(4)-AXIS(3).*0.5 -0.1;set(htitle,position,pos)%Position = 0.498975 1.01597 1.00005set(htitle,VerticalAlignment,top);叫MATLAB说出你想说的话! 替换代码中的红色字符串,大家试试,完全可以说中文的哦! sp=actxserver(SAPI.SpVoice);sp.Speak(Hello, World!Hello MATLABer!); 更多技巧资料请关注微信公共账号:数据挖掘的那些.MATLAB小技巧之九:叫MATLAB说出你想说的! 替换代码中的红色字符串,大家试试,完全可以说中文的哦!sp=actxserver(SAPI.SpVoice);sp.Speak(Hello, World!Hello MATLABer!);学习MATLAB可以很快乐!2013年08月28日 14:00:34 主页君一直想灌输给大家一个理念,学习软件,如果只是为了学习而学,永远达不到精通。有时间多动动脑,多思考下,MATLAB可以干更多事!(大爷们,喜欢就分享下哦!)*如何利用一条微博远程控制MATLAB执行指令呢?首先你需要有:(1)新浪微博账号 (2)MATLAB (3)联网按如下步骤进行操作:(1) 用网页登入微博后,在/tool/weiboshow 页面下,复制【微博秀】链接,替换代码(见后面)中src=*;(2)运行程序,输入指定指令,也就是等会要发的微博内容。(3)好了,这时候你可以离开,去遥远的地方发条微博,内容就是你第二步输入的内容。MATLAB收到指令后就会执行特定的命令(命令在程序中设置,后面程序中给的是一个待机命令)。利用微博秀进行控制的缺点是 有5分钟左右的延迟。此外,当然也可以结合timer计时器让程序变得更实用。(程序中有待机程序,已经备注,请自行更改!)整个程序如下(需要先设置你的指令和你特有的src):*%发一条微博,远程关机|待机。 %HTTP:/WWW.MATLABSKY.COM % baby_wolf 蜀山掌门V cmd=input(设置指令(也就是等会儿要发的微博内容,必须独一无二):,s);counter=0;r=;%登入微博后,在 /tool/weiboshow 页面最下方找到src链接src=/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2022255405&verifier=f0469716&dpc=1;while 1trys=urlread(src);r=regexp(s,cmd,match);catchdisp(网络连接问题);endif isempty(r)disp(呵呵!收到待机指令);%待机%!rundll32.exe powrprof.dll SetSuspendState %关机!shutdown -s -t 0 % web();break;elseclccounter=counter+1;disp(没有收到关闭指令+ num2str(counter);endpause(5);end2013年09月03日 18:53:25MATLAB高效编程技巧1 向量化编程 vs. 循环加速 从我们使用MATLAB的第一天开始,就有人告诉我们,MATLAB的优势是矩阵运算,所以能不写循环就不要写循环,否则速度会很慢。 但是,从6.5版本开始(貌似我们大一就是用的6.5,六七年前的事情了),MATLAB就引入了针对循环加速的JIT(Just In Time)技术和accelerator,默认情况下,这2个加速器都是打开的,可以通过如下命令关闭或者打开:feature jit onfeature jit offfeature accel onfeature accel off可以观察到打开或者关闭它们前后的性能差异是很大的。 从r2009a之后,循环本身已经不再是瓶颈了,瓶颈更多来源于循环体内部的代码执行方式。所以没必要千方百计地把循环改成向量化编程,有时这种改动不仅不能带来性能的提升,还会使得代码的运行时间变长。 举个简单的例子,sliding window在很多地方都会用到,比如MAC层中的访问控制、物理层中的同步。从算法上讲,sliding window是可以由上次迭代的值和本次的值进行简化运算的。当sliding window的长度很小的时候,我试过长度为256时向量化编程可以使运行速度更快,但毫无疑问,当长度增长到某一个值之后,采用循环的迭代肯定会更快。至于这个临界值是多少,有兴趣的可以自己去试试2 调用系统函数 vs. 自己手动写 我曾经试过,自己写了个16QAM的硬判决函数,结果运行时间是系统自带函数的3倍。 但是,也有另外一种观点,说MATLAB的系统函数由于要实现很强的通用性,函数内部都会有很多的if-else类似的条件分支,会拖慢速度,这个就需要具体问题具体分析了。按我的理解,如果函数复杂,则就算系统函数的if-else很多,尽量还是调用,如果函数简单,比如有些函数真正的算法只有一行,那完全可以自己写,避免了if-else带来的时间损耗。当然,如果要做到极致,可以把系统函数拷到自己的工程下面,按照自己调用的需求把函数内部多余的分支去掉,但我想一般人也不会这么去做,麻烦。3 预分配内存 这种技巧在C/C+中是不存在的,因为C/C+的语法就要求使用数组要预先定义,但偏偏MATLAB不一样,我们可以不定义变量就使用,这种规则在方便我们编程的同时也带来一些容易被我们忽视的问题,其中,预分配内存是受到严重影响的一个方面。该问题一般发生在包含循环的代码中,比如:for k = 1 : 100 a(k) = k;end 编写人员的本意是生成一个递增的数列,长度100。如果没有在for循环前面加上一行a = zeros(100, 1)的话,代码检测器会报waring,说数组a在每次循环的时候会改变大小,会拖慢速度。究其原因,是因为如果不预分配的话,MATLAB在每次循环执行的时候都会改变数组a的大小,则每次都会去内存查找适合此大小的内存区间,然后重新分配内存。该过程不仅会造成MATLAB代码的执行速度变慢,而且很容易造成内存碎片化。 了解了预分配内存的好处,那我们应该怎么初始化内存呢?前面已经提到一种方法:a = zeros(100, 1); 还可以在zeros后续指定数据类型(一般情况下我们用的double),指定数据类型的好处不仅仅是提前知道整个数组需要的内存空间,而且在MATLAB中还有个特殊的优势:如果指定数据类型,则在初始化的时候MATLAB只会分配这么一块内存出来,并不会全部写入0,这样就节约了时间;而不指定的话,在分配空间之后还会把所有的内存空间初始化为0。所以,如果我们保证该数组的每个元素在循环体内部能够被一一赋值,为了加快速度,指明数据类型是必要的。4 少用cell cell的数组不需要连续的内存空间进行存储,所以需要记录每个cell单元的地址等信息,即使是空的cell单元,也会占用4个字节的存储空间。而且cell的访问是很慢的。5 列优先准则 MATLAB和C/C+是不同的,C/C+中的二维数组存储到内存中,是按行优先准则存储的,而MATLAB中是列优先准则。这种差异导致我们在进行MATLAB编程的时候要特别注意,向量化编程的时候尽量取一个二维数组的列,而不是行。 同理,在循环中也尽量如此。6 循环注意事项 不管是在MATLAB还是C/C+中,都有一个准则叫:变勤拿少取为少拿多取。具体含义就是减小循环的次数,尽量在每次循环中做比较多的数据处理,不管是数据读取还是写入。因此,在编写带有嵌套循环的代码时,循环次数多的尽量在内层,少的尽量在外层。7 数值索引 vs. 逻辑索引 来看看下面2种方式的索引:a(a0.5) = 0; % 逻辑索引a(find(a0.5) = 0; % 数值索引毫无疑问,前者的代码执行速度更快。 关于这一点,我问过一些高手为什么会有这种情况,但他们也没能给出个令人信服的解释。目前比较说得过去的解释是:在用数值索引时调用了find函数,当然会有额外时间的增加。仔细想想,貌似也说得过去。8 和语法无关的一些优化 本人一直做通信物理层的仿真,跑误码率是家常便饭,偏偏这种基于蒙特卡洛仿真模型的仿真量越大越精确,于是乎一次仿真可能跑很久。可以设一个阈值,当在某一个SNR下的某一帧数据的BER大于阈值的时候,就break,停止当前SNR的仿真,继续下一SNR的仿真,因为在如此高的BER的情况下增加仿真量毫无意义,阈值我一般设为0.05(注意:这个阈值适合在有信道编码的情况下,如果没有信道编码,推荐调大,因为很多没有信道编码的性能很不容易达到0.05的误码率)。 另一方面,当在某个SNR下BER已经变成0了的话,后续的SNR就没必要仿真了,因为BER总是随着SNR下降的(当然,前提是你能够保证你的系统设计和代码输入正确,我曾经遇到过一种情况,不管仿真量设置得多大,BER始终随SNR有波动,后来发现是代码出问题了,试想如果我们一开始就设置BER变成0之后后续的SNR就不仿真了的话,那么这个问题是发现不了的)。关于如何求矩阵最大(小)值并返回其行列号的小汇总总结下,集中常用的方法:第一种:clear;clc;A=0 17 50;-12 40 3;5 -10 2;30 4 3C,I=max(A(:)m,n=ind2sub(size(A),I)第二种:clear;clc;A=0 17 50;-12 40 3;5 -10 2;30 4 3M,I=max(A)N,J=max(M)I(J),J第三种:clear;clc;A=0 17 50;-12 40 3;5 -10 2;30 4 3N=max(max(A) %或者N=max(A(:)r,c=find(N=A)第四种:clear;clc;A=0 17 50;-12 40 3;5 -10 2;30 4 3Y_col,Ind_row=max(A) %每列的最大值及行号Y_row,Ind_col=max(A) %每行的最大值及列号=Q&A形式的一些零散的解答=Q&A 1Q: matlab找某列最小值的位置 dis是个m*n的数组 我想找出每列最小值得位置,但是find函数好像用的不对,我写的如下: find(dis=min(dis) 哪里不对啊,help里也没讲太全,实在不知怎么改。A:用C,I = min(.) 例子: = A=magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 c,i = min(A) c = 4 5 1 2 3 i = 3 2 1 5 4Q&A 2Q: 如何获得矩阵每行中最大值的位置现有一m*n的矩阵D(假设矩阵中每个元素都不一样),要求逐行找出最大值,然后记录该最大值的坐标,最后要求生成一个m*2的位置坐标矩阵。A:这样就可以了 = index = zeros(m,2); for i=1:m C,I=max(D(i,:); index(i,:) = i,I; end = 测试 D = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 m = 5 运行程序得到 index = 1 2 2 1 3 5 4 4 5 3Q&A 3Q:我在图像处理编程时遇到这样一个问题,就是想在一幅灰度图象中,要实现查找八邻域的极值点。 比如,给出一下一个八邻域的例子 1 3 2 4 9 6 5 7 8 那么中间的9就是要找的极值点。 并且可以返回象素点的位置及象素点的值。 例如在这个例子就是 2 29 当然,也可以当成三元组返回 请问matlab有这个功能吗?A: A = 1 3 2;4 9 6;5 7 8; c,hang = max(A); max_A,lie = max(c); 最终 max_A = 9 hang = 2; lie= 2;2013年09月13日 18:47:14 数模竞赛,N多人开始在群里问本攻如何在MALAB里批量导入文件,现做统一回答,我是有多及时雨!你们不点赞不分享我就撂挑子了!哼!*版权所有,转发请注明出处。在任何数据分析建模前,我们都需要将数据加载到MATLAB变量空间里来,如果是单一数据文件,一般我们使用load函数。 如: load fisheriris当然,如果是excel文件,你可以使用xlsread函数 filename = myExample.xlsx;A = xlsread(filename)当然可以选择MATLAB最近推崇的dataset数据集啦! patients = dataset(File,hospital.dat,. Delimiter,ReadObsNames,true)友情提示:还有最最新的MATLAB R2013b出现的Table数据类型,当然Table不能直接读数据而已。 但是,一旦需要加载到MATLAB的数据是N个(N10),一次一次的load会叫人抓狂,MATLAB到底如何处理这样的问题呢。 首先,我们遇到这样的问题,往往可以归结为: 1.文件名定义规律 如果遇到很规律的文件命名,好吧,我们可以批量导入了。 比如遇到a1.mat/a2.mat/a3.mat。an.mat 这样。 可以先生成文件名cell集合。 N=20NameFile = strcat(a,num2str(1:N),%-d)结果如下: 下面就是分别读取了,可以使用eval函数,在做个循环。(此时聪明的你应该会把load函数换成以上提及过的函数吧!) N=20NameFile = strcat(a,num2str(1:N),%-d)for i=1:N eval(load NameFilei .mat )end怎么样,MATLAB一个循环就导入了所有的mat文件,幸福死了么?! 2.文件名定义不规律 这种情况往往是常见的,这里我们需要提取出当前文件夹的数据文件名。(我们假设只有一种数据,比如都是mat,xls,dat什么的,如果要导入不止一种数据文件,自己修改下就好!) list=dir % 读取当前文件夹下文件 %查看下文件名 N=length(list) %统计文件个数 % 循环导入 注意从3开始是因为dir前2个name是“.” “.”。name中有文件后缀的,所以这里也不用加! for i=3:N eval(load list(i,1).name )end再次高潮了么?! 注意: 1.理论上来说,方法2涵盖了方法1,方法1仅是规律命名下的解决方案; 2.对于大数据来说,运行前先进行内存整理很有必要,对已加载的变量可以使用pack函数; 3.数模那个题目读取文件用imread.哥只能帮你这么多了,说多了可就违规了。 2013年09月14日 20:15:14 1. Ctrl+C 中断正在执行的操作如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断。MATLAB这时可能正疲于应付,响应会有些滞后。2. figure命令新建一个绘图窗口figure 可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口。当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象。所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到)。figure(N),将编号为N的窗口置为当前figure,出现在所有窗口的最前面,如果该窗口不存在,则新建一个编号为N的空白figure。3. 注释掉一段程序:%、%。经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 %和 的组合。输入%后,后面的代码都会变绿,在注释结束的地方再加上 % 。也可以选中要注释内容,在右键菜单中选择Comment (Uncomment去掉注释标记),或使用快捷键Ctrl+R。将光标放在需要注释的行中,按Ctrl+R,将该行变为注释。取消注释也是一样的,快捷键为Ctrl+T。4. doc 命令名,打开命令的帮助文档与help命令不同,帮助文档MATLAB Help中对命令的描述更详细,往往还有一些例子,更便于理解。5. clc 清屏清除命令窗口中的所有输入和输出信息,不影响命令的历史记录。6. clear 和clear allclear 变量名:可以清除workspace中的无用的变量,尤其是一些特别大的矩阵,不用时及时清理,可以减少内存占用。clear all 清除所有的变量,使workspace一无所有,当重新开始一次算法验证时,最好执行一次,让workspace中的变量一目了然。7. close all如果开了多个绘图窗口,用这个命令将它们一起关掉。8. 上下光标键在命令窗口中,上下光标键可以将历史记录中的命令复制到输入位置,便于快速重新执行。如果输入命令的前几个字母如 row, col =,再使用光标键,则只会选择以这些字母开始的命令。9. Tab补全对名称记得不太清楚的命令,可以输入开头的几个字母,然后按Tab键,当只有一个以这些字母开头的命令时,将自动补全命令名,否则显示一个命令名列表,方便从中选择。当然,只在命令窗口中有效。10. cell模式在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了。cell模式相当于将其中的代码拷贝到命令窗口中运行。两个%后接一个空格(% )开始一个cell。将输入光标放到一个cell中时,背景将变为浅黄色,Ctrl+Enter执行cell中的代码。执行cell中代码时不需要保存m文件,该m文件可以不在路径列表中。cell模式中,断点不起作用,当然,调用的子程序中的断点还是正常的。11. 获取文件列表,批处理MATLAB内置了一些文件操作命令,例如cd(切换工作目录),dir(同ls,显示目录内文件列表)等。dir命令可以返回目录中的文件和文件夹列表,存在一个结构体数组中。如果需要对一些数据文件进行批处理,而文件名又没有一定的规律,你可能需要借助于这个命令。12. Ctrl+D打开子程序在MATLAB的Editor中,将输入光标放到一个子程序名称中间,然后按Ctrl+D可以打开该子函数的m文件。当然这个子程序要在路径列表中(或在当前工作路径中)。实际上该快捷键对应右键菜单中“Open Selection”命令。13. 列出依赖函数在Editor菜单中,选择Tools-Show Dependency Report,可以列出当前m文件调用的子程序。如果需要将程序移动到别的电脑上,使用这个工具可以确保不会漏掉一些东西。这个工具也适用于文件夹。14. 显示鼠标数据内容调试程序过程中,程序运行到断点后,将鼠标移到一个变量名上,将会弹出一个方框,显示该变量的内容。不在调试状态下,怎么使用这个功能呢?在File菜单中打开设置选项(Preferences),选择 Editor/Debugger - Display,在 General Display Options 中选择 Enable datatips in Edit Mode 。15. 单元数组的基本操作清除cell中的元素cellname(n1:n2) = ;合并如下的两个cell数组a = str1, str2, str3;b = 1:3;c = a(1:2), b, a(3); 得到:c = str1 str2 1x3 double str3而 c = a(1:2), b, a(3) 则得到 c = 1x2 cell 1x3 double 1x1 cellcell array本质上是数组,前一种操作方式与普通数组的操作方式相同,而后一种方式则是将逗号分隔的各个元素分别一个cell,整体作为一个cell数组。cell的两种引用方式a(1) 得到 str1, 因为a是一个cell数组,所以其中的每一个元素都是一个cell,而a1 得到 str1。16. MATLAB 中的字体平滑在File菜单中打开设置选项(Preferences),在 Fonts 中,选择底部的 “Using antialiasing to smooth desktop fonts” ,MATLAB 中默认字号比较小,可以调大一些(可以在下拉菜单中输入数字,更精细地控制文字大小)。有衬线字体打开反锯齿后可能会看起来“发虚”。17. 同步缩放坐标轴linkaxeslinkaxes命令,可以将一个figure中的各个axes指定相同的坐标范围,实现各个绘图同步放大、缩小。在缩放一个绘图时,其它也会同步缩放。可以同时关联x、y轴,也可以只关联一个坐标轴。18. 鼠标绘图MATLAB Help中的Interactive Plotting一文提供了一种在figure中用鼠标绘图的方法,主要使用ginput函数。19. GUI程序关闭按钮的callback为GUI窗口右上角的关闭按钮添加回调函数:在GUIDE中打开GUI,在没有控件的地方单击,选中整个figure,右键菜单中选择 View Callbacks - CloseRequestFcn,m文件中将自动添加该回调函数,输入代码就可以了。1) 【上、下键】切换到之前、之后的命令,可以重复按多次来达到你想要的命令2) clc清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上显示出来的语句清除掉3) clear这个才是清空当前工作区的变量命令,常用语句clear all来完成4) 【Tab】键在command窗口,输入一个命令的前几个字符,然后按tab键,会弹出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。5) 【Ctrl+C】(或【CtrlBreak】)在matlab程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个Matlab程序关掉。不过进行此操作的前提是能够激活切换到命令窗口才行,呵呵。6) 【Tab】(或【Ctrl+】)增加缩进(对多行有效)7) 【Ctrl+】减少缩进(对多行有效)8) 【Ctrl+I】自动缩进(即自动排版,对多行有效)9) 【Ctrl+R】注释(对多行有效)10) 【Ctrl+T】去掉注释(对多行有效)11) 【F12】设置或取消断点12) 【F5】运行程序13) 【F9】运行选中代码2013年09月20日 23:17:50 几个要说明的函数接口:Y,PS = mapminmax(X)Y,PS = mapminmax(X,FP)Y = mapminmax(apply,X,PS)X = mapminmax(reverse,Y,PS)用实例来讲解,测试数据x1 = 1 2 4, x2 = 5 2 3; y,ps = mapminmax(x1)y = -1.0000 -0.3333 1.0000ps = name: mapminmax xrows: 1 xmax: 4 xmin: 1 xrange: 3 yrows: 1 ymax: 1 ymin: -1 yrange: 2其中y是对进行某种规范化后得到的数据,这种规范化的映射记录在结构体ps中.让我们来看一下这个规范化的映射到底是怎样的?AlgorithmIt is assumed that X has only finite real values, and that the elements of each row are not all equal. * y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;* 关于此算法的一个问题.算法的假设是每一行的元素都不想相同,那如果都相同怎么办?实现的办法是,如果有一行的元素都相同比如xt = 1 1 1,此时xmax = xmin = 1,把此时的变换变为y = ymin,matlab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年玉溪市江川区人民医院等招聘真题
- 中级财务会计学(下)(山东联盟)225知到智慧树答案
- 中外歌剧鉴赏知到智慧树答案
- 中外音乐鉴赏知到智慧树答案
- 医学心理伦理学考试模拟题(附答案)
- 老年护理模拟习题(附答案)
- 2025东莞企业高级管理人员劳动合同范本
- 2025独家旅游度假广告代理合同范本助力市场拓展
- 突发事件报道规范-洞察及研究
- 2025年房建泥工班组劳务分包及建筑节能材料研发合作合同
- 2025年湖南湘西自治州州直事业单位招聘考试笔试试卷附答案
- 幼儿园安全责任书及后勤管理制度
- 消防车辆事故课件
- 《2型糖尿病中医防治指南(2024版)》解读课件
- 剑阁县普安镇污水处理厂扩容建设项目环评报告
- 商务楼宇管理办法
- 肺炎护理试题填空及答案
- 中国兽药典三部 2020年版
- DB32T 4252-2021 民用建筑燃气安全规范
- ISO45001职业健康安全管理体系手册和程序文件
- 《区域大地构造学》全套教学课件
评论
0/150
提交评论