matla操作技巧总结.docx
- 文档编号:4202026
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:15
- 大小:137.05KB
matla操作技巧总结.docx
《matla操作技巧总结.docx》由会员分享,可在线阅读,更多相关《matla操作技巧总结.docx(15页珍藏版)》请在冰点文库上搜索。
matla操作技巧总结
大家好,以下是操作Matlab中获得的一下操作技巧,和大家一起分享,部分内容是从网络上整理到的内容,如有侵权,请告之删除。
(一)matlab中快捷键命令组合的使用技巧如下
matlab中快捷键命令组合的使用技巧如下:
1.Ctrl+C中断正在执行的操作
如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断。
MATLAB这时可能正疲于应付,响应会有些滞后。
2.figure命令新建一个绘图窗口
figure可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口。
当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象。
所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到)。
figure(N),将编号为N的窗口置为当前figure,出现在所有窗口的最前面,如果该窗口不存在,则新建一个编号为N的空白figure。
3.注释掉一段程序:
%{、%}。
经典方法是用if0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。
现在可以用%和{的组合。
输入%{后,后面的代码都会变绿,在注释结束的地方再加上%}。
也可以选中要注释内容,在右键菜单中选择Comment(Uncomment去掉注释标记),或使用快捷键Ctrl+R。
将光标放在需要注释的行中,按Ctrl+R,将该行变为注释。
取消注释也是一样的,快捷键为Ctrl+T。
4.doc命令名,打开命令的帮助文档
与help命令不同,帮助文档MATLABHelp中对命令的描述更详细,往往还有一些例子,更便于理解。
5.clc清屏
清除命令窗口中的所有输入和输出信息,不影响命令的历史记录。
6.clear和clearall
clear变量名:
可以清除workspace中的无用的变量,尤其是一些特别大的矩阵,不用时及时清理,可以减少内存占用。
clearall清除所有的变量,使workspace一无所有,当重新开始一次算法验证时,最好执行一次,让workspace中的变量一目了然。
7.closeall
如果开了多个绘图窗口,用这个命令将它们一起关掉。
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.对输出图像的修改
如果需要对输出图像进行标注、坐标、颜色、线条等修改,可以在输出图像界面上,点击edit下currentobjectproperties,然后可以图像各属性进行修改。
13.Ctrl+D打开子程序
在MATLAB的Editor中,将输入光标放到一个子程序名称中间,然后按Ctrl+D可以打开该子函数的m文件。
当然这个子程序要在路径列表中(或在当前工作路径中)。
实际上该快捷键对应右键菜单中“OpenSelection”命令。
14.列出依赖函数
在Editor菜单中,选择Tools->ShowDependencyReport,可以列出当前m文件调用的子程序。
如果需要将程序移动到别的电脑上,使用这个工具可以确保不会漏掉一些东西。
这个工具也适用于文件夹。
15.显示鼠标数据内容
调试程序过程中,程序运行到断点后,将鼠标移到一个变量名上,将会弹出一个方框,显示该变量的内容。
不在调试状态下,怎么使用这个功能呢?
在File菜单中打开设置选项(Preferences),选择Editor/Debugger->Display,在"GeneralDisplayOptions"中选择"EnabledatatipsinEditMode"。
16.单元数组的基本操作
清除cell中的元素
cellname(n1:
n2)=[];
合并如下的两个cell数组
a={'str1','str2','str3'};
b=[1:
3];
∙c=[a(1:
2),b,a(3)];
得到:
c={'str1''str2'[1x3double]'str3'}
∙而c={a(1:
2),b,a(3)}
则得到c={1x2cell}[1x3double]{1x1cell}
cellarray本质上是数组,前一种操作方式与普通数组的操作方式相同,而后一种方式则是将逗号分隔的各个元素分别一个cell,整体作为一个cell数组。
cell的两种引用方式
a
(1)得到{'str1'},因为a是一个cell数组,所以其中的每一个元素都是一个cell,
而a{1}得到'str1'。
17.MATLAB中的字体平滑
在File菜单中打开设置选项(Preferences),在Fonts中,选择底部的“Usingantialiasingtosmoothdesktopfonts”,MATLAB中默认字号比较小,可以调大一些(可以在下拉菜单中输入数字,更精细地控制文字大小)。
有衬线字体打开反锯齿后可能会看起来“发虚”。
18.同步缩放坐标轴linkaxes
linkaxes命令,可以将一个figure中的各个axes指定相同的坐标范围,实现各个绘图同步放大、缩小。
在缩放一个绘图时,其它也会同步缩放。
可以同时关联x、y轴,也可以只关联一个坐标轴。
19.鼠标绘图
MATLABHelp中的InteractivePlotting一文提供了一种在figure中用鼠标绘图的方法,主要使用ginput函数。
20.GUI程序关闭按钮的callback
为GUI窗口右上角的关闭按钮添加回调函数:
在GUIDE中打开GUI,在没有控件的地方单击,选中整个figure,右键菜单中选择ViewCallbacks->CloseRequestFcn,m文件中将自动添加该回调函数,输入代码就可以了。
(二)用MATLAB求定积分
一、符号积分
符号积分由函数int来实现。
该函数的一般调用格式为:
int(s):
没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分;
int(s,v):
以v为自变量,对被积函数或符号表达式s求不定积分;
int(s,v,a,b):
求定积分运算。
a,b分别表示定积分的下限和上限。
该函数求被积函数在区间[a,b]上的定积分。
a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。
当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。
当a,b中有一个是inf时,函数返回一个广义积分。
当a,b中有一个符号表达式时,函数返回一个符号函数。
例:
求函数x^2+y^2+z^2的三重积分。
内积分上下限都是函数,对z积分下限是sqrt(x*y),积分上限是x^2*y;对y积分下限是sqrt(x),积分上限是x^2;对x的积分下限1,上限是2,求解如下:
>>symsxyz %定义符号变量
>>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) %注意定积分的书写格式
F2=
1610027357/6563700-6072064/348075*2^(1/2)+14912/4641*2^(1/4)+64/225*2^(3/4) %给出有理数解
>>VF2=vpa(F2) %给出默认精度的数值解
VF2=
224.92153573331143159790710032805
二、数值积分
1.数值积分基本原理
求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson)法、牛顿-柯特斯(Newton-Cotes)法等都是经常采用的方法。
它们的基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。
这样求定积分问题就分解为求和问题。
2.数值积分的实现方法
基于变步长辛普生法,MATLAB给出了quad函数来求定积分。
该函数的调用格式为:
[I,n]=quad('fname',a,b,tol,trace)
基于变步长、牛顿-柯特斯(Newton-Cotes)法,MATLAB给出了quadl函数来求定积分。
该函数的调用格式为:
[I,n]=quadl('fname',a,b,tol,trace)
其中fname是被积函数名。
a和b分别是定积分的下限和上限。
tol用来控制积分精度,缺省时取tol=0.001。
trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。
返回参数I即定积分值,n为被积函数的调用次数。
例:
求函数'exp(-x*x)的定积分,积分下限为0,积分上限为1。
>>fun=inline('exp(-x.*x)','x'); %用内联函数定义被积函数fname
>>Isim=quad(fun,0,1) %辛普生法
Isim=
0.746824180726425
IL=quadl(fun,0,1) %牛顿-柯特斯法
IL=
0.746824133988447
三、梯形法求向量积分
trapz(x,y)—梯形法沿列方向求函数Y关于自变量X的积分(向量形式,数值方法)。
>>d=0.001;
>>x=0:
d:
1;
>>S=d*trapz(exp(-x.^2))
S=
0.7468
或:
>>formatlongg
>>x=0:
0.001:
1; %x向量,也可以是不等间距
>>y=exp(-x.^2); %y向量,也可以不是由已知函数生成的向量
>>S=trapz(x,y); %求向量积分
S=
0.746824071499185
(二)matlab中对矩阵排序的问题
sort(A)若A是向量不管是列还是行向量,默认都是对A进行升序排列。
sort(A)是默认的升序,而sort(A,'descend')是降序排序。
sort(A)若A是矩阵,默认对A的各列进行升序排列
sort(A,dim)
dim=1时等效sort(A)
dim=2时表示对A中的各行元素升序排列
看下面的例子
>>A=magic(3)
A=
816
357
492
>>sort(A)
ans=
312
456
897
>>sort(A,1)
ans=
312
456
897
>>sort(A,2)
ans=
168
357
249
===================
Matlab中给一维向量排序是使用sort函数:
sort(A),排序是按升序进行的,其中A为待排序的向量;若欲保留排列前的索引,则可用[sA,index]=sort(A),排序后,sA是排序好的向量,index是向量sA中对A的索引。
索引使排列逆运算成为可能。
事实上,这里A≡sA(index),[A恒等于sA(index)],这个结论确实很奇妙,而且很有用。
不信你排序之后试下键入命令sA(index),看看得到的是不是就是排列前的A呢。
=====================
在Matlab中排序某个向量(一维)时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可,如果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A中项的索引。
排序是安升序进行的。
在Matlab中,访问矩阵中的元素,一维用A
(1)访问向量A的第一个元素;(下标从1开始);二维用A(1,2)访问A中第一行,第二列的元素。
降序排列不需要这么麻烦,只需要这样就可以了
sort(A,'descend')
由于在sort函数的结果中,是安升序排序的,要转换成降序,先用X=eye(n)生成一个n维的单位阵,然后用X=rot90(X)将其旋转为次对角线的单位阵,再用原来矩阵乘以X即可,如要讲A逆序排列采用如下步骤:
X=eye(size(A));
X=rot90(X);
A=A*X;
假如a是一个2*n的矩阵,即两行.
b=a(1,:
);
[c,pos]=sort(b);%pos为排序后的下标,c为第一行的排序结果;
a(2,:
)=a(2,pos);%第二行按照第一行排序的下标对应
a(1,:
)=c;%第一行结果重新赋给a的第一行
以下适用于m*n的矩阵按第一行排序Y有此之后,上面对2*n的叙述有画蛇足之感
[b,pos]=sort(a(1,:
));
a=a(:
pos);
=======================
matlab按某一列排序,其他列不变办法
b=sortrows(a,2) %a为要排序的矩阵。
2表示按第几列进行排序,整数代表升序,负数代表降序。
%将矩阵a按照第2列的升序排列,其他列不会作升序排列,而是将跟随着第2列的变化,保持一一对应。
b=sortrows(a,-3)
%将矩阵a按照第3列的降序排列,其他列将跟随着第3列的变化,保持一一对应。
data=
1 3 2
7 6 5
4 9 8
sortrows(data,1)
ans=
1 3 2
4 9 8
7 6 5
sortrows(data,-1)
ans=
7 6 5
4 9 8
1 3 2
(三)对数据毛刺的处理
假如data参数第一列数据画图时有许多毛刺,可通过下面的命令进行修正
data(:
1)=smooth(data(:
1),50)
具体实例
>>t=linspace(0,2*pi,500)';%产生一个从0到2*pi的向量,长度500
>>y=100*sin(t);%产生正弦波信号
%产生500行1列的服从N(0,15*15)分布的随机数,作为噪声信号
>>noise=normrnd(0,15,500,1);
>>y=y+noise;%将噪声信号加入正弦波信号
>>figure;%新建一个图形窗口
>>plot(t,y);%绘制加噪波形图
>>xlabel('t');%为X轴加标签
>>ylabel('y=sin(t)+噪声');%为Y轴加标签
>>
>>yy1=smooth(y,30);%利用移动平均法对y做平滑处理
>>figure;%新建一个图形窗口
>>plot(t,y,'k:
');%绘制加噪波形图
>>holdon;
>>plot(t,yy1,'k','linewidth',3);%绘制平滑后波形图
>>xlable('t');
>>xlabel('t');
>>ylabel('moving');
>>legend('加噪波形','平滑后波形');
>>
>>yy2=smooth(y,30,'lowess');%利用lowess方法y做平滑处理
>>figure;
>>plot(t,y,'k');
>>plot(t,y,'k:
');
>>holdon;
>>plot(t,yy2,'k','linewidth',3);
>>xlabel('t');
>>ylabel('lowess');
>>legend('加噪波形','平滑后波形');
>>
>>yy3=smooth(y,30,'rlowess');%利用rlowess方法y做平滑处理
>>figure;
>>plot(t,y,'k:
');
>>holdon;
>>plot(t,yy3,'k','linewidth',3);
>>xlabel('t');
>>ylabel('rlowess');
>>legend('加噪波形','平滑后波形');
>>
>>yy4=smooth(y,30,'loess');%利用loess方法y做平滑处理
>>figure;
>>plot(t,y,'k:
');
>>holdon;
>>plot(t,yy4,'k','linewidth',3);
>>xlabel('t');
>>ylabel('loess');
>>legend('加噪波形','平滑后波形');
>>
>>yy5=smooth(y,30,'sgolay',3);%利用sgolay方法y做平滑处理
figure;
plot(t,y,'k:
');
holdon;
plot(t,yy5,'k','linewidth',3);
xlabel('t');
ylabel('sgolay');
legend('加噪波形','平滑后波形');
以下为效果图:
(加噪波形图)
(加噪波形图2)(平滑后)
(加标签)(lowess法处理)
(四)matlab中同一个程序分别用2个窗口来显示两个图象
figure
(1)
plot(x,sinx)
figure
(2)
plot(x,cosx)
(五)关于matlab点运算
(六)从figure图上获得曲线数据
clearall;clc
x=-2*pi:
0.01:
2*pi;
y1=sin(x);
subplot(211);plot(x,y1,'color','r');
y2=cos(x);
subplot(212);plot(x,y2);
h1=findobj(gcf,'Color','r')
xh1=get(h1,'xdata');
yh1=get(h1,'ydata');
h2=findobj(gcf,'color','b');
xh2=get(h2,'xdata');
yh2=get(h2,'ydata');
采用这种方法读数据,可能在向量中会出现NaN,去除NaN的方法如下:
假设向量是A=[1,2,3,NaN],那么如何使得A成为[1,2,3]呢?
请给出命令!
B=A(~isnan(A));
如果想将NaN变为0,方法如下:
a=[NaN9NaN]
a(isnan(a))=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matla 操作 技巧 总结