我是靠谱客的博主 爱笑彩虹,最近开发中收集的这篇文章主要介绍MATLAB GUI 自学笔记:1. 预备知识_1基本运算元素数据类型矩阵操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

基本运算元素

1. 变量

2. 工作空间

3. 特殊值

 4. 关键字

5. 运算符

数据类型

1. 数值型

整数

浮点数

复数

2. 逻辑型

3. 字符数组和字符串数组

4. 结构数组

5. 单元数组

6. 函数句柄

创建函数句柄

匿名函数

使用函数句柄的好处:

7. 日期和时间

矩阵操作

矩阵连接

重塑矩阵形状

矩阵元素移位和排序

向量(数集)操作


基本运算元素

1. 变量

clearvars 可以清除内存中某些或全部变量,同时可以保留制定变量

clearvars - except b

变量类型:

  • 局部变量
  • 全局变量
global a

 全局变量要放在开始出声明

  • 永久变量
persistent a

2. 工作空间

变量存储在一块内存区域中,称为“基本工作空间” - 脚本文件或命令行创建的变量存在其中

函数不使用基本工作空间,有自己的函数空间

函数空间中生成的变量,只在函数空间内有效;基本 - 基本

函数空间中指派变量到基本工作空间,使用assignin函数

assingin(workSpace,'varName',varValue)

即指派变量varName到workSpace中,且初始值为varValue

workSpace为‘base’表示基本工作空间;取值为‘caller’表示调回函数空间

不能在基本工作空间中指派变量到函数空间

3. 特殊值

 4. 关键字

查看或检查关键字:

iskeyword('if')

5. 运算符

  • 算术运算
  • 关系运算
  • 逻辑运算
  • 位运算
  • 特殊运算

数据类型

1. 数值型

默认将所有数值存为double,但整数和单精度更节省空间

所有数值型都支持基本的数组操作,如下标操作和尺寸重塑。

?除int64和uint64外都可用于数学运算

整数

常见整数操作函数

  • ceil - 向无穷大方向取整
  • floor - 向无穷小方向取整
  • fix - 向0取整
  • round - 四舍五入
  • isinteger - 判断是否为整数数组
  • isnumeric - 判断是否为数值数组

浮点数

以double为例(双精度 64位)

s - 63 - 符号位:0为正 1为负

e - 62~52 - 指数部分:偏移量为1023

f - 51~0 - 小数部分

 value = (-1)^s × 2^(e-1023) × 1.f                   —— 一般情况

double可以将其他数值型数据、字符或逻辑树转换成双精度

浮点数操作函数

  • isfloat - 检查是否为浮点数
  • realmax - 返回计算机能表示的最大浮点数
  • realmin - 返回计算机能表示的最小浮点数
  • eps - 浮点相对精度
  • isreal - 检查数组所有元素是否为实数

复数

产生复数的方法

  • 直接生成(不能产生0为虚部的复数)
  • complex函数生成
complex(a,b)
c = a + bi

complex(a)
c = a + 0i

real - 提取实部

imag - 提取虚部

format改变数值显示方式,不影响运算结果

2. 逻辑型

any  - 全假返回假,否则返回真

all - 全真返回真,否则返回假

any(A,dim) - dim = 1 返回行向量,对列向量进行计算

                    dim = 2 返回列向量,对行向量进行计算

3. 字符数组和字符串数组

matlab中区分字符数组与字符串数组的方法为

字符数组用单引号 ‘’ 表示 元素为字符

字符串数组用双引号 “” 表示 元素为字符序列

>> a = 'hello';b = "hello";
>> whos a
  Name      Size            Bytes  Class    Attributes

  a         1x5                10  char               

>> whos b
  Name      Size            Bytes  Class     Attributes

  b         1x1               150  string      

关于字符串“string”占用了150个字节是因为本身字符串的表征就需要占用一定大小,字符串所占空间以阶梯形式进行变化

正则表达式相关函数

regexp、regexpi、regexprep、regexptranslate

正则表达式理解:

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码

4. 结构数组

用字段来容纳数据的matlab数组

创建结构的方法

  • 使用点号运算符
>> results.name = 'xin';
>> results.rank = 1;
>> results.score = [100 100 100];
>> results

results = 

  包含以下字段的 struct:

     name: 'xin'
     rank: 1
    score: [100 100 100]

%扩充数组
>> results(2).name = 'liu';
>> results(2).rank = 2;
  • 利用struct函数创建结构数组
>> s = struct('name',{'xin','liu'},'rank',{1,2})

5. 单元数组

单元数组是在一个数组中包含多个单元(cell),每个单元作为一个独立存储单元存储数据

通过矩阵索引操作获取数据 

创建单元数组的方法

  • 使用大括号赋值语句

单元索引:把序号放在()中,右边将单元内容放在花括号中

>> um(1) = {{'love','xin'}};
>> um(2) = {['1997','0420']};
>> um(3) = {['for','ever']}

um =

  1×3 cell 数组

    {1×2 cell}    {'19970420'}    {'forever'}

%这里的um(1)是一个cell,因此无法直接显示,需要用{}的索引才可以看到cell里面的内容

>> um{1}(1)

ans =

  1×1 cell 数组

    {'love'}

>> um{3}

ans =

    'forever'

>> um(3)

ans =

  1×1 cell 数组

    {'forever'}

%索引不同也可以看到收到的是不同的层级

内容索引:复制语句左边,将单元下标放在花括号中;右边指定单元内容

内容与单元索引的区别是:使用单元索引出来的是该单元{}表示,使用内容索引出来的是该单元内的内容,在创建时侯的效果是一样的

6. 函数句柄

提供了简介调用函数的方法

创建函数句柄

  • @运算符
>> fh1 = @sin;
>> fh2 = @(x)sin(x);
  • str2func函数
>> fh3 = str2func('sin');
  • matlabFunction函数
>> fh4 = matlabFuncyion(sin(x));
%使用该命令前用 syms x 命令创建符号变量

验证是否成功创建函数句柄

>> feval(fh1,pi/2)
ans =

     1

matlab映射句柄到指定的函数,并在句柄中保存映射信息

如果同名函数有多个,函数按一定优先级调用

可以用which函数查询调用

  • 函数调用可以提高函数的执行效率(反复调用时)
  • 函数句柄可以用来标识子函数、私有函数和嵌套函数
function out = myDiff(a,b)
    if (a>b)
        out = feval(@fun1,a,b);
    else
        out = feval(@fun1,b,a);
    end
end

function out = fun1(a,b);
    out = a - b;
end

>> myDiff(1,2)

ans =

     1
  • 可以使用str2func 实现操作对象的函数
>> h_sin = str2func('sin')

h_sin =

  包含以下值的 function_handle:

    @sin

>> feval(h_sin,pi)

ans =

   1.2246e-16

在这里h_sin和@sin是等价的

  • 可以在创建的函数中使用某一函数
function x = plotSin(fhandle,data)
    plot(data,fhandle(data))
end

>> plotSin(h_sin,t)
>> plotSin(@sin,t)
% 均可正常运行

匿名函数

没有函数名只有函数句柄的特殊函数

即没有function out = 函数名(in),没有生成m文件,只有一个函数句柄

>> plotSin2 = @(x) plot(x,sin(x))

plotSin2 =

  包含以下值的 function_handle:

    @(x)plot(x,sin(x))

>> plotSin2(t)

匿名函数编写的代码很简洁,并且执行效率很高

函数名 = @(vars1,vars2,...) 表达式/函数

使用函数句柄的好处:

1. 提高运行速度?

2. 使用可以与使用变量一样方便

3. 可以将函数句柄作为输入参数传递给GUI对象

4. 函数句柄是将函数“变量化”,因此可以实现批量函数的执行(arrayfun)

>> fun{1} = rand(3,6);
>> fun{2} = rand(4,6);
>> fun{3} = rand(6,6);


>> counts = arrayfun(@(x) numel(x{:}), fun)

counts =

    18    24    36

% 在counts里面 @(x) numel(x{:}) 为匿名函数, fun为自变量

>> func{1} = @() rand(3,6);
>> func{2} = @() rand(4,6);
>> func{3} = @() rand(6,6);
>> counts = arrayfun(@(y) timeit(y{:}), func)

counts =

   1.0e-06 *

    0.4110    0.3879    0.4740

% 观察到如果这里用的是fun将会出现提示:第一个参数必须为不带输入参数的函数句柄。
因为timeit需要对函数进行时间计算,而fun实则为一个数组,func才是一个函数

>> counts = arrayfun(@(y) numel(y{:}), func)

counts =

     1     1     1

% 此时可以观察到func的元素个数均为1

7. 日期和时间

三种格式:

日期字符串 

串行日期数(serial date numbers)

日期向量

% 日期字符串
>> date

ans =

    '18-Sep-2022'

% 串行日期数
>> now

ans =

   7.3878e+05

%日期向量
>> clock

ans =

   1.0e+03 *

    2.0220    0.0090    0.0180    0.0160    0.0580    0.0227

格式转换

datestr 转换为日期字符串 (使用最多)

datenum 转换为串行日期数

datevec 转换为日期向量

str = datestr(DT, dataform)

矩阵操作

矩阵连接

如果是两个不同类型的矩阵将按照优先级进行连接

[a;b] - cat(1,a,b) - vercat(a,b)

[a,b] - cat(2,a,b) - horzcat(a,b)

[a;a] - repmat(a,[2 1])

[a a] - repmat(a,[1,2])

重塑矩阵形状

length - 返回矩阵最长维的长度

size - 返回矩阵每一维长度

numel - 返回矩阵的元素数

ndims - 返回矩阵的维数

reshape - 重塑矩阵形状

B = reshape(A,m,n) or B = reshape(A,[m n]) 确定的m*n矩阵

B = reshape(A,m,[]) or B = reshape(A,[],n) 仅确定一个维度,另一维度由计算机确定(无法整除会报错)

重塑为列向量用(:) 行向量为(;)

矩阵元素移位和排序

circshift 循环移动矩阵的元素

sort 对数组行或列进行升序或降序排列

sortrows 含列值的升序或降序排列行

issorted 确定数组元素是否排序

[B, index] = sort(A, dim, mode)

dim - 1 对每列的元素排序 2 对每行的元素排序

mode - ascend 升序 descend 降序

[B, index] = sortrows(A, column)

对A的行按列的升值排序,column为正数 升序,负数 降序

向量(数集)操作

行或列维数为1的是向量

数集为元素互斥的向量

最后

以上就是爱笑彩虹为你收集整理的MATLAB GUI 自学笔记:1. 预备知识_1基本运算元素数据类型矩阵操作的全部内容,希望文章能够帮你解决MATLAB GUI 自学笔记:1. 预备知识_1基本运算元素数据类型矩阵操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部