MATLAB学习笔记

2023-05-16

项目需要用到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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB学习笔记 的相关文章

  • windows2008 JDK8安装内部错误61003

    在windows 2008 R2服务器上安装JDK8 Update341时 xff0c 出错报错内部错误61003情况 现象 原因分析 没有装visual c 43 43 2015 redistributable 解决办法 安装 visua
  • SQL Server Management Studio 访问远程数据库

    刚拿到这个软件时 xff0c 只会连接本地的数据库 服务器名称下拉框中的数据不知道怎么维护 后来才发现这个远程可能当作输入框使用 输入连接字符串就可以连接了 连接字符串 比如java中的jdbc连接字符串是 xff1a jdbc sqlse
  • SqlServer 导出导入表结构与数据

    在运维和数据备份的时候 xff0c 偶尔会需要导出表结构与数据 那么具体如何操作呢 xff1f 事先说明一下 xff0c 本文写的比较仓促 xff0c 质量一般 xff0c 仅供参考 环境 这里以Microsoft SQL Server M
  • 设计模式之【组合模式】,树形结构的完美解决方案

    文章目录 一 什么是组合模式1 组合模式三大角色2 组合模式应用场景3 组合模式注意事项和细节 二 透明组合模式1 学院院系案例2 透明组合模式总结 三 安全组合模式1 linux目录系统案例2 安全组合模式总结 四 源码中使用的组合模式1
  • Sql Server 脚本创建新的数据库

    基中dbname替换成你的数据库实例名称 D tools SqlServer MSSQL DATA 替换成文件保存的实际路径 span class token comment 创建数据库 span span class token keyw
  • windows使用nginx探索笔记

    在macOS和linux中使用nginx我早已经轻车熟路 突然切到windows的环境中 xff0c 我反而不会用了 于是我就记一下笔记吧 本篇写的比较冗长 xff0c 精简版本见 windows使用nginx https blog csd
  • windows安装nginx并设置开机自启动

    在macOS和linux中使用nginx我早已经轻车熟路 突然切到windows的环境中 xff0c 我反而不会用了 之前写了 windows使用nginx探索笔记 内容比较冗长 xff0c 所以本文尽量精简一下 环境 操作系统 xff1a
  • windows redis安装与开机自启动

    Redis 在 Windows 上不受官方支持 但是 xff0c 您可以按照以下说明在 Windows 上安装 Redis 进行开发 要在 Windows 上安装 Redis xff0c 您首先需要启用WSL2 xff08 适用于 Linu
  • windows11中hosts配置

    windows11中hosts配置 打开配置路径 win 43 r打开运行 xff0c 在运行中输入drivers双击etc目录就打开如下路径 xff1a 实际上也可以在运行中直接输入C Windows System32 drivers e
  • Windows Server 2019安装SQL Server 2014

    最近要部署一个项目 xff0c 需要用到SQL Server 2014 我把安装过程简单记录一下 xff0c 给有需要的朋友吧 下载安装包 在国内微软的官网下载速度还是比较慢的 xff0c 我是从 https msdn itellyou c
  • spring boot项目windows开机自启动

    windows服务器的运维的过程中 xff0c 很难避免服务器重启 如果每次服务器重启以后都要人工启动服务 xff0c 就太麻烦了 web 后端如果能开机自动启动 可以节省不少运维成本 相关阅读 windows安装nginx并设置开机自启动
  • 交行对账接口100.100.100.X访问超时解决办法

    今天维护一个老的项目 xff0c 一个老的项目已经稳定运行近1年了 最近突然出现故障了 windows服务器 xff0c 中间为了排除问题 xff0c 重启了一下服务器 毕竟windows服务器 xff0c 有时重启包治百病 各种问题都成功
  • PhpStudy集成环境,让天下没有难配的服务器环境

    简介 让天下没有难配的服务器环境 xff0c 解放运维 PhpStudy国内12年老牌公益软件 xff0c 集安全 xff0c 高效 xff0c 功能与一体 xff0c 已获得全球用户认可安装 xff0c 运维也高效 支持一键LAMP LN
  • windows安装mysql client 命令行客户端

    我在macOS和linux中 xff0c 有一些操作比较喜欢直接使用mysql 命令行程序完成 切到windows中反而不知道如何安装mysql client了 相关阅读 macOS 安装mysql client命令行工具 https bl
  • Error creating bean with name ‘BAdminMapper‘ defined in file [C:\Users\ASUS\Desktop\FleakMarket-mast

    项目最初是可正常运行的 xff0c 我只是把一些 java文件放到 xff08 就是直接用鼠标拖动文件 xff09 其他包下 xff0c 然后出现下面这个对话框 Refactor后 xff0c 当我重新Run Application 时 x
  • 查找(一):简单符号表

    1 1 符号表 符号表主要运用于键值对 xff08 key value xff09 的操作 用例能够将一个键值对插入符号表 xff0c 并希望在以后能够从符号表中按照键 key 找到相应的值 value 符号表从某种意义上与数组类似 xff
  • 微信支付配置信息如何获取

    微信支付需要配置各种key 密钥什么的 这样配置应该在哪获取 xff0c 刚接触的时候还挺懵的 因为我也没有找到相关介绍的文章 xff0c 我自己就在这么多菜单中一个个翻找 xff0c 终于凑齐了 就像集齐龙珠一样 于是我就整理一下留给需要
  • 微信公众号管理后台获取已关注的openid

    最近在调试微信支付功能 xff0c 创建新的订单时有个参数openid xff0c 我如果随便写就会返回一个错误appid和openid不匹配 因为我仅仅是为了测试微信支付的接口 xff0c 如何简单方便的获取测试用户的openid呢 xf
  • windows server 2016免驱网卡驱动

    普通的windows10免驱usb网卡 放到windows server 2016上就没有用了 产品型号 这里并不是广告 xff0c 以下产品亲测可用的 xff0c 其他usb无线网卡不太清楚 87 CZ0001 2 x1f5dd yiyk
  • GnuPG-2.1 与 pacman 密钥环

    我的archlinux有2周没有更新了 xff0c 今天更新老是报以下错误 xff1a 错误 xff1a dmenu 来自 34 T J Townsend lt blakkheim 64 archlinux org gt 34 的签名是勉强

随机推荐

  • Windows Terminal绿色版本

    Windows Terminal在线安装非常简单 如果电脑没法上网如果离线安装呢 xff1f 步骤 要求 xff1a Windows 10 1903版本及以上 到https github com microsoft terminal rel
  • ubuntu systemctl管理

    启动服务状态 systemctl start nginx service 查询服务状态 systemctl status nginx service 开机启动 systemctl span class token builtin class
  • docker container 开机自动启动

    我在docker中安装了mysql与redis 每次电脑重新后都要手动启动一下相应的docker容器 xff0c 感觉很不方便 能不能把docker容器设置成自动启动呢 xff1f 官方文档 官方有相关的文档 xff0c 大家可以自行看一下
  • Spring Boot 做成 archlinux service 开机自动启动

    archlinux与ubuntu操作方式基本相同 创建employee服务 span class token function sudo span span class token function vim span etc systemd
  • Nginx 服务器 SSL 证书安装部署配置https

    我使用的是腾讯的云服务器 xff0c 所以直接参考腾讯的官方文档很容易就实现了 详见文档 xff1a https cloud tencent com document product 400 35244 腾讯云服务器 步骤 申请证书 htt
  • javascript 获取url中的参数

    方法封装 span class token keyword function span span class token function getAllUrlParams span span class token punctuation
  • npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果 包括路径,请确保路径正确,然后再试一次。

    项目场景 xff1a 使用HBuilder X导入项目后 xff0c 在内置终端执行npm install命令时报错 问题描述 报错提示如下 xff1a npm span class token operator span 无法将 npm
  • VirtualBox 常用命令

    查看虚拟机列表 VBoxManage list vms 我这里显示的是 windows10LTSC 2fa64002 44ca 4ec1 a76e cf56aee5105c 这个名称 xff0c 我们后面会用的到 开启虚拟机在后台运行 VB
  • windows10自动登录

    输入用户名密码 xff0c 有利于保护数据的安全 但是如果我使用的是虚拟机 xff0c 或者本身也不存在什么敏感数据 每次输入用户名密码就会显的繁琐了 那么怎么设置用户自动登录呢 xff1f 软件实现 以前我都是使用软件实现的 xff0c
  • i3 Android Emulator floating模拟器浮动

    在i3 wm窗口管理器中 xff0c 开发android应用 模拟器平铺效果不太好 xff0c 会一直闪屏 所以我希望android模拟器默认是浮动的效果 设置如下 xff1a span class token comment Androi
  • xmodmap开机自动启动

    xmodmap我在i3中设置的开机自动启动一直不生效 xff0c 因为一直忙也没有时间研究 就每次手动启动一下 手动启动总之还是麻烦 xff0c 忙里偷闲 xff0c 研究一下 现象 xmodmap命令设置开启自动启动 xff0c 无效 x
  • archlinux更新后fcitx5无法使用

    现象 今天遇到一个非常奇怪的事情 xff0c 我更新完archlinux以后发现我的fcitx5中文输入法无法使用了 严谨点说 xff1a kitty终端中可以使用 其他常见程序中都无法使用 i3wm和 KDE桌面环境中都无法正常使用 环境
  • archlinux 安装ibus-rime

    中州韵输入法引擎 xff08 英语 xff1a Rime Input Method Engine xff0c 又称Rime 输入法 xff09 是由佛振编写的开源中文输入法 xff0c 目前项目网站 源代码均托管在GitHub 注 1 基于
  • vscode xmodmap转义的esc无效解决办法

    在archlinux中使用xmodmap把大小写按键 映射成esc 在vim xff0c IDEA中使用正常 xff0c 但是在vscode 中按大小写转换键没法达成esc效果 解决办法 span class token string pr
  • archlinux fcitx5-rime五笔输入法

    Rime xff08 中州韵输入法引擎 xff09 是一款支持多种输入方案的输入法引擎 Rime 本身没有用于处理用户输入的前端 xff0c 需要配合输入法框架才能使用 xff0c 比如 Fcitx5 简体中文 或 IBus 简体中文 折腾
  • i3wm调整缩放

    4K显示器 xff0c i3wm默认显示字体太小了 如何调整呢 xff1f 如果您没有使用桌面环境 xff08 如 KDE Xfce 或其他为您操作 X 设置的环境 xff09 xff0c 您可以通过 Xresources 中的变量手动设置
  • linux解压rar

    在linux中比较常见的压缩包有gz tar zip bz2 我个人是比较喜欢使用zip xff0c 免费且通用 xff0c linux macOS和windows支持都不错 我的大部分同事使用的是windows 在Windows中比较常用
  • npm install报error code 1;npm run build报Node Sass does not yet support your current environment

    项目场景 xff1a 本人已提前安装了nodejs xff0c 且此文仅描述本人所遇问题及解决方案 有类似问题的朋友 xff0c 此文提供的解决方案仅供参考 HBuilder X 导入项目 xff0c npm install安装依赖 xff
  • 如何在 Ubuntu 安装 Microsoft Edge

    终端 CLI 方式 更喜欢从命令行安装软件 xff1f 我们为您提供保障 只需将以下命令复制 粘贴到您选择的终端模拟器中即可 第一 xff1a 设置脚本 这会将 Microsoft Edge 存储库添加到您的系统 xff0c 并导入 Mic
  • MATLAB学习笔记

    项目需要用到matlab xff0c 我是这方面的小白 做一下简单的笔记 xff0c 仅供自己查阅使用 链接 MATLAB 入门之旅 视频教程 https matlabacademy mathworks com R2022a cn port