matlab使用1-基础

matlab使用1-基础

文章目录

  • matlab使用1-基础
    • 1. 界面介绍
    • 2. matlab变量
    • 3. matlab数据类型
    • 4. matlab矩阵操作
    • 5. matlab程序结构
      • 5.1 顺序结构
      • 5.2 循环结构
      • 5.3 分支结构

1. 界面介绍

image-20240511174832316

  • 命令行窗口输入:clc

    • 可清除命令行窗口command window的内容

    • clc
      
  • 命令行窗口输入:clear all

    • 可清除命令行窗口command window + 工作区work widow的内容

    • clear up
      
  • 编辑器注释(不会执行的语句):

    %% 注释
    % 注释
    

2. matlab变量

  • matlab变量命名规则
    • 变量名区分大小写
    • 变量名长度不超过63位
    • 变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点符号
    • 变量名应简介明了,通过变量名可以直观看出变量所表示的物理意义

3. matlab数据类型

  • 数字

  • 字符与字符串

    • double('a')
      • 获取字符或字符串中每个字符的数值(即 ASCII 或 Unicode 编码)
      • image-20240511182858936
    • double('abc')
      • 获取字符或字符串中每个字符的数值(即 ASCII 或 Unicode 编码)
      • image-20240511182938219
    • char(97)
      • 用于创建一个包含单个字符的字符数组(字符串),该字符为对应的ASCII码
      • image-20240511183058247
    • num2str(100)
      • 用于将数值(如整数、浮点数等)转换为字符串表示形式
      • image-20240511183249663
    • length('abcdefg')
      • 用于获取数组的长度(即数组中元素的数量)
      • image-20240511183537316
  • 矩阵

    • 矩阵的定义

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

      image-20240511184307938

    • 转置矩阵(行列互换,行变列,列变行)

      % b是a的转置矩阵
      b = a'
      

      image-20240511184433155

    • 转换成列向量

      % b是将a转换之后的列向量(按列转换:第一列的元素 + 第二列的元素 + ......)
      b = a(:)
      

      image-20240511184823899

    • 逆矩阵(与原矩阵相乘为单位矩阵;仅限于方阵)

      % b为a的逆矩阵
      b = inv(a)
      

      image-20240511185544954

    • 三维零矩阵

      • 补充:随机数

        • rand生成均匀分布的伪随机数,分布在0-1之间
          • rand(m, n)生成m行n列的均匀分布的伪随机数
          • rand(m, n, 'double')生成指定精度的均匀分布的伪随机数,参数还可以是’single’
          • rand(RandStream, m, n)利用指定的RandStream(类似于随机种子)生成伪随机数
        • randa生成标准正态分布的伪随机数(均值为0,方差为1)
          • 语法同上rand
        • randi生成均匀分布的伪随机整数
          • randi(iMax)在开区间(0, iMax)生成均匀分布的伪随机整数
          • randi(iMax, m, n)在开区间(0, iMax)生成mXn型随机矩阵
          • r = randi([iMin, iMax], m, n)在开区间(iMin, iMax)生成mXn型随机矩阵
      • 示例:

        E = zeros(2, 3, 3);  
        E(:,:,1) = rand(2, 3);  
        E(:,:,2) = randi(2, 2, 3); % 注意这里也要是2x3,因为E的维度是2x3x3  
        E(:,:,3) = randn(2, 3);  
        

        image-20240514102722271

  • 元胞数组

    • 定义:

      • 在matlab中,元胞数组(Cell Array)是一种特殊的数据类型,用于存储不同大小和类型的数据
      • 与常规的矩阵不同,元胞数组中的每个元素(称为元胞)都可以包含任意类型的数据,包括数值数组、字符数组、其他元胞数组等
    • 创建元胞数组:

      % 创建一个2行3列的元胞数组
      a = cell(2, 3)% 创建一个2行3列的元胞数组,其中每个元素都是字符串
      a = {'123', '123', '123'; '456', '456', '456'}
      

      image-20240514104231222

    • 访问元胞数组中的元素

      % 访问元胞数组中的元素  
      % 注意使用花括号 {} 而不是圆括号 ()  
      e1 = a{2, 2}% 也可以修改元胞数组中的元素  
      a{2, 2} = '2,2'; 
      

      image-20240514104638529

      • 补充:
        • eye(n)
          • 用于生成一个 n x n 的单位矩阵:单位矩阵是一个方阵,其主对角线上的元素都是1,而其他位置上的元素都是0
          • image-20240514105139166
        • magic(n)
          • 用于生成一个 n x n 的魔方矩阵(Magic Square):一种特殊的整数矩阵,它的每一行、每一列以及主对角线和副对角线上的元素之和都相等
          • image-20240514105336587
          • 注:对于 n 为奇数的情况,MATLAB能够直接生成魔方矩阵;对于 n 为偶数的情况,magic函数可能不会直接返回一个标准的魔方矩阵,因为它可能有多个解或者可能没有简单的解析解;但是,MATLAB仍然会尝试返回一个具有相等行和列和的矩阵
  • 结构体

    • 定义:结构体(struct)是一种用户定义的数据类型,它允许你将不同类型的变量组合成一个单一的实体;结构体中的变量被称为字段(field),每个字段可以包含任何MATLAB数据类型,包括其他结构体

    • 创建结构体:

      % 创建一个空结构体
      a = struct()% 创建一个包含内容的结构体
      a = struct('name', 'ausgelebt', 'age', 20)
      

      image-20240514110317117

    • 访问结构体中的元素

      a.name
      a.age
      

      image-20240514110523778

4. matlab矩阵操作

  • 矩阵的定义和构造

    • 定义:

      % 定义一个三行三列的矩阵
      a = [1 2 3; 4 5 6; 7 8 9]
      

      image-20240514111255316

    • m:n:k

      • 创建一个从m开始,以步长n递增,直到(但不包括k的向量a。这里m是起始值,n是步长(增量),而k是停止值(但不包括在内)

      • 示例:

        % 创建一个从1开始,步长为2,直到(但不包括)9的向量
        a = 1:2:9
        

        image-20240514111600565

      • 注:

        • n可以为负数,例如:9:-2:1 会输出[9 7 5 3]
        • n可以省略,此时步长为1,例如:1:3会输出[1 2]
    • repmat(A, m, n)

      • 用于复制数组A以创建一个新的大数组。这个函数接收两个额外的参数m和n,它们分别指定了A在行方向和列方向上的复制次数

      • 具体来说,repmat(A,m,n)将数组A在行方向上复制m次,在列方向上复制n次;因此,如果A是一个p行q列的数组,那么repmat(A,m,n)的结果将是一个mp行nq列的数组

      • 示例:

        a = [1 2 3; 4 5 6]
        b = repmat(a, 2, 3)
        

        image-20240514112250904

    • ones(m, n)

      • 用于创建一个所有元素都是 1 的矩阵,该矩阵有m行和n列;常用于初始化数组或作为计算中的占位符

      • 示例:

        a = ones(n)
        a = ones(m, n)
        

        image-20240514112718318

  • 矩阵的四则运算

      • 只要两个矩阵的维度相同(即它们有相同的行数和列数),就可以进行加法操作

      • 矩阵中对应位置的元素相加

      • 示例:

        % 定义两个3x3的矩阵  
        A = [1 2 3; 4 5 6; 7 8 9];  
        B = [9 8 7; 6 5 4; 3 2 1];  % 对这两个矩阵进行加法操作  
        C = A + B; 
        

        image-20240514134439065

      • 只要两个矩阵的维度相同(即它们有相同的行数和列数),就可以进行减法操作

      • 每个对应位置的元素相减,得到的结果矩阵就是这两个矩阵的差

      • 示例:

        % 定义两个3x3的矩阵  
        A = [1 2 3; 4 5 6; 7 8 9];  
        B = [9 8 7; 6 5 4; 3 2 1];  % 对这两个矩阵进行减法操作  
        C = A - B; 
        

        image-20240514134625113

      • 矩阵乘法需要满足一定的规则:第一个矩阵的列数必须等于第二个矩阵的行数

      • 结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数

      • 如果对两个维度不满足乘法规则的矩阵进行乘法操作,MATLAB会抛出错误

      • 示例:

        % 定义两个矩阵A和B  
        % A是一个2x3的矩阵  
        A = [1 2 3; 4 5 6];  
        % B是一个3x2的矩阵  
        B = [1 4; 2 5; 3 6];  % 对这两个矩阵进行乘法操作  
        C = A * B;  
        

        image-20240514134955818

    • 除:矩阵除法并不是一个直接的操作符,因为矩阵除法的定义可能因上下文而异;通常,当我们提到“矩阵除法”时,指的是以下几种情况之一:

      • 左除 (\ 操作符):求解线性方程组 Ax = b 的解 x,其中 A 是系数矩阵,b 是常数向量;可以通过 x = A\b 来实现
      • 右除 (/ 操作符):求解线性方程组 xA = b 的解 x,不常用;通过 x = b/A 来实现
      • 矩阵求逆与乘法:如果想要通过矩阵的逆来进行“除法”,首先需要计算矩阵的逆(如果它存在且是可逆的),然后与另一个矩阵相乘;不推荐直接计算逆矩阵,因为其在数值上不稳定,且效率低,最好使用左除或右除操作符
    • 点号(.)开头的运算符

      • 按元素进行的操作,而不是矩阵运算

      • 示例:

        A = [1 2 3; 4 5 6; 7 8 9];  
        B = [9 8 7; 6 5 4; 3 2 1];C = A .* B
        

        image-20240514135434332

  • 矩阵的下标

    • 用于访问或修改矩阵中的特定元素

    • MATLAB使用基于1的索引,即矩阵的第一个元素的索引是(1,1),而不是(0,0)

    • 访问矩阵的第m行第n列的元素

      • A(m, n)

      • 示例:

        a = magic(5)
        element = a(2, 3)
        

        image-20240514140717180

    • 访问多个元素

      • 冒号(:)运算符

      • 示例:

        % 访问矩阵a的第一行所有元素  
        row1 = a(1, :);  
        row1_again = a(1, 1:end);  
        

        image-20240514141055893

        % 访问矩阵的所有元素(创建一个列向量)  
        all_elements = a(:);  
        

        image-20240514141238397

        % 访问矩阵的第一列所有元素  
        elements = a(:, 1)
        

        image-20240514141415848

        % 访问矩阵的最后一行所有元素 
        elements = a(end, :)
        

        image-20240514141556698

5. matlab程序结构

5.1 顺序结构

顺序结构是最简单的程序结构,其按照程序中代码的书写顺序从上到下依次执行

在MATLAB脚本或函数中,如果没有条件语句(如ifelseswitch)或循环语句(如forwhile),那么代码将按照顺序结构执行

5.2 循环结构

允许重复执行一段代码,直到满足特定的条件为止

  • for循环

    • for循环用于重复执行一段代码块,每次迭代时都会更改循环变量(通常是一个向量或数组的元素)的值

    • 基本语法:

      for 循环变量 = 初始值:增量:结束值  % 循环体 - 要重复执行的代码  
      end
      
    • 示例:

      % 使用for循环打印1到5之间的整数  
      for i = 1:5  fprintf('%d\n', i);  
      end
      

      image-20240514142918258

  • while循环

    • while循环会不断执行循环体中的代码,直到指定的条件不再满足为止

    • 基本语法:

      while 条件  % 循环体 - 要重复执行的代码  
      end
      
    • 示例:

      % 使用while循环计算1到100之间所有整数的和  
      sum = 0;  
      i = 1;  
      while i <= 100  sum = sum + i;  i = i + 1;  
      end  
      fprintf('The sum of integers from 1 to 100 is: %d\n', sum);
      

      image-20240514143057616

  • 嵌套循环:在一个循环内部嵌套另一个循环,以实现更复杂的操作

  • 注意事项

    • 确保有一个明确的退出条件,否则会无限循环
    • for循环中,循环变量会自动在每次迭代后更新;在while循环中,需要手动更新循环变量(或其他用于控制循环的条件)
    • 使用break语句可以在满足某个条件时立即退出循环;使用continue语句可以跳过当前迭代并进入下一次迭代

5.3 分支结构

分支结构允许程序根据条件的不同执行不同的代码块

  • ifelseifelse语句

    • 如果条件为真(非零),则执行if语句后的代码块;如果希望根据多个条件执行不同的代码块,可以使用elseif语句;如果所有条件都不满足,可以使用else语句来指定默认操作

    • 基本语句:

      if 条件1  % 如果条件1为真,执行这里的代码  
      elseif 条件2  % 如果条件1为假且条件2为真,执行这里的代码  
      else  % 如果所有条件都为假,执行这里的代码  
      end
      
    • 示例:

      % 使用if-elseif-else语句判断一个数的正负或零  
      x = -5;  
      if x > 0  fprintf('x is positive\n');  
      elseif x < 0  fprintf('x is negative\n');  
      else  fprintf('x is zero\n');  
      end
      

      image-20240514144529338

  • switch语句

    • switch语句用于根据表达式的值选择执行不同的代码块;每个case语句都包含一个值或表达式,当switch表达式的值与之匹配时,将执行相应的case语句后的代码块;如果所有case的值都不匹配,并且存在otherwise语句,则执行otherwise后的代码块

    • 基本语句:

      switch 表达式  case1  % 如果表达式的值等于值1,执行这里的代码  case2  % 如果表达式的值等于值2,执行这里的代码  ...  otherwise  % 如果表达式的值不匹配任何case,执行这里的代码  
      end
      
    • 示例:

      % 使用switch语句判断一周的哪一天  
      dayNumber = 3; % 假设dayNumber代表星期三(在MATLAB中,星期日是1,星期一是2,依此类推)  
      switch dayNumber  case 1  fprintf('Sunday\n');  case 2  fprintf('Monday\n');  case 3  fprintf('Tuesday\n');  case 4  fprintf('Wednesday\n');  case 5  fprintf('Thursday\n');  case 6  fprintf('Friday\n');  case 7  fprintf('Saturday\n');  otherwise  fprintf('Invalid day number\n');  
      end
      

      image-20240514144759970

  • 注意事项

    • 确保条件表达式和case语句中的值或表达式类型兼容,以便进行正确的比较
    • 如果ifelseifswitch语句后没有跟随任何代码块,或者代码块为空,则这些语句将没有任何效果
    • ifelseifelseswitch语句中,可以使用任何有效的MATLAB表达式或语句
    • 嵌套使用这些语句可以实现更复杂的条件逻辑,但需要确保正确缩进和格式化代码以提高可读性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独家揭秘:亲历清华大学答辩现场,惊喜万分 名校答辩不简单

会议之眼 快讯 五月&#xff0c;对于学术界来说&#xff0c;迎来了答辩的高潮&#xff01;是收获的季节&#xff01;今天&#xff0c;趁着阳光明媚&#xff0c;小编怀揣着对学术探索的无限热情和好奇心&#xff0c;决定亲自踏入中国顶尖学术殿堂——清华大学深圳国际研究生院&…

洁太司检测试剂盒:肝癌早诊新利器,共筑健康未来

随着科技进步及医疗技术的不断创新&#xff0c;人类对疾病的早期诊断和治疗提出了更高的要求。 先思达生物近期推出的“洁太司-寡糖链检测试剂盒”&#xff0c;在原发性肝细胞癌的诊断领域实现了重大突破&#xff0c;获得了国家药品监督管理局&#xff08;NMPA&#xff09;的三…

[牛客网]——C语言刷题day2

答案&#xff1a;B 解析&#xff1a; char *p[10] 是指针数组,数组里存放了10个指针,在64位系统下指针占8个字节,所以sizeof(p) 10 * 8 80. char (*p1)[10]是数组指针,p1是一个指向存放10个char类型的数组的指针,所以sizeof(p1) 8. 答案&#xff1a;B 解析&#xff1a…

【大道至简】官方兼容到android13+的获取系统屏幕高度, statusbar,navBar

android在屏幕高度和app高度&#xff0c;statusbar, navigationbar的高度处理上&#xff0c;迭代了好多版本。 android11&#xff0c; android12都有新的api和过时的api标记。 涉及的api类似如下&#xff1a; windowManager&#xff0c;defaultDisplay, Context.display, Deco…

分布式系统的一致性与共识算法(二)

Consitency 背景 如买最后一张车票&#xff0c;两个售票处分别通过某种方式确认过这张票的存在。这时&#xff0c;两家售票处几乎同时分别来了一个乘客要买这张票&#xff0c;从各自"观察"看来&#xff0c;自己一方的乘客都是先到的&#xff0c;这种情况下&#xf…

思科模拟器学习1--Vlan Trunk

实验说明&#xff1a;将三台电脑的vlan 加到一台交换机里面&#xff0c;为了验证什么是虚拟局域网&#xff0c;把一个设备隔成三个空间&#xff0c;三个电脑互相不能通讯&#xff1b;目的是&#xff1a;vlan 1的通讯不可以向vlan 2传送&#xff0c;就是消息传送互不干扰的&…

解决Android Studio Gradle下载慢的问题

安卓 gradle-7.5-bin.zip 下载慢 https://mirrors.cloud.tencent.com/gradle/7.x.x 找到对应匹配版本 把下载的文件直接复制到 C:\Users\Administrator.gradle\wrapper\dists\gradle-x.x\ 中对应版本目录下&#xff0c;例如需要下载 gradle-2.14.1-all.zip&#xff0c;则下载好…

【Pytorch】torch.nn.conv2d

这个函数和我们之前提到的【Pytorch】6.torch.nn.functional.conv2d的使用的作用相似&#xff0c;都是完成CV领域的卷积操作&#xff0c;这里就不在过多赘述 torch.nn.conv2d的使用 打开pytorch的官方文档&#xff0c;我们可以看到 torch.nn.conv2d包含了若干参数 in_channe…

一文读懂 Pencil 积分,打开 Pencils Protocol 生态权益大门

近日&#xff0c;Scroll 生态项目 Penpad 近期将品牌全新升级为 Pencils Protocol &#xff0c;在升级后&#xff0c;其从一个 Scroll 生态的原生 LaunchPad 平台进一步拓展为集 Staking、Vault 以及 Shop 等功能于一体的全新生态。全新的品牌升级不仅让 Pencils Protocol 生态…

2024 年第一季度全球互联网中断事件

2024 年第一季度伊始&#xff0c;互联网发生了多起中断事件。陆地和海底电缆的损坏在多个地方造成了问题&#xff0c;而与持续中地缘政治冲突相关的军事行动影响了其他地区的连接。 几个非洲国家以及巴基斯坦的政府下令关闭互联网&#xff0c;主要针对移动网络连接。 被称为Ano…

Pyqt中QThread传递自己定义的参数、类、函数

Pyqt中QThread传递自己定义的参数、类、函数 1 pyqt中Qthread传递自己定义的参数2 pyqt中Qthread传递自己定义的类3 pyqt中Qthread传递自己定义的函数4 pyqt中Qthread内部定义自己的函数5 pyqt中Qthread传递参数到内部定义自己的函数 1 pyqt中Qthread传递自己定义的参数 在PyQ…

(四)Spring教程——控制反转或依赖注入与Java的反射技术

IoC的底层实现技术是反射技术&#xff0c;目前Java、C#、PHP 等语言均支持反射技术。 在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够获取到这个类的所有属性和方法&#xff1b;对任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff08;包括私有的方法…

python的标准数据类型

四、标准数据类型 1、为什么编程语言中要有类型 类型有以下几个重要角色&#xff1a; 对机器而言&#xff0c;类型描述了内存中的电荷是怎么解释的。 对编译器或者解释器而言&#xff0c;类型可以协助确保上面那些电荷、字节在程序的运行中始终如一地被理解。 对程序员而言…

基于大模型训练的数字识别

创作原因 现在写电赛题&#xff0c;题目有识别数字的要求。但使用设备openmv使用模板匹配的算法帧率很低&#xff0c;且识别效果不是很好&#xff0c;于是我们就想到了利用神经网络训练模型来识别数字 正文部分 内容介绍 本文内容是基于openmv使用Edge Impulse训练大模型。…

服务攻防——应用协议ssh,rsync,proftpd,openssh,libssh

1.口令猜解 ftp-拿来文件传输的 rdp-windows远程连接 3389 ssh-linux远程连接 工具hydra 口令 1.windows 这就爆破成功了&#xff0c;现在&#xff0c;我们就可以ftp爆破&#xff0c;爆破出ftp的密码 爆破出来后 访问 2.ssh Rsync&#xff08;配置不当&#xff0c;未授权…

Gooxi发布最新AI服务器:加速生成式AI落地 更懂AI

近日&#xff0c;Gooxi发布最新训推一体AI服务器&#xff0c;以大容量内存和灵活的高速互连选项满足各种AI应用场景&#xff0c;最大可能支持扩展插槽&#xff0c;从而大幅提升智能算力性能&#xff0c;以最优的性能和成本为企业的模型训练推理落地应用提供更好的通用算力。 AI…

主从Reactor服务器

目录&#xff1a; 目录&#xff1a; 目标&#xff1a; 本文讲解思路&#xff1a; 各模块的功能以及代码&#xff1a; 1.服务器相关模块&#xff1a;服务器模块的功能是对所有的连接以及线程进⾏管理 2.协议相关模块&#xff1a;协议模块是对当前的Reactor模型服务器提供应…

【HarmonyOS】Stage 模型 - 应用配置文件

如图所示&#xff1a; Stage 模型应用配置文件主要有两类&#xff1a; 全局配置文件。放在 AppScope 目录下&#xff0c;app.json5。用来配置应用全局的信息。模块配置文件&#xff0c;放在每个模块里&#xff0c;module.json5。用来配置模块的信息。 一、全局配置文件 示…

LeetCode1657确定两个字符串是否接近

题目描述 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。例如&#xff0c;abcde -> aecdb操作 2&#xff1a;将一个 现有 字符的每次出现转换为另一个 现有 字符&#xff0…

【数据可视化01】matplotlib实例3之数据统计

目录 一、引言二、实例介绍1.百分位数为横条形图2.箱线图定制化3.带有自定义填充颜色的箱线图4.箱线图5.箱线图和小提琴图6.二维数据集的置信椭圆 一、引言 matplotlib库 可以用来创建各种静态、动态、交互式的图形&#xff0c;并广泛应用于数据分析和数据可视化领域。 二、实…