MATLAB速成.docx
《MATLAB速成.docx》由会员分享,可在线阅读,更多相关《MATLAB速成.docx(14页珍藏版)》请在冰豆网上搜索。
MATLAB速成
MATLAB速成
Matlab软件是美国matheworks公司的软件产品。
该软件主要用于数学计算,软件仿真,是计算、仿真领域中的辅助工具。
涉及的领域包括常规数学计算,力学,热学,财政分析,空间分析,概率工具箱,自动控制、图像处理、通信、数字信号处理等各个领域。
信息、电子、通信专业的学生应该较好的掌握该工具的使用,为信号与系统、数字信号处理、通信系统处理、语音信号处理,图像处理等打好基础。
Matlab能够对很多理论分析提供计算、图形、仿真方面的支持,在很多论文专著中都以Matlab作分析,是很好的实验辅助工具。
现在Matlab已经发展到支持某些型号的DSP和FPGA,可以在Matlab的simulink下按照需要搭建自己的模型,比如某种形式的滤波器,仿真结果满足指标后,选择目标平台编译成目标DSP/FPGA可用的代码。
可见Matlab在电子信息处理方面功能也在增强。
Matlab不只是一个数学计算工具,它对电系统,信号处理的支持我们马上就能看到!
Matlab核心是矩阵计算,其名是Maritx和library的简写合成,意思就是”矩阵实验室”,特别强调矩阵方式计算。
例1:
我们可以利用C语言中for循环实现(在matlab中也可以用for循环实现),在Matlab中比较推崇的写法:
n=10;
a=1:
n;%从1开始,生成1行n列的向量,元素分别是1234…10
f=a*a’;%a’是a的转置矩阵,变成10行一列的元素,1行10列矩阵乘以
%10行一列矩阵结果是1*1的矩阵,别忘了还有矩阵乘后还有加的
%过程,这里刚好利用这个加,实现和的累加。
%
小问题:
实际的计算耗时比for循环结构是否少一些?
例2:
以上三元一次方程组在我们学过的线性代数中通过消元法或直接通过系数矩阵求逆,是可以手工求解的,但手工对4阶或更高的方程求解显得困难。
在matlab中只需要输入
a=[121;457;6-12];%注意数之间用空格分隔,行之间用;分开
b=[35-1]';%b转置成3行一列的列向量
x=a\b
马上就可以得到关于x的向量,向量中有三个元素,就分别对应x1,x2,x3的解。
例3:
t=0:
pi/10:
2*pi;
y=sin(t);
subplot(1,2,1)
plot(t,y);
subplot(1,2,2)
stem(y);
效果
右图是数字信号处理中常用的离散信号,左边一幅图实际上也是离散的,注意观察t的取值,只不过t比较小的时候,plot函数将附近的点用直线连起来而已。
Matlab大部分情况下都用离散来处理连续问题,因为离散点之间比较近,所以效果上和连续的差不多。
如果追求计算结果每一点都精确可靠,处理冲激函数、阶跃函数等不连续情况,可以使用Matlab符号计算功能!
例4:
以下程序进行幅频响应的绘制:
(1)
(2)
(3)
w=0:
0.1:
20;
h1=5./sqrt(w.^4-6*w.^2+25);
plot(w,h1);
figure
(2)
w1=0:
0.1:
20;
h2=2*w./sqrt(w.^4-6*w.^2+25);
plot(w,h2)
figure(3)
h3=(w.^2)./sqrt(w.^4-6*w.^2+25);
plot(w,h3)
以下是其运行结果
(1)
(2)
(3)
例5:
以下是直方图均衡化的例子:
pic=imread('pout.tif');%打开一幅图像,pout.tif是matlab自带供测试用图像
imshow(pic);%显示图像,a
figure
(2),imhist(pic);%显示直方图b
I2=histeq(pic);%直方图均衡化
figure(3),imshow(I2);%显示均衡后结果c
figure(4),imhist(I2);%显示均衡后直方图d
a
b
c
d
下面我们打开软件,认识一下操作界面
找到
图标,双击打开matlab.也可以在开始\程序\matlab6.5下找到可执行快捷方式。
界面如下:
命令窗口:
命令可在这里输入,结果可以在回车之后马上显示,可以输入简单表达式入1/2+3,也可以输入exm070102脚本文件执行(前提是在搜索路径上要能找到exm070102.m文件),也可以输入b=max(a)等函数调用语句,函数执行结果返回给b.还可以输入管理控制指令,如
clc:
清除命令输入窗的指令和结果,
clear:
清除workspace中的所有变量,可以选择性清除,如clearabxalpha等
whos:
输出当前工作区中所有变量的类型,占用字节数等
formatlong:
长型显示,输出16位数
dir:
显示当前目录
helpcos:
查找cos函数的进一步解释
simulink:
启动simulink模块库浏览器
常用的命令是clc,clear,help
历史命令窗口:
在命令窗口中输入的指令都会记录在历史命令窗中,可从历史命令窗中取出一条或多条(连续\不连续)指令执行,
这样可以对以前的工作选择重做,观察不同效果。
关闭matlab后,历史命令窗内容消失,即不能下次启动matlab后执行上次开启后的输入,可以通过菜单Edit\clearCommandHistory清除命令历史窗口。
Workspace窗口:
所有在指令窗或脚本文件中执行后的变量都会聚集在这个窗口中,相当于软件提供的一种变量环境,以后的指令,脚本,函数都可以直接使用这些变量,执行的结果也放在workspace中。
这和C语言是很不相同的,C语言作类似功能的大约是全局变量,但全局变量也只能在一个程序中有效,workspace中的变量对所有命令行输入的指令脚本函数都有效。
可以用clear指令清除workspace中变量。
当前目录:
matlab从哪个路径开始搜索解释输入的字符串,如输入exm070103,则先从当前workspace开始查找起,是否有变量名叫exm070103,如果有,则取出显示或计算,如果没有,查找当前目录是否有exm070103.m或exm070103.mat文件,有则取出执行,如果没有,则在系统指定的搜索路径上继续查找是否有exm070103的脚本文件或函数来执行,找到了则执行,最终没找到的情况下则报错!
所以,搜索路径很重要,通过菜单path设定,界面
如下:
从左边可以看到movetotop,moveDown等,就是设定搜索优先权,所以如果有两个脚本文件同名,但是放在不同目录下,那么总是搜索优先权高的先执行。
Help:
点击后出现帮助窗口,可以像其它软件那样查找帮助。
在开始应用matlab之前,有几条规则需要记住:
1.matlab中不需要自己定义数据类型,C语言中用inta;floatb;等变量定义在matlab中直接写成a=10,b=3.5,在内存中,它们都以8个字节形式保存,变量不需要(也不能)先申明后使用,想用时直接使用即可,当然象下面的语句
clc;
clear;
a=10;
b=c;
d=sin(b);
由于c没有赋值,matlab在运行时会报错。
2.matlab严格区分大小写,a和A是两个不同的变量。
变量、脚本、函数文件取名时不允许数字开头。
正确的方式是字母打头,可以有下划线,后面接数字或字母。
系统提供一些预定义好的变量供使用,如i,j(虚数单位),pi(圆周率),eps(机器零阀值,看作可实现无穷小),inf(无穷大).预定义变量可以被修改,如i=3,但是下次启动matlab式i还是恢复到预定义变量上。
建议最好不要改变预定义变量定义,for循环中不要使用i,j作循环变量.
3.Matlab风格类似脚本语言,同学们在C语言时#include”stdio.h”之类的语句不再需要,整个程序从脚本文件开始执行,没有main()函数一说。
执行过程中可以调用函数,每个函数存成一个文件,只要把函数文件放在搜索路径上,Matlab就能自动找到并进入函数执行,然后退出到调用程序继续执行,如果没有断点,暂停等控制语句的话,程序一直执行到结束。
在C我们处处要设置头文件,全局变量/局部变量,需要做很多工作,而在Matlab中一切很简单.这是因为c编出的程序是.exe文件,可以不再要turboC或VisualC++来执行的,可以完成从驱动程序到桌面应用程序的各种开发。
Matlab程序需要在matlab软件中执行,是不能脱离大环境的。
4.matlab执行方式分2种,一种是在命令行界面下输入程序执行。
在光标位置输入指令,调用函数,脚本文件名等都可以执行程序,对于特别简单的计算都可以在这里执行。
缺点是输入一行就会执行一行,如果有for循环之类的换行语句,不得不加上…续行符,书写麻烦;执行结果会在这里显示,结果命令窗口内容很多;如果自己的程序很长,用拷贝粘贴方法可以从别处一次粘贴多条语句来执行,如果想改动部分语句,观察效果,就需要大量的粘贴操作,使得界面混乱;关闭matlab后所有输入内容丢失,保存麻烦。
另外一种,在上图有开启M文件编辑器的快捷工具栏。
点击后出现m文件编辑界面,
可以在该编辑器中输入指令,然后保存文件,点击debug\run菜单项执行脚本,执行结果也到了workspace和命令行输入中,这种方式和命令行方式唯一的区别是脚本内容不到commandhistorywindow中,想象这是不是也有其合理性?
上面图片中还有设断点指令,由此可以方便的帮助调试程序。
5.变量定义方式:
A=1%定义一个变量A,直接赋值1
a=[123]%定义一个矩阵,1*3,矩阵定义要[]
a=[123;456]%定义二维矩阵,3维或更高维矩阵可定义,但用的较少
a=[1:
3;4:
6]%1:
3意思是从1开始,步长为1,到达3,生成3个元素的行%向量,同时作为2行3列矩阵的第一行
a=0:
0.01:
2*pi%从0开始,以0.01开始,到达2*pi.pi,i,j是Matlab中定义好%的变量,可以直接使用,i,j是虚数单位
a=3:
-0.34:
2%可以采用负向步长,而且终点值可能取不到,比如这里的2
a=-3:
10%可以定义负数
a=ones(3,3)%通过函数生成3*3的全1矩阵
a=zeros(10,19)%生成10*19的全0阵
a(1,2)=100%矩阵引用方式,矩阵下标从1开始,1,2表示的是第1行第2列%元素,注意这是用原括号,和C的数组引用略不同
a(di,dj)=m%可以使用变量作为引用时值,di,dj在运行中动态确定,M也可%以是变量
a=zeros(3,3)
fordi=1:
1:
3
a(di,1)=19
end
%以上是一个for循环的示例,由此大家也可以看看for循环的写法
6计算符号
+,-,*,/,^,sqrt()对于数值计算和C是一样的,
矩阵+,-要求同维,乘的规则同矩阵乘法规则,如[3*7]*[7*12]的结果是[3*12]的矩阵。
/在线形代数中作求逆,Matlab也做求逆表示。
目前用的较少。
在前面大家看到h1=5./sqrt(w.^4-6*w.^2+25);语句,这里出现w.^2这样的语句,意思是平方,但是为什么不写成w^2,这是因为w本身变成了向量,不再是一个数,我们需要平方,那这些平方值应该逐点计算,如果写成w^2就是矩阵乘,矩阵乘是要满足一定规则,同时结果也不合我们要求,”.”称为点计算,意思是计算是逐点进行的,不采用矩阵计算规则。
A=[a11a12;a21a22]
B=A*A%B=[a11*a11+a12*a21a11*a12+a12*a22
a21*a11+a22*a21a21*a12+a11*a22]
c=A.*A%c=[a11*a11a12*a12;a21*a21a22*a22]
以上举例,大家能看出规律不?
7绘图可用plot函数,多图可以开多个窗口figure
(2),figure(3),…,或者用subplot(3,3,1),subplot(3,3,2)等。