匿名函数
匿名函数是不存储在程序文件中、但与数据类型是 function_handle
的变量相关的函数。匿名函数可以接受输入并返回输出,就像标准函数一样。但是,它们可能只包含一个可执行语句。
>> sqr = @(x) x.^2;
>> a = sqr(5)
a =
25
许多 MATLAB®函数接受将函数句柄用作输入,这样您可以在特定值范围内计算函数。您可以为匿名函数或程序文件中的函数创建句柄。使用匿名函数的好处是不必为仅需要简短定义的函数编辑和维护文件。
>> q = integral(sqr,0,1)
q =
0.3333
您无需在工作区中创建变量以存储匿名函数。可以在表达式内创建临时函数句柄。
>> q = integral(@(x) x.^2,0,1)
q =
0.3333
嵌套函数
嵌套函数是完全包含在父函数内的函数。程序文件中的任何函数都可以包含嵌套函数。
function parent
disp('This is the parent function')
nestedfx
function nestedfx
disp('This is the nested function')
end
end
嵌套函数与其他类型的函数的主要区别是,嵌套函数可以访问和修改在其父函数中定义的变量。因此:
-
嵌套函数可以使用不是以输入参数形式显式传递的变量。
-
在父函数中,您可以为嵌套函数创建包含运行嵌套函数所必需的数据的句柄。
嵌套函数的要求
-
嵌套函数通常不需要
end
语句。但是,要在程序文件中嵌套任何函数,该文件中的所有函数都必须使用end
语句。 -
不能在任何 MATLAB 程序控制语句内定义嵌套函数,例如
if/elseif/else
、switch/case
、for
、while
或try/catch
。 -
必须按名称直接调用嵌套函数,而不使用
feval
或使用您使用@
运算符创建的函数句柄(并不是str2func
)。 -
嵌套函数或包含嵌套函数的函数中的所有变量都必须显式定义。即,除非变量已存在于函数工作区中,否则无法调用函数或脚本向那些变量赋值。
脚本文件
edit | 编辑或创建文件 |
input | 请求用户输入 |
publish | 以指定格式生成 MATLAB 文件的视图 |
grabcode | 从发布到 HTML 的文件中提取 MATLAB 代码 |
snapnow | 拍摄图像快照以包括在发布文档中 |
代码节
函数
创建函数
输入和输出参数
nargin | 函数输入参数数目 |
nargout | 函数输出参数数目 |
varargin | 可变长度输入参数列表 |
varargout | 可变长度的输出参数列表 |
narginchk | 验证输入参数数目 |
nargoutchk | 验证输出参数数目 |
validateattributes | 检查数组的有效性 |
validatestring | 检查文本的有效性 |
inputParser | 函数的输入解析器 |
inputname | 函数输入的变量名称 |
mfilename | 当前正在运行的代码的文件名 |
错误处理
error | 引发错误并显示消息 |
warning | 显示警告消息 |
lastwarn | 最后一条警告消息 |
assert | 条件为 false 时引发错误 |
onCleanup | 函数完成后的清理任务 |
线性代数
线性方程、特征值、奇异值、分解、矩阵运算、矩阵结构
线性方程
mldivide | 对线性方程组 Ax = B 求解 x |
mrdivide | 对线性方程组 xA = B 求解 x |
decomposition | 求解线性方程组的矩阵分解 |
lsqminnorm | 线性方程的最小范数最小二乘解 |
linsolve | 对线性方程组求解 |
inv | 矩阵求逆 |
pinv | Moore-Penrose 伪逆 |
lscov | 存在已知协方差情况下的最小二乘解 |
lsqnonneg | 解算非负线性最小二乘问题 |
sylvester | 求 Sylvester 方程 AX + XB = C 的 X 解 |
特征值和奇异值
eig | 特征值和特征向量 |
eigs | 特征值和特征向量的子集 |
balance | 对角线缩放以提高特征值准确性 |
svd | 奇异值分解 |
svds | 奇异值和向量的子集 |
gsvd | 广义奇异值分解 |
ordeig | 拟三角矩阵的特征值 |
ordqz | 在 QZ 分解中将特征值重新排序 |
ordschur | 在 Schur 分解中将特征值重新排序 |
polyeig | 多项式特征值问题 |
qz | 广义特征值的 QZ 分解 |
hess | 矩阵的 Hessenberg 形式 |
schur | Schur 分解 |
rsf2csf | 将实数 Schur 形式转换为复数 Schur 形式 |
cdf2rdf | 将复数对角形转换为实数分块对角形 |
矩阵分解
lu | LU 矩阵分解 |
ldl | Hermitian 不定矩阵的分块 LDL 分解 |
chol | Cholesky 分解 |
cholupdate | Cholesky 分解的秩 1 更新 |
qr | 正交三角分解 |
qrdelete | 从 QR 分解中删除列或行 |
qrinsert | 将列或行插入 QR 分解 |
qrupdate | QR 分解的秩 1 更新 |
planerot | Givens 平面旋转 |
矩阵运算
transpose | 转置向量或矩阵 |
ctranspose | 复共轭转置 |
mtimes | 矩阵乘法 |
mpower | 矩阵幂 |
sqrtm | 矩阵平方根 |
expm | 矩阵指数 |
logm | 矩阵对数 |
funm | 计算常规矩阵函数 |
kron | Kronecker 张量积 |
cross | 叉积 |
dot | 点积 |
矩阵结构
bandwidth | 矩阵的上下带宽 |
tril | 矩阵的下三角形部分 |
triu | 矩阵的上三角形部分 |
isbanded | 确定矩阵是否在特定带宽范围内 |
isdiag | 确定矩阵是否为对角矩阵 |
ishermitian | 确定矩阵是 Hermitian 矩阵还是斜 Hermitian 矩阵 |
issymmetric | 确定矩阵是对称矩阵还是斜对称矩阵 |
istril | 确定矩阵是否为下三角矩阵 |
istriu | 确定矩阵是否为上三角矩阵 |
矩阵属性
norm | 向量范数和矩阵范数 |
normest | 2-范数估值 |
vecnorm | 向量范数 |
cond | 逆运算的条件数 |
condest | 1-范数条件数估计 |
rcond | 条件数倒数 |
condeig | 与特征值有关的条件数 |
det | 矩阵行列式 |
null | 矩阵的零空间 |
orth | 适用于矩阵范围的标准正交基 |
rank | 矩阵的秩 |
rref | 简化的行阶梯形矩阵(Gauss-Jordan 消元法) |
trace | 对角线元素之和 |
subspace | 两个子空间之间的角度 |
稀疏矩阵
MATLAB从不会自动创建稀疏矩阵。相反,还必须确定矩阵中是否包含足够高百分比的零元素,以便利用稀疏方法。
矩阵的密度是指非零元素数目除以矩阵元素总数。对于矩阵 M
,这将为
nnz(M) / prod(size(M));
或
nnz(M) / numel(M);
密度非常低的矩阵通常很适合使用稀疏格式。
创建
spalloc | 为稀疏矩阵分配空间 |
spdiags | 提取并创建稀疏带状和对角矩阵 |
speye | 稀疏单位矩阵 |
sprand | 稀疏均匀分布随机矩阵 |
sprandn | 稀疏正态分布随机矩阵 |
sprandsym | 稀疏对称随机矩阵 |
sparse | 创建稀疏矩阵 |
spconvert | 从稀疏矩阵外部格式导入 |
操作
issparse | 确定输入是否为稀疏矩阵 |
nnz | 非零矩阵元素的数目 |
nonzeros | 非零矩阵元素 |
nzmax | 为非零矩阵元素分配的存储量 |
spfun | 将函数应用于非零稀疏矩阵元素 |
spones | 将非零稀疏矩阵元素替换为一 |
spparms | 为稀疏矩阵例程设置参数 |
spy | 可视化稀疏模式 |
find | 查找非零元素的索引和值 |
full | 将稀疏矩阵转换为满存储 |
特征值和奇异值
eigs | 特征值和特征向量的子集 |
svds | 奇异值和向量的子集 |
normest | 2-范数估值 |
condest | 1-范数条件数估计 |
结构分析
sprank | 结构秩 |
etree | 消去树 |
symbfact | 符号分解分析 |
spaugment | 构造最小二乘增广方程组 |
dmperm | Dulmage-Mendelsohn 分解 |
etreeplot | 绘制消去树 |
treelayout | 设置树或森林的布局 |
treeplot | 绘制树形图 |
gplot | 对表示邻接矩阵的节点和链接绘图 |
unmesh | 将边矩阵转换为坐标和拉普拉斯矩阵 |
迭代法和预条件子
pcg | 预处理共轭梯度法 |
minres | 最小残差法 |
symmlq | 对称的 LQ 方法 |
gmres | 广义最小残差法(通过重新启动) |
bicg | 双共轭梯度法 |
bicgstab | 双共轭梯度稳定法 |
bicgstabl | 双共轭梯度稳定法 (l) |
cgs | 共轭梯度二乘法 |
qmr | 拟最小残差法 |
tfqmr | 无转置拟最小残差法 |
lsqr | LSQR 方法 |
equilibrate | 缩放矩阵以改善条件 |
ichol | 不完全 Cholesky 分解 |
ilu | 不完全 LU 分解 |
重排序算法
dissect | 嵌套剖分置换 |
amd | 近似最小度置换 |
colamd | 列近似最小度排列 |
colperm | 基于非零项计数的稀疏列置换 |
dmperm | Dulmage-Mendelsohn 分解 |
randperm | 随机置换 |
symamd | 对称近似最小度置换 |
symrcm | 稀疏反向 Cuthill-McKee 排序 |
工作区变量和MAT文件
load | 将文件变量加载到工作区中 |
save | 将工作区变量保存到文件中 |
matfile | 直接访问和更改 MAT 文件中的变量,而不加载到内存中 |
disp | 显示变量的值 |
who | 列出工作区中的变量 |
whos | 列出工作区中的变量及大小和类型 |
clear | 从工作区中删除项目、释放系统内存 |
clearvars | 清除内存中的变量 |
openvar | 在变量编辑器或其他图形编辑工具中打开工作区变量 |
工作区浏览器 | 打开工作区浏览器以管理工作区 |