MATLAB基础入门手册:第1~2章入门与矩阵操作

第一章  入门

写在前面:本文档原为《freexyn编程实例视频教程系列1:Matlab基础入门》课程文档,后经韩松岳同学悉心整理并添加程序和注释,形成本文,现全网免费发布,版权所有,仅供个人学习交流使用,其中不足之后,欢迎补充指正;若程序注释没有完全表达其含义,可对照视频学习。

1.1 认识软件

1.软件简介

Matlab是matrix和laboratory组合缩写,意为矩阵实验室

主要功能和用途:

用于科学和工程计算的高级语言;

用于调整运行环境进行迭代探索、设计和问题解决;

用于可视化数据的图形表达和用于创建自定义绘图的工具;

用于曲线拟合,数据分类,信号分析,控制系统调整等;

用于各种工程和科学应用的附加工具箱;

用于自定义用户界面构建应用程序;

用于接口C/C ++、JAVA、.NET、Python、SQL和Excel等;

2. 软件安装

软件安装过程略

3.认识界面

启动Matlab,默认的界面布局

Matlab默认界面

当前文件夹:访问文件的路径,也是工作目录

命令窗口:输入命令并运行,由提示符“>>”指示

工作区:显示创建或导入的数据或变量

历史命令窗口:记录命令窗口中执行过的命令

1.2 创建变量

1.在Matlab中创建和使用变量

2.认识命令

whos

clear

3.说明

Matlab中创建变量不需要声明,类型默认使用双精度浮点型

创建变量后在命令窗口立即显示结果,并在工作区添加该变量

当不指定输出变量时,默认使用ans存储计算结果

程序语句以分号结尾,执行运算后不显示输出结果

命令窗口中回车键起运行程序功能

若输入一条语句后换行,但不想立刻运行,用Shift+Enter

允许一行输入多个语句,用逗号或分号分隔每个语句

快速回调之前执行过的语句,可以用方向键的上键和下键

清除或者不执行当前语句,用Esc键退出

可以选中部分程序,然后按回车键直接运行这部分程序

创建数组或矩阵,用中括号把数值括起来

1.3 调用函数

1.几个常用函数,说明Matlab调用函数的方法

2.认识函数

求最大值max

正弦函数sin

显示字符disp

清除屏幕clc

3.说明

Matlab提供了很多函数方便直接调用,调用格式:

[out1,out2]=function(input1,input2)

调用时把输入参数括在括号内,有多个输入参数时,用逗号分隔

相应的,有多个输出值时,用逗号分隔,并用中括号括起来

4.命令语法和函数语法的对偶性

当不需要输出,且所有输入都是字符向量

以下两种语法是等效的:

functionName(input1,...,inputN) %函数语法

functionName  input1 ... inputN %命令语法(缺点:参数必须是字符型,而不能是数值型)

1.4 脚本编程

1.使用脚本文件编程的方法

2.说明

2.1 概念

脚本文件是包含一系列的命令和函数的程序文件,扩展名是.m

当需要把多个程序语句组合起来完成一项总体运算和功能时,常用脚本文件,方便存储、管理和重用,是Matlab里普遍的编程方式

2.2 创建脚本的方法

%在当前工作目录右键-新建文件-脚本;

%菜单栏,“主页”-“新建脚本”。

%使用edit命令;

2.3 运行脚本的方法

要运行的脚本文件必须存储在当前工作目录或者搜索路径上

%在编辑器中点击运行按钮;

%快捷键F5;

%当前工作目录选中该脚本右键-运行。

%在命令窗口中输入文件名称回车运行;

 1.5 语法高亮

1.Matlab显示不同程序元素的默认方式

2.说明

2.1 语法高亮

Matlab会把不同的程序字段用不同的颜色区分出来

关键字是蓝色的,如if

注释是绿色的,如%注释

字符向量是紫色的,如'adsaf'

未终结的字符向量是栗色的,如'ads

程序中无效字符是红色的

命令窗口输出时错误提示是红色的

2.2 使用注释

%在文本开头添加百分号%

%快捷键,选中文本按Ctrl+R,取消注释Ctrl+T

 

第二章 矩阵

1.6 创建矩阵

1.创建矩阵

2.认识创建方法

基本运算符 []

冒号运算符 :

用逗号或空格分隔同一行的元素

用分号或回车键分隔不同的行

创建序列linspace

3.说明

矩阵是一个二维的数据阵列

Matlab是一个基于矩阵的计算环境,最基本的的数据结构是矩阵

单个数值也存储为矩阵,在这种情况下,矩阵的大小为1乘1

再例如'Hello World'这样的字符元素是1×11的矩阵

也支持有两个以上维度的数据结构,即n维数组

4.实例演示

%1_6

[1 2 3]  %空格分隔元素

[1,2,3]  %逗号分隔元素

[1 2 3

    4 5 6]  %回车创建不同行

[1 2 3;4 5 6]  %分号分隔不同行



1:5  %行向量: 15

1:4.5  %取整到4

4:1  %空的行向量(错误写法)

4:-1:1  %41行向量(正确写法)

2.5:0.3:3.2  %0.3增长至边界值内



linspace(1,5,5)  %参数分别为起点、终点和元素个数

linspace(1,5)  %不指定元素个数,则默认100个元素

1.7 创建矩阵的函数

1.介绍一些创建矩阵的常用函数

2.认识函数

全0矩阵zeros

全1矩阵ones

单位矩阵eye

对角矩阵diag

魔方矩阵magic

随机矩阵rand

上三角矩阵triu

下三角矩阵tril

3.实例演示

%1_7

zeros(1,4)  %14列全0矩阵

zeros(3,4)  %34列全0矩阵

zeros(4)  %4阶全0矩阵

ones(1,4)  %14列全1矩阵

eye(3)  %3阶单位矩阵

eye(2,3)  %23列单位矩阵

magic(3)  %3阶魔方矩阵

magic(30)

a=rand(1,4)  %14列随机矩阵

b=rand(4)  %4阶随机矩阵

diag(b)  %提取对角线元素

diag(a)  %a为向量,则将a元素扩展为n阶矩阵

triu(b)  %提取上三角形元素

tril(b)  %提取下三角形元素

tril(b,1)  %添加偏移量参数,1正数往右上

tril(b,2)

tril(b,-1)  %向左下偏移1,再取下三角元素

 

1.8 连接矩阵

1.矩阵的连接

2.认识连接方法

基本连接符[]

水平连接horzcat

垂直连接vertcat

平铺复制repmat

对角分块blkdiag

任意维度连接cat

3.说明

矩阵连接是通过连接一个或多个矩阵来创建一个新矩阵的过程

与创建类似,逗号或空格实现水平连接,分号实现垂直连接

连接后的矩阵要仍然保持矩形结构才能实现连接

也就是说,水平连接矩阵,每个矩阵必须具有相同的行数

垂直连接时,每个矩阵必须具有相同的列数

4.实例演示

%1_8

a=[1 2;3 4]

b=[5 6;7 8]

[a,b]  %矩阵水平连接

[a;b]  %垂直连接

horzcat(a,b)  %水平连接函数

vertcat(a,b)  %垂直连接函数

repmat(a,1,3)  %平铺复制为13列矩阵

repmat(a,3,3)

blkdiag(a,b)  %对角分块重组函数:将矩阵a和b整体分别视为对角线上元素进行重组

e=[1 2]

cat(1,e,e)  %任意维度连接:维度、矩阵e、矩阵e。1维按列纵向连接

cat(2,e,e)  %2维:横向连接

cat(3,e,e)  %3维:页面方向(三位方向)

 

1.9 矩阵索引

1.矩阵的索引

2.认识函数

获取矩阵的行列数size

3.概念

一个矩阵里有多个元素,要想访问或修改其中的元素,使用索引

索引3种方式:

①组合索引A(i,j),也称下标索引

②线性索引A(i) ,按列优先的顺序依次向下索引

③逻辑索引,在逻辑为真的位置返回矩阵的元素

4.说明

组合索引和线性方式可以互换

访问多个元素或不连续的元素可以把索引写成矩阵的形式

逻辑索引的维度必须与矩阵的维度相同

索引超出矩阵范围的元素会报错

5.实例演示

%1_9

a=magic(3)  %3阶魔方矩阵

a(2,3)  %组合索引:索引第2行第3列元素(2个参数,用逗号分隔)

a(3)  %线性索引:列优先索引(1个参数)



size(a)  %获取矩阵行列维度

sub2ind([3,3],2,3)  %组合索引转化为线性索引,三个输入参数为:矩阵维度、组合索引行位置、组合索引列位置

[row,col]=ind2sub(size(a),8)  %线性索引转化为组合索引



% a(3,4)  %超出范围报错(初学者常犯错误)



a(1,:)  %冒号:表示任意行或任意列

a(:,1)  %任意行的第1a(:,:)



a(1,2:3)  %1行,第2-3a(1,[1 3])  %1行,第1列和第3a(1,end)  %end表示最后一个:第1行最后1a([1 3])  %线性索引:矩阵a第1个和第3个元素

a([1 2;4 5])  %提取第12和第45个元素并分别放置在矩阵第1行和第2a(:)  %按列优先转变为单个数字序列,返回一列值



b=[1 2;3 4]

c=[true false;true false]  %逻辑数组结果用1/0表示

b(c)  %逻辑索引:逻辑值为真返回对应元素,为假不返回

 

1.10 矩阵元素修改

1.矩阵元素的修改、添加和删除

2.说明

通过指定矩阵索引修改、添加或删除相应元素

索引超出矩阵范围的元素会报错,但可以赋值

删除元素后的矩阵仍然要保持矩形,否则报错

必要时,对超出矩阵范围的索引赋值需要预分配内存

3.实例演示

%1_10

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

a(2,2)=10

a(2)=10

a(3,4)=10  %超出矩阵范围索引会报错,但可以赋值。扩展为索引维度再对该索引元素赋值,其余扩充位置填充元素0

a(3:4,4:5)=[1 2;3 4]  %通过组合索引赋值,先扩展维度再赋值



a(:,2)=[]  %任意行第2列变为空:删除

% a(1,2)=[]  %矩阵单个元素删除报错,删除单个元素无法保持矩阵维度

a(2)=[]  %线性索引先按列优先扩展为单个数字序列,删除单个元素可行

 

1.11 重塑矩阵

1.重塑矩阵包括矩阵的元素重排、旋转、翻转、移位、排序等

2.认识函数

元素重排reshape

旋转rot90

左右翻转fliplr

上下翻转flipud

翻转flip

循环移位circshift

排序sort

按行排序sortrows

判断是否排序issorted

3.实例演示

%1_11

%作者:freexyn

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

reshape(a,4,2)  %元素重排,参数:矩阵名称、重排行数、重排列数。重排规则:按列优先重排为所需维度

% reshape(a,3,3)  %元素数量不符报错

rot90(a)  %矩阵旋转:逆时针90fliplr(a)  %矩阵左右翻转

flipud(a)  %矩阵上下翻转

flip(a,1)  %矩阵任意方向翻转:参数1为方向,1维方向是上下翻转

flip(a,2)  %2维方向是左右翻转



circshift(a,[0 2])  %矩阵循环移位:矩阵、移动步长(用向量表示行数、列数),移动方向为坐标轴正方向

circshift(a,[-1 2])



sort(a)  %矩阵元素的列排序:默认升序排列(行不保持)

sort(a,'descend')  %参数:降序排列

issorted(a)  %判断是否按升序已排列

issorted(a,'descend')



b=magic(3)

sortrows(b)  %按行(保持)排序:将行视为整体,不指定参数则默认按每行第1元素大小升序排列

sortrows(b,2)  %指定参数2,即按每行第2个元素排序

sortrows(b,3)

1.12 矩阵属性

1.矩阵的属性

描述矩阵的信息,包括大小、长度、元素数目和维度等

2.认识函数

大小size

长度length

元素数目numel

维度ndims

3.实例演示

%1_12

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

size(a)  %矩阵行数列数

length(a)  %矩阵长度:取行数、列数中的最大值

length(a')  %矩阵转至后,长度仍为4

numel(a)  %返回元素个数

ndims(a)  %矩阵维度数:2即行和列(2维度)

ndims(a(1,:))  %组合索引提取出第1行索引再计算维度,即行向量的维度,结果2因仍为行和列(2维度)

ndims(a(1,1))  %提出11列元素计算维度,结果仍为2,因单元素认为1*1矩阵(2维度)

1.13 特殊矩阵形式

1.特殊的矩阵形式:空矩阵、标量和向量

2.认识函数

判断空矩阵isempty

判断标量isscalar

判断向量isvector

3.概念

3.1 空矩阵

有一个或多个等于零的维度(0×0,0×1,1×0)

3.2 标量

维度为1×1的矩阵,在Matlab中显示为单个实数或复数

3.3 向量

维度为1×n或n×1的矩阵,在Matlab中显示为一个行或一个列

4.实例演示

%1_13

%freexyn

a=[]  %空矩阵

size(a)  %获取行列数

length(a)  %矩阵长度

numel(a)  %元素个数

ndims(a)  %矩阵维度

isempty(a)  %判断是否空矩阵

zeros(0,1)  %0矩阵指定一个维度为0



a=2  %创建标量

size(a)

length(a)

numel(a)

ndims(a)

isempty(a)

isscalar(a)  %判断是否为标量



a=[1 2 3]  %创建向量

size(a)

length(a)

numel(a)

ndims(a)

isempty(a)

isscalar(a)

isvector(a)  %判断是否向量

 

1.14 多维数组

1.多维数组的创建和索引方法

2.认识函数

维度简化squeeze

3.概念

Matlab中具有多于两个维度的数据阵列被称为多维数组

多维数组是普通二维矩阵的扩展

如图为3*3*2的三维数组(维度名称分别为行、列、页面)

3*3*2的三维数组

 4.实例演示

%1_14

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

b=[11 12 13;14 15 16;17 18 19]

c=a

c(:,:,2)=b  %数组c任意行任意列的第2个页面赋值数组b。显示时,对高维数组进行拆分,拆分为2维数组显示

ndims(c)  %数组维度

size(c)  %行、列、页面数

d=c  %3维数组赋值给d

d(:,:,:,2)=c  %d的任意行、列、页面的第4个维度的第2索引赋值一个3维数组c。显示时,高维数组依次拆分,遍历循环显示每个2维数组

ndims(d)  %4size(d)  %每个维度大小:3 3 2 2



%% 用创建矩阵的函数创建高维数组

zeros(2,2,2)  %3维全0数组

repmat(10,[2 2 2])  %矩阵平铺重塑:将标量10平铺重塑为222页面的数组

reshape(c,[2 3 3])  %对高维数组进行重塑:c是3*3*2数组重塑为2*3*3数组



c(1,[1 2],2)  %组合索引:访问数组c中第1行、第12列中、第2个页面的元素

d(:,:,1,1)  %4维数组)组合索引:任意行、列、第1页面、第四维度1的元素

c(1,1)  %对于3维数组使用低维索引,索引第1行第1列,不指定页面,也可索引。高维数组使用低维索引,会自动用1补齐末尾索引

a(1,1,1)  %低维数组用高维索引。原理:Matlab中任何数组都可理解为无限尾随1的高维数组

e=ones(2,2,1,1,1,1,1)  %1矩阵:22列,后面尾随1无实际意义

e=ones(2,2,1,1,1,2,1)  %1矩阵:22列,第6维为2,会将3457维度初始化为0

squeeze(e)  %维度简化:简化高维数组中不必要的维度

1.15 性能优化

1.在处理大型数组时,兼顾Matlab运算性能的优化

2.说明

使用大型数组时,尽量避免创建不必要的副本

处理数组容量不断变化的问题时,合理的进行预分配内存

把代码放入程序文件中,比在命令窗口中,运算效率高

3.实例演示

%1_15

a=magic(3)

a(3,3)=10

b=a  %数据一样,变量名称不同,因此a、b变量同时指向了同一矩阵

a(3,3)=15  %执行该命令,先预分配内存并复制一份a的原始值,保留在上个语句b中,然后再改变a的元素值

%预分配内存:输入变量时会初始化分配所需内存,而后续编程中变量变化需要更多内存时,需额外内存支持,可能面临分布式的内存分布,调用效率受到影响,因此需预分配内存

a=zeros(300,300)  %初始化300*3000矩阵,Matlab会分配相应内存,在该维度内对元素进行相应修改替换,确保在完整内存中高效运行

% a=zeros(30000,30000)

(第一二章结束,后接第三章)

观看本文视频教程:freexyn编程实例视频教程系列1:Matlab基础入门

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空