前言和目录
预留坑位
此为笔记文档 这里会记下一些没有填上的坑 patch属性是什么 属性是什么 二维和三维的隐函数怎么表示 子级和父级是什么 特殊的数据可视化方法,如heatmap、imagesc 元胞 多文件编程设计 syms、函数句柄是什么
阅读注意
- 里面百度文库的链接需要打开flash再进入
- 本文使用的Matlab版本是R2019a,可能有的高阶功能不向下兼容,需要自行查阅资料
- pdf版建议打开pdf的目录功能,markdown转pdf的时候会自动根据标题生成目录
- 在CSDN的版本由于图片转存太麻烦有的部分原本有图的我就没上传,但是大体不影响阅读,我会留下外网链接,里面将是pdf版
- 不保证正确!如果发现错误请联系本人,本人将在更新过程中改正!
- 本人ID: GitHub:BJTU-ChrisLee CSDN:BJTU_Chris_Lee
- 预计之后会持续在CSDN更新,每次更新都会直接改一整篇文章(本文本质是个人的学习笔记),所以请跟进关注
- 转载之类的请注明出处(个人CSDN的ID等),另外见版权声明部分
Matlab使用入门
基础操作
%...
%{
%}
怎么不每次显示结果?
在行末加上 ;
怎么多行输入?
用连行符 ...,不过字符串似乎不支持多行输入
怎么开新界面窗口?
figure函数 相关资料
disp函数可以简单发送 信息
怎么关闭所有窗口/重置所有变量/清屏?
clear close函数 clear close等的用法
怎么暂停程序?
pause类函数 pause类用法
注意只有在操作端左边显示>>的时候才能输入
如果想要在编写代码的时候就确定一个调试点,可以设置一个keyboard函数,它允许程序暂停的同时进行值的调整
怎么从用户获得输入?
input函数:
v1=input('提示性语句:');
%如果想要在input里加上变量的话可以采用下面的方式
v2=input([str1,num2str(v3),str2]);%同样适用于`disp`函数
%即字符串在Matlab中是特殊处理的
%也可以结合disp:
disp([str1,num2str(v3),str]);
v4=input('')%不能缺失 ''
注意,所有的输入和声明赋值操作是一样的,具体见矩阵和字符串中相关内容
从文件输入方法在后面提及
全局变量怎么使用?
% in 'a.m':
global a;
a=0;
% to use a in 'b.m':
global a;
为什么看到很多函数原形带有字符串?
比如:
plot(x,y,'--gs','LineWidth',2,'MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor',[0.5,0.5,0.5]);
(该语句来自于plot的技术文档)
实际上可以类比C语言读文件时候的'rb'等控制符,为了易读,将可以更改的命令都做成了字符串,以便很明了地更改属性
有哪些需要特别注意的点?
- Matlab所有的下标都是1开始索引的
- Matlab中的字符串使用单引号包起来
- Matlab中的Mat(矩阵)是重点,几乎所有操作都是以矩阵作为基础的
- Matlab中char指字符串
- Matlab中如果想一行输入多个变量需要使用空格分割,
,表示的是一行多个表达式
- Matlab逻辑运算符号中:
遇到不知道的怎么办?
- 百度
面向百度的Matlab编程
- 对于看不懂的函数,输入
help cmd查看官方帮助文档(实际上本文很多东西都是直接help来的)
两大数据结构——矩阵和字符串
矩阵有哪些操作?
矩阵的输入和声明
直接声明
A=[1,2,3;2,3,4]
A =
1 2 3
2 3 4
从用户获得输入,注意,输入格式与在代码中输入是一样的
A=input('input A:')
%input
[1,2,3;...
2,3,4]
%end of input
A =
2 3 4
2 4 5
注意,下列方法获得的也是个向量/矩阵,这对理解Matlab怎么操作函数有很重要的意义
A=1:2:5
A =
1 3 5
A=1:3:5
A =
1 4
A=1:3
A =
1 2 3
A=[1:2:5,1:3:5]
A =
1 3 5 1 4
A=[[1:2:5]',[1:3:7]']%'是转置,这里涉及了子矩阵的组合,见‘重构矩阵的方法’一节
A =
1 1
3 4
5 7
A=input('input A:')
%input
1:1:3
%end of input
A =
1 2 3
可以猜测,实际上a:step:b指的是从a到b,步长为step的向量,也可以知道这种向量和[1,2,3]这种向量并没有不同之处,这很重要!直接关系能不能正确理解后面的函数!
获取矩阵信息的函数
- 获得行列数 [rows,cols]=size(A); szA=size(A);%szA是一个二维行向量 maxrc=length(A);%各个维度的元素数的最大值(2*3*4的三维矩阵即4) matlab123
- 获得维度,注意维度类比是x、y坐标的意思 dimA=ndims(A); matlab1
- 获得非0元素个数 cnt_nzero=nnz(A); matlab1
- 声明矩阵的常用方法 sz是指一个n维向量代表每个维度的元素数 A=ones(sz);%全为1的矩阵 B=zeros(sz);%全为0的矩阵 C=rand(sz);%产生在(0,1)区间均匀分布的随机阵 D=eye(sz);%产生单位阵 E=randn(sz)%产生均值为0,方差为1的标准正态分布随机矩阵 matlab12345 特殊矩阵 见链接中的 二-3
- 线性索引和坐标的转化 这在位运算中会涉及到,这里只是介绍 摘抄自此 可以使用单个下标A(k) 表示matlab矩阵中的元素,MATLAB不会以矩阵和数组在MATLAB命令行窗口中的显示形状存储矩阵和数组,而是会将矩阵和数组存储为单个元素列。这种单个列由矩阵中的所有列组成,没一列都附加到最后一列。 因此,矩阵 A A = [2 6 9; 4 2 8; 3 5 1] A = 2 6 9 4 2 8 3 5 1 matlab12345 实际上是以序列形式存储在内存中:2,4,3,6,2,5,9,8,1,注意这里是按照先列后行的方式排布 矩阵A中位于第3行,第2列的元素(值=5)也可以标识为实际存储序列中的第6个元素。要访问此元素,可以使用标准的A(3,2)语法,也可以使用A(6)。 如果提供多个下标,Matlab将会基于分配给数组的维度计算存储列的索引。例如,假定 A 之类的二维数组的大小为 [d1 d2],其中 d1 表示数组中的行数,d2 表示列数。如果提供两个表示行-列索引的下标 (i, j),则偏移为 (j-1) * d1 + i matlab1 给定表达式 A(3,2),MATLAB 会将 A 的存储列的偏移计算为 (2-1) * 3 + 3,即 6。从头开始数六个元素即会到达值 5。 主要运用的就是find函数,所以只对find函数简要介绍 find(x)返回一个包含数组 X 中每个非零元素的线形索引的向量 A=[1,0,3;0,4,0;5,0,6] (find(A))' %转置是为了看起来方便些 ans = 1 3 5 7 9 (find(A<3))'%这里涉及了矩阵的位运算 ans = 1 2 4 6 8 matlab1234567 这里也可以看出Matlab优先处理列向量
重构矩阵的方法
- 直接提取法 行的范围:row_a->row_b,列的范围:col_a->col_b sonA=A(row_a:row_b,col_a:col_b) matlab1 如果想要提取全部行/列的话 sonA=A(row_a:row_b,:)%获得了A的row_a->row_b行的全部列 matlab1 如果不知道具体多少行/列也不想多用变量的话 sonA=A(row_a:row_b,col_a:end) matlab1 如果你想的话,甚至可以从row_b->row_a翻转矩阵 son_rev_A=A(row_b:-1:row_a,1:end) %获得A全部列调转row_a->row_b行之后的矩阵,这里也可以猜出A(:,:)格式的本质是什么 matlab12 还记得吗,a:step:b实际上是一种向量,所以下面的方法获得矩阵也是可以的 这里pos使用的是线性索引 A=[1,0,3;0,4,0;5,0,6]; pos=[1,2;3,4] A(pos) ans = 1 0 5 0 pos=[1:2:3;2,5] A(pos) ans = 1 5 0 4 matlab1234567891011 可以猜测直接提取法的本质: A(B)将返回与B大小一致的矩阵,其中的元素为B上每一个位置对应的线性索引对应的A的值
- reshape函数 目测不是很好用,如果上面的方法无法满足需求时可以 点击这个链接 了解具体怎么用,当然,也可以help reshape
- 组合矩阵法 获得A,B构成的矩阵,这里的例子要求A的行数与B的行数一致(与数学上的分块的要求一样) C=[A(1:2,1),B(1:2,:)] matlab1
矩阵的简单操作函数
只记录几个常用的,其他如求上三角、求转置、翻转等 参阅这个链接
- 取整函数fix ceil floor %fix将X的每个元素朝零方向四舍五入为最近的整数 A=fix(10*rand(1,10));%产生1*10的每个元素均为0-9之间随机整数的矩阵 %ceil将X的每个元素四舍五入到大于或等于该元素的最接近整数 %floor将X的每个元素四舍五入到小于或等于该元素的最接近整数 matlab1234
- 计算矩阵的秩/行列式/特征值/迹/逆等 r=rank(A);%矩阵的秩 d=det(A);%矩阵的行列式 v=eig(A);%矩阵的特征值,这里的v是一个列向量 t=trace(A);%矩阵的迹,这里A必须是方阵 A=inv(A);%矩阵的逆 matlab12345 需要查找其他的求值函数(如求约化阶梯阵)时可以百度和help cmd
- 求矩阵的转置 B=A' B=A.' matlab12 两者的在涉及复数时的区别请参阅help '
- 求对角线元素 与求迹不同,这里不需要A是方阵,会逐个取 A(i,i) 元素 B=diag(A) matlab1
矩阵的运算
注意,matlab几乎一切皆矩阵,所以矩阵的运算会伴随使用Matlab的全过程,一定要思考每一个函数与矩阵是否有关系