本文记录MATLAB的基础知识, 包括MATLAB的基础知识介绍, MATLAB的基础运算以及通过MATLAB语言进行编程.

目录

Matlab基础

主界面窗体

启动MATLAB程序后, 程序界面如下所示:

MATLAB界面

可以分成以下的几个界面

  1. 命令窗口: 在此窗口可以直接输入MATLAB指令
  2. 工作空间窗口: 此窗口显示了当前状态下保存的各种变量, 可通过工作空间窗口对这些变量进行操作
  3. 当前目录窗口: 显示了当前的目录,只有位于当前目录和搜索路径下的文件才能被直接使用
  4. 历史命令窗口: 自动保留自安装起所有用过的命令的历史记录, 从而方便用户查询

MATLAB搜索过程

在MATLAB的命令窗口中输入一个名称以后, MATLAB按照以下顺序进行检测

  1. 是否为变量
  2. 是否为内部函数
  3. 是否为当前目录下的M文件
  4. 是否为其他搜索路径下的文件

目录操作

修改启动目录

  • matlab默认的启动位置位于其安装路径, 通常该位置不适合作为工作目录
  • 通过修改快捷方式中的启动位置, 即可修改matlab启动位置
  • 可在命令窗口中使用cd指令切换当前目录
  • 可以通过path(path,'C:/WorkSpace')指令将指定目录C:/WorkSpace临时加入搜索路径(添加到末尾)

系统目录和用户目录

  1. 系统目录
    • 系统目录指的是matlab本身提供的各种包所在的路径
    • 可以通过输入matlabroot查看
    • 通常是matlab的安装路径,例如C:\Program Files\MATLAB\MATLAB Production Server\R2015a
  2. 用户目录
    • 用户自定义的代码可以存放的路径
    • 可以通过输入userpath查看
    • 通常位于用户的文档文件夹下,例如C:\Users\lizec\Documents\MATLAB
  3. 点击HOME界面上ENVIROMENT区域的Set Path,可以设置搜索路径
    • 位于搜索路径中的文件可以直接被调用
    • 如果同时存在多个同名文件,Matlab采用最先出现的
    • 默认情况下用户目录是第一个路径,所以用户定义的任何同名函数都会覆盖系统提供的函数

帮助系统

help命令

  • 无参数,显示当前帮助系统的所有项目,及搜索路径的所有目录名称
  • +函数名,显示该函数的帮助说明
  • +目录名,显示某一类函数

lookfor命令

  • help指令是完全匹配,而lookfor进行关键字匹配
  • 无参数,在M文件的第一行进行搜索
  • -all参数,搜索全文

模糊查询

  • 输入开头几个字母,使用tab建进行补全

演示系统

  • 在命令行中输入demos
  • 实际上是项目文档合集,包括文档,示例,以及联网资料

资源站

清空

  • 使用clear指令清除工作区变量
  • 使用clc清除命令行

MATLAB计算基础

变量定义

  • 变量以字母开始,以字母数字下划线构成的,长度不超过63个字符
  • 变量名区分大小写
  • 标准库函数始终由全部小写字母构成

语句

  • 直接输入表达式,命令行会显示运行结果
  • 每条命令后加上分号,则命令执行后不输出结果

注释和节

  • matlab中注释以%开始,仅支持单行注释
  • 如果需要注释多行,直接选择需要注释的内容后点击界面上的commet按钮
  • 使用%% 开始的注释称为节,可以将一段代码分成若干节,使用界面上的按钮来以节为单位执行代码

预定义变量

  • 表示圆周率的pi
  • 表示虚数的ij
  • 预定义可以被用户自定义变量覆盖

内存控制

  • clear
    • 无参数,清除工作空间全部变量
    • 指定变量名,则清除指定的变量
  • who/whos
    • who显示当前工作空间全部变量名称
    • whos显示当前工作空间全部变量详细信息
  • save
    • save filename 将工作空间保存到指定的文件中
    • -append 追加模式,即将新的变量和修改的变量追加保存到文件中
    • -ascii 以文本模式保存,不过实在是没啥优势,不建议使用
    • 可以在filename后指定变量名,则只保存指定的变量
  • load
    • load filename 将指定的文件中保存的变量加入工作空间

MATBLAB常用函数

abs函数

  • 获得实数的绝对值
  • 获得复数的模
  • 获得字符串的ASCII码

取整函数

函数名称 含义 示例1 示例2
fix 向零取整 fix(3.5) = 3 fix(-3.5) = -3
floor 不大于指定数据的最大整数 floor(3.5) = 3 floor(-3.5) = -4
ceil 不小于指定数据的最小整数 ceil(3.5) = 4 ceil(-3.5) = -3
round 四舍五入 round(3.5) =4 round(-3.5) = -4

求余数

函数名称 含义 示例1
rem 余数与被除数符号相同 rem(-3,-4) = -3
mod 余数与除数符号相同 mod(7,-4) = -1

格式化输出

使用format格式进行输出格式化,format函数用法为format 格式 变量. 其中格式有如下若干选项:

名称 含义
SHORT Scaled fixed point format with 5 digits.
LONG Scaled fixed point format with 15 digits for double and 7 digits for single.
SHORTE Floating point format with 5 digits.
LONGE Floating point format with 15 digits for double and 7 digits for single.
SHORTG Best of fixed or floating point format with 5 digits.
LONGG Best of fixed or floating point format with 15 digits for double and 7 digits for single.
SHORTENG Engineering format that has at least 5 digits and a power that is a multiple of three
LONGENG Engineering format that has exactly 16 significant digits and a power that is a multiple of three.

MATLAB模式使用SHORT模式, 其他细节可以使用help指令查阅format文档

矩阵输入方式

  1. 直接在交互窗口编辑矩阵
  2. 使用M文件
    • 即在M文件中先定义矩阵,之后使用文件名导入矩阵
    • 从而可以一次输入,反复使用
  3. 使用冒号表达式
    • e1:e2:e3 从e1开始以e2为步长,到e3结束的行向量
    • 可以省略e2,此时e2默认等于1, 由于步长原因,最后可能不包含元素e3
    • 与使用linspace(a,b,n)效果类似,从a到b,产生n个元素(且必定包含边界值b)
  4. 使用小矩阵构建大矩阵
  5. 空矩阵
    • 创建空矩阵后使用IDE提供的编辑器进行编辑

矩阵引用的转换

矩阵的引用

  • 可以使用形如A(m,n)的方式引用矩阵A的第m行,第n列的元素
  • 如果引用越界,程序不会报错,而是自动扩展到相应的大小
  • 可以使用形如A(n)的方式引用矩阵第n个元素, MATLAB按列存储且从1开始计数

序号和下标的转换

使用sub2ind和ind2sub可以将序号(Index)和下标(Subscript)相互转换,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> a = [10,20,30;40,50,60;70,80,90]

a =
10 20 30
40 50 60
70 80 90

>> sub2ind(size(a),1,2) %第1行2列对应的序号

ans =
4

>> [i,j] = ind2sub(size(a),5) %序号为5的元素对应的下标

i =
2
j =
2

矩阵拆分

reshape(A,m,n)函数

  • 在元素不变的情况下,将矩阵A变成m*n的矩阵
  • 仅仅改变逻辑结构,不改变物理结构

冒号表达式

  • 使用冒号表达式获得一段数据
  • 使用单独的冒号表示获得一整行或者一整列
  • 冒号表达式配合end表示获取直到末尾

使用空矩阵删除部分元素

  • 将矩阵的一部分置为空矩阵[], 即可将部分元素删除

矩阵拆分举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

>> A(1:3,2:4)
ans =
24 1 8
5 7 14
6 13 20

>> A(3,:)
ans =
4 6 13 20 22

>> A(2,2:end)
ans =
5 7 14 16

>> A(1,:) = []
A =
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

特殊矩阵

通用特殊矩阵

函数名 效果
zeros 全零矩阵
ones 全1矩阵
eye 单位矩阵
rand 0-1之间的随机数矩阵
randn 均值为0,方差为1的标准正态分布随机矩阵

上述函数具有以下的调用方法,其中f表示上表的任意一个函数

调用方法 效果
f(m) 产生一个m*m的矩阵
f(m,n) 产生一个m*n的矩阵
f(size(A)) 产生一个同A一样大小的矩阵

学科特殊矩阵

函数名 效果
magic(n) 每行,每列和两条对角线上元素之相等
vander(V) 最后一列全为1,倒数第二列为一个指定的向量(基础向量), 其他各列是其后列与倒数第二列的点乘积
hilb(n) H(i,j) = 1/(i+j-1) ,高度病态的矩阵
invhilb(n) 希尔伯特矩阵对应的逆矩阵
toeplitz(x,y) 托普利兹矩阵,除第一行和第一列外, 其他每个元素都与左上角的元素相同
compan(p) 伴随矩阵,其中p是一个多项式的系数向量, 高次幂系数排在前, 低次幂排在后
pascal(n) 生成一个n阶帕斯卡矩阵

注意:

  1. 多项式对应的伴随矩阵的特征值是多项式的根
  2. 求5次方系数时, 应该使用pascal(6)

特殊矩阵使用举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
>> Vand = vander([1;2;3;5])
Vand =
1 1 1 1
8 4 2 1
27 9 3 1
125 25 5 1

>> H=hilb(4)
H =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7

>> T=toeplitz(1:2,1:4) % 两个参数都是向量,且第一个值应该相等
T =

1 2 3 4
2 1 2 3

>> p=[1,0,-7,6];
>> compan(p)
ans =
0 7 -6
1 0 0
0 1 0

>> pascal(5)
ans =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70

MATLAB运算符

算数运算

基础规则

Matlab的矩阵加,减,乘法都和数学定义一致,且不可运算时报错. 对于除法运算, 提供了两种除法

  1. A/B(右除) 等价于 A*INV(B).
  2. A\B(左除) 等价于 INV(A)*B

注意:

  • 矩阵乘法不可交换,所以注意矩阵位置,这也决定了A和B行,列数的关系
  • 逆矩阵和原矩阵的行列数交换,例如3x2矩阵的逆矩阵是2x3矩阵
  • 当除数可逆时(非奇异方阵),被除数要能和除数的逆进行运算即可,而不必是方阵
  • 当除数不可逆时(奇异或者非方阵或者两者均有), 使用求广义逆(即pinv)代替.

深入探讨除法

除法A\B实际上可以认为是线性方程组Ax=B的解,即x = inv(A)*B. 当A是方阵时,运算结果就是其解向量.
当A是MxN矩阵时, 有两种情况

  1. M > N , 即方程数大于未知量数, 此时方程无解, A\B给出最小二乘法下的近似解
  2. M < N , 即未知量数大于方程数, 此数方程无穷多解, A\B给出一个特解

关系运算

  • 同维矩阵之间可以进行关系运算, MATLAB将两个矩阵中的同一位置元素逐一比较,并返回一个同维的矩阵
  • 当标量和矩阵比较时, 标量与矩阵逐一比较并且返回一个同纬度的矩阵.
  • 关系运算符基本与各个语言使用的格式一致,但不等于使用~=表示.
  • 充分利用矩阵和矩阵的比较, 矩阵和标量的比较可以简化代码,提高运行速度.

逻辑运算

  • 逻辑运算的符号分别为&,|,~
  • 和关系运算一样,可以在同维矩阵直接进行或者矩阵与标量之间进行.
  • 和C语言的位运算一样, 这些符号的运算结果只能为0或者1.

运算优先级

算数运算 > 关系运算 > 逻辑运算

MATLAB运算示例

建立矩阵A, 找出大于4的元素的位置, 并输出这些元素的序号

1
2
A=[4,-65,-54,0,6;56,0,67,-45,0];
k = find(A>4)

MATLAB矩阵操作

本节介绍MATLAB中关于矩阵的各种操作, 大部分操作都涉及线性代数的有关内容, 有关线性代数的定义可以查阅相关课本, 本节直接使用而不进行解释.

对角阵

  • diag函数可以提取一个矩阵的对角线,组成一个向量,或者将一个向量变成一个对角阵
  • 当输入的矩阵不是一个方阵时, 尽可能的获得对角线的元素
  • 可以指定一个数字k来提取第k条对角线的元素(与主对角线平行, 往上为第1, 2, …, n条对角线, 往下为第-1, -2, …, -n条对角线, 主对角线为第0条对角线).
  • 当输入是向量时, 将向量还原成一个矩阵, 同时也可以指定一个数字k来指定是还原成那一条对角线.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>> A=[4,-65,-54,0,6;56,0,67,-45,0]
A =
4 -65 -54 0 6
56 0 67 -45 0

>> diag(A)
ans =
4
0

>> diag(A,1)
ans =
-65
67

>> diag(A,-1)
ans =
56

>> V = [1,2,3,4];
>> diag(V,1)
ans =
0 1 0 0 0
0 0 2 0 0
0 0 0 3 0
0 0 0 0 4
0 0 0 0 0

上三角矩阵和下三角矩阵

  • triu函数将给定的矩阵提取称为上三角矩阵
  • tril函数将给定的矩阵提取为下三角矩阵
  • 与diag函数一样,两个函数都可以指定一个数字k来决定从哪一条对角线开始提取.
1
2
3
4
5
6
7
8
9
10
11
12
>> A = [1,2,3;4,5,6;7,8,9]
>> triu(A)
ans =
1 2 3
0 5 6
0 0 9

>> triu(A,1)
ans =
0 2 3
0 0 6
0 0 0

矩阵的转置和旋转

  • 使用’表示转置
  • 使用rot90函数以90为单位旋转矩阵
  • 使用fliplr和flipud进行左右反转或者上下翻转.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> A = [1,2;3,4]
>> A'
ans =
1 3
2 4

>> rot90(A,1)
ans =
2 4
1 3

>> fliplr(A)
ans =
2 1
4 3

矩阵的逆和伪逆

  • 使用inv函数求非奇异矩阵的逆矩阵
  • 使用pinv求解矩阵的伪逆
1
2
3
4
5
6
>> A = [1,2;3,4]
>> inv(A)
ans =

-2.0000 1.0000
1.5000 -0.5000

行列式

使用det函数求解矩阵的行列式

1
2
3
4
>> A = [1,2;3,4]
>> det(A)
ans =
-2

矩阵的秩和迹

  • 使用rank函数求解矩阵的秩
  • 矩阵的秩可以分为行秩和列秩, 两种总是相等的, 统称为秩. 矩阵的秩也称为奇异值数.
  • 使用trace函数求解矩阵的迹, 矩阵的迹等于矩阵对角线元素之和,或特征值之和.

向量和矩阵的范数

度量矩阵或者向量在某种意义下的长度.

  • 使用norm(V,1)计算1范数
  • 使用norm(V,2)或者norm(V)计算2范数
  • 使用norm(V,Inf)计算无穷范数

矩阵的条件数

  • 如果在表达式AX=B中解向量X随矩阵A的微小扰动而发生很大变化, 则称矩阵A是病态矩阵, 否则称A为良性矩阵
  • 条件数是用来描述矩阵良性或者病态性能的参数.
  • 矩阵A的条件数 = A的范数* A的逆矩阵的范数
  • 任何矩阵的条件数都大于1, 条件数越接近1, 则矩阵越接近良性.
  • 使用cond计算条件数, cond函数的参数与norm类似,从而可以使用3种范数方法计算条件数.

特征值和特征向量

使用如下的函数获得特征值或特征向量

函数 效果
E = eig(A) 获得特征值组成的向量
[V,D] = eig(A) 全部特征值构成的对角阵D,特征向量组成V的列向量
[V,D] = eig(A,’nobalance’) 不做相似变换,直接求特征值和特征向量

矩阵的超越函数

对矩阵整体进行运算,而不是对各个元素进行运算. 各种运算都要求矩阵必须是方阵.例如

  • sqrtm(A) 求解矩阵X,使得X*X=A
  • funm(A,’fun’) 用指定的函数计算相应的矩阵版本,例如 funm(A,’sqrt’)等价于sqrtm(A)

其他数据类型

字符串

定义

  • MATLAB种使用单引号括起来的字符序列表示字符串
  • MATLAB将字符串视为一个行向量
  • 可以使用字符串构成矩阵,每字符数必须相同
  • 字符串中的'使用''表示
    1
    2
    3
    4
    >> ch = ['abcdef';'123456']
    ch =
    abcdef
    123456

转换

  • 使用abs和double函数获得字符串矩阵对应的ASCII码数值矩阵
  • 使用char获得ASCII码数值矩阵对应的字符串

代码示例

在使用MATLAB对字符串进行操作时, 也应该充分的使用MATLAB提供的矩阵操作, 从而更加高效的完成任务

  1. 以下代码演示将字符串逆序排列

    1
    revch = ch(end:-1:1)
  2. 以下代码演示将小写字符转化为大写字母,其他字符不变

    1
    2
    3
    ch = 'Good Good';
    k = find(ch>='a' & ch <='z');
    ch(k) = ch(k) - ('a'-'A');

输出函数

使用disp函数, 此函数接受一个向量, 输出向量元素依次连接构成的字符串

1
2
f = 12.33
disp(['Room temperature is',num2str(f)])

结构矩阵

使用结构可以存储不同元素,并且将不同类型的元素使用同一个变量名进行管理

结构矩阵的建立

1
2
3
4
5
6
7
8
>> a.x1 = 12; a.x2 = 'LiZeC'; a.x3 = [12;32];
>> a(2).x1 = 233;a(2).x2='Hello,';a(2).x3=[];
>> a
a =
1x2 struct array with fields:
x1
x2
x3

从定义方式来看, MATLAB的结构与Python的类很相似, 可以动态的添加属性. 定义的时候,可以将a(1)写成a, 后续引用的时候,a就表示整个结构数组了

结构矩阵的引用

  • 引用结构变量(矩阵本身): 显示矩阵大小,成员名
  • 引用结构矩阵元素:
    • 成员是矩阵时,显示矩阵大小
    • 成员不是矩阵时,显示成员的值
  • 引用元素的成员: 显示值
1
2
3
4
5
6
7
8
9
>> a(1)
ans =
x1: 12
x2: 'LiZeC'
x3: [2x1 double]
>> a(1).x3
ans =
12
32

结构矩阵的修改

  • 矩阵大小,成员都可以动态的添加, 如果赋值的属性不存在,则自动扩展
  • 使用rmfield函数删除成员
1
2
3
4
5
>> a = rmfield(a,'x2')
a =
1x2 struct array with fields:
x1
x3

单元数据(Cell)

单元数据的每个元素都可以是不同的类型, 通过下标或者序号直接访问各个元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
>> b = {10,'Hello',[1,2,3];12,'LiZeC',[4,5,6];'GGBoy',[23,33,3],23}
b =

[ 10] 'Hello' [1x3 double]
[ 12] 'LiZeC' [1x3 double]
'GGBoy' [1x3 double] [ 23]

>> b{1,3}
ans =
1 2 3

>> b{3}
ans =
GGBoy

% 将元素置为空
>> b{3} = []
b =
[10] 'Hello' [1x3 double]
[12] 'LiZeC' [1x3 double]
[] [1x3 double] [ 23]

% 将元素删除,注意矩阵变成一维了(无法通过b{2,1}访问元素)
>> b(3) = []
b =
[10] [12] 'Hello' 'LiZeC' [1x3 double] [1x3 double] [1x3 double] [23]

% 输出每个元素的具体值(此处省略输出)
>> celldisp(b)

稀疏矩阵

稀疏存储矩阵的创建

  • 稀疏存储矩阵仅存储矩阵所有的非零元素的值及其位置, 从而节省存储空间
  • 使用sparse函数创建一个稀疏矩阵
1
2
3
4
5
6
7
8
9
10
>> A = sparse(4,5)
A =
All zero sparse: 4-by-5

>> A = sparse(2:5,3:6,3)
A =
(2,3) 3
(3,4) 3
(4,5) 3
(5,6) 3

转化和产生

  • 使用sparse函数将一个完全存储的矩阵转化为稀疏存储的矩阵
  • 使用full函数将一个稀疏存储的矩阵转化为完全存储矩阵
  • 使用spconvert产生一个指定格式的稀疏矩阵
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
>> I = eye(5)
I =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

>> s = sparse(I)
s =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1

% 寻找所有不为0的元素,返回值可以作为sparse的参数
>> [u,v,S]=find(A);

% 对于A的每一行,其元素分别表示行号,列号,元素值实部,元素值虚部
% 如果全部是实数,第四列可以省略
>> A=[2,2,1;3,1,-1;4,3,3;5,3,8;6,6,12];
>> B=spconvert(A)
B =
(3,1) -1
(2,2) 1
(4,3) 3
(5,3) 8
(6,6) 12

带状稀疏矩阵

带状稀疏矩阵指非零元素主要分布在对角线或其平行线上的矩阵. 例如下面的矩阵A就是一个带状稀疏矩阵

1
2
3
4
5
6
A = 
11 0 0 12 0 0
0 21 0 0 22 0
0 0 31 0 0 32
41 0 0 42 0 0
0 51 0 0 52 0

对于上述矩阵,可以按照以下方式创建

1
2
3
4
5
6
7
8
9
10
11
12
m = 5;          % 最终矩阵的行数
n = 6; % 最终矩阵的列数
d = [-3,0,3]; % 矩阵中包含元素的对角线序号, 与矩阵B对应
B =
[
0 11 12;
0 21 22;
0 31 32;
41 42 0;
51 52 0;
]; % B对应了对角线的元素数量
A = spdiags(B,d,m,n);

注意:

  • 对于B矩阵, 如果m < n , 则对于每条对角线,从第一行开始补零, 如果m >= n , 则对于每条对角线,从第一列开始补零
  • 例如上述矩阵A的-3对角线上,第一个元素是第4行,因此前面补3个零
  • 分析可知, 补零无论是从行数还是从列数, 总是试图加入少的零, 相等时数列

其他格式介绍

调用方法 效果
[B,d] = spdiags(A) 根据矩阵A提取前述的矩阵B和d
B = spdiags(A,d) 根据d提取矩阵A指定的对角线(符合B的格式)
E = spdiags(B,d,A) 使用B替换矩阵A中由d指定的对角线
speye(m,n) 产生稀疏单位矩阵

MATLAB程序设计

M文件分类

  • M文件可以分为命令文件(Script)和函数文件(Function)
  • 使用命令文件时可以直接操作工作空间中的变量, 和直接在命令行上执行其中的命令一样
  • 使用函数文件时, 函数的变量会作为函数的局部变量在执行完毕后清除

数据的输入与输出

  • 输入使用 A = input(‘提示信息’,选择), 选项为’s’时表示作为字符串处理,否则始终视为数字
  • 输出使用 disp([输出项1,输出项2,…])

MATLAB其他特殊语法结构

switch语句

1
2
3
4
5
6
7
8
9
switch 表达式
case 表达式1
语句组1
case 表达式2
语句组2
......
otherwise
语句组n
end

注意:

  • 不需要break, 执行一个语句组以后直接退出
  • switch表达式可以时标量或者字符串, case语句可以时标量,字符串以及单元矩阵

try语句

1
2
3
4
5
try
语句组1
catch
语句组2
end

注意:

  • 抛出异常后,保存在lasterr中,通过该变量获得异常信息
  • 各种错误(包括指令拼写错误等)都可以被catch, 因此可以保证程序执行不出现错误

函数文件

function 输出形参表 = 函数名(输入形参表)
注释说明部分
函数体语句

函数是按照文件名调用的, 因此一定要保证文件名和函数名一致

函数参数可调性

  • nargin 调用函数时, 输入变量的个数
  • nargout 调用函数时,输出变量的个数

全局变量

  • 使用global声明全局变量
  • 在工作空间使用global定义全局变量后, 函数内部使用global再次声明
  • 大量数据的传递可以使用全局变量

MATLAB符号计算

产生符号

1
syms x y a b

求导

function description
diff(S,’v’) 对符号对象S 中指定的符号变量v, 求其1阶导数
diff(S) 对符号对象S 中的默认的独立变量求其1阶导数
diff(S,n) 对符号对象S中的默认的独立变量求其n阶导数
diff(S,’v’,n) 对符号对象S 中指定的符号变量v求其n阶导数

符号表达式求值

1
2
subs(f,x,1)         % 将x替换为1
double(r) % 将符号表示的数值转化为浮点表示,例如double(1/5) = 0.2

符号求解

1
sol = solve(eq1, eq2, …, eqn, var1, var2, …, varn) 

其中eq1到eqn为表达式,var1到varn为未知变量, 例如

1
2
3
4
5
6
7
8
9
10
syms x y
[Sx,Sy] = solve(x^2 + x*y + y == 3,x^2 - 4*x + 3 == 0) returns

Sx =
1
3

Sy =
1
-3/2

补充阅读

最后更新: 2024年04月18日 13:26

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2018/03/07/MATLAB%E7%AC%94%E8%AE%B0/