Matlab教程基础版&官方课程学习记录&Matlab信号处理常用函数
请读者自己复制到Matlab里的命令行去运行下,查看结果!!!
【最重要的概念是:Matlab里矩阵运算速度远远快于for,while等结构】
视频:【0零基础入门matlab教程基础版:毕业设计/研究生/神经网络工具箱/机器学习/数学建模matlab】
【强推】官方交互式教程:MATLAB 入门之旅 | 自定进度在线课程 - MATLAB & Simulink (mathworks.com) 666,谁上谁知道
(虽然我都用matlab快一年半了,但有半年没碰了有点忘记了,这边再复习一下
I.清空环境变量及命令
%%I.清空环境变量及命令 clear all %清除Workspace中的所有变量 clc %清除Command Window中的所有命令
II.变量命令规则
区分大小写
长度不超过63位(2012a32bit和64bit计算机上测试结果)
以字母开头,可以由字母、数字和下划线组成,但不能使用标点
应简洁明了,通过变量名可以直观看出变量所表示的物理意义
%II.变量命令规则 %% %1.变量名区分大小写 A=2 a=3 %% %2.变量名长度不超过63位 %ABCDEFGHIJKLMNOPQRSTUVWXYZ123456ABCDEFGHIJKLMNOPQRSTUVWXYZ123456=3 %% %3.变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点 %3A=4 %.a=5 %/b=5 a_23 %a.2=4 %% %4.变量名应简洁明了,通过变量名可以直观看出变量所表示的物理意义 A=rand(3,5) rows=size(A,1) cols=size(A,2)
III.MATLAB数据类型
数字
字符与字符串
矩阵
元胞数组
结构体
%%III.MATLAB数据类型 %% %1.数字 2+4 10-7 3*5 8/2 %% %2.字符与字符串 s='a' abs(s) char (65) num2str(65) str ='I Love MATLAB Machine Learning.' length(str) doc num2str
%% %3.矩阵 A=[123;452:327] B=A C=A(:) D=inv (A) A*D E=zeros(10,5,3) E(:,:,1)=rand(10,5) E(:,:,2)=randi(5,10,5) E(:,:,3)=randn(10,5)
rand、randi和randn的区别?
1.rand生成均匀分布的伪随机数。分布在(0~1)之间
主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,'double)生成指定精度的均匀分布的伪随机数,参数还可以是single
rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数
2.randn生成标准正态分布的伪随机数(均值为0,方差为1)
主要语法:和上面一样
3.randi生成均匀分布的伪随机整数
主要语法:randi(iMax)在开区间(O,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵
r=randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵
%% %4.元胞数组 A=ce11(1,6)%a=b=666 A{2}=eye(3)%从1开始,python从0开始索引 A{5}=magic(5) B=A{5}
元胞数组
元胞数组是MATLAB中特有的一种数据类型,是数组的一种,其内部元素可以是属于不同的数据类型。
概念理解上,可以认为它和C语言里面的结构体、C++里面的对象很类似。
元胞数组是matlab中的特色数据类型,它不同于其它数据类型(如字符型,字符数组或者叫字符串,以及一般的算术数据和数组)。
它特有的存取数据方法决定了它的特点,它有给人一种查询信息的感觉,可以逐渐追踪一直到所有的变量全部翻译成基本的数据信息。
它的class函数输出就是cell(细胞之意)。
MAGIC
magic字面意思是魔方,魔术的意思。在matlab中用来生成n阶幻方。
比如三阶幻方(古老的问题)就是1-9九个数字,组成一个3*3的矩阵,使得该矩阵无论横、竖还是斜三个方向上的三个数的和总是相同的。
magic(n)生成一个n阶幻方,就是把1-nA2排成一个nxn的矩阵,使得矩阵的每行、每列,以及主、副对角线上面的个数之和都相等(容易证明,这个和等于n*(n2+1)/2)。
射雕英雄传里面的瑛姑,就在那里摆弄一个三阶幻方,搞了好几年没搞明白。
%% %5.结构体 books=struct ('name',{{'Machine Learning','Data Mining'}),'price',[30 40]) books.name books.name(1) books.name {1}
IV.MATLAB矩阵操作
%% IV.MATLAB矩阵操作 %% % 1.矩阵的定义与构造 A=[1 2 3 5 8 5 4 6] B=1:2:9 C=repmat(B,3,1) D=ones (2,4)
%% %2.矩阵的四则运算 A=[1 2 3 4; 5 6 7 8] B=[1 1 2 2; 2 1 1] C=A+B D=A-B E=A*B' F=A.*B G=A/B %G*B=A G*B*pinv(B)=A*pinv(B) G=A*pinv(B),相当于a乘b H=A./B
%% %3.矩阵的下标 A=magic(5) B=A(2,3) C=A(3,:) D=A(:,4) [m,n]=find(A>20)%找大于20的序号值/矩阵
【可以在matlab的help文档或搜索框查询find函数的详细参数及示例】
V.MATLAB逻辑与流程控制
%%V.MATLAB逻辑与流程控制 % 1.if ..else...end A =rand(1,10) limit=0.75; B=(A limit); %B is a vector of logical values
MATLAB逻辑与流程控制
。if..else..end
。for.end
。while..end
。switch.case..end
《MATLAB程序设计与应用基础教程(第2版)》
5.2.1顺序结构
顺序结构是最简单的程序结构。用户在编写完程序后,系统就将按照程序的实际位置逐一顺次执行。
因此,这种程序比较容易编制,但是,由于它不包含其他的控制语句等内容,程序结构相对比较单一,实现的功能也比较有限。
对于比较简单的程序而言,使用顺序结构来编程还是能够很好地解决问题的。
[例5-7]求a、b两个数组的和。
程序设计为:
>>>a=[123]:
>>>b=[456]:
>>>c=a+b
运行结果为:
c =
5 7 9
系统是依次执行各条命令语句,并将结果显示出来。
5.2.2循环结构
在实际问题中经常会遇到许多有规律的重复运算,因此,在程序设计中需要将某些语句重复执行。
一组被重复执行的语句称为循环体,每循环一次,都必须做出是否继续重复执行的决定,这个决定所依据的条件称为循环的终止条件。MATLAB提供了两种循环结构,即or循环结构和while循环结构。
1.for循环结构
for循环语句允许按照给定的判断范围或给定的循环次数重复完成一次或多次运算。
从for开始,用end结束,也称为for·end结构,它的基本格式为:
for 循环变量=初值:步长:终值 执行语句1 … 执行语句n end
其中,步长的默认值为1,可以省略;初值、步长、终值可以是正数也可以是负数,还可以是整也可以是小数,只要符合数学逻辑即可。
[例5-8]求$1^2+2^2+3^2+4^2+5^2$的和。
程序设计为:
>>sum = 0;
>>for n=1:5 sum=sum+n*2,: end
在MATLAB的命令窗口中输人sum,即
>>sum
运行结果为:
sum = 55
另外,for循环结构还可以实现嵌套使用,它可以多次嵌套or循环结构或是和其他的结构形式嵌套使用,这样用户就可以利用它的嵌套功能实现更为复杂的功能。
【例5-9】使用for循环求$∑_{i=1}^5 i!$的值。
程序设计为:
>>sun =0; >>for i=1:5; p=1; for j=1:i p=p*j; end sum=sum+p; end
在MATLAB的命令窗口中输入sum,即
>>sum
运行结果:
sum =
153
【例5-10】设计一个九九乘法表。
程序设计为:
>>for i=1:9 for j=1:9 a(i,j)=1.*j; end end
在MATLAB的命令窗口中输人a,即
>>a
运行结果为:
a=
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
2.while循环结构
MATLAB还提供了另外一种循环结构一while循环结构,
它根据给定的条件,决定是否以不确定的循环次数来执行循环语句体
基本格式为:
while 条件表达式 执行语句1 : 执行语句n end
其执行方式为:若条件表达式中的条件成立,则执行循环语句体;
如果表达式不成立,则执行end后面的语句
[例5-11]求1+2+3+4+5+…+10的和,
程序设计为:
>>s=0; >>n=1: >>while n<10 s=8+n; n=n+1; end
在MATLAB的命令窗口中输入s,即
>>s
运行结果为:
s=
55
[例5-12]设计一段程序,求1~100的奇数和。
程序设计为:
>>×=1; >>sum = 0; >>while x<101 sum = sum + x; ×=×+2; end
在MATLAB的命令窗口中输人sum,即
>>sum
结果sum = 2500
5.2.3分支结构
除了前面介绍的顺序结构、循环结构外,MATLAB还提供了分支结构语句,使角
MATLAB在编程过程中更灵活、更易于使用,
1. if…end结构
该结构中最筒单的一种应用形式,它的结构格式为:
if 条件表达式 语句体 …… end
只有一个判断语句,当条件表达式为真时,就执行语句体;
如果条件表达式为假,则跳出条件体,而直接执行end后面的语句。
[例5-13]用if……end结构编写一段程序,要求满足条件时系统显示“成立”,
在MATLAB的命令窗口中设计的程序为:
>>a=100; >>b=20; >>if a>b '成立' end
运行结果为:
ans=
成立
2. if…else…end结构
if 表达式 语句体1 else 表达式 语句体2 end
如果表达式为真,则系统将执行语句体1,如果表达式为假,则系统将执行语句体2。
[例5-14]使用if…else…end结构偏写一段程序,要求满足条件时系统显示“成
立”,不满足条件时系统显示“不成立”。
程序设计为:
>>a=100; >>b=20; >>if a>b '成立' else '不成立' end
运行结果为:
ans=
成立
3.switch...case...end结构
switch,case..end结构是通过与某个表达式的值进行比较,根据比较的结果做不同的选择,以实现程序的分支功能,结构格式为:
switch 表达式(数值或字符串)
case数值或字符串1
语句体1;
case数值或字符串2
……
语句体2;
otherwise
语句体n;
end
switch后面表达式的值为数值变量或字符变量,通过这些值与case后面数值或字符串的值进行比较,与哪一个case的值相同就执行哪一个case下面的语句体,如果与所有case的值都不相同,则执行otherwise下面的语句体。otherwise语句可以省略,如果省略otherwise,所有case都不满足时跳出分支结构,另外switch必须与end配对使用。
VII.MATLAB基本绘图操作
1.二维平面绘图
%%VII.MATLAB基本绘图操作 % %1.二维平面绘图 x=0:0.01:2*pi; y=sin(x); figure %建立一个幕布 plot(x,y) title('y=sin(x)') xlabel('x') ylabel('sin(x)') xlim([0 2*pi]) %限制x的坐标值 x=0:0.01:20; y1=200*exp(-0.05*x).*sin(x);
y2=0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2]=plotyy (x,y1,x,y2,'plot');
set (get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time (\musec)')
title('Multiple Decay Rates')
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')
上面这个画出来是这样的
建立一个幕布, 如图
颜色
颜色 | 字符 | 颜色 | 字符 |
红 | r | 粉红 | m |
绿 | g | 青 | c |
蓝 | b | 白 | w |
黄 | y | 黑 | k |
线型
线型 | 符号 | 示例 |
实线 | - | ———————— |
虚线 | -- | — — — — — — — |
冒号线 | : | .... .... .... .... .... .... |
点画线 | -. | — - — - — - — - — |
数据标记点
2.三维立体绘图
%% %2.三维立体绘图 t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) xlabel('sin(t)') ylabel('cos(t)') zlabel('t') grid on axis square
grid on 图上加网格线(python的matplotlib有类似函数)
hold on 同一个幕布保存当前的图,hold off 不保存当前值
axis square % 让图形变为正方形,起限制作用
axis equal % 使得横纵坐标之间的间隔一致
3.图形的保存与导出
%% %3.图形的保存与导出 %(1)Edit→Copy Figure %(2)Toolbar→Save %(3)print('-depsc','-tiff','-r300','picturel') %(4)File Export Setup
改成下图设置后,应用
然后编辑→复制→粘贴【无损导出!!!】
----------------------------进阶
4.画双峰函数
[x,y,z]=peaks(30);
mesh(x,y,z)
grid
5.子图绘制及图形窗口分割
x=linspace(0,2*pi,60); subplot(2,2,1) plot(x,sin(x)-1); title('sin(x)-1'); axis([0, 2*pi, -2,0]) subplot(2,1,2) plot(x,cos(x)+1); title('cos(x)+1'); axis([0,2*pi,0,2]) subplot(4,4,3) plot(x,tan(x)); title('tan(x)'); axis([0, 2*pi, -40, 40]) subplot(4,4,8) plot(x,cot(x)); title('cot(x)');axis([0,2*pi,-35,35])
【官网学习记录】
信号处理入门之旅
1 生成信号
主要步骤:产生正常的信号然后线性叠加噪声
2 频谱分析工作流
①导入信号
②预处理信号
从时间表中提取一个范围后画图
Time range for timetable row subscripting - MATLAB timerange (mathworks.com)
③查看功率谱
不使用任何输出参数,pspectrum
会创建一个绘图
设置频率范围,以放大频率范围
鼠标悬停显示峰值数据
④比较信号
y = resample(x,2,3)
以原始采样率的 2/3
倍速率对 x
进行重采样。
wanc时间更短,采样率更高,所以要降低采样率
对信号进行归一化处理normalize
现在,所有三个信号都具有相同的时基和相似的 y 范围。
⑤频率分析谱 signalAnalyzer(wanc)
3 预处理信号
画出两个信号
求HARP和PAX
MATLAB信号处理工具箱常用函数