• Matlab零基础入门


    前言:本篇是随笔,一段时间没用Matlab,简单复习了下,都是入门知识,零基础可读



    1. 初步认识界面和命名

    image-20220526175834052

    四个区:文件区、命令行窗口、编辑器以及工作区

    1.1 建立脚本(即编辑器),后进行命令;

    1.2 脚本名称不保存就输入内容会在文件夹的名字右上角显示*号;

    image-20220526180152465

    1.3 变量名必须以字母开头

    1.4 文件名建议最好是字母开头。

    组成:字母、数字、下划线

    1.5 编辑器内选中所需执行内容,右键可单独进行执行

    1.6 Matlab所有的索引 index都是从1开始的,对于非码农而言的科研人员相当友好。

    2. 数据类型和矩阵

    2.1 数据类型

    五种:数字;字符和字符串;矩阵;元胞数组;结构体

    2.2 clc 和 clear all的区别

    clc : 清除命令行窗口的所有命令

    clear all : 清楚工作区的所有变量

    2.3 注释:matlab软件的注释跟C++、Java这类语言还不一样, %%是横线加粗的注释 %是普通注释

    2.4 加减乘除,+ - * /

    2.5 字符串: 用单引号引起来(注意区分C++的双引号)。

    image-20220526181500029

    2.6 区分 abs 、char 、num3str 把数字转换为字符串

    对字符操作的话,abs是ASCII转10进制,char10进制转ASCII。

    备注:abs函数:数值的绝对值和复数的模值, 函数的定义域包括复数。

    “num2str(65)”是把数字65,转换成字符串‘65’

    2.7 length计算字符串长度 length(s)

    类似其他语言的length

    2.8 矩阵运算

    定义矩阵:

     A=[1 2 3;4 5 6; 7 8 9]
    
    • 1

    image-20220526182816428

    转置矩阵:

    B=A'
    
    • 1

    image-20220526182849035

    拉长矩阵(竖向拉长):

     C=A(:)
    
    • 1

    image-20220526183058410

    求逆矩阵 :

    D=inv(A)
    
    • 1

    image-20220526183223098

    生成全0的矩阵:

     E=zeros(4,2,3)   
    
    • 1

    E矩阵3维,4行, 3列 全为0

    image-20220526183531736

    2.9 rand、randi和randn的区别

    image-20220526183744609

    演示几个:

    在一维生成随机数,随机数范围是0~1

    E(:,:,1) = rand(4,2)    
    
    • 1

    image-20220526184131659

    在二维生成随机数,随机数范围0~10

     E(:,:,2) = randi(10,4,2)
    
    • 1

    image-20220526184230231

    在三维生成标准正态分布的随机数

    E(:,:,3) = randn(4,2)
    
    • 1

    image-20220526184450475

    3.元胞数组和结构体

    3.1 元胞数组

    类似C++中的结构体类型

    例:

    A = cell(1, 6)
    
    • 1

    image-20220526185338906

    image-20220526184648462

    3.2 eye(3)

    生成3行3列单位矩阵(对角线为1,其余为0)

    A{2}=eye(3)
    
    • 1

    image-20220526185731074

    3.3 magic

    生成n阶幻方,无论横竖斜三个方向上的三个数的和总是相同的。

    把3*3的幻方矩阵放入A的第一个盒子

    A{1}= magic(3)   
    
    • 1

    image-20220526185945115

    image-20220526190044975

    3.4 结构体

    注意下初始化方式略有不同,可以理解成键值对。

    books=struct('name',{{'machine learning','data mining'}},'price',[30,40])
    
    • 1

    image-20220526190339169

    books.name
    
    • 1

    image-20220526190458214

    books.name(1)     得到cell
    
    • 1

    image-20220526190525262

    image-20220526190825026

    books.name{1}    得到字符串
    
    • 1

    image-20220526190556090

    image-20220526190759310

    4. 矩阵构造和四则运算

    4.1 矩阵构造

     B=1:2:9  
    
    • 1

    1-9 步长为2递增跳转

    image-20220526191011979

    c=repmat(B,3,2)
    
    • 1

    把B竖着重复三次,横着重复两次

    可以理解成把B当成一个最基本的数据,重复B创建一个新的3行2列的矩阵

    image-20220526191227968

    D=ones(2,4) 
    
    • 1

    两行四列全1的矩阵,其它可在此基础上乘响应的倍数

    4.2 矩阵运算

    注意下点乘就行

    A .* B 对应项相乘
    
    • 1
    A. / B 对应项相除
    
    • 1
    A / B 矩阵相除,可以理解成A乘上B的逆矩阵。
    
    • 1

    4.3 矩阵的下标

    注意一点,跟C++的二维数组不同的点在于,matlab矩阵的下标起点为1

    A = magic(3)
    
    B = A(1,1)
    
    • 1
    • 2
    • 3

    image-20220526192619063

    B=A(:,3)   第三列所有行
    
    • 1

    image-20220526192741155

    C=A(3,:)   取第三行所有列
    
    • 1

    image-20220526192756718

    b=A(:,[1,3]) 取所有行,第1,3列

    c=A([2,3],[1,2]) 取第2,3行,以及1,2列

    4.4 find的用法:

    返回矩阵或向量中非零元素的索引

    [m,n]=find(A>5)
    
    返回非零元素下标 find(vector)   m行n列
    
    • 1
    • 2
    • 3

    image-20220526193110533

    5.逻辑与流程控制

    这块没啥注意的,逻辑和C语言类似。

    5.1 if end 分支结构

    if else end

    image-20220526195138063

    5.2 for end

    image-20220526193447849

    例:

    image-20220526193522577

    和其他语言一样,matlab的for循环也可以嵌套for循环

    例:

    image-20220526194658975

    5.3 while end

    while后面的东西成立,则执行,否则 end

    image-20220526194936957

    例:

    image-20220526195041782

    5.4 switch case case … otherwise end

    image-20220526195350393

    6.绘图

    6.1 二维平面绘图

    figure 在使用plot绘图的时候,默认都是在figure上面,figure可以新建一个空白图像
    
    plot(x,y)  作图函数
    
    title('y=sin(x)')  图标题
    
    xlabel('x')  给x加一个坐标
    
    ylabel('sin(x)')  给y加一个坐标
    
    xlim([0 2*pi])  给图片能显示的x坐标限制一个最大值
    
    plotyy  共用一个x坐标系,在y上面有不同的取值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    自定义颜色:

    image-20220526200009220

    自定义线型

    image-20220526200158994

    自定义数据标记点

    image-20220526200205906

    代码案例:

    x=0:0.01:20
    
    y1=200*exp(-0.05*x).*sin(x)
    
    y2=0.8*exp(-0.5*x).*sin(10*x)
    
    figure
    
    [AX,H1,H2]=plotyy(x,y1,x,y2,'plot')
    
    set(get(AX(1),'Ylabel'),'String','Slow Decay')
    
    set(get(AX(2),'Ylabel'),'String','Fast Decay')
    
    xlabel('Time(\mesec)')
    
    title('Multiple Decay Rates')
    
    set(H1,'LineStyle','--')
    
    set(H2,'LineStyle',':')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    执行到plotyy,理解下共用一个坐标系的意思

    image-20220526200539622

    增加横纵坐标名称,并为图片增加图片名

    image-20220526200948996

    改变线型

    image-20220526201033841

    6.2 三维立体绘图

    二维绘图用plot,三维绘图用plot3()

    加网格 gird on

    各个方向变成正方体 axis square

    加标签 xlabel(‘’) ylabel(‘’) zlabel(‘’)

    保持原图,后边还要在这个基础上继续画图 hold on

    例:

    t = 0:pi/50:10*pi;
    plot3(sin(t),cos(t),t)
    xlabel('sin(t)')
    ylabel('cos(t)')
    zlabel('t')
    grid on 
    axis square
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20220526201619493

    6.3图形的保存和导出

    两个办法导出图片(不要直接截图)

    (1) 编辑 ->复制图片->word中粘贴 (导出设置中可以设置大小)

    (2) 文件->保存

    6.4 图形窗口的分割

    subplot(2, 2, 1) 2行2列四个方块第一个图

    subplot(2, 1, 2) 2行1列两个块第二个图

    subplot(4,4,3) 4行4列第三个

    subplot(4,4,8) 4行4列第八个

    x = linspace(0, 2*pi, 60);
    
    subplot(2, 2, 1)     
    
    plot(x,sin(x) - 1);
    
    title('sin(x) - 1');
    
    axis([0, 2*pi, -2, 0])
    
    subplot(2, 1, 2)
    
    plot(x,cos(x)+1);
    
    title('cos(x)+1');
    
    axis([0,2*pi,0,2])
    
    subplot(4,4,3)
    
    plot(x,tan(x));
    
    title('tan(x)');
    
    axis([0,2*pi,-40,40])
    
    subplot(4,4,8)
    
    plot(x,cot(x));
    
    title('cot(x)');
    
    axis([0,2*pi,-35,35])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    image-20220526203316516

    问题:matlab代码行加不加分号的区别?

    在代码行的后加分号运行结果不会显示在命令行窗口;不加分号,变量的值会随着运行显示在命令行窗口。

    如果不想命令行窗口显示太多东西,可以在代码编写的过程中加上分号,需要知道变量的值的时候在工作区进行查看即可。
    nspace(0, 2*pi, 60);

  • 相关阅读:
    M.2接口电路设计
    SpringBoot如何实现全局异常类处理
    一、配置环境
    Vue 中 (moment)操作日期的加减与展示
    2022_08_05__106期__栈和队列
    ArcGIS基础实战:面数据拓扑创建和错误修改全流程
    Lua 如何读写ini文件
    数组在TypeScript中是如何工作的
    Oracle查询表全部唯一约束(唯一键)
    【函数指针】
  • 原文地址:https://blog.csdn.net/weixin_48953972/article/details/124993273