matlab笔记
上课期间自己整理的一系列matlab相关用法的笔记,自认为也并不非常有条理,但还是囤放在这里,供需要的人查阅、取用。
写在前面
- help + 函数名:查找某函数的使用方法
- look for + 关键字:不知道函数确切名称的时候可以查找
- matlab代码的注释以%开头
变量
-
特殊常量
· pi:圆周率
· i或者j:虚数单位
· inf:正无穷大
· NaN:非数
· 默认结果存储变量:ans -
函数的命名第一个字符必须是英文字母,长度不能超过31个字符
-
数值变量的类型自动定义为双精度变量,但可以用format调整显示格式
-
在语句之后加分号则不显示运行结果
-
save表示变量的存储,load表示变量的读取
-
变量的清除:
· clear n;
· clear n1 n2;
· clear all; -
变量的检查
· who查看前面已经有的变量
· whos查看前面已有变量的详细信息 -
一些运算符
1)abs() 取绝对值
2)asin(),acos() 表示arcsin,arccos
3)两个取余函数 mod(m,n) 和rem (m,n)
· m,n同号时,结果也同号
· m,n异号时,mod的结果与n同号,rem的结果与m同号
矩阵
-
创建矩阵的特殊方法
1)ones() 全1矩阵
2)zeros() 全0矩阵
3)eye() 单位矩阵
4)rand() (0,1)区间均匀分布的随机矩阵
5)randn() 均值为0、方差为1的标准正态随机分布矩阵
6)备注:当括号内不填数字时,默认创建一行一列的矩阵,即一个数字;当括号内填一个数字n时,创建n*n的矩阵;当括号内填两个数字m,n时,创建m行n列的矩阵(不要弄反)。
7)a = 初值:步长:终值 (方括号加不加结果相同)
8)a = linspace(初值,终值,点数) 点数默认为100 -
矩阵的提取与拼接
· 形式很灵活,可以横向拼接可以竖向拼接,分清楚分号和逗号(空格)即可
-
字符数组:
· 即字符串,字符数组的拼接格式与矩阵横向拼接(方括号中加逗号)的格式相同
· 字符串的显示:disp(string) -
空数组表示为[],唯一判断一个数组是否为空的指令是isempty
-
矩阵的运算:需要注意的,左除,右除,点运算(加减没有点运算),取共轭转置为‘,取共轭为conj(),复数矩阵想要只取转置,只能叠加操作,如conj(A’)
-
复数矩阵可以一次性赋值,也可以实部和虚部分开赋值
-
det() 计算矩阵的行列式
-
矩阵的逆:
1)inv() 用于求满秩矩阵的逆
2)pinv() 用于求不是方阵/非满秩矩阵的伪逆(广义逆矩阵)
3)inv(A)*B 与 A\B 结果相同
数据可视化
基础设置
- subplot()是对画布的基础设置,写三个参数
· 第一个参数表示每列展示的图象数
· 第二个参数表示每行展示的图象数
· 第三个参数表示下一个图象在页面中的绘制位置
· 如果不对subplot进行重新设定,默认在上一次的设置位置进行覆盖
· 使用clf语句清除效果(clear figure?) - hold on表示在下次绘图时保留现有图像;hold off表示清除
- 一些标注
· xlabel(‘xxx’); ylabel(‘xxx’); 标记轴
· title(‘xxx’); 添加标题
· legend(‘sin’,‘cos’) 表示图例,按照绘制的先后顺序做标注
· 可以直接在图形上修改样式,注意选中箭头,然后右击
· 也可以在图像的上方工具栏中插入x、y标签,标题和图例,右击可以改变字体样式
· 可以在编辑中拷贝文档、修改坐标轴范围 - 默认绘图窗口是在figure1,如果继续绘制会在figure1上加以覆盖,若想新建一张图可以写语句figure(2),则打开第二个窗口,绘制第二张图象
- 图像的保存,格式为.fig
- grid语句表示增加坐标网格
- 关于axis:
· axis表示坐标轴范围 axis([-1 1 -2 2]) 前两个数表示横轴范围,后两个数表示纵轴范围
· axis square/将当前坐标系图形设置为方形,横轴及纵轴比例是1:1(刻度范围不一定一样,但是一定是方形的)
· axis equal/将横轴纵轴的定标系数设成相同值(刻度是等长的,但也不一定是方形的)
· axis tight/数据范围设为坐标范围
二维图
-
plot()函数绘制二维图
1)plot(m) 即参数为一个
· m为向量,则图标横坐标为索引,纵坐标为值(无论横还是竖)
· m为矩阵,则每列画一条曲线,横坐标为每个元素的行号,纵坐标为元素值
· m为复数,横坐标实部,纵坐标虚部2)plot(m,n)
· m,n均是向量:将m作为横坐标,n作为纵坐标绘图
· m是x维向量,n是x*x的数组:将m作为横坐标,n中的每一列作为一条线画图
· m是x维向量,n是x*y或y*x的数组:将m作为横坐标,画y条线
· m,n均为矩阵,且行数均为x列数均为y:绘制y条线,每条线上m的分量做横坐标,n的分量做纵坐标3)plot()最后一个参数可以是线条设定
· 颜色:蓝色b,绿色g,黄色y,红色r,青色c,洋红m,黑色k,白色w
· 标记和线型:.,o,+,*,-(实线),:(点线),-.(点画线),–(虚线),D(菱形),S(方形),P(五角星),h(六角星)
· 可设置的属性:LineStyle、LineWidth、Color、MarkerType、MarkerSize、MarkerFaceColor、MarkerEdgeColor -
plotyy(x1,y1,x2,y2) 两条曲线 x1-y1、x2-y2 分别以左右纵轴为纵坐标
三维图
-
绘制三维坐标图需要用到的函数meshgrid()
1)原理:需要一个x坐标的矩阵和一个y坐标的矩阵,x坐标的矩阵每竖列均相同,从左到右等差排列;y坐标的矩阵每横行均相同,从上到下等差排列2)[m,n] = meshgrid(初值,步长,终值),赋值后m矩阵即为横坐标阵列,n矩阵为竖坐标阵列
(试了试,m,n直接用向量绘制也没有问题,不知道区别在哪里)
(噢,区别在于根据解析式生成z坐标是否方便) -
绘制三维坐标图的函数
1)surf()和mesh() 三维曲面
· surf(X,Y,Z) 以x中元素为每点的横坐标,y中元素为每点的纵坐标,z中元素为每点的高度,画图( 使用颜色显示曲面图的连接线和面)
· mesh(X,Y,Z) 形状与surf函数所绘制的相同,只是仅以颜色标记连接定义点的线条的线框曲面图
· surf(M)或mesh(M):以元素的列号为x坐标,行号为y坐标,元素值为z坐标,绘制三维坐标图,两函数所绘图形形状相同,区别同上
· 这两个函数中的Z必须是矩阵2)plot3(x,y,z) 三维曲线
· 不是坐标点阵,而是用相同长度的x,y,z向量中的每一个元素作为三个坐标,描点画线
二维极坐标
-
polarplot(M, N)
1)M表示弧度角,N表示半径值,输入必须是长度相等的向量或大小相等的矩阵
2)如果输入为矩阵,polarplot 将绘制M的列对N的列的图
3)也可以一个输入为向量,另一个为矩阵,但向量的长度必须与矩阵的一个维度相等
4)第三个参数中可以设置曲线格式 -
compass() 从原点出发的射线
1)compass(u, v) u表示横坐标,v表示纵坐标,表明射线的方向,u,v可以是两个等长向量
2)compass(Z) Z须为复数,实部表示横坐标,虚部表示纵坐标
程序设计
-
命令窗口的一些操作
1)在命令窗口键入edit + 文件名,已有的文件则为打开,没有的文件则为创建
2)在命令窗口直接键入文件名,为运行 -
主程序文件和函数文件
1)主程序文件;以clear,clear all,close all开头
2)函数文件:以function开始,且必须要有函数名;可以有输入输出参数;除了global说明外,其他均为局部变量(有默认函数也有自定义函数文件) -
结构化程序设计(语法有点像python)
1)条件控制结构
· if:不需要括号,需要有end标志结束;可以有elseif嵌套(注意中间没有空格)
· switch-case:不需要冒号;不需要break;最后的默认操作用otherwise;需要有end标志结束2)循环
· for循环:for k=初值:步长:终值(结尾记得end)
· while循环:基本同python,需要加end3)pause语句
· pause 暂停到鼠标和键盘出现变化为止
· pause(n) 暂停n秒钟4)input语句基本同python,不过返回的好像是数据
一些函数
-
基本数据分析(对矩阵的运算均以列为单位)
1)max() 取矩阵的每列最大值,或者向量的最大值
2)min()
3)mean() 平均值
4)sum()
5)std() 标准差 -
随机数据分析
1)and() 生成(0,1)之间的随机数矩阵,没有参数则输出一个数,一个参数则返回方阵,两个参数m,n则返回m行n列的矩阵
2)randn() 生成均值为0、方差为1的标准正态随机分布矩阵,其余同上 -
相关分析
1)corrcoef(x,y) 计算两个向量的相关系数
2)cov(x,y) 计算x,y的协方差矩阵 -
关于多项式
1)多项式的表示:用各幂次前的系数向量组成一个向量,从高到低,0不能省去
2)多项式相加:在短的前面添0补齐,长度相等之后再相加
3)多项式相乘:conv(a,b)
4)多项式相除:[q,r] = deconv(a,b) a为分子,b为分母;q为商式,r为余子式
5)多项式求导:polyder(a)
6)多项式求根:roots(a)
7)由根求多项式系数:poly(a)
8)多项式求值:polyval(a, x) 将x代入多项式a中
9)多项式拟合:p=polyfit(x,y,n) x,y是已知的N维向量,n为拟合曲线的次数,p为拟合后的多项式系数向量(维数为n+1)