Matlab入门

    技术2022-07-16  79

    基本语法

    赋值语句

    # 使用等号(=) 创建变量 左侧 (x) 是变量的名称,其值为右侧 (pi) 的值 x = pi #函数使用 y = sin(-5)

    桌面管理

    将当前工作区保存到 MAT 文件中

    save data.mat

    将 MAT 文件中的变量加载到工作区

    load data.mat

    清除工作区中的所有变量

    clear

    清除命令行窗口中的所有文本

    clc

    更改数值输出的显示方式

    format long/short

    数组

    1. 创建数组

    行向量

    创建一个一行多列的数组,使用空格或者逗号分隔

    x = [3 5] x = [3, 5]

    列向量

    创建一个多行一列的数组,使用逗号分隔

    x = [7; 9]

    矩阵

    使用空格和分号来创建一个矩阵,即包含多行多列的数组。

    x = [5, 6, 7;8, 9, 10] # 或 x = [5 6 7; 8 9 10]

    方括号内执行计算

    x = [sqrt(10) pi^2]

    2.创建等间距的数组

    简便方法创建等间距的向量

    y = 1:4

    指定间距 — 创建一个x的行向量,1-5 ,间距为0.5

    x 1:0.5:5

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

    创建一个1-10的向量,共包含5个元素

    # linspace(first,last,number_of_elements) x = linspace(1, 10, 5)

    使用转置运算符( ’ ) 将行向量转为列向量

    x = 1:3; x = x' x

    x =创建时通过一条命令将行向量转为列向量

    # 创建1-5的行向量 间距为2 并转置成列向量 x = (1:2:5)' x

    3. 通过方法创建数组

    使用内置函数创建随机方阵

    x = rand(5)

    使用2个参数来创建非方阵

    # 创建一个5行1列的数组 x = rand(5, 1)

    使用zeros 来创建全零矩阵

    # 创建一个6行3列的全零矩阵 x = zeros(6, 3)

    使用size函数获取矩阵大小

    # 创建一个与现有矩阵x大小相同的矩阵y y = rand(size(x))

    数组索引

    1. 通过索引提取元素

    使用行、列索引从数组中提取值

    # 加载 datafile 数据 并提取data中5行2列的数据 load datafile data(5, 2)

    使用end 作为行或列索引来引用最后一个元素

    y = data(end, 3)

    end 关键字也支持算术运算

    # 创建标量变量x, 值为data 的倒数第二行第三列 x = data(end-1, 3)

    只使用一种索引,那么矩阵会从第一列开始从上到下一次遍历每列

    # data 为一个7*3的矩阵 那么索引8会遍历到第1行第1列的元素 data(8) #索引也支持变量 y = 1 z = 2 data(y, z)

    2. 提取多个元素

    使用冒号运算符( : ) 可指代该维度中的所有元素

    # 创建一个名为 density 的变量,其中包含名为 data 的矩阵中第 2 列上的所有元素 density = data(:,2)

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

    # 创建一个名为 volumes 的变量,其中包含 data 的最后两列的所有元素。 volumes = data(:,end-1:end)

    单个索引值可用于引用向量元素,如果多列依旧按照从上到下顺序索引

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

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

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

    自定义索引

    # 自定义一个索引规则,提取 density 的第一个、第三个和第六个元素 A = [1,3,6]; density(A)

    3. 更改数组中的值

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

    # 获取data 最后一列 v2 = data(:,end) # 将v2 中第一个元素更改为0.5 v2(1) = 0.5 #将data 第一行最后一列的元素值 改为0.5 data(1,end)=0.5

    数组计算

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

    常量值与数组中的所有元素进行计算

    # 将v1 的每个元素都加1 r = v1 + 1

    向量与向量相加

    vs = v1 + v2

    使用内置函数计算向量

    vm = max(va) vr = round(va)

    矩阵乘法 使用 .*`

    #创建一个名为 mass 的变量,其中包含 density 和 va 的按元素乘积。 mass = density .* va

    矩阵乘矩阵

    # 4x2的矩阵 乘 1x4的矩阵 x = [1 2;3 4;5 6;7 8] .* [1; 2;3;4] 结果: x = 4x2 1 2 6 8 15 18 28 32

    调用函数

    1. 获取函数的多个输出

    size函数可以生成单个输出或者多个输出变量,使用方括号[]获得多个输出

    # 使用dsize 接收size的值 值为一个2*1的矩阵 dsize = size(data) # 创建变量 dr 和 dc,其中分别包含变量 data 的行数和列数 [dr, dc] = size(data)

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

    #创建变量 vMax 和 ivMax,其中分别包含 v2 向量的最大值和对应的索引值。 [vMax,ivMax] = max(v2)

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

    #获取 v2 中最小值的索引值。使用此索引从 density 中提取值 density = data(:,2) [~,ivMin] = min(v2); minData = density(ivMin)

    绘制数据图

    绘制向量图

    load datafile sample = data(:,1); density = data(:,2); v1 = data(:,3); v2 = data(:,4); mass1 = density.*v1; mass2 = density.*v2;

    使用plot函数在一张图上绘制两个相同长度的向量(2个参数长度必须相同)

    #创建一个绘图,其中 sample 位于 x 轴,mass1 位于 y 轴。 plot(sample,mass1)

    plot函数接受一个附加参数。使用该参数,您可以通过在引号中包含不同符号的方式来指定与之对应的颜色、线型和标记样式。具体参考: https://ww2.mathworks.cn/help/matlab/ref/linespec.html?lang=en

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

    每个绘图都创建了一个单独的绘图,要在一张图上,绘制2条线,hold on 命令保留之前的绘图,然后添加另一条线。

    # 先保存上一张图 然后再绘制一张蓝色点图 hold on plot(sample,mass1,"b.")

    要恢复默认绘图行为,即其中每个绘图都有自己的坐标区,请输入 hold off。

    hold off

    如果单独绘制一个元素,参数会作为y轴来使用,而x轴为向量的元素数目

    plot(v1)

    可选输入参数,由一个属性和对应值组成

    # 设置线条宽度为3 plot(v1, "lineWidth", 3) # 设置线条颜色为红色 plot(v1,"Color","r") #也可以通过.的方式来设置对应的属性 p = plot(v1) p.Color="r" p.LineWidth = 5

    绘图参数和线条设定符之后添加属性名称-属性值对组

    # 绘制 v1(y 轴)对 sample(x 轴)的图,使用红色 (r) 圆圈 (o) 标记,线宽为 4。 plot(sample,v1,"r-o","LineWidth",4)

    为绘图添加标题

    title("Plot Title")

    给x, y轴添加标签,

    xlabel("Mass(x)") ylabel("Mass(g)")

    使用 legend 函数为绘图添加图例

    legend("Exp A","Exp B")

    绘图注释中也可以使用变量的值

    bar(data(3,:)) title("Sample " + sample(3) + " Data")

    逻辑数组

    逻辑索引

    load datafile sample = data(:,1); v1 = data(:,3);

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

    # 使用 < 测试pi是否小于4 test = pi < 4

    当向量或者矩阵与某个标量进行比较,返回值是与原向量或矩阵大小相同的 0 1组成的向量和数组。

    # 测试向量v1 中是否有小于4 的元素 test = v1 < 4

    使用逻辑数组作为数组索引,那么此时只会返回逻辑为true的所有元素

    # 获取v1 中所有小于 4 的元素 v = v1(v1 < 4) #创建一个名为 s 的变量,其中包含 sample 中与 v1 中小于 4 的元素所在位置对应的元素。 s = sample(v1 < 4)

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

    #修改 v1,将其中任何小于 4 的值都替换为 0 v1(v1<4)=0

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

    #获取 sample 中介于 10 和 20 之间的值。 sample(sample>10 & sample<20)

    编程

    决策分支

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

    x = randi([0 1]) if x == 1 y = 3 end

    希望在条件不成立时执行其他代码,那么可以使用else关键字

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

    希望多重if else 判断 则可以写成elseif

    x = rand if x > 0.5 y = 3 elseif x > 1 y = 4 else y = 5 end

    For 循环

    如果同一个代码需要执行多次 那么可以使用for 循环来实现

    # 打印 for c = 1:3 disp(c) end # 如果需要对未知长度的向量执行循环, 可以改用length 函数 for idx = 1:length(density) disp(idx) end
    Processed: 0.017, SQL: 9