【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 中大致介绍完毕

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,113评论 0 13
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,146评论 1 44
  • 显示中文帮助的方法 预设→常规→帮助→在mathworks.com网站上(需要Internet连接)→语言(简体中...
    VeyronC阅读 2,432评论 0 34
  • 一直想注册简书写点儿什么,最后不出意外的第一篇文字果然是以你开题,我的宝贝。 中午奶奶闹性子回老家,不想待这里看孩...
    小笑涡麻麻阅读 226评论 0 0
  • 昨晚看完《春娇救志明》这部电影后,果断发了条朋友圈:“这世上如果有什么比陪两个女生看电影更让人头疼的事,那恐怕就是...
    小黑牛阅读 454评论 3 3