Matlab 数学建模基础
基础
Matlab界面

当前文件夹:表示当前的工作目录,通过上面的路径栏可以修改
命令行窗口:在命令行中输入命令。
工作区:浏览已经定义的变量及数据
工具栏
定义变量
示例
无需任何其他的关键字,使用等号即可完成赋值:
1 | a = 1 |
如果没有指定变量名,则默认为 ans:
1 | abs(10) % ans=10 |
命名规则
- 区分大小写
- 字母开头,由字母、数字和下划线组成
清空变量
变量定义后, matlab 会自动将其添加到工作区。若语句以分号结束,MATLAB 会执行计算,但不在命令行窗口中显示输出。
如果需要清除掉工作区的变量,可以使用下面的指令:
1 | clear 变量名 % 清除单个 |
注释和分段
使用 % 注释单行:
1 | %123456 |
使用 %% 对内容进行分段:
1 | %% 测试段1 |
数据类型
- 数字
- 字符与字符串
- 矩阵
- 元胞数组
- 结构体
数字
定义复数:
1 | 10+5i |
数字运算:
1 | 5+6 |
字符与字符串
定义字符:
1 | c = 'h' |
字符内部存储的是其 ascii 码,也就是数字,所以对字符做算术运算,相当于对其 ascii 码做算术运算:
1 | c = 'h' + 'e' %205 |
定义字符串:
1 | c = "str" % 定义字符串 |
结构体
使用 struct 定义结构体:
1 | s=struct("name","kaz","age",19) % 定义结构体 |
输入输出
使用 disp 函数来输出内容到控制台:
1 | disp("hello world") |
使用 input 函数来输入内容:
1 | result = input(提示信息) |
注意:输入内容和工作区的输入一致,即:
- 输入字符串需要使用引号
- 可以引用工作区的变量
流程语句
if-else 语句
1 | if (条件式1) |
switch 语句
注意,matlab 下的 switch 语句默认会 break
1 | switch(分支变量) |
for 循环
注:终值会被访问
1 | for 循环变量=初值:增量:终值 |
while循环
- 格式:
1 | while (条件) |
- 使用
break语句终止循环
函数
函数文件和脚本文件
matlab 的文件以 .m 结尾,分为脚本文件(Script File)和函数文件(Function File)两种。
区别:
- 脚本文件的变量是全局的,而函数文件中的变量是局部的。
- 函数文件可以传参。
脚本文件示例:
1 | disp("hello world!") |
定义函数文件
matlab 通过函数文件来保存和执行函数。和其他语言不同的是,matlab 使用变量赋值的形式来保留返回值,而不是通过 return 语句(注意,matlab 仍然可以使用 return)。
1 | function [输出变量]=函数名(输入参数) |
函数名称可以和文件名不一样,但如果不一致, matlab 以文件名为函数名称,所以原来的函数名称会被忽略掉。
函数句柄
函数本身也可以作为一个值来传递,要将函数作为值,可以使用:
1 | @函数名称 |
匿名函数
当函数体比较短小时,可以使用匿名函数,而无需使用函数文件。
定义格式:
1 | @(参数表)函数表达式 |
例如,定义函数
1 | f=@(x)2^x |
函数内两个特殊变量
- nargin: 记录调用函数时输入变量个数;
- nargout:记录调用函数时输出变量的个数。
例子(通过参数来计算表达式):
1 | function [f1,f2]=exam_arg(a,b,c) |
绘图
坐标的表示
在 matlab 中,坐标的表示方法和平常数学中向量的表示方法可能有些不同。
一系列的点通常使用两个或三个数组来表示,例如
1 | X=0:5 |
这样,就得到了一系列坐标:
1 | (0,1) (1,2) (2,3) (3,4) (4,5) (5,6) |
如果要再加上一个 Z 坐标:
1 | Z=:2:7 |
那么,坐标就是这样了:
1 | (0,1,2) (1,2,3) (2,3,4) (3,4,5) (4,5,6) (5,6,7) |
绘制二维图形
matlab 使用 plot 函数来绘制图形。
它的调用形式有多种:
1 | plot(x,y) |
其中选项是绘图标记的字符串。
例:绘制 的虚线
1 | X = 1:100 |
根据函数和区间绘制图形
使用 fplot 绘图函数来根据函数绘制图形。它的格式
1 | fplot(函数,定义区间,选项) |
例:绘制 的虚线
1 | fplot(@(x)(2*x+1),[0,100],':') |
绘制空间曲线
使用 plot3 函数来绘制空间曲线:
1 | plot3(x1,y1,z1,选项1,…,xn,yn,zn,选项n) |
例:绘制球的轮廓曲线
1 | [X,Y,Z]=sphere(20) |
绘制多个图形
有时候需要一次性绘制多个图形,这时候可以使用 subplot 函数来指定接下来绘制的图形的位置:
1 | subplot(总行数,总列数,格子号) |
总行数和总列数是不需要完全一样的。
实例:
1 | X=1:20 |

绘制空间图形
- 生成网格:
1 | x=a:dx:b; |
示例:生成x 为 0 1 2 3,y 为 4 5 上的网格。
这个网格上的所有点:
1 | (0,4) (1,4) (2,4) (3,4) |
但在 matlab 中 X 和 Y 坐标是分开的:
1 | X = [ |
使用这个函数,来得到上面的 X,Y:
1 | [X,Y]=meshgrid(0:3,4:5); |
- 绘制曲面的函数
1 | mesh(x,y,z) %绘制网格图 |
示例(绘制一个抛物面):
1 | %% 生成网格 |

添加其他内容
下面的函数可以为图形添加一些额外的信息
1 | title(图形名称) |
p为 plot函数的返回值为 plot 对象构成的数组
示例:
1 | X=0:20 |

除了这些函数,还有一些命令:
1 | hold onloff %保留/释放现有图形; |
数组和矩阵
定义数组和矩阵
元素之间用逗号或者空格隔开,行之间用 ; 隔开。
1 | A = [1 2 3] % 一个数组 |
使用 zeros 函数定义零矩阵:
1 | zeros(3,4) % 定义一个三行四列的零矩阵 |
同理,也可以使用
ones生成一个全是1的矩阵
使用 : 可以快速创建一个递增的序列:
1 | A = 1:0.1:2 % 创建 范围为 [1,2],递增步长为0.1的序列 |
使用 linspace 可以快速创建一个等差序列:
1 | linspace(5,12,5) % 在 [5,12] 中等距离选取5个数字,结果:[5.0000,6.7500,8.5000,10.2500,12.0000] |
使用 eye 定义单位矩阵:
1 | eye(3) % 定义 3*3 的单位矩阵 |
使用 repmat 快速创建一个重复序列的矩阵:
1 | rep(1:3,3,2) %1:3 序列横着重复两次,竖着重复三次 |
矩阵的大小
获取长度有 length 和 size 两种方法。
1 | length(B) % 获取第一维度的大小 3 |
运算
元素运算
矩阵可以和数字、同型矩阵,或者行(列)数相同的列(行)向量进行计算。
1 | A+A % 元素加法 |
例子:
1 | B+B % 和同型矩阵进行运算,对应元素相加 |
转置运算
在矩阵名后面加上 ' 即可实现转置:
1 | A' % 转置 |
也可以使用 transpose 函数来转置:
1 | transpose(A) |
逆矩阵
注意:只有方阵才可以求逆,否则会报错
使用 inv 函数对矩阵求逆:
1 | B = [1 2 3; 4 5 8; 7 8 9] |
乘法和除法
使用 * 对矩阵作乘法运算:
1 | B*inv(B) % 得到单位矩阵 |
如果只是希望各个元素相乘,则使用 .*:
1 | B.*B |
使用 / 对矩阵作除法运算:
1 | B/B % 相当于 B * inv(B) |
同样的,也可以使用 ./ 对元素作除运算
求行列式的值
使用 det 函数可以求对应行列式的值:
1 | det(B) % 12 |
秩
使用 rank 函数求矩阵的秩:
1 | rank(B) |
特征值
使用 eig 函数求矩阵的特征值:
1 | [V D] = eig(B) |
这个函数有两个返回值,其中 D 中的对角线上的元素为特征值,V 中对应的列向量为特征向量。
关系运算
介绍
矩阵可以和单个数字或者矩阵使用关系运算符,返回一个布尔矩阵。
1 | B > 1 % 数字比较,则每个元素和1进行比较,返回布尔矩阵 |
any、all 和 find
any函数:若矩阵至少有一个数不为0,则返回1all函数:若矩阵所有元素均不为0,则返回1find函数:返回矩阵不为0的所有位置。
1 | [x,y]=find(B>5) % 返回B中大于5的所有位置,其中x为各元素行的位置,y为各元素列的位置 |
过滤数组元素
借助 find 函数和切片可以过滤数组的元素。
例如:过滤 [1 2 3 4] 中的 3。
1 | A= [1 2 3 4] |
访问和修改元素
使用 () 来访问元素。
注意:下标是从1开始
1 | B(1,1) |
除了传入一个整数,还可以使用数组来截取矩阵的一部分:
1 | B(1:2,1:2) % 截取矩阵1-2行,1-2列的元素 |
元胞数组
元胞数组和数组十分类似,但元胞数组可以存储任何数据类型。
1 | C=cell(3,4) % 定义一个三行四列的元胞数组 |
函数和方程
多项式函数
介绍
在 matlab 中,一个多项式函数用一个系数降幂排列的向量来表示。
例如,,可以表示成 [1 2 0 -5]
求值
使用 polyval 来求一个多项式的值:
1 | y=polyval(p,x) |
x 可以是一个值,也可以是一个向量
例子:求 和 时,的值
1 | polyval([1 2 0 -5],[0 1]) % [-5,-2] |
乘除操作
对于人工来说,多项式的乘除操作比较复杂,这里有一个函数可以快速实现:
1 | p3=conv(p1,p2) % 乘法 |
例子:
1 | conv([1 1],[1 -1]) % [1 0 -1] |
求根
使用 roots(p) 可以求取多项式的所有复数根。
1 | x=roots(p) |
求出来的根是复数的
多项式拟合
对于一些比较复杂的函数,可以将其用多项式进行拟合,返回拟合后的多项式向量。
1 | p=polyfit(x,y,k) %用k次多项式拟合向量数据(x, y),返回多项式的降幂系数 |
附
常用的数学函数
三角函数
| 函数 | 功能 | 函数 | 功能 |
|---|---|---|---|
| sin | 正弦(弧度制) | cos | 余弦(弧度制) |
| tan | 正切(弧度制) | cot | 余切(弧度制) |
| sec | 正割(弧度制) | csc | 余割(弧度制) |
| sind | 正弦(角度制) | cosd | 余弦(角度制) |
| tand | 正切(角度制) | cotd | 余切(角度制) |
| secd | 正割(角度制) | cscd | 余割(角度制) |
| asin | 反正弦(弧度制) | acos | 反余弦(弧度制) |
| atan | 反正切(弧度制) | acot | 反余切(弧度制) |
| asec | 反正割(弧度制) | acsc | 反余割(弧度制) |
| asind | 反正弦(角度制) | acosd | 反余弦(角度制) |
| atand | 反正切(角度制) | acotd | 反余切(角度制) |
| asecd | 反正割(角度制) | acscd | 反余割(角度制) |
取整、取余和取模函数
| 函数 | 功能 | 函数 | 功能 |
|---|---|---|---|
| fix | 向0取整 | floor | 向-∞取整 |
| ceil | 向+∞取整 | mod | 模除求余 |
| rem | 除法余数 | abs | 绝对值(模) |
复数函数
| 函数 | 功能 | 函数 | 功能 |
|---|---|---|---|
| real | 复数实部 | imag | 复数虚部 |
| angle | 复数幅角 | conj | 复数共轭 |
对数函数
| 函数 | 功能 | 函数 | 功能 |
|---|---|---|---|
| log | 自然对数ln | log10 | 以10为底对数 |
常用绘图标记
| 线型 | 点标记 | 颜色 |
|---|---|---|
| - 实线(默认) : 虚线 -. 点划线 – 划线 | . 点 o 圈 x 叉子 + 加号 * 星号 s 方块 d 菱形 ^ 朝上三角 v 朝下三角 > 朝右三角 < 朝左三角 p 五角形 h 六角形 | b 蓝色(默认) m 棕色 c 青色 r 红色 g 绿色 y 黄色 w 白色 k 黑色 |
- 标题: Matlab 数学建模基础
- 作者: ObjectKaz
- 创建于: 2021-08-02 05:04:22
- 更新于: 2023-05-25 17:17:51
- 链接: https://www.objectkaz.cn/f36790b03c3d.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。