MATLAB学习笔记

项目需要用到matlab,我是这方面的小白。做一下简单的笔记,仅供自己查阅使用。

链接

《MATLAB 入门之旅》视频教程
https://matlabacademy.mathworks.com/R2022a/cn/portal.html?course=gettingstarted#chapter=1&lesson=1&section=1

课程一

任务一 提示符 (>>) 后输入命令

您可以通过在命令行窗口中 MATLAB 提示符 (>>) 后输入命令,然后按 Enter 键来执行命令。

任务 使用命令 3*5 将数值 3 和 5 相乘。

   任务 1>> 3*5
ans =
    15
   任务 1

任务二 默认计算结果存储在一个名为 ans 的变量

除非另有指定,否则 MATLAB 会将计算结果存储在一个名为 ans 的变量中。

>> 7 + 3
ans = 
    10

任务
将 3*5 的计算结果赋给一个名为 m 的变量,如下所示:

m = 3*5

任务三 等号 (=) 是赋值运算符

MATLAB 中的等号 (=) 是赋值运算符,这意味着等号右侧的表达式赋给左侧的变量。
当您输入 x = 3 + 4 时,MATLAB 首先计算 3 + 4,然后将结果 (7) 赋给变量 x。

任务 输入命令 m = m + 1,看看会出现什么。

任务四 工作区中的变量

请注意,工作区窗口(右侧)显示了当前位于工作区中的所有变量。

任务 创建一个名为 y 并且值为 m/2 的变量。

在这里插入图片描述

任务五 命令的末尾添加分号将抑制输出

在命令的末尾添加分号将抑制输出,但仍会执行该命令,正如您在工作区中所看到的。当您输入命令而没有以分号结尾时,MATLAB 将会在命令提示符下显示结果。


>> x = 5 + 1
x = 
    6	>> x = 5 + 1;

任务
输入 k = 8 - 2;,结尾用分号。

结果不会出现在命令提示符下,但您可以在工作区窗口中看到该值。

任务六 上箭头键重新调用以前的命令

您可以按键盘上的向上箭头键重新调用以前的命令。请注意,要执行此操作,命令行窗口必须为活动窗口。

任务 按向上箭头键以回到命令 m = 35,然后将该命令编辑为 m = 3k

任务七 返回该变量的当前值

当您在命令提示符下仅输入变量名称时,MATLAB 将会返回该变量的当前值。

任务 y 的值是使用 m 计算的。修改 m 时,是否重新计算 y?

在命令提示符下只输入变量名称 y(并按 Enter)。

修改m时,y不会重新计算。

课程二

任务1 变量命名规则

您可以将 MATLAB 变量命名为符合以下规则的任何名称:以字母开头,并且仅包含字母、数字和下划线 (_)

MATLAB 变量还区分大小写

任务 将值 -2 赋给变量 A。

任务2 变量命名

请注意,变量 a 和 A 都存在于工作区中。

您可以将您的所有变量命名为 a 或 x,但对变量进行更有意义的命名会更有用。

任务 计算 a+A 2 。将结果赋给变量 avgAa。

附加练习 无效的变量名

如果您使用无效的变量名称,MATLAB 会显示建议的更正内容。您可以使用建议的命令、对其进行修改或按 Esc 键删除建议。

试着创建变量 3sq = 9 来试验一下这些操作。

课程三

任务1 变量保存成MAT文件

您可以使用 save 命令将工作区中的变量保存到称为 MAT 文件的 MATLAB 特定格式文件中。

要将工作区保存到名为 foo.mat 的 MAT 文件中,请使用命令:

>> save foo
任务
将工作区变量保存到名为 datafile.mat 的文件中。

正确结果:

save datafile

任务2 整理工作区

当您要在 MATLAB 中切换处理新问题时,可能需要整理工作区。您可以使用 clear 函数从工作区中删除所有变量。

任务
使用 clear 将工作区清空。

任务3 清空工作区

在工作区中,您可以看到 clear 命令清空了所有变量。

您可以使用 load 命令从 MAT 文件加载变量。


>> load foo

任务 从文件 datafile.mat 加载变量。

任务4 打印变量的值

请注意,变量 data 在工作区中列出。您可以通过输入变量的名称来查看任何变量的内容。


>> myvar

任务 显示变量 data 的内容。

任务5 清空命令行

clear 函数清理工作区。clc 命令清理命令行窗口。

任务 使用 clc 命令清空命令行窗口。

附加练习 只加载部分变量

当您关闭 MATLAB 时,工作区将被清空。可以使用 MAT 文件来保存变量。这样,当您重新打开 MATLAB 时,可以将变量加载到工作区中。

如果您只想加载或保存部分变量,可以使用函数的两个输入。尝试从文件 myData.mat 中仅加载变量 m:

>> load myData m

然后尝试将变量 m 保存到名为 justm.mat 的新 MAT 文件中:

>> save justm m

课程四

任务1 内置常量 pi 表示 π

MATLAB 包含一些内置的常量,例如用 pi 表示 π。

>> a = pi
a = 
    3.1416

这里虽然只对 π 显示了四位小数,但它在内部是用更高的精度表示的。

任务 创建一个名为 x 的变量,其值为 π/2。

任务2 内置的函数 abs(计算绝对值)和 eig(计算特征值)

MATLAB 包含许多内置的函数,例如 abs(计算绝对值)和 eig(计算特征值)。

>> a = sin(-5)
a = 
    0.9589

请注意,MATLAB 使用圆括号来传递函数输入,与标准的数学表示法类似。

任务 使用 sin 函数计算 x 的正弦值。将结果赋给一个名为 y 的变量。

任务3 平方根

任务
使用 sqrt 函数计算 -9 的平方根。将结果赋给一个名为 z 的变量。

附加练习 format 格式化输出

请注意,解包含虚数 i,这是 MATLAB 中的内置常量。

在命令行窗口中仅显示前四个小数位。您可以使用 format 函数控制显示的精度。

请试着输入 format long 并显示 x 的值。

输入 format short 可切换回默认显示。

向量和矩阵

什么是数组?

所有 MATLAB 变量均为数组。这意味着每个变量都可以包含多个元素。您可以使用数组将相关数据存储在一个变量中。
由于您每次编程都会使用数组,因此了解数组以及用于说明数组的术语非常重要。
在这里插入图片描述

任务1 1×1 数组

单个称为标量的数值实际上是一个 1×1 数组,也即它包含 1 行 1 列。

任务 创建一个名为 x 并且值为 4 的变量。

任务2 创建普通行数组

您可以使用方括号创建包含多个元素的数组。

x = [3 5]
x = 
    3    5

任务 创建一个名为 x 的数组,其中包含两个元素:7 和 9

任务3 列向量

当您用空格(或逗号)分隔数值时(如前面的任务中所示),MATLAB 会将这些数值组合为一个行向量,行向量是一个包含一行多列的数组 (1×n)。当您用分号分隔数值时,MATLAB 会创建一个列向量 (n×1)。

x = [1;3]
x = 
    1
    3

任务 创建一个名为 x 的数组,其中包含两个元素 7 和 9,且两个元素位于同一列中。

试着复制以前的命令,并将数值之间的空格改为分号 (;)。

任务4 矩阵

您可以组合使用空格和分号来创建一个矩阵,即包含多行多列的数组。输入矩阵时,您必须逐行输入它们。

x = [3 4 5;6 7 8]
x = 
    3    4    5
    6    7    8

任务 创建一个名为 x 的矩阵,其中包含的值如下所示。 5 6 7 8 9 10

任务5 方括号内执行计算

在 MATLAB 中,您可以在方括号内执行计算。

x = [abs(-4) 4^2]
x = 
     4    16

任务 创建一个名为 x 的行向量,其中第一个元素为 sqrt(10),第二个元素为 pi^2 (π2)。

创建等间距向量

对于长向量,输入单个数值是不实际的。可用来创建等间距向量的替代便捷方法是使用 : 运算符并仅指定起始值和最终值。

y = 5:8
y = 
    5    6    7    8

请注意,当您使用冒号运算符时,不需要方括号。

任务 创建一个名为 x 的行向量(包含值 1、2、3 和 4),但这次使用 : 运算符。

任务3 : 运算符

: 运算符使用默认的间距 1,但是您可以指定您自己的间距,如下所示。

x = 20:2:26
x = 
    20    22    24    26

任务 创建一个名为 x 的行向量,该向量以 1 开头,以 5 结尾,每个元素的间距为 0.5。

任务5 linspace

如果您知道向量中所需的元素数目(而不是每个元素之间的间距),则可以改用 linspace 函数:

linspace(first,last,number_of_elements)

注意,请使用逗号 (,) 分隔 linspace 函数的输入。

x = linspace(0,1,5)
x = 
    0    0.250    0.500    0.750    1.000

任务 创建一个名为 x 的行向量,该向量以 1 开头,以 10 结尾,共包含 5 个元素。

行向量转换为列向量

linspace 和 : 运算符都可创建行向量。但是,您可以使用转置运算符 (') 将行向量转换为列向量。

x = 1:3;
x = x'
x = 
    1
    2
    3

任务 使用转置运算符将 x 从行向量转置为列向量。

一条命令创建列向量

您可以通过在一条命令中创建行向量并将其全部转置来创建列向量。注意此处使用圆括号来指定运算的顺序。

x = (1:2:5)'
x = 
    1
    3
    5

任务 在一条命令中,创建一个名为 x 的列向量,该向量以 5 开头,以 9 结尾,并且元素之间的间隔为 2。

数组创建函数

rand随机数矩阵

MATLAB 包含许多函数,可帮助您创建常用的矩阵,例如随机数矩阵。

x = rand(2)
x = 
    0.8147    0.1270
    0.9058    0.9134

请注意,rand(2) 命令中的 2 指定输出将为一个 2×2 的随机数矩阵。

任务 创建一个名为 x 的变量,该变量是一个 5×5 的随机数矩阵。

rand创建非方阵

许多矩阵创建函数允许您输入一个数值来创建方阵 (n×n),或者输入两个数值来创建非方阵。

x = rand(2)
x = 
    0.8147    0.1270
    0.9058    0.9134

x = rand(2,3)
x = 
    0.6324    0.2785    0.9575
    0.0975    0.5469    0.9649

任务 使用 rand 创建一个包含 5 行 1 列的数组。将结果赋给名为 x 的变量。

zeros 全零矩阵

任务 使用 zeros 函数创建一个包含 6 行 3 列 (6×3) 的全零矩阵。将结果赋给名为 x 的变量。

x = zeros(6,3)
矩阵大写size
如何知道现有矩阵的大小?您可以使用 size 函数。
size(x)
创建与现有矩阵大小相同的矩阵

您也可以使用一行代码创建与现有矩阵大小相同的矩阵。

rand(size(x))

对数组进行索引

这里跟常见的编程语言不同的是,第1位不是0而是1。
在这里插入图片描述

行向量取值x(3)

在这里插入图片描述

更改数组的值

x(3) = 1

取一段数组 开始到结束

在这里插入图片描述

矩阵取整行x(1,:)

在这里插入图片描述

矩阵取整列x(:,3)

在这里插入图片描述

矩阵取当值

您可以使用行、列索引从数组中提取值。

y = A(5,7)

此语法将会提取 A 的第 5 行第 7 列的值,然后将结果赋给变量 y。

任务 创建一个名为 x 的变量,其值为变量 data 中位于第 6 行第 3 列的值。

end取最后一个元素

您可以使用 MATLAB 关键字 end 作为行或列索引来引用最后一个元素。

y = A(end,2)

任务 使用 end 关键字获取变量 data 的最后一行第三列的值。将该值赋给一个名为 x 的变量。

将算术运算与关键字 end 结合

请注意,您可以将算术运算与关键字 end 结合使用。例如:

y = A(end-1,end-2)

任务 创建标量变量 x,其值为 data 的倒数第二 (end-1) 行第三列的值。

[?] 遍历每列

如果只对一个矩阵使用一种索引,它将按顺序从上到下遍历每列。试着用一种索引提取 data 的第八个元素。

您也可以使用变量作为索引。试着创建一个变量 y,并用 y 作为 data 的索引。

:提取多个元素

:提取整列

用作索引时,冒号运算符 (:) 可指代该维度中的所有元素。以下语法

x = A(2,:)

会创建一个包含 A 中第 2 行上所有元素的行向量。

任务
创建一个名为 density 的变量,其中包含名为 data 的矩阵中第 2 列上的所有元素。

:最后两列的所有元素

冒号运算符可以引用某个值范围。以下语法会创建一个包含矩阵 A 的第 1 行、第 2 行和第 3 行所有元素的矩阵。

x = A(1:3,:)

任务 创建一个名为 volumes 的变量,其中包含 data 的最后两列的所有元素。

答案

volumes = data(:,end-1:end)

单元素取值

单个索引值可用于引用向量元素。例如

x = v(3)

会返回向量 v 的第 3 个元素(当 v 为行向量或列向量时)。

任务 使用单个索引值创建一个名为 p 并且包含向量 density 中的第 6 个元素的变量。

单个索引值范围可用于引用向量元素的子集

单个索引值范围可用于引用向量元素的子集。例如

x = v(3:end)

返回向量 v 的一个子集,其中包含从第三个到最后一个元素范围内的所有元素。

任务 使用索引值范围创建一个名为 p 的向量,其中包含从 density 的第 2 个到第 5 个元素范围内的所有元素。

更改数组中的值

最后一列元素的向量

记住您可以使用 : 字符来提取整列数据。

任务 创建一个名为 v2 并且包含 data 的最后一列元素的向量。

v2 = data(:,end)

使用索引和赋值来修改变量的元素

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

A(2) = 11

任务 将 v2 中的第一个元素从 NaN 更改为 0.5。

第一行和最后一列中元素的值更改为 0.5

在这里插入图片描述

任务 将 data 的第一行和最后一列中元素的值更改为 0.5。

data(1,end) = 0.5

data 的第一列更改为 data 的第二列

您可以结合使用索引与赋值,将数组值更改为与其他元素相等。例如,以下代码将 x(1) 的值更改为 x(2) 的值:
x(1) = x(2)

尝试将 data 的第一列更改为 data 的第二列。

data(:,1) = data(:,2)

对向量执行数组运算

MATLAB 的设计让您能够自然地处理数组。例如,您可以将一个标量值与数组中的所有元素相加。

y = x + 2

任务 将 1 与 v1 的每个元素相加,然后将结果存储在名为 r 的变量中。

任意两个大小相同的数组相加

您可以将任意两个大小相同的数组相加。

z = x + y

任务 创建一个向量 vs,它是向量 v1 和 v2 的和。

数组中的所有元素与某个标量相乘或相除

您可以将数组中的所有元素与某个标量相乘或相除。

z = 2*x
y = x/3

任务 创建一个变量 va,其值为 vs/2(平均体积)。

max 函数来确定向量的最大值

MATLAB 中的基本统计函数可应用于某个向量以生成单个输出。可以使用 max 函数来确定向量的最大值。

xMax = max(x)

任务 创建一个变量 vm,其值为 va 向量的最大值。

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

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

任务 使用 round 函数创建一个名为 vr 的变量,其中包含四舍五入为整数的平均体积 va。

四舍五入

矩阵乘法

* 运算符执行矩阵乘法。因此,如果您使用 * 将两个大小相同的向量相乘,则由于内部维度不一致,您将会收到一条错误消息。

z = [3 4] * [10 20]
错误使用  * 
用于矩阵乘法的维度不正确。 

.* 运算符执行按元素乘法,允许您将两个大小相同的数组的对应元素相乘。

z = [3 4] .* [10 20]
z = 
    30    80

获取函数的多个输出

数组大小

size 函数可以应用于数组,以生成包含数组大小的单个输出变量。

s = size(x)

任务 创建一个名为 dsize 的变量,其值为 data 变量的大小。

使用方括号 ([ ]) 获得多个输出

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

[xrow,xcol] = size(x)

任务 创建变量 dr 和 dc,其中分别包含变量 data 的行数和列数。

max 函数确定向量的最大值及其对应的索引值

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

[xMax,idx] = max(x)

任务 创建变量 vMax 和 ivMax,其中分别包含 v2 向量的最大值和对应的索引值。

查看帮助文档

https://ww2.mathworks.cn/help/matlab/ref/randi.html

绘制向量图

plot 函数在一张图上绘制两个相同长度的向量

可以使用 plot 函数在一张图上绘制两个相同长度的向量。
plot(x,y)
任务
创建一个绘图,其中 sample 位于 x 轴,mass1 位于 y 轴。

指定与之对应的颜色、线型和标记样式

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

plot(x,y,"r--o")

以上命令将会绘制一条红色 ® 虚线 (–),并使用圆圈 (o) 作为标记。您可以在线条设定的文档中了解有关可用符号的详细信息。

任务 绘制 mass2(y 轴)对 sample(x 轴)的图。在绘图中使用红色 ® 星号 (*) 标记,并且不使用线条。

一张图上先后绘制两条线

请注意,每个绘图命令都创建了一个单独的绘图。要在一张图上先后绘制两条线,请使用 hold on 命令保留之前的绘图,然后添加另一条线。
任务
输入 hold on 命令。

然后绘制 mass1(y 轴)对 sample(x 轴)的图,并带有黑色 (k) 方形 (s) 标记,不带线条。

hold off

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

当您单独绘制一个向量时,MATLAB 会使用向量值作为 y 轴数据

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

任务 使用以下命令绘制向量 v1。 plot(v1)

plot 函数接受可选的附加输入

plot 函数接受可选的附加输入,这些输入由一个属性名称和一个关联的值组成。
plot(y,“LineWidth”,5)
以上命令将绘制一条粗线。您可以在线条属性文档中了解更多可用属性的详细信息。
任务
绘制 v1,线宽为 3。

属性名称-属性值对组

使用 plot 函数时,您可在绘图参数和线条设定符之后添加属性名称-属性值对组。
plot(x,y,“ro-”,“LineWidth”,5)
任务
绘制 v1(y 轴)对 sample(x 轴)的图,使用红色 ® 圆圈 (o) 标记,线宽为 4。

编写绘图注释

title

可以使用绘图注释函数(例如 title)在绘图中添加标签。此类函数的输入是一个字符串。MATLAB 中的字符串是用双引号 (") 引起来的。
title(“Plot Title”)
任务
为现有绘图添加标题 “Sample Mass”。

ylabel

任务
使用 ylabel 函数添加标签 “Mass (g)”。

项目 - 用电量

在此项目中,您将绘制各经济部门的用电量图 - 居民用电、商业用电和工业用电。您认为哪个经济部门的用电量将是最大的?

在这里插入图片描述

图中的数据为美国各年度七月份的用电量。用电量以 109 kWh/天为单位,价格以美分/kWh 为单位。

项目 - 音频频率

音频信号通常由许多不同的频率组成。例如,在音乐中,音符“中央 C”的基率为 261.6 Hz,并且大多数音乐都包含多个同时演奏的音符(或频率)。

在此项目中,您将分析风琴演奏 C 和弦的频谱。

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

fft

在绘图中,请注意 y 是周期性的,但它不是简单的正弦波。它由具有不同频率的多个正弦波组成。

傅里叶变换将返回信号的频谱信息。主频的位置将显示和弦中包含的音符。

您可以使用 fft 函数来计算向量的离散傅里叶变换。
fft(y)

fft 的输出值为复数。您可以使用 abs 函数来获得幅值。
任务
创建一个名为 yfft 的变量,表示 y 的离散傅里叶变换的绝对值。

xlim([xmin xmax])

向量 f 现在包含 n 个点。要将这些点转换为频率,您可以将整个向量乘以采样频率 (fs),然后除以点数 (n)。

f 将包含从 0 到 fs 的频率。主频位于 f 的开头位置。您可以使用 xlim 函数放大所关注的区域。
xlim([xmin xmax])
任务
将 f 乘以 fs/n。将输出赋给同一个变量 f。

使用 x 的限值 0 和 1000 绘制 yfft 对 f 的图。

以表的形式导入数据

要提取表变量,可以使用圆点表示法

要提取表变量,可以使用圆点表示法:
data.VariableName
任务
将 elements.Density 的内容赋给名为 d 的列向量。

将计算结果赋给表

如果您正在使用表,您可能希望将相关数据放在一起。您可以将计算结果赋给表,而不是创建单独的变量。
data.HeightMeters = data.HeightYards*0.9144
如果变量 data.HeightMeters 不存在,MATLAB 将在表中创建名为 HeightMeters 的新变量。

任务 将 elements.Density 的每个元素与 elements.Volume1 相乘。请使用 .*。

将结果赋给 elements.Mass。

使用表的一个变量对表进行排序

您可以通过在实时脚本的输出窗格中点击表来与表进行交互。例如,您可以使用表的一个变量对表进行排序。
在这里插入图片描述

在您对表感到满意时,您可以通过更新代码使更改永久化。
在这里插入图片描述

任务 按从最小到最大质量对表进行排序。然后更新脚本中的代码,再点击提交。

提取表的前三行

圆点表示法用于提取表变量。要提取行,可以使用常规数组索引。

尝试提取表的前三行:
top3 = elements(1:3,:)
请注意,top3 也是一个表。

逻辑索引

关系运算符(例如 >、<、== 和 ~=)

关系运算符(例如 >、<、== 和 ~=)执行两个值之间的比较。相等或不相等比较的结果为 1 (true) 或 0 (false)。

任务 使用关系运算符 < 测试 π 是否小于 4。将输出赋给一个名为 test 的变量。

关系运算符将某个向量或矩阵与单个标量值进行比较

您可以使用关系运算符将某个向量或矩阵与单个标量值进行比较。结果是与原始数组相同大小的逻辑数组。

[5 10 15] > 12
ans = 
    0    0    1

任务 测试向量 v1 中是否有小于 4 的元素。将输出赋给一个名为 test 的变量。

使用逻辑数组作为数组索引

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

v = v1(v1 > 6)
v =
    6.6678
    9.0698

任务 创建一个名为 v 的变量,其中包含 v1 中所有小于 4 的元素。

可以对两个不同向量使用逻辑索引

您也可以对两个不同向量使用逻辑索引。

v = sample(v1 > 6)
s =
    18
    23

任务 创建一个名为 s 的变量,其中包含 sample 中与 v1 中小于 4 的元素所在位置对应的元素。

使用逻辑索引在数组中重新赋值

您可以使用逻辑索引在数组中重新赋值。例如,如果您要将数组 x 中等于 999 的所有值都替换为值 1,请使用以下语法。

x(x==999) = 1

任务 修改 v1,将其中任何小于 4 的值都替换为 0。

使用逻辑运算符 and (&) 以及 or (|) 来组合逻辑比较

您可以使用逻辑运算符 and (&) 以及 or (|) 来组合逻辑比较。

要查找小于 4 且大于 2 的值,请使用 &:
x = v1(v1<4 & v1>2)

要查找大于 6 或小于 2 的值,请使用 |:
x = v1(v1>6 | v1<2)

试着获取 sample 中介于 10 和 20 之间的值。

编程构造

if

在这里插入图片描述

if elseif

在这里插入图片描述

for

在这里插入图片描述

决策分支

仅当条件为 true 时,才执行 if 代码块的主体。

在这里插入图片描述

任务 修改脚本,使第 4-7 行的绘图代码仅在 doPlot 为 1 时执行。

设条件不成立时执行其他代码

通常,您可能还希望在所设条件不成立时执行其他代码。为此,您可以使用 else 关键字,如下所示。

x = rand
if x > 0.5
    y = 3
else
    y = 4
end

任务 修改脚本,以便在 if 条件得不到满足时,执行以下代码行: disp("The density of " + element …
+ " is " + density)

elseif

elseif 关键字可在 if 后使用,以添加更多条件。您可以包括多个 elseif 代码块。

试着添加一个变量 doDisplay,用它来切换是否显示密度。使用 elseif 代码块添加此条件。

For 循环

运行以下代码时,循环体将被执行三次,因为循环计数器 © 通过 1:3(1、2 和 3)进行计数。
在这里插入图片描述

任务 将实时脚本第二节(第 4-7 行)中的代码放在一个循环中,以便代码执行 7 次。

将您的循环计数器命名为 idx。首次执行循环时,idx 的值应为 1,并且每次迭代时递增 1。

pause(0.2) 在 0.2 秒处停止循环

您注意到绘图的动画效果了吗?代码 pause(0.2) 在 0.2 秒处停止循环,以便绘图进行更新。请尝试通过增大值 0.2 来增加动画时间。

该循环执行 7 次,因为 density 向量有七个元素。如果您要对未知长度的向量执行循环,可以改用 length 函数:
for idx = 1:length(density)

项目 - 恒星运动

在这里插入图片描述

lambdaEnd  = lambdaStart + (nObs -1) * lambdaDelta
lambda = [lambdaStart:lambdaDelta:lambdaEnd]'

loglog 函数

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

loglog(x,y,"*--")

任务 将光谱 (s) 作为波长 (lambda) 的函数进行绘图,在两个坐标轴上使用对数刻度。使用点标记 (.) 并用实线 (-)
连接各点。

在绘图中添加 x 标签 “Wavelength” 和 y 标签 “Intensity”。

loglog(lambda,s,".-")
xlabel("Wavelength")
ylabel("Intensity")

min 函数

min 函数可以带有两个输出,其中第二个输出为最小值的索引。该索引与氢-α 谱线的位置对应。

任务 创建两个变量 sHa 和 idx,分别表示 s 的最小值和最小值的位置索引。

使用 idx 对 lambda 进行索引以找到氢-α 谱线的波长。将结果存储为 lambdaHa (λ Ha )。

[sHa,idx] = min(s)
lambdaHa = lambda(idx)

任务5 标记大小红色方框

线 (lambdaHa,sHa) 是氢-α 谱线的位置。

任务
将 x = lambdaHa、y = sHa 处的点绘制成一个标记大小 ("MarkerSize")8 的红色方框 ("rs"),添加到现有图中。
hold on
loglog(lambdaHa,sHa,"rs","MarkerSize",8)
hold off

恒星运动 II

在上一个项目中,您确定了一颗恒星的频谱是否发生了红移或蓝移,并计算了该恒星相对于地球的速度。在此项目中,您将同时计算所有恒星的速度。然后您将创建以下绘图。
在这里插入图片描述
在这里插入图片描述

for c = 1:7
    s = spectra(:,c)
    if speed(c)<=0
        loglog(lambda,s,"--")
    else
        loglog(lambda,s,".-","LineWidth",3)
    end
    hold on
end
hold off

图例 legend 函数

您可以将字符串数组直接传递给 legend 函数。

字符串数组 starnames 包含 spectra 中每颗恒星的名称。
任务
使用数组 starnames 向绘图中添加图例。

legend (starnames )

MATLAB 入门之旅摘要

https://blog.csdn.net/lxyoucan/article/details/127802456

绘图选项

摘自:
https://www.bilibili.com/video/BV13D4y1Q7RS/?p=9&spm_id_from=pageDriver&vd_source=3b8afcc2613780d7607382bae034945a
在这里插入图片描述
在这里插入图片描述

三维绘图

t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on
axis square

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值