数学建模-Matlab学习笔记(三)

本文最后更新于:December 3, 2021 pm

MATLAB(矩阵实验室)是第四代高层次的编程语言和交互式环境数值计算,可视化和编程。由美国MathWorks公司开发的一种编程语言。用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。拥有众多的内置命令和数学函数,可以帮助您在数学计算,绘图和执行数值计算方法。

目录

1.MATLAB 变量

每个MATLAB变量可以是数组或者矩阵。变量是在程序运行中值可以改变的量,变量由变量名来表示。在 MATLAB 语言中变量的命名遵循如下规则:

  • 变量名区分大小写。
  • 变量名长度不得超过 31 位,第 31 个字符之后的字符将被 MATLAB 语言所忽略。
  • 变量名以字母开头,可以是字母、数字、下划线组成,但不能使用标点。

MATLAB 不要求事先对变量进行声明,也不需要指定变量类型,但使用变量前,必须进行赋值。 MATLAB 会自动依据所赋予变量的值或对变量所进行的操作来识别变量的类型。在赋值过程中如果如果赋值变量已存在时,MATLAB 将使用新值代替旧值,并以新值类型代替旧值类型。在未加特殊说明的情况下,MATLAB 语言将所识别的一切变量视为局部变量,即仅在其使用的 M 文件内有效。若要将变量定义为全局变量,则应当对变量进行说明,即在该变量前加关键字 global。一般来说,全局变量均用大写的英文字符表示。

在 MATLAB 中,有一类特殊的变量,是由系统默认给定符号来表示的。

变量名称 变量含义 变量名称 变量含义
ans MATLAB 中的默认变量 i(j) 复数中的虚数单位
pi 圆周率 nargin 所用函数的输入变量数
eps 计算机中的最小数,PC 机上为 2的负 52 次方 nargout 所用函数的输出变量数
inf 无穷大,如 1/0 realmin 最小可用正实数
NaN 不定值,如 0/0 等 realmax 最大可用正实数

示例1:

1
x = 3	%定义x并用一个值初始化

示例2:

1
y = sqrt(16) %定义x并用表达式初始化 

示例3:当表达式返回一个结果,不分配给任何变量,系统分配给一个变量命名ans,以后可以继续使用。

1
sqrt(78)

MATLAB可以多个赋值。

1
a = 2; b = 7; c = a * b

1.1 MATLAB 显示已经使用的变量名

可以使用 who 命令显示所有已经使用的变量名。

1
2
3
4
who
%输出
Your variables are:
a ans b c x y

whos 命令

  • 当前内存中的变量
  • 每个变量的类型
  • 内存分配给每个变量
  • 无论他们是复杂的变量与否

示例:

1
2
3
4
5
6
7
8
9
10
whos
%输出
Name Size Bytes Class Attributes

a 1x1 8 double
ans 1x1 8 double
b 1x1 8 double
c 1x1 8 double
x 1x1 8 double
y 1x1 8 double

1.2 删除变量

clear命令删除所有(或指定)从内存中的变量(S)。

示例:

1
2
clear x     % 删除x,不会显示任何内容
clear % 删除所有变量

1.3 长任务(续行符)

长任务是可以通过使用省略号(…)延伸到另一条线路。

示例:

1
2
3
4
5
6
7
8
9
initial_velocity = 0;
acceleration = 9.8;
time = 20;
final_velocity = initial_velocity ...
+ acceleration * time

% 输出
final_velocity =
196

1.4 格式命令

默认情况下,MATLAB 四个小数位值显示数字。这就是所谓的 short format。如果想更精确,需要使用 format 命令。长(long ) 命令格式显示小数点后16位。

示例1:format long

1
2
3
4
5
format long
x = 7 + 10/3 + 5 ^ 1.2
%输出
x =
17.231981640639408

示例2:format short

1
2
3
4
5
format short
x = 7 + 10/3 + 5 ^ 1.2
% 输出
x =
17.2320

示例3:空格格式命令回合到小数点后两位数字。

1
2
3
4
5
6
format bank
daily_wage = 177.45;
weekly_wage = daily_wage * 6
%输出
weekly_wage =
1064.70
  1. MATLAB 显示大量使用指数表示法。短格式 e命令 允许以指数的形式显示小数点后四位,加上指数。
    示例:
1
2
3
4
5
format short e
4.678 * 4.9
%输出
ans =
2.2922e+01

(自我理解)需要注意的是,如:4.6784.9=2.2922e+01 ,正常结果为 22.922 ,其中 2.2922e+01 后面的 +01 表示的是从右边(正方向)向左边(负方向)移动了 1 个小数点后的结果;再如:0.2340.124=2.9016e-02,正常结果为 0.029016,其中 2.9016e-02 后面的 -02 表示从左边(负方向)向右边(正方向)移动了2 个小数点后的结果。且保留4位小数点时,会四舍五入掉第5位数。

  1. format long e命令允许以指数的形式显示小数点后十六位,加上指数。
1
2
3
4
5
format long e
x = pi
%输出
x =
3.141592653589793e+00
  1. format rat 格式命令给出最接近的有理表达式,从计算所得。
1
2
3
4
5
format rat
4.678 * 4.9
% 输出
ans =
2063/90

1.5 关键字

MATLAB 的关键字是指预先定义的有特别意义的标识符,有时也叫保留字。像其他语言一样,MATLAB 包含算数运算、逻辑运算、关系运算等运算类型,每种类型的运算都有自己的运算符,并可对关系和逻辑进行运算,而且都有相应的运算函数。这些有特定意义的符号和名字是不能被指定为变量名称的。比如下表中的特殊变量名、MATLAB 的管理类命令、编程控制语句等。

1.6 创建向量

向量是一维数组中的数字。 MATLAB允许创建两种类型的矢量:行向量、列向量。

1.6.1 行向量

创建行向量包括在方括号中的元素的集合,用空格或逗号分隔的元素。
示例1:

1
2
3
4
5
r = [7 8 9 10 11]
% 返回结果
r =

7 8 9 10 11

示例2:

1
2
3
4
5
6
7
r = [7 8 9 10 11];
t = [2, 3, 4, 5, 6];
res = r + t
%输出
res =

9 11 13 15 17

1.6.2 列向量

创建列向量通过方括号中的元素,使用分号(;)分隔。
示例:

1
2
3
4
5
6
7
8
c = [7;  8;  9;  10; 11]
% 输出
c =
7
8
9
10
11

1.7 创建矩阵

1.7.1 直接输入

矩阵是一个二维数字阵列。在MATLAB中,创建一个矩阵每行输入空格或逗号分隔的元素序列,最后一排被划定一个分号。
示例:

1
2
3
4
5
6
m = [1 2 3; 4 5 6; 7 8 9]
% 输出
m =
1 2 3
4 5 6
7 8 9

1.7.2 利用已有的矩阵创建

一个大矩阵可以由已经存在的小矩阵拼接而成。
实例:

1
2
3
a=[1,2,3;4,5,6;7,8,9];
b=[-1,-2,-3;-4-5-6;-7-8-9];
c=[a,b;b,a]

1.7.3 用实部矩阵和复数矩阵构建复数矩阵

实例:

1
2
3
b=[1,2,3;4,5,6];
c=[6,7,8;9,10,11];
a=b+i*c

1.7.4 结构矩阵和单元矩阵

1.7.4.1 结构矩阵

格式为:结构矩阵元素.成员名=表达式
示例:

1
2
a(1).x1=10;a(1).x2='a';a(1).x3=[11,22;33,44];
a(2).x1=12;a(2).x2='wa';a(2).x3=[22,33;44,55];
1.7.4.2 单元矩阵

建立方式与一般矩阵相似,只是单元矩阵元素用大括号括起来。
示例:

1
2
3
>> b={12,'aw',[11,22;33,44];13,'bb',[33,33;44,55];...
14,'qq',[43,23;34,52]
}

1.8 矩阵元素的引用

1.8.1 通过下标

示例:

1
a(3,2) % 表示 a 矩阵第3行第2列的元素

1.8.2 通过序号

示例:

1
2
3
4

a=[1,2,3;4,5,6]

a(3) % 等于2

其中,序号与下标是一 一对应的,以 m * n矩阵 A 为例,矩阵元素 A(i,j)的序号为(j-1)*m+i

矩阵元素的序号与下标可以利用sub2indind2sub函数实现相互转换。

  1. sub2ind函数

sub2ind:将矩阵中指定元素的行、列下标转换成存储的序号。格式为:D=sub2ind(S,I,J)。其中,D为对应下标元素的序号;S为行数和列数组成的向量;I转换矩阵元素的行下标;J转换矩阵元素的列下标。
示例:

1
2
3
4
5
6
7
8
9
>> A=[1:3;4:6]
A =
1 2 3
4 5 6

>> D=sub2ind(size(A),[1,2;2,2],[1,1;3,2]) % size(A)为2行3列
D =
1 2 % (1,1) (2,1)
6 4 % (2,3) (2,2)
  1. ind2sub函数

ind2sub:将把矩阵元素的序号转换成对应的下标。格式为:[i,j]=ind2sub(S,D)。其中,[i,j]分别为行下表和列下标;S为行数和列数组成的向量;D为序号。

示例:

1
2
3
4
5
>> [i,j]=ind2sub([3,3],[1,3,5])
i =
1 3 2
j =
1 1 2

1.9 利用冒号表达式获得子矩阵

1
2
3
4
A(i,:) % 第 i 行的全部元素
A(:,j) % 第 j 列的全部元素
A(i:i+m,k:k+m) % 第i~i+m行内且在第k~k+m列中的所有元素
A(i:i+m,:) % 第i~i+m行的全部元素
  1. end运算符:表示某一维的末尾元素下标。

示例:

1
2
3
4
5
6
7
8
9
10
>> A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20]
>> A(end,:)
ans =
16 17 18 19 20

>> A([1,4],3:end) % 第1行到第4行内,且从第3列开始到最后一列。
ans =
3 4 5
18 19 20

1.10 删除矩阵元素

利用空矩阵删除矩阵的元素。空矩阵是指没有任何元素的矩阵。如:x=[]

1.11 改变矩阵的行、列数

reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。但它只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。

A(:):将矩阵A的每一列元素堆叠起来,成为一个列向量。A(:)等价于reshape(A,6,1)

2.MATLAB 命令

2.1 管理会话的命令(命令行窗口)

命令 目的/作用
clc 清除命令窗口。
clear 从内存中删除变量。
exist 检查存在的文件或变量。
global 声明变量为全局。
help 搜索帮助主题。
lookfor 搜索帮助关键字条目。
quit 停止MATLAB。
who 列出当前变量。
whos 列出当前变量(长显示)。

2.2 系统命令

使用MATLAB的时候有一些系统命令可以方便操作,如在当前的工作区中可以使用系统命令保存为一个文件、加载文件、显示日期、列出目录中的文件和显示当前目录等。

命令 目的/作用
cd 改变当前目录。
date 显示当前日期。
delete 删除一个文件。
diary 日记文件记录开/关切换。
dir 列出当前目录中的所有文件。
load 负载工作区从一个文件中的变量。
path 显示搜索路径。
pwd 显示当前目录。
save 保存在一个文件中的工作区变量。
type 显示一个文件的内容。
what 列出所有MATLAB文件在当前目录中。
wklread 读取.wk1电子表格文件。

2.3 输入和输出命令

命令 作用/目的
disp 显示一个数组或字符串的内容。
fscanf 阅读从文件格式的数据。
format 控制屏幕显示的格式。
fprintf 执行格式化写入到屏幕或文件。
input 显示提示并等待输入。
; 禁止显示网版印刷

其中,fscanf 和 fprintf 命令的行为像 C 的 scanf 和 printf 函数。支持格式:

格式代码 目的/作用
%s 输出字符串
%d 输出整数
%f 输出浮点数
%e 显示科学计数法形式
%g %f 和%e 的结合,根据数据选择适当的显示方式

用于数字显示格式的函数:

Format函数 最多可显示
format short 四位十进制数(默认)
format long 15位定点表示
format short e 五位浮点表示
format long e 15位浮点表示
format bank 两个十进制数字
format + 正,负或零
format rat 有理数近似
format compact 变量之间没有空行
format loose 变量之间有空行

2.4 向量、矩阵和阵列命令

MATLAB用于工作数组、矩阵和向量的各种命令。

命令 作用/目的
cat 连接数组
find 查找非零元素的索引
length 计算元素数量
linspace 创建间隔向量
logspace 创建对数间隔向量
max 返回最大元素
min 返回最小元素
prod 计算数组元素的连乘积
reshape 重新调整矩阵的行数、列数、维数
size 计算数组大小
sort 排序每个列
sum 每列相加
eye 创建一个单位矩阵
ones 生成全1矩阵
zeros 生成零矩阵
cross 计算矩阵交叉乘积
dot 计算矩阵点积
det 计算数组的行列式
inv 计算矩阵的逆
pinv 计算矩阵的伪逆
rank 计算矩阵的秩
rref 将矩阵化成行最简形
cell 创建单元数组
celldisp 显示单元数组
cellplot 显示单元数组的图形表示
num2cell 将数值阵列转化为异质阵列
deal 匹配输入和输出列表
iscell 判断是否为元胞类型

2.5 绘图命令

命令 作用/目的
axis 人工选择坐标轴尺寸
fplot 智能绘图功能
grid 显示网格线
plot 生成XY图
print 打印或绘图到文件
title 把文字置于顶部
xlabel 将文本标签添加到x轴
ylabel 将文本标签添加到y轴
axes 创建轴对象
close 关闭当前的绘图
close all 关闭所有绘图
figure 打开一个新的图形窗口
gtext 通过鼠标在指定位置放注文
hold 保持当前图形
legend 鼠标放置图例
refresh 重新绘制当前图形窗口
set 指定对象的属性,如轴
subplot 在子窗口中创建图
text 在图上做标记
bar 创建条形图
loglog 创建双对数图
polar 创建极坐标图像
semilogx 创建半对数图(对数横坐标)
semilogy 创建半对数图(对数纵坐标)
stairs 创建阶梯图
stem 创建针状图

2.6 续行符

当一行不能写下时,可以使用续行符在下一行继续写。

1
2
3
s=1/2+2/3+...
3/4+4/5+5/6+...
6/7+7/8

2.7 设置当前文件夹

1
2
cd f:\matlabtest
cd f:\matlabtest\shi

注意:必须要先建好文件夹后,才能切换到此文件夹下。

3.数学函数

函数名 描述
rem(m,n) 取余
fix(123/100) 取整
isprime(n) 判断是否为素数
linspace(n,m,g) 创建g个数,其中n表示开始的数,m表示结束的数

3.1 函数的调用

函数名(函数自变量的值)
示例:

1
2
a=[2,3;4,5]
b=exp(a)

3.2 函数的应用

  1. 三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数,就在函数名后面加上 d,以示区别。

示例:

1
2
3
4
5
6
7
>> shi(pi/2)
ans =
1

>> sind(90)
ans =
1
  1. abs 函数可以求实数的绝对值、复数的模、字符串的 ASCII 码值。

示例:

1
2
3
4
5
6
7
8
9
10
11
>> abs(-4)
ans =4
4

>> abs(3+4i)
ans =
5

>>abs('a')
ans =
97
  1. 用去取整的函数:fixfloorceilround
  • round:按照四舍五入的规则取整。
  • ceil:向上取整,取大于等于这个数的第一个整数。
  • floor:向下取整,取小于等于这个数的第一个整数。
  • fix:固定取靠近 0 的那个整数,即舍去小数部分。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> round(4.7)
ans =
5

>> floor(3.6)
ans =
3

>> ceil(-3.8)
ans =
-3

>> fix(-3.2)
ans =
-3

4.变量管理

4.1 内存变量文件

save:创建内存变量文件。

1
2
save mydata a x
% 将变量 a、x 装入 mydata 变量文件中。

load:装入内存变量文件。

1
load mydata


本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/1468954958.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!