Matlab语言基础,最后更新于2022/12/31
一、Matlab的变量
1.特殊常量
含义 | 符号 |
---|---|
圆周率 | pi |
机器的浮点运算误差限 | eps |
虚数单位 | i或j |
无穷大量 | inf |
非数 | NaN |
默认结果储存变量(临时变量) | ans |
2.变量的命名规则
首先,所有的变量都表示一个矩阵或一个向量。
其次,需要注意和其他编程语言不同的是变量名开头必须是英文字母,变量名不能超过31个字符。
变量不需要先定义后使用,和python一样。
数值变量的类型会自动定义为双精度变量。
3.变量显示
直接输出情况下,会显示出变量名称,加上disp(display)命令后将不再显示变量名称,只显示数据。
需要注意的是,Matlab中语句可加分号可不加,不加分号将直接显示计算结果,加上分号则不显示计算结果。
4.变量存储和载入
save实现从内存到硬盘的存储
load实现从硬盘到内存的载入
格式:load 文件名 变量名
save 文件名 变量名
或者:S=load(‘文件名’,’格式’,’变量名’)
save(‘文件名’,’格式’,’变量名’)
5.变量清除
使用clear命令
格式:clear 变量名1 变量名2;
clear all;
注意:clear是从内存中删除数据,而delete是从硬盘中删除数据。内存硬盘可以简单理解为内存是matlab软件上的临时空间,硬盘就是自己电脑上的存储空间了。
6.变量检查
可以使用who命令和whos命令。可以看到who命令展示内存中现在有的变量,而whos展示的是现在变量的详细信息。
二、一维数组的创建与元素提取
1.一维数组(向量)的创建
直接输入法:从键盘上直接输入元素,列与列之间用空格或逗号隔开,行与行之间用分号隔开
冒号生成法:用于产生递增或递减的等差数列
格式:初值:步长:末值
说明:当步长为1时可默认不写
定数线性采样法:用于产生起止于两点之间的n个数据点
格式:x = linspace(a,b,n)
说明:a为起始点,b为终止点,n为起始终止点之间要产生的数据点的个数。n如果不写默认值为100
拼接法:利用已有的一维数组可以创建新的一维数组,可以将两个行向量或列向量拼接为一个新的行向量或列向量,也可以用冒号来将已有数组的部分提前出来形成一个新的数组
用法:1.行向量拼接:[l1,l2] 2.列向量拼接:[l1;l2] 3.向量抽取:l_new = l(a:n:b)
说明:在使用向量抽取时,a为起始位置(1为起始),n为步长(1为相邻),b为结束位置
2.一维数组(向量)的提取
比较简单,就a=A(所在位置)即可
三、二维数组的创建与元素提取
1.二维数组(矩阵)的创建
直接输入法:
输入规则:1. 矩阵元素必须在方括号内2. 同行之间元素用逗号或空格隔开3. 行与行之间用分号或回车符号隔开 4. 矩阵的维数不必预先定义
利用函数创建特殊矩阵:
含义 函数 全1矩阵 ones() 全0矩阵 zeros() (0,1)区间均匀分布的随机矩阵 rand() 单位矩阵 eye() 均值为0,方差为1的标准正态随机分布矩阵 randn()
2.二维数组(矩阵)元素的提取
- 元素的提取:使用圆括号提取:A(i,j)
- 子矩阵的提取:利用冒号和表达式获取:A(: , j) A(i , :) A(i:i+m , :) A(i:i+m , k:k+n)
四、字符数组和空数组
1.字符数组
- 字符数组的创建:必须使用单引号
- 字符数组的拼接:使用方括号和逗号拼接
- 同样可以使用disp的命令来显示字符而不显示变量名
2.空数组
- 空数组的创建:a[]方括号里面什么都不用加
- 注意区分空数组和全零数组
- 可以使用命令isempty()来判断是否为空数组
五、矩阵的运算
矩阵的除法:分左除和右除,左除是\,右除是/,根据朝向可以区分。
注意:矩阵的左除要求两矩阵的行数相同,右除时要求两矩阵的列数相同
矩阵的乘方运算:^幂次
矩阵的点(元素群)运算:
矩阵中对应位置元素进行运算。要求参与运算的矩阵行数列数均相同。
有:点乘:.* 点除:./ .\ 点乘方:.^
矩阵的关系运算:运算符有:<,>,<=,>=,==,~=(不等)
运算法则:标量比较:直接比较大小;向量(矩阵)比较:返回由0,1组成的和原矩阵同阶的矩阵
矩阵元素的取整:
按-∞方向:floor()
按+∞方向:ceil()
四舍五入取整:round()
截尾取整:fix()(即直接去掉小数部分)
矩阵元素的取模和取余:
取模:mod(x,y)
取余:rem(x,y)
规则:其实均为取余函数,当x,y符号相同时,两个函数的结果相同;当x,y符号不同时,rem的结果与x的符号相同,而mod函数与y的符号相同
矩阵的行列式:det(),用于求方阵的行列式
矩阵的秩:rank()
矩阵的迹:trace(),迹就是主对角线元素的总和,也等于特征值的总和,同样要求矩阵是方阵
矩阵的特征值:eig()
当前面只写一个变量或者直接输入eig()时,会以一个列向量E来展示所有特征值
而如果用[V,D]=eig(A)时,全部特征值将构成一个对角矩阵D,特征向量构成向量V
矩阵的逆:
inv()——用于求满秩方阵的秩
pinv()——用于求不是方阵或非满秩方阵的逆,称为伪逆或者广义逆矩阵
如果ABA = A,BAB = B,则称B为A的伪逆,或广义逆矩阵。
使用逆矩阵或者左除来求解线性方程组:
$$
\begin{cases}
x_1-2x_2+3X_3=1\2x_1+3x_2+X_3=2\3x_1-x_2-X_3=4
\end{cases}
$$
根据线性代数知识可以写为AX=B的形式,则左乘A逆:
$$
X = A^{-1}*B
$$
即:X = inv(A)*B = A\B矩阵的分解:
三角分解:要求矩阵是方阵,命令为[l,u] = lu(A),矩阵将被分解为一个上三角矩阵一个下三角矩阵
正交分解:[q,r] = qr(A),如果A是一个(n,m)的矩阵,分解后q是一个n阶正交矩阵,r是一个与a同阶的上三角矩阵
六、绘图
1.二维曲线绘制
函数:plot(y)
y可以是向量、实数矩阵或者是复数向量
函数:plot(x,y)
x,y均可以是向量或者矩阵
在绘图时,可以出现plot(x1,y1,’……’,x2,y2,’……’,……)将一个设置完成后可接着绘制在一张图上
2.绘图辅助操作
颜色:
颜色 符号 蓝色 b 绿色 g 红色 r 青色 c 洋红 m 黄色 y 黑色 k 白色 w 标记和线型
标记 线型 . -(实线) o :(点线) X -.(点划线) + –(虚线) * 标记名称 标记符号 方形 S 菱形 D 向下三角形 V 向上三角形 ^ 向左三角形 < 向右三角形 > 五角星 P 六角星 h 坐标轴相关操作
- 坐标轴标注函数:xlabel(‘string’),ylabel(‘string’),zlabel(‘string’)
- 坐标轴范围函数:axis(横轴范围,纵轴范围) eg:axis([-4 4 -5 5])横轴从-4到4纵轴从-5到5,逗号隔开也可以
- 标题标注:title(‘string’)
- 图例标注:legend(‘string1’,’string2’……),legend(‘location’,’…’)可以设置名称,也可以设置放置位置
- 坐标网格:grid
3.双纵坐标,多子图的绘制
双纵坐标:plotyy(x1,y1,x2,y2)
多子图绘制:subplot(m,n,p)
将图像窗口分成m*n个子窗口,并在第p个窗口处绘制图形,编号顺序为从左到右,从上到下。
生成多个窗口:figure(n)
4.三维数据可视化
三维曲线的绘制:plot3(x,y,z)
三维曲面的绘制:mesh() 网格状曲面
surf() 给网格填充了颜色的曲面
特殊函数
all():全为真(按列运算),如果一列均为真返回真返回由0,1组成的和原数组列数相同的行向量
any():不全为假(按列运算),如果一列不全为假返回由0,1组成的和原数组列数相同的行向量
pause():不加括号时,需要按下鼠标左键或键盘上任意键继续;加括号后可等待输入时间再继续运行
input(‘string’):运行到此语句后等待用户输入
matlab的注释是用%号
随机数据产生:
rand(m,n):产生在0~1之间均匀分布的m行,n列随机数矩阵
randn(m,n):产生正态分布的m行,n列随机数矩阵,均值为0,标准差为1
相关分析的函数:
corrcoef(x,y):计算两个向量x,y的相关系数
cov(x,y):计算x,y的协方差矩阵