欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

MATLAB学习笔记(一)

发布时间:2025/3/19 16 豆豆
生活随笔 收集整理的这篇文章主要介绍了 MATLAB学习笔记(一) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

MATLAB

  • 一、安装的目录结构
  • 二、常用的菜单及工具
    • 布局
    • 设置路径
    • 设置工作路径
  • 三、常用命令
  • 四、 基础知识
    • 数据类型
      • 复数类型
      • `inf 和 NaN`
      • 字符与字符串
    • 函数句柄
    • 结构体
      • 结构体的构建
      • 访问结构体数组的数据
    • 单元数组类型
      • 单元数组的构造
      • 单元数组的读取
      • 单元数组的删除
  • 五、矩阵的基本操作
    • 矩阵的构造
      • 简单矩阵构造
      • 特殊矩阵构造
      • 向量的构造
    • 矩阵的合并
      • 简单合并
      • 函数
    • 矩阵下标引用
      • 交换矩阵行,列元素
    • 矩阵的结构变化
    • 稀疏矩阵
      • 创建:
      • 查看稀疏矩阵
  • 六、运算符和特殊符号
    • 算数运算符
  • 七、字符串处理函数
    • 创建字符数组
    • 创建字符串单元数组
    • 字符串比较函数
    • 字符串的查找与替换
    • 字符串类型与数字类型转换函数

一、安装的目录结构

文件夹描述
\bin系统中的可执行的相关文件
\extern外部程序接口的工具
\help帮助系统
\ja国际化文件
\javajava支持程序
\notebook是一个兼备数学计算、图形显示和文字处理功能的集成环境
\sys所需要的工具和操作系统
\toolbox各种工具箱
\uninstall卸载程序
rtwReal-Time-Workshop 软件包
simulink用于动态模拟、仿真和分析
stateflow用于状态机设计的功能强大的图形化开发和设计工具

二、常用的菜单及工具

布局

在布局中可以设置窗口的布局。

设置路径

如果你写了一个函数或者脚本在别的文件夹中,那么可以在设置路径中,将其加入到MATLAB的搜索路径上来。

设置工作路径

简单来说就是文件保存的地方。

三、常用命令

命令说明
cd显示或改变当前工作目录
dir显示当前目录或指定目录下的文件
clc可以清除命令窗口显示的内容,但并不清除工作空间。
clf清除图形窗口
clear清理内存变量,将所有的都会清空(要小心)
echo工作窗信息显示开关
disp显示变量或者文章内容(就是变量里面对应得值)
!调用DOS命令
save保存变量到指定文件
load加载指定文件的变量
home将光标移至命令窗口的最左上角

当命令后面有分号时,按Enter键,不会显示运行结果,所有可以用来进行多行输入。

四、 基础知识

数据类型

在MATLAB中,每种基本数据类型均以矩阵的形式出现,该矩阵可以是0*0矩阵到任意大小的n维矩阵。如图

复数类型

复数包含独立的两个部分,即实部和虚部。

虚部可以用 i 或 j 表示。
产生复数有以下几种方法:

  • 赋值语句
  • a = 5 +10i;
  • 函数complex
  • x = 5; y = 10; z = complex(x,y);

    其中 x为实部,y为虚部。也可以这样

    x = 5; z = complex(x);

    x为实部,虚部为0.

    inf 和 NaN

    int 可以表示正无穷大,-inf表示负无穷大。
    NaN 表示一个既不算是实数也不是复数的数值。
    0/0 , inf / inf 结果都为 NaN

    字符与字符串

    规定用char表示一个字符。一个char类型的1*你数组则可以称为字符串。

    常用的的两种表示字符串的方法;

  • 用一对单引号
  • str = 'hello word'
  • 用char函数构造一个字符串
  • str = char([97,98])

    函数句柄

    matlab函数句柄就是c语言里面的函数指针,在matlab里面叫它handle,句柄嘛,有了它就可以操纵这个对象(这里也可以叫做函数),这个概念其实可以推广到很多东西,图形fig,自定义函数句柄(也就是下面将会展示的),matlab自带函数句柄,以及某些函数返回的函数句柄,某些类对象或者表达式,也可以叫做句柄。

    1、何为函数句柄?

    函数句柄也是MATLAB中的一种常见的数据类型,

    它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++),或者函数引用(Perl)。

    它的作用是将一个函数封装成一个变量,使其能够像其它变量一样在程序的不同部分传递。。引入函数句柄可使函数调用变得更加灵活方便,极大地提高了函数调用的速度和效率。MATLAB中函数句柄的使用使得函数也可以成为输入变量,并且能很方便地调用,提高函数的可用性和独立性.

    2、函数句柄的创建:

    方式①:直接加@

    语法:@函数名fun1 = @sin;

    方式②:str2func函数

    语法:str2fun(‘函数名’)
    fun2 = str2func(‘cos’);

    方式③:str2func函数

    语法:@(参数列表)单行表达式
        fun3 = @(x, y)x.^2 + y.^2;

    结构体

    结构体的构建

    方法一:利用赋值语句。

    personel.name = 'lili'; personel.score = 99; personel.salary = [100,4566,1];

    输出personel会得到

    personel = 包含以下字段的 struct:name: 'lili'score: 99salary: [100 4566 1]

    还可以用以下语句将结构体数组扩展成1*2的结构体。意思就是一行两列。相当于结构体数组嘛。

    personel(2).name = 'lili'; personel(2).score = 99; personel(2).salary = [100,4566,1];

    如此personel(1)对应得值就为空矩阵。

    方法二:利用struct函数

    基本调用语法 strArray = struct('field' , vall,...)

    调用的方法:

  • 方法一:单独使用
  • personel(3) = struct('name','lili','score',45.2,'salary',[4512,554])
  • 与repmat()函数配合使用
  • repmat(struct('name','lili','score',45.2,'salary',[4512,554]),1,3)

    如此数组中的所有元素具有和输入一样的内容

  • struct 函数的输入为单元数组
  • struct('name',{'lili','dana','jone'},'score',{45.2,48.4,45.8},'salary',{[4512,554],[],[]})

    结构体的属性由单元数组指定。

    结果:

    访问结构体数组的数据

  • 访问结构体数组的某个元素的某个元素的某个属性。
  • personel(2).name;
  • 访问结构体数组的某个元素的某个元素的某个属性的元素值。
  • personel(2).salar(3);
  • 访问结构体数组的所有元素的某个元素的某个属性的元素值。
  • personel.name;

    单元数组类型

    就类似于c语言中的数组,只不过数组的类型是任意的。就有点像Python 的列表。

    单元数组的构造

    1. 左标志法。
    就是把单元标志{}放到左边,例如下面构建一个1*2 的单元数组。

    c{1,1} = 'csdn'; c{1,2} = eye(3,3);

    2. 右标志法。

    c(1,1) = {'csdn'}; c(1,2) = {eye(3,3)} ;

    以上的还可以简化成

    c = {'csdn',eye(3,3)}

    单元数组的读取

  • 读取单个
  • str = c{1,1}
  • 读取多个
  • c(2,:) % 这个是注释标记 ,输出第一行的所有值。 注意:如 str = c(1,1) 输出的类型是 Cell ,而 str = c{1,1} 就是其对应得值。 c{1,1} 输出的类型是 Cell ,而 c(1,1) 就是其对应得值。

    单元数组的删除

    将空矩阵赋值给单元数组的某一行或一整列,就可以删除。

    如,删除c的第一行

    c(1,:) = []

    五、矩阵的基本操作

    把1$\times$1的矩阵称为标量,把1 ×\times×n的矩阵称为向量。空矩阵用[]表示。

    可以用 whos来输出变量的信息。

    矩阵的构造

    简单矩阵构造

    最简单的构造矩阵方法是采用矩阵构造符[ ],构造一行的矩阵可以把矩阵元素放在矩阵构造符[ ]中,并以空格或者逗号来隔开它们,其代码设置如下:

    row = [E1 E2 … Em] 或 row = [E1 ,E2, … ,Em]

    如果是多行的话:行与行之间用

    分号隔开 ;

    特殊矩阵构造

    特殊的矩阵

    向量的构造

    用于产生向量的运算符" : "

  • 冒号可以用来构造步长为1 的递增向量。
  • A = 1:5 % 1 2 3 4 5

    如果 后边小于前边返回一个空矩阵。

    2.也可以构造任意步长的向量
    格式

    A = a : step: b
  • linspace函数
    用于创建指定长度的等距向量。
  • A = linspace(-6,6,4)

    在 -6,6 ,之间产生等距的四个点。

    矩阵的合并

    注意合并后的矩阵要保证是方形的所以要注意格式。

    简单合并

    C = [A B] 用于水平方向合并矩阵 A 和 B

    C = [A ;B] 用于垂直方向合并矩阵 A 和 B

    函数


    dim就是维数,英文dimension 的缩写
    比如说dim =1就是按照行来算的(x)dim = 2就是列 (y),dim = 3 就是第三维(z)
    例如x是三维数组 dim1就按照行排练,2就是列,3就是第三维:

    矩阵下标引用

    1.A(1,2)

    2.对于二维矩阵M * N的有以下线性公式

    A(i,j)=A((j−1)∗M+i)A(i,j) = A((j-1)*M+i) A(i,j)=A((j1)M+i)

    3.访问多个矩阵元素
    A(1:k:j)表示矩阵第j列的1k个元素。A(i,1:k)表示矩阵第i行的1k个元素。A(1:k:j) 表示矩阵第j 列的1~k个元素。\\ A(i,1:k) 表示矩阵第i行的1~k个元素。 A(1:k:j)j1 kA(i,1:k)i1 k
    行的话,行数写在前边。

    因为冒号:表示一列或一行的所有元素,可以写成
    .A(:,4)

    .A(:)输出矩阵的所有元素。
    4.end该维的最后一个元素
    如上面的可以写成,其中第四列为最后一列
    .A(:,end)

    交换矩阵行,列元素

    A([4 2],:) %答案的第一行是第二行的数据,然后才是第四行的 A(:,[1 3]) %答案的第一行是第1列的数据,然后才是第3列的

    交换行

    A([m n ],:) = A([n m ],:) % m,n 是交换的两行

    交换列

    A(:.[2 4]) = A(:,[4,2])

    矩阵的结构变化

    函数名描述
    fliplr(A)矩阵每一行均进行逆序排列
    flipud(A)矩阵每一列均进行逆序排列
    flipdim(A,dim)生成一个在dim维矩阵A内的元素交换位置的多维矩阵
    rot90(A)生成一个由矩阵A逆时针旋转90度而得到的新矩阵
    rot90(A,k)生成一个由矩阵A逆时针旋转k*90度而得到的新矩阵
    reshape(A,m,n)生成一个m*n维的矩阵

    详细:
    函数链接

    稀疏矩阵

    定义在稀疏矩阵上的运算生成稀疏矩阵,满矩阵就生成满矩阵。

    创建:

    A = [0,0,1,0;0,2,0,0;3,0,0,0;0,0,4,0];% 满矩阵 A = sparse(A) %转换为满矩阵 A= full(A)

    查看稀疏矩阵

    • nnz(A):返回非零元素个数
    • nonzeros(A):返回非零值
    • nzmax:返回用于存储非零值的空间长度

    对于矩阵可以用 spy()函数来查看图像

    六、运算符和特殊符号

    运算符包括算数运算符、关系运算符和逻辑运算符。

    算数运算符

    运算符用法描述
    +A+BA+B把矩阵A和B相加,A和B必须是具有相同的长度的矩阵,除非有一个是标量
    -A-BA+B把矩阵A和B相减,A和B必须是具有相同的长度的矩阵,除非有一个是`标量
    .*A.*B元素相乘。相当于对应元素相乘,不是用矩阵的乘法法则
    ./A./B元素的右除法。矩阵A除以矩阵B对应的元素
    .\A.\B元素的左除法。矩阵B除以矩阵A对应的元素
    .^A.^B元素的乘方。等于 [A(i,j) ^ B(i,j)]
    .‘A.’矩阵转秩。(‘在键盘中L键盘右边第二个)
    *A*B矩阵乘法。对于非标量矩阵来说,A的列必须等于B的行
    /A/B为方程 X*A = B 的解
    \A\B为方程 A*X = B 的解
    ^A^B矩阵乘方
    A’矩阵转秩

    补充说明^运算符:

    当A和B都是标量时表示 标量A的B次方幂;
    当A为方针,B为正整数时,表示矩阵A的B次乘积,因此矩阵的逆可以用 A^-1 得到;
    B为负数时,表示矩阵 A的逆的B次乘积,
    当 B为非整数时有如下表达式:

    A ^ B = V∗[λ1B.λnB]/VV*\left[ \begin{matrix} \lambda_1^B & & \\ & . & \\ & &\lambda_n^B \\ \end{matrix} \right] /VVλ1B.λnB/V

    其中 λ1B...λnB为矩阵A的特征值,V为对应的特征向量矩阵。\lambda_1^B...\lambda_n^B为矩阵A的特征值,V为对应的特征向量矩阵。 λ1B...λnBAV

    七、字符串处理函数

    在MATLAB中字符串是指 1 ×\times× n 的字符数组。

    创建字符数组

  • 可以用一对单引号来表示字符串
  • str = ' I am ';
  • 可以用strcat()函数得到一个新的字符串
  • a = 'Hello '; b = 'Word'; c = strcat(a,b) % 得到 HelloWord

    注意:用该函数合并的时候会把字符串结尾的空串删除。如果要保留可以用矩阵合并符[ ]来实现。

    a = 'Hello '; b = 'Word'; c = [a b] % 得到 Hello Word
  • 可以构建二维字符数组,不过要注意的是二维字符数组的每一行具有相同的长度才可以,可以用空格来补充。
  • str = ['second';'string']
  • 利用函数char()来创建字符。用该函数时,如果长度不同会自动补齐。
  • str = char('first','second')

    创建字符串单元数组

    cellstr()函数
    如下:

    str = ['name';'string'] % 输出: str = name string

    转换:

    str = cellstr(str) % 输出: str = 'name' 'string'

    那么区别是什么呢,字符串单元数组,类似于python中的列表中的元素是字符串。而且在转换后会自动将多余的空格去掉。

    检测长度:

    length(str{1}) % ans = 4

    可以用char()函数转换成字符数组。

    str = str(str); length(str(1:)) % ans = 6

    字符串比较函数

    函数功能:

    strcmp(s1, s2):用于比较字符串s1、s2是否相等,如果相等,返回结果1,否则返回0;

    strncmp(s1, s2, n):用于比较字符串s1、s2前n个字符是否相等,如果相等,返回结果1,否则返回0;

    strcmpi(s1, s2):在忽略字母大小写的前提下,比较字符串s1、s2是否相等,如果相等,返回结果1,否则返回0;

    strncmpi(s1, s2, n):在忽略字母大小写的前提下,比较字符串s1、s2前n个字符是否相等,如果相等,返回结果1,否则返回0。

    也可以用关系运算符比较字符串
    要要求
    字符串维度必须一致(长度一样)

    str1 = 'cannal'; str2 = 'casual'; c = str1 == str2

    结果

    c =1×6 logical 数组1 1 0 0 1 1

    字符串的查找与替换

    .strfind(s1,s2):返回字符串s2在字符串s1中的开始位置。
    .strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3。

    注意还有个findstr(s1,s2)函数,区别在于findstr函数中s1 s2无先后顺序区别,返回短字符串在长字符串中的开始位置。

    >> strfind('ababedabababedfg','bed') ans =4 12 >> strfind('bed','ababedabababedfg') ans =[] >> findstr('bed','ababedabababedfg') ans =4 12>> strrep('ababedabababedfg','bed','toy') ans ='abatoyababatoyfg'

    字符串类型与数字类型转换函数


    下一篇:
    MATLAB学习笔记(二)

    总结

    以上是生活随笔为你收集整理的MATLAB学习笔记(一)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。