当前位置:   article > 正文

Matlab语法_索引可以是非连续数字。试着提取 density 的第一个、第三个和第六个元素。

索引可以是非连续数字。试着提取 density 的第一个、第三个和第六个元素。

Matlab语法

索引(Indexing)与修改数组

如果只对一个矩阵使用一种索引,它将按顺序从上到下遍历每列。

load datafile
data
y=data(8)    %索引矩阵data的第八个元素。
  • 1
  • 2
  • 3

冒号运算符可以引用某个值范围。

x = A(1:3,:)     %创建一个包含矩阵 A 的第 1 行、第 2 行和第 3 行所有元素的矩阵。
  • 1

索引可以是非连续数字。

density=[1;2;3;4;5;6;7;8]
z=[1 3 6]
p=density(z)    %提取 density 的第一个、第三个和第六个元素。
  • 1
  • 2
  • 3

可以结合使用索引和赋值来修改变量的元素。

v2(1)=0.5    %将 v2 中的第一个元素从 NaN 更改为 0.5
  • 1

数组计算

MATLAB 的函数可在单个命令中对整个向量或值数组执行数学运算。

load datafile
density = data(:,2);
v1 = data(:,3);
v2 = data(:,4);
  • 1
  • 2
  • 3
  • 4

一个标量和一个数组运算

r=v1+1         %将一个标量值与数组中的所有元素相加。
va=vs/2        %将一个标量值与数组中的所有元素相加。
  • 1
  • 2

两个相同大小的数组运算

vs=v1+v2       %将任意两个大小相同的数组相加。
vm=max(va)     %将一个标量值与数组中的所有元素相加。
vn=sqrt(va)    %将数组中的所有元素求平方根,赋给新数组。
vr=round(va)   %将数组中的所有元素四舍五入为整数,赋给新数组。
  • 1
  • 2
  • 3
  • 4

使用 * 运算符执行矩阵乘法。
使用 .* 运算符执行按元素乘法。 将两个大小相同的数组的对应元素相乘。
使用.^运算符执行元素平方。
兼容大小的数组运算

ans=[1 2;3 4;5 6;7 8].*[1;2;3;4]
ans= 1   2
     6   8
    15  18
    28  32
  • 1
  • 2
  • 3
  • 4
  • 5

调用函数

size 函数可以应用于矩阵,以生成单个输出变量或两个输出变量。使用方括号 ([ ]) 获得多个输出。

[xrow,xcol] = size(x)          %返回数组x的尺寸
y=numel(x)                     %返回数组x的元素数目  
  • 1
  • 2

可以使用 max 函数确定向量的最大值及其对应的索引值。max 函数的第一个输出为输入向量的最大值。执行带两个输出的调用时,第二个输出为索引值。

[xMax,idx] = max(x)
  • 1

如果只需函数的第二个输出,可以使用波浪号字符 (~) 忽略特定输出。

[~,idx] = max(x)
  • 1

绘制数据图

plot 函数接受一个附加参数。使用该参数,您可以通过在引号中包含不同符号的方式来指定与之对应的颜色、线型和标记样式。

启用保留状态(hold on)时,将继续在同一坐标区上绘图。
要恢复默认绘图行为,即其中每个绘图都有自己的坐标区,请输入 hold off。

plot(x,y,"r--o")         %绘制一条红色 (r) 虚线 (--),并使用圆圈 (o) 作为标记。
hold on                  %保留之前的绘图,然后添加另一条线。
plot(sample,mass1,"ks")
hold off                 %恢复默认绘图行为,即每个绘图都有自己的坐标区。否则默认开启hold on。
  • 1
  • 2
  • 3
  • 4

当单独绘制一个向量时,MATLAB 会使用向量值作为 y 轴数据,并将 x 轴数据的范围设置为从 1 到 n(向量中的元素数目)。

plot(v1)
  • 1

plot 函数接受可选的附加输入,这些输入由一个属性名称和一个关联的值组成。

plot(v1,"LineWidth",3)    %绘制一条线宽为5的线条。
  • 1

使用 plot 函数时,可在绘图参数和线条设定符之后添加属性名称-属性值对组。

plot(sample,v1,"ro","LineWidth",4)    %使用红色 (r) 圆圈 (o) 标记,线宽为 4**顺序不能改**
histogram(density,"facecolor","y")    %创建直方图。将 "FaceColor" 设置为黄色 ("y")
  • 1
  • 2

使用 loglog 函数(用法同 plot 函数),在每个坐标轴上使用对数刻度绘制数据。

loglog(x,y,".-")                             %将y作为x的函数进行绘图,在两个坐标轴上使用对数刻度。使用点标记 (.) 并用实线 (-) 连接各点。
hold on
loglog(1,2,"rs","MarkerSize",8)     %将 x = 1、y = 2 处的点绘制成一个标记大小 ("MarkerSize")8 的红色方框 ("rs"),添加到现有图中。
  • 1
  • 2
  • 3

绘图注释

可以使用绘图注释函数(例如 title)在绘图中添加标签。此类函数的输入是一个字符串。MATLAB 中的字符串是用双引号 (") 引起来的。

使用 title 函数为绘图添加标签。
使用 ylabel 函数添加标签 “Mass (g)”。
使用 legend 函数为绘图添加图例。

title("Sample Mass")
ylabel("Mass(g)")
legend("Exp A","Exp B")

bar(data(3,:))
title("Sample " + sample(3) + " Data")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

Case:分析风琴演奏 C 和弦的频谱。

C 和弦由 C (261.6 Hz)、E (329.6 Hz) 和 G (392.0 Hz) 音符组成。此频率图中突出显示的点对应于每个音符。

C 和弦录音存储在一个名为 Cchord.mat 的文件中。此文件包含两个变量:
y:录音信号;fs:采样频率

load Cchord
n = numel(y)
t = 0:n-1
t = t/fs              %t 需要表示音频信号的采样时间。可以使用采样频率 fs 将向量转换为时间(以秒为单位)。
plot(t,y)     
yfft = abs(fft(y))    %使用 fft 函数来计算向量的离散傅里叶变换。fft 的输出值为复数,使用 abs 函数来获得幅值。
f = 0:n-1             %需要为 FFT 向量 yfft 计算频率向量 f。
f = f*fs/n            %向量 f 现在包含 n 个点。要将这些点转换为频率,可以将整个向量乘以采样频率 fs,然后除以点数 n。
plot(f,yfft) 
xlim([0 1000])        %f 将包含从 0 到 fs 的频率。主频位于 f 的开头位置。使用 xlim 函数放大所关注的区域。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述在这里插入图片描述

前三个峰值是构成中央 C 和弦的音符。图中的 6 个峰值对应于中央 C 和弦的基频和第一个谐波

导入数据

要提取表变量,可以使用圆点表示法:data.VariableName
如果正在使用表,并希望将相关数据放在一起。可以将计算结果赋给表,而不是创建单独的变量。
data.HeightMeters = data.HeightYards*0.9144
如果变量 data.HeightMeters 不存在,MATLAB 将在表中创建名为 HeightMeters 的新变量。
您可以通过在实时脚本的输出窗格中点击表来与表进行交互。例如,您可以使用表的一个变量对表进行排序。在您对表感到满意时,您可以通过更新代码使更改永久化。
圆点表示法用于提取表变量。要提取行,可以使用常规数组索引。

load datafile
elements

d = elements.Density                                  %将 elements.Density 的内容赋给名为 d 的列向量。
elements.Mass=elements.Density.*elements.Volume1      %M=D.*V
elements = sortrows(elements, "Mass")                 %按从最小到最大质量对表进行排序。然后更新脚本中的代码。
top3=elements(1:3,:)                                  %提取表的前三行,此时top3也是一个表。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

逻辑数组

关系运算符(例如 >、<、== 和 ~=)执行两个值之间的比较。相等或不相等比较的结果为 1 (true) 或 0 (false)。
可以使用关系运算符将某个向量或矩阵与单个标量值进行比较。结果是与原始数组相同大小的逻辑数组。

v1=[5 10 15]
v1 > 12

ans = 
    0    0    1
  • 1
  • 2
  • 3
  • 4
  • 5

可以使用逻辑数组作为数组索引,在这种情况下,MATLAB 会提取索引为 true 的数组元素。以下示例将会提取 v1 中大于 6 的所有元素。

v = v1(v1 > 6)
v =
    6.6678
    9.0698
  • 1
  • 2
  • 3
  • 4

也可以对两个不同向量使用逻辑索引。MATLAB 会提取v2中索引为 true 的数组元素

v = v2(v1 > 6)
v =
    18
    23
  • 1
  • 2
  • 3
  • 4

可以使用逻辑索引在数组中重新赋值。e.g.将数组 x 中等于 999 的所有值都替换为值 1:

x(x==999) = 1
  • 1

总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/67149
推荐阅读
相关标签
  

闽ICP备14008679号