于20250116-20250213
链接
学习内容
一、命令
1.输入命令

任务 1 ✔
%除非另有指定,否则 MATLAB 会将计算结果存储在一个名为 ans 的变量中。
>> 3*5
ans =
15
任务 2 ✔
%MATLAB 中的等号 (=) 是赋值运算符,这意味着等号右侧的表达式赋给左侧的变量。
>> m=3*5
m =
15
任务 3 ✔
>> m=m+1
m =
16
任务 4 ✔
>> y=m/2
y =
8
任务 5 ✔
%在命令的末尾添加分号将抑制输出,但仍会执行该命令,且您可以在工作区窗口中看到该值。
>> k=8-2;
任务 6 ✔
%您可以按键盘上的向上箭头键重新调用以前的命令。
>> m=3*k
m =
18
任务 7 ✔
%MATLAB 不会在命令行窗口中重新运行以前的命令。如果您要在修改 m 后重新计算 y,需要重复命令 y = m/2。
>> y
y =
8
>> y=m/2
y =
9
2.命名变量
>> a = 8
a =
8
任务 1 ✔
%您可以将 MATLAB 变量命名为符合以下规则的任何名称:以字母开头,并且仅包含字母、数字和下划线 (_)。
>> A=-2
A =
-2
任务 2 ✔
>> avgAa=(a+A)/2
avgAa =
3
%如果您使用无效的变量名称,MATLAB 会显示建议的更正内容。您可以使用建议的命令、对其进行修改或按 Esc 键删除建议。
>> 3sq=9
3sq=9
↑
无效表达式。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。
是不是想输入:
>> sq=9
sq =
9
3.保存和加载变量

%您可以使用 save 命令将工作区中的变量保存到称为 MAT 文件的 MATLAB 特定格式文件中。
%要将工作区保存到名为 foo. Mat 的 MAT 文件中,请使用命令:
>> save foo
%在工作区中,您可以看到 clear 命令清空了所有变量。
%您可以使用 load 命令从 MAT 文件加载变量。
>> load foo
%请注意,变量 data 在工作区中列出。您可以通过输入变量的名称来查看任何变量的内容。
%clear 函数清理工作区。clc 命令清理命令行窗口。
%当您关闭 MATLAB 时,工作区将被清空。可以使用 MAT 文件来保存变量。这样,当您重新打开 MATLAB 时,可以将变量加载到工作区中。
%如果您只想加载或保存部分变量,可以使用函数的两个输入。尝试从文件 myData.mat 中仅加载变量 m:
>> load myData m
%然后尝试将变量 m 保存到名为 justm.mat 的新 MAT 文件中:
>> save justm m
3.使用内置的函数和变量
任务 1 ✔
%这里虽然只对 π 显示了四位小数,但它在内部是用更高的精度表示的。
>> x=pi/2
x =
1.5708
任务 2 ✔
%MATLAB 使用圆括号来传递函数输入,与标准的数学表示法类似。
>> y=sin(x)
y =
1
任务 3 ✔
>> z=sqrt(-9)
z =
0.0000 + 3.0000i
%在命令行窗口中仅显示前四个小数位。您可以使用 format 函数控制显示的精度。
%请试着输入 format long 并显示 x 的值。输入 format short 可切换回默认显示。
>> format long
x
x =
1.570796326794897
>> format short
>> x
x =
1.5708
二、MATLAB 桌面和编辑器
1.matlab编辑器
可以用实时脚本替代命令行窗口
2.运行脚本
要只执行一个节的代码,您可以点击 MATLAB 工具条中的运行节按钮。
请试着更改 r 的值,并仅运行该节。输出窗格中 r 的值会发生了怎样的变化?x 的值如何?
您也可以使用工具条中的按钮来创建新的节。尝试创建包含 y = 2*pi*r 的新的节。


三、向量和矩阵
MATLAB 是 MATrix LABoratory 的缩写。您会发现大多数 MATLAB 功能可以同时处理多个值。


1. 手动输入数组
标量为特殊的数组
您用空格(或逗号)分隔数值时(如前面的任务中所示),MATLAB 会将这些数值组合为一个行向量,行向量是一个包含一行多列的数组 (1×n)。
当您用分号分隔数值时,MATLAB 会创建一个列向量 (n×1)。注意列向量输入时不能带空格


2.创建等间距向量

%方法一:
y = [5 6 7 8]
y =
5 6 7 8
%方法二:其中: 运算符使用默认的间距 1,但是您可以指定您自己的间距
x = 20:2:26
x =
20 22 24 26
%方法三:如果您知道向量中所需的元素数目(而不是每个元素之间的间距),则可以改用 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:2:5)'
x =
1
3
5
3.数组创建函数

rand(2) 命令中的 2 指定输出将为一个 2×2 的随机数矩阵;
x = rand(2,3)创建一个2*3的矩阵;
x=zeros(6,3)创建一个6*3的全零矩阵;
如何知道现有矩阵的大小?您可以使用 size 函数,如size(x);
您也可以使用一行代码创建与现有矩阵大小相同的矩阵,如rand(size(x))。
四、索引和修改数组

1.对数组进行索引 (练习)
y = A(5,7)此语法将会提取 A的第 5 行第 7 列的值,然后将结果赋给变量 y;
y = A(end-1,end-2)提取倒数第二行,倒数第三列的值,赋值给变量y;
如果只对一个矩阵使用一种索引,它将按顺序从上到下遍历每列。
2.提取多个元素
volumes=data(:,end-1:end)创建一个名为 volumes 的变量,其中包含 data 的最后两列的所有元素;
x = v(3:end)返回向量 v的一个子集,其中包含从第三个到最后一个元素范围内的所有元素。
3.更改数组中的值
A(2) = 11可以结合使用索引和赋值来修改变量的元素。
x(1) = x(2)将 x(1) 的值更改为 x(2) 的值;
五、数组计算

对向量执行数组运算
y = x + 2 将一个标量值与数组中的所有元素相加;
z = x + y 您可以将任意两个大小相同的数组相加;
z = 2*x 以及y = x/3 您可以将数组中的所有元素与某个标量相乘或相除;
xMax = max(x) 可以使用 max 函数来确定向量的最大值;
xSqrt = sqrt(x) MATLAB 的函数可在单个命令中对整个向量或值数组执行数学运算;
* 运算符执行矩阵乘法,而 .* 运算符执行按元素乘法。
%关于.*运算
z = [3 4] .* [10 20]
z =
30 80
具有兼容大小的数组执行运算
%教程中可以运算,但在自己电脑上会报错“矩阵维度必须一致”
x = [1 2;3 4;5 6; 7 8].*[1;2;3;4]
六、调用函数

获取函数的多个输出
s = size(x) 可以应用于数组,以生成包含数组大小的单个输出变量;
[xrow,xcol] = size(x) 可以应用于矩阵,以生成单个输出变量或两个输出变量(矩阵的行和列)。使用方括号 ([ ]) 获得多个输出;
[xMax,idx] = max(x) 可以使用 max 函数确定向量的最大值及其对应的索引值。max 函数的第一个输出为输入向量的最大值。执行带两个输出的调用时,第二个输出为索引值。
如果只需函数的第二个输出,可以使用波浪号字符 (~) 忽略特定输出。
density = data(:,2) %将data中第二列赋值给density
[~,ivMax] = max(v2) %获取v2中最大值的索引
densityMax = density(ivMax) %使用上述索引提取值
如果 A 为矩阵,则 min(A) 是包含 A 的每一列的最小值的行向量。
七、帮助文档获取


doc 搜索内容
八、绘制数据图

1.绘制向量图
plot的两种用法:
(1)plot(sample,mass1) 创建一个绘图,其中 sample 位于 x 轴,mass1 位于 y 轴。
(2)plot(v1) 当您单独绘制一个向量时,MATLAB 会使用向量值作为 y 轴数据,并将 x 轴数据的范围设置为从 1 到 n(向量中的元素数目)。
注意:
(1)使用 plot 函数时,您可在绘图参数和线条设定符之后添加属性名称-属性值对组,如plot(x,y,"ro-","LineWidth",5) %绘制红色的以圆圈为标记实线图,线宽为5,注意圆圈和线宽的顺序不能改变。
(2)每个绘图命令都创建了一个单独的绘图。要在一张图上先后绘制两条线,请使用 hold on 命令保留之前的绘图,然后添加另一条线。启用保留状态时,将继续在同一坐标区上绘图。要恢复默认绘图行为,即其中每个绘图都有自己的坐标区,请输入 hold off。
2.编写绘图注释
title("Plot Title") 添加标题;
ylabel("Mass(g)") 和 xlabel("data")添加x轴和y轴标签;
legend("a","b","c") 添加图例;
bar(data(3,:)) 以及 title("Sample " + sample(3) + " Data")可以在绘图注释中使用变量的值。
九、复习
1.项目1:用电量
load electricity. Mat %加载数据
usage %查看矩阵
usage(2,3)=2.74 %替换矩阵中的数值
res=usage(:,1) %由矩阵中获得数据存储于res变量中
comm=usage(:,2)
ind=usage(:,3)
yrs=1991:2013 %创建一个名为 yrs 的向量,表示从 1991 年开始到 2013 年结束的年份。
%创建一个包含所有三列数据的绘图。使用 yrs 作为 x 数据。
plot(yrs,res,"b--") % res:蓝色 (b) 虚线 (--)
hold on
plot(yrs,comm,"k:") %comm:黑色 (k) 点线 (:)
plot(yrs,ind,"m-.") %ind:洋红色 (m) 点划线 (-.)
hold off
title("July Electricity Usage") %将标题 "July Electricity Usage" 添加到现有绘图。
legend("res","comm" , "ind") %用值 "res"、"comm" 和 "ind" 创建图例。

2.项目2:音频频率
load Cchord.mat %加载数据,y:录音信号 ;fs:采样频率
n=numel(y) %获取数据中y的元素数量,使用 numel 函数
t=0:n-1 %创建等距的t
t=t./fs
plot(t,y)
yfft=abs(fft(y)) %fft 函数来计算向量的离散傅里叶变换。fft 的输出值为复数,您可以使用 abs 函数来获得幅值。
f=0:n-1
f = f.* (fs./n) %向量 f 现在包含 n 个点。要将这些点转换为频率,您可以将整个向量乘以采样频率(fs),然后除以点数 (n)。
plot(f,yfft)
xlim([0 1000]) %可以使用 xlim 函数放大所关注的区域。

十、导入数据

以表的形式导入数据
要提取表变量,可以使用圆点表示法:data.VariableName
可以将计算结果赋给表,而不是创建单独的变量: data.HeightMeters = data.HeightYards*0.9144
十一、逻辑数组

1.逻辑索引
您可以使用逻辑数组作为数组索引,如v = v1(v1 > 6) 会提取索引为 true 的数组元素;
您可以使用逻辑索引在数组中重新赋值,如x(x==999) = 1将数组 x 中等于 999 的所有值都替换为值 1;
您可以使用逻辑运算符 and (&) 以及 or (|) 来组合逻辑比较。
要查找小于 4 且大于 2 的值,请使用 &,如x = v1(v1<4 & v1>2);
要查找大于 6 或小于 2 的值,请使用 |,如x = v1(v1>6 | v1<2)。
十二、编程

1.决策分支if
(1)if...end

(2)if...else...end

2.for循环

十三、综合练习
1.恒星运动I
load starData; %加载数据
nObs = size(spectra,1);%数据大小
lambdaStart = 630.02;%波长
lambdaDelta = 0.14 %间隔大小
lambdaEnd = lambdaStart+(nObs-1) *0.14; %创建变量
lambda=(lambdaStart:lambdaDelta:lambdaEnd)'; %创建列向量
s=spectra(:,2); %提取spectra第二列数据
[sHa,idx]=min(s);%s中最小值的大小sHa和索引idx
lambdaHa=lambda(idx); %使用索引
z=(lambdaHa/656.28)-1;%变量计算
speed=z*299792.458;
loglog(lambda,s,".-")%绘制对数坐标图(用法与plot一致)
xlabel("Wavelength")
ylabel("Intensity")
hold on
loglog(lambdaHa,sHa,"rs","MarkerSize",8);%在上图中进行标记,使用红色方框,线宽为8
hold off


2.恒星运动II
load starData
[sHa,idx] = min(spectra); %min(a)其中a为数组时表示每一列的最小值
lambdaHa = lambda(idx);%lambda中与索引对应的元素
z = lambdaHa/656.28 - 1;%数组计算
speed = z*299792.458
for c=1:length(spectra(1,:))%1至7列循环,创建所有恒星的绘图
s=spectra(:,c);
if speed(c)<=0
loglog(lambda,s,'--')
hold on
else
loglog(lambda,s,'LineWidth',3)
end
end
hold off
legend(starnames)%以数组的方式创建图例
movaway=starnames(speed>0)%判断红移恒星,即根据速度大小确定图例中恒星的名称



42万+

被折叠的 条评论
为什么被折叠?



