MATLAB学习--官网入门教程

 于20250116-20250213

链接

MATLAB 入门之旅https://matlabacademy.mathworks.com/v1/cn/portal.html?course=gettingstarted#chapter=2v1&lesson=1§ion=1https://matlabacademy.mathworks.com/v1/cn/portal.html?course=gettingstarted#chapter=2v1&lesson=1§ion=1https://matlabacademy.mathworks.com/v1/cn/portal.html?course=gettingstarted#chapter=2v1&lesson=1§ion=1

学习内容

一、命令

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)%判断红移恒星,即根据速度大小确定图例中恒星的名称



 
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值