【18-03-23】Matlab 基础概念

1° 计算的介绍

数值默认为双精度实数,可用浮点数或科学计数法表示。浮点数表示范围在 10^-308 ~ 10^308

1.1 关系运算

主要对两个运算量大小关系进行比较,输出逻辑值 1 或 0

运算符 说明 运算符 说明
< 小于 <= 小于等于
> 大于 >= 大于等于
== 等于 ~= 不等于
A = [1 2 3 4];
b = A > 2
>> b = 0 0 1 1

1.2 逻辑运算

表示运算量的逻辑关系,运算结果为 1 或 0

名称 运算符 说明
& 两元素都为真时为真
| 两元素都为假时为假
~ 元素为假结果为真,元素为真结果为假

2° 变量与表达式

2.1 变量

Matlab 不要求对变量进行事先声明,也不用指定变量的类型。不能用 Matlab 中的 20 个关键字对变量命名。

可以用 whowhos 查看已定义的变量,clear 变量名 清除变量save fname 变量 将指定变量保存到 fname.mat 中,load faname 变量 可从 fname.mat 中读取该变量。

系统预设变量 pi inf NaN eps ,还有虚部单位i j

2.2 表达式

表达式是常量、变量、函数和运算符号组合起来有确定值以及类型的算式。

算数、关系、逻辑、赋值表达式比较常见,其他表达式:

  • 逗号表达式 a = 3,b =2
  • 符号表达式 f = sym('a*x^2 + b*x + c')
  • 正则表达式 regexpi(str,pat,'start') ——文本处理、服务器、脚本

Matlab 赋值语句有两种形式:①变量=表达式;②表达式。

其中,表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。

ps:第二种语句形式下,将表达式的值赋给 Matlab 的永久变量 ans。

如果在语句的最后加 ; ,那么将只执行赋值操作,不显示运算结果。在一条语句中,如果表达式太复杂,一行写不下,可以加上 ... (续行符)并回车键,然后接下去再写。例如:

s = 1-1/2+1/3-1/4+1/5-1/6+1/7-...
- 1/8+1/9-1/10+1/11-1/12;
2.2.1 算数表达式

运算符:+ - * /(右除)\(左除)^(乘方)

对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。

2.2.2 关系表达式

运算符:< <= > >= == ~=

2.2.3 逻辑表达式

运算符:& | ~

2.2.4 正则表达式
str='ten,&8yn2tin6ui>&ton, t n,-356tpn,t#n,4@).,t@nT&nY';
pat='t.n';      %寻找 t 开始 n 结束的正则表达式 
o1=regexpi(str,pat,'start')

2.3 运算符优先级

在一个表达式中,算术运算符优先级最高,其次是关系运算符,最后是逻辑运算符。需要时可以通过 () 来改变运算顺序,因为括号是第一优先级的。

不推荐写太长的表达式!

3° 数据类型

Matlab 的早期版本只有非常简单的二维数组和字符类型的数据,目前的 Matlab 版本中不仅有多达十几种的基本数据类型,在不同的专业工具箱中还有特殊的数据类型,并且MATLAB还支持面向对象的编程技术,支持自定义数据类型。

常用的数据类型有:

numeric 数值 char 字符 logical 逻辑 cell 元胞 struct 结构体 function handle 函数句柄

3.1 数值型

①整数——带符号、无符号;②浮点数——单精度、双精度。

Matlab 为了提高数值计算的精度,若没有指定数据类型,则所有的数都被看作是双精度的浮点数。使用整型数据或单精度数据可以节约内存空间。基本数值类型如下:

基本数值类型

整型数据运算规则:相同整型数据之间的运算,结果为同类型的整数。不同整型数据之间不能进行运算!

复数的输入方式:

 z = 3+4i
 z = complex(3,4)

3.2 字符串

字符与字符串运算是各种高级语言不可缺少的部分,Matlab 具有强大的字符处理能力。

%字符串必须用单引号括起来
str1 = 'Matrix Laboratory'
%字符串是由多个字符组成的字符行向量
str2 = ['M','a','t','r','i','x']
%字符数组必须是方的,即每行的字符个数必须相等
str3 = ['M','a','t'; 'r','i','x']

%字符串中的每个字符(包括空格)都是字符串的一个元素
str='Matrix'; 
str(3) 
size(str)

%Matlab 中字符是以 ASCII 码存储的,因而区分大小写,可用 double 等函数查看一个字符的 ASCII 码
str='Matrix';
double(str(3));
int16(str);

一般的字符串处理:

  • 连接运算 c = [a, ' ', b]
  • 求子串
  • 删除子串
  • 插入子串
  • 求字符串长度
  • 搜索子串的位置
  • 字符的大写转换
  • 数值转换为数串
  • 数串转换为数值
a = 'This is No.3-15 Example!'
b = a(1:4)
c = a(12:15)
d = a(17:end)
whos

常用字符串操作函数:

常用字符串操作函数

数字和字符之间的转换函数:

数字-字符转换函数

不同数值之间的转换函数:

不同数值之间转换函数

3.3 数组

一维数组相当于向量,二维数组相当于矩阵。所以矩阵是数组的子集。

3.1.1 数组的创建
%一维数组的创建
data1 = [pi;log(5);7+6;2^3];
data2 = [pi log(5) 7+6 2^3];
data3 = 2:2:10; %步长生成法
data4 = 2:10;
data5 = linspace(2,10,5); %定数线性采样法
data6 = logspace(1,5,10);

%块操作函数
A=eye(2) %生成单位矩阵
B=ones(2,3) %生成全 1 的矩阵,函数 zeros 生成全 0 矩阵
repmat(A,2,2) %数组块状赋值函数
blkdiag(A,B) %对角块生成函数 blkdiag
C=kron(A,B) %块操作函数 kron
3.1.2 多维数组的创建

在MATLAB中,将三维或者三维以上的数组统称为高维数组。

  • 使用下标引用的方法创建三维数组
  • 使用低维数组创建高维数组
  • 使用函数命令来创建高维数组
3.1.3 下标访问
Matlab 下标访问图例
3.1.4 数组运算与矩阵运算对比

数组运算:无论在数组上施加什么运算,总认为那种运算对被运算数组中的每个元素(Element)平等地实施同样的操作。

指令 数组运算含义 指令 矩阵运算含义
A.' 非共轭转置。相当于conj(A') A' 共轭转置
A = s 把标量 s 赋给 A 的每个元素
s + B 标量 s 分别与 B 元素之和
s - B, B - s 标量 s 分别与 B 的元素之差
s.*A 标量 s 分别与 A 的元素之积 s*A 标量 s 分别与 A 每个元素之积
s./B,B.\s s分别被B的元素除 s*inv(B) B 阵的逆乘 s
A.^n A的每个元素自乘n次 A^n A 为方阵时,自乘 n 次
A.^p 对A的各元素分别求非整数幂 A^p 方阵 A 的非整数乘方
p.^A 以p为底,分别以A的元素为指数求幂值 p^A A 阵为方阵时,标量的矩阵乘方
A + B 对应元素相加 A + B 矩阵相加
A - B 对应元素相减 A - B 矩阵相减
A.*B 对应元素相乘 A*B 内维相同矩阵的乘积
A./B A 的元素被 B 的对应元素除 A/B A 右除 B
B.\A (一定与上相同) B\A A 左除 B
exp(A) 以自然数 e 为底,分别以 A 的元素为指数,求幂 expm(A) A 的矩阵指数函数
log(A) 对 A 的各元素求对数 logm(A) A 的矩阵对数函数
sqrt(A) 对 A 的各元素求平方根 sqrtm(A) A 的矩阵平方根函数
f(A) 求 A 各个元素的函数值。f(.)表示为上节所 列各函数 funm(A,’FN’) 一般函数矩阵
A#B A、B 阵对应元素间的关系运算。#代表关系运算符
A@B A、B 阵对应元素间的逻辑运算。#代表逻辑运算符

ps:a.\b = b./a 都是 b 的元素被 a 的对应元素除。

数组的维数(Dimension)和 ndims 指令指令 ndims(A) 可直接给出数组 A 的维数。

数组的大小(Size)和 size 指令不管A数组的维数是多少,size(A) 可给出 A 各维的大小,而指令 length(A) 可给出所有维中的最大长度。即 length(A) 等价于 max(size(A))

3.4 元胞和结构体

3.4.1 元胞

可以将元胞数组看作一种无所不包的通用矩阵,或者叫作广义矩阵。

创建元胞数组需要使用运算符花括号 {}

A = {zeros(2,2,2) , 'Hello' ; 17.35,1:100}
B = cell(3,2)

元胞数组的访问:

A = {zeros(2,2,2) , 'Hello' ; 17.35,1:10};
D = A{1,2}(4)
E = A{2,2}(5:end)
class(E)
F = A{4}([1 3 5])
whos

元胞数组的扩充:

A = {zeros(2,2,2) , 'Hello' ; 17.35,1:10};
B = cell(2)
B(:,1) = {char('Hello', 'Welcome'); 10:1:5}
C=[A,B]
[A,B;C]
whos

元胞数组操作函数:

函数 说明
cell 创建空的元胞数组
cellfun 为元胞数组的每个元胞执行指定的函数
celldisp 显示所有元胞的内容
cellplot 利用图形方式显示元胞数组
cell2mat 将元胞数组转变成为普通的矩阵
mat2cell 将数值矩阵转变成为元胞数组
num2cell 将数值数组转变成为元胞数组
deal 将输入参数赋值给输出
cell2struct 将元胞数组转变成为结构
struct2cell 将结构转变成为元胞数组
iscell 判断输入是否为元胞数组
3.4.2 结构体

创建结构数组对象可以使用两种方法,一种是直接赋值的方法,另外一种方法是利用 struct 函数创建。

Student.name = 'Way';
Student.age = 26;
Student.grade = uint16(1);
whos
Student

基本语法结构式 struct_name.(expression)

Student= struct('name',{'Deni','Sherry'},'age',{22,24},'grade',{2,3},...
'score',{rand(3)*10,randn(3)*10});
Student
Student(2).score
Student(1).score(1,:)
Student.name 
Student.('name')
mean(Student(1).score)
%mean(Student.score)
mean([Student.score])

结构和元胞之间的转换:

S.name = 'Deni';S.ID = 0;
S(2).name = 'Way';S(2).ID = 1;
C = struct2cell(S)
C = squeeze(C)%
fields = {'Name','ID'};
S2 = cell2struct(C',fields,2)
whos

3.5 关系与逻辑运算

在 1.1 和 1.2 中大致介绍完毕

你可能感兴趣的:(【18-03-23】Matlab 基础概念)