matlab入门精讲 【官方资料精简而来,确保全面】

matlab入门精讲

learn_matlab_zh_CN.pdf             Matlab快速入门[本文取于此书]
matlab_3d_visualize_zh_CN.pdf      三维可视化绘图
matlab_api_ref.pdf                 C/C++,Fortran,Java,Python API参考
matlab_creating_guis.pdf           Matlab App构建
matlab_creating_plots_zh_CN.pdf    图形相关说明
matlab_data_analysis_zh_CN.pdf     数据分析说明
matlab_env_zh_CN.pdf               桌面工具和开发环境
matlab_external.pdf                提供给外部程序的接口
matlab_import_export.pdf           数据导入导出
matlab_matfile_format.pdf          MAT文件格式说明
matlab_math_zh_CN.pdf              数学方面
matlab_oop.pdf                     Matlab面向对象程序设计
matlab_prog_zh_CN.pdf              Matlab编程基础
matlab_ref_zh_CN.pdf               Matlab函数参考
matlab_release_notes.pdf           Matlab发行说明
matlab_ode_suite.pdf               解决常微分方程的数学软件开发套件(论文)
matlab_simax.pdf                   Matlab中稀疏矩阵的设计与实现(论文)
matlab_sorensen.pdf                大规模特征值计算的ARNOLDI/LANCZOS方法(论文)


[概述]
数组,一维数组。
矩阵,二维矩阵。
数阵,任何自然维度的数组。
维数,数阵维度之数量。
维度,数阵某一维的度量。维度相同,即维数和相应的维度相同。
matlab是一个数学软件,用于处理数阵,支持多线程计算。
其变量都以数阵形式处理,是可统一数式,以便于计算和表达。
其有命令和语句,可调函数,亦可存为脚本。
用之以处理数据,绘图以表之,可有助焉。

[变量]
皆可视为数阵,常用矩阵、数组、变量。
有元胞数组、字符串、字符数组、结构体、函数句柄等变量类型。
复数的虚部,用i或j表示。
全局变量,以global修饰,共享于工作区及所有函数,如:global GRAVITY

~数阵~
#矩阵创建,使用方括号创建,使用逗号或空格分隔各元素,使用分号分隔各行。
创建矩阵的另一种方法是使用ones,zeros或rand等函数。
magic(n) 生成n阶幻方矩阵
以下函数,一个参数表示生成n阶方阵,多个参数表示生成指定维度的数阵:
zeros    全为零
ones     全为一
rand     生成随机元素
randn    生成正态分布的随机元素

#矩阵索引,可以使用行列下标,也可以使用单一下标按顺序向下遍历每一列的线性索引。
#删除行或列,只需取其引用赋空值,如:X(:,2)=[] %删除X的第二列
#逻辑下标,是一个数阵,元素值true或false,设L是和X维度相同的逻辑数阵,那么X(L)就是取X中对应L元素true的组成的数组,若X为行向量,则X(L)也为行向量,否则X(L)都是列向量。
#数阵外元素取值会引发错误,而赋值则自动扩容。
#引用多个数阵元素,可以使用冒号运算符,如:A(1:3,2)
单独的冒号指定该维中的所有元素。
冒号运算符也可以start:step:end创建等距向量值。其中,step可省略,默认为1,如:1:3

#元胞数组,cell函数可以创建空的元胞数组,花括号也可以得到元胞数组,使用花括号引用其元素,如:
A=cell(2,3) %空的元胞数组
C={x sum(x) prod(prod(x))} %花括号创建的元胞数组
A{1}=C %元胞数组的元素可以是元胞数组
A{2}=C' %元胞数组可以转置
A{3}=x %也可以像矩阵那样用线性索引
A{2,2}=0 %用行列下标引用其元素
A{1,3}=5
A{2,3}=6

~字符串~
#字符串,以双引号括起之文本,其中有双引号则以两个代之。字符串string类型也是数组,支持'+'运算符,数值可以自动转为字符串。
#字符数组,单引号定义之char数组。

~结构体~
结构体,是多维matlab数组,其维度即字段,如:
S.name='小明'
S.score=83
S.grade='B+'
定义了三个字段的标量结构体,然後可以使用其数组,添加一个结构体元素,如下:
S(2)=struct('name','小王','score',70,'grade','C')
在结构体中可以使用动态字段引用其数据,格式如下:
structName.(expression) %expression值为structName中某一字段的文本

~函数句柄~
以@符号接函数名构造函数句柄,调用之如函数,亦可传参。
匿名函数,可直接以一个语句定义,如下:
f=@(arglist)expression
嵌套函数创建的函数句柄,存储了其父函数定义的变量。

 

[语句]
matlab区分大小写,变量名称使用前N个字符(namelengthmax返回的值)并忽略其余字符,数字使用和C语言类似。
matlab使用双精度浮点存储所有数字,当然可以用强制转换而以整数存储。
注释,'%'添加单行注释,两个'%%'之间定义程序块,使用"%{","%}"做块注释。
使用';'结束行,matlab会执行计算而不显示命令行窗口输出。
使用"..."来作表达式续行

doc和help命令获取函数帮助文档。
type filename   显示文件内容

条件语句,格式:
if 表达式
  语句
elseif 表达式
  语句
else
  语句
end

switch 变量名
  case 匹配值
  语句
  case 匹配值
  语句
  otherwise
  语句
end

循环语句,格式:
for 变量 = 数组
  语句
end

while 表达式
  语句
end

循环中可以用break和continue,while语句和C语言类似;for循环中,变量遍历数组元素,也可以遍历矩阵中的列向量。

return 用于函数返回。终止当前命令序列,并将控制权返回给调用函数或键盘。
使用向量化和预分配可以提高matlab运算速度。

可以使用命令语法调用函数,如:foo a b c %等同于foo('a','b','c')


[运算符]
MATLAB可以使用单一的算术运算符或函数来处理矩阵中的所有值。
使用逗号将彼此相邻的数组串联起来称为水平串联,每个数组必须具有相同的行数。同样,如果各数组具有相同的列数,则可以使用分号垂直串联
关系运算中,"==" "~="比较实部和虚部,而">" "<" ">=" "<="忽略虚部。注:"~="是不等于运算符。
逻辑运算中,"&&" "||"具备短路功能,而"&" "|" "~"不具备。
矩阵运算
+ - * /
\  左除,a\b=inv(a)*b
^  幂运算,a^(3/2)
'  复共轭转置,a'
数组运算
+ - .* ./ 点乘和点除是对应元素乘除
.\ 逐元素左除,与"./"除数被除数位置相反
.^ 点幂运算,逐元素幂
.' 非共轭数组转置


[脚本和函数]
脚本,以其文件名调用,无输入输出参数,处理工作区数据。
edit 创建脚本文件,以m为後缀,实时脚本以mlx为後缀。

函数,定义于脚本中,其名应与文件名相同(主函数),有可变输入输出参数,处理其局部变量。函数定义如下:
function [outputs,...] = func_name(inputs,...) %某些情况可省略输入输出参数
%func_name comment %lookfor命令以显示此行
% comments %help命令显示及以上注释
func_body
end
为处理可变参数数量,函数体中可用两个值:nargin输入参数个数,nargout输出参数个数。
调用函数类似C语言,若返回多个参数则置于方括号中。调用无参函数,以其名。

函数句柄,以@符号接函数名构造函数句柄,调用之如函数,亦可传参。
quad(@fun,a,b)     以自适应Simpson积分法计算近似数值积分
quadl(@fun,a,b)    以自适应Lobatto积分法计算近似数值积分
integral(@fun,a,b) 使用全局自适应积分和默认误差容限求数值积分

匿名函数,可直接以一个语句定义,如下:
f=@(arglist)expression

局部函数,非匿名函数必须定义于文件中,而一个文件可包含多个函数,其中,一个主函数,及局部函数。
主函数可以直接调用,而局部函数只在其文件中可见。
私有函数,是特殊的主函数,位于普通脚本目录下的private子目录中,于其母目录下的脚本中可见,此外则不可见。

嵌套函数
function parent
disp('This is the parent function')
nestedfx
   function nestedfx
      disp('This is the nested function')
   end
end
函数可嵌套,嵌套函数具有其父函数中定义的变量,其父函数亦可访问其变量以有之。
若其父函数不访问之变量,可存于多个嵌套函数中而不交互。
不可于流程控制语句中定义嵌套函数。
嵌套函数的工作区是静态的(能确定其包含的变量,而不是大小),匿名函数也是一样的。
嵌套函数创建的函数句柄,存储了其父函数定义的变量。
嵌套函数在其函数体内可见,在其父函数中可见。


[常用函数和命令]
clc 清空命令行窗口
clear 清空工作区

find函数,和逻辑下标类似,但是取元素true的索引组成数组。
数组可以作为下标,用来取矩阵中的相应元素,如:
k=find(isprime(A)) %取A中素数索引
A(k)=NaN %去掉A中素数并赋值NaN

数组创建
magic(n) 生成n阶幻方矩阵
以下函数,一个参数表示生成n阶方阵,多个参数表示生成指定维度的数阵:
zeros    全为零
ones     全为一
rand     生成随机元素
randn    生成正态分布的随机元素


线图,用plot函数绘制,可以标记轴并添加标题,如:
plot(x,y)
xlabel('x')
ylabel('y')
title('title')
通过向plot函数加入第三个参数,可以控制线的样式,如:plot(x,y,'r--') %红色虚线样式
plot函数可以一次绘制多条曲线(有多组数据作参数可绘制多条线),使用legend来标识各条曲线:
legend('y1','y2','y3')
使用axis设置坐标轴范围和纵横比:
axis([xmin xmax ymin ymax])    设置当前坐标轴 x轴 和 y轴的限制范围
axis([xmin xmax ymin ymax zmin zmax cmin cmax])   设置x,y,z轴的限制范围和色差范围
axis auto    自动选择所有的坐标轴限制
axis tight   将坐标范围设定为被绘制的数据范围
axis equal   使每个坐标轴具有均匀的刻度间隔
axis off     隐藏坐标轴
axis on      打开所有的坐标轴标签、刻度、背景
对不同的坐标轴限制,有xlim,ylim,zlim函数,用法和axis类似。
grid on      启用网格线
grid off     禁用网格线
绘图一般会清空图窗,要绘图到现有图窗,使用hold on,後用hold off後重新绘图。

三维绘图,有曲面图、网格图、折线图。
折线图,plot3(X,Y,Z,options) %可以有多个X、Y、Z、options参数表示多组曲线
  当X、Y、Z为向量时,其对应元素构成一条三维曲线。
  当X、Y、Z为矩阵时,其对应列元素绘制三维曲线,条数等于列数。
网格坐标矩阵,是一对行列长同之矩阵,每一对应行向量可绘制一条曲线,对应列向量也可绘制曲线,行向量和列向量绘制的曲线组成网格。
[X,Y]=meshgrid(x,y) %生成网格坐标矩阵,meshgrid(x)等价于meshgrid(x,x)
  执行後,矩阵X之行为向量x,行数为向量y之长,Y之列为y而列数值x之长。
网格图,mesh(x,y,z,c) %绘制网格曲面
  x,y,z是行列长同之矩阵,x,y是网格坐标矩阵,z是其上的高度矩阵,c用于指定不同高度上的颜色。
  此外,meshz和meshc也绘制网格图,前者还绘制曲面的底座,後者还绘制曲面在z轴方向的等高线。
mesh(X,Y,Z)        绘制三维网格图
mesh(Z)            以矩阵Z中列行索引作x,y坐标,元素作z坐标,绘制三维网格图
mesh(__,C)         进一步指定边的颜色
mesh(ax,__)        绘制到指定坐标区ax中
mesh(__,Name,Value) 指定曲面属性
s=mesh(__)         得到曲面对象
曲面图,surf函数的用法和mesh是一样的。

子图,使用subplot函数在同一窗口显示多个绘图。
subplot(m,n,a) %窗口有m行n列子图,取索引a的子图进行绘制(索引a不同于矩阵线性索引,是自左向右遍历每一行的索引)。
可以简写为subplot(mna),如:subplot(221)等价于subplot(2,2,1)


format函数,控制显示数值的格式(不影响计算):
format short     单精度浮点
format short e   单精度科学计数法
format short g   单精度自适应(小数或科学计数法)
format long      双精度浮点
format long e或g
format bank      银行格式,保留两位小数
format rat       有理数格式,显示最接近的有理数
format hex       十六进制形式,在内存中的数据
format compact   不显示输出中出现的多个空行

矩阵张量积:kron(X,Y)=[X(i,j)*Y],X的元素与Y相乘构成更大的矩阵。
范数:norm(x,p) % p默认为2
伪逆:pinv(A) %求伪逆,对于非奇异矩阵即求逆,对于奇异矩阵则求最小二乘解
rref(A) %对行进行化简得到阶梯型矩阵

左除和右除
mldivide  A\B 对A*x=B求解,可能是最小二乘解。A接近奇异或秩亏,则给出警告信息。
mrdivide  B/A 对x*A=B求解,可能是最小二乘解。A接近奇异或秩亏,则给出警告信息。

null(A)     返回A的零空间的标准正交基。
null(A,'r') 返回A的零空间的“有理”基。

求解空间:A*X=B,解空间为:X=A\B+null(A)*q, q为任一向量。
求解一组方程A*X=bn,可以使用X=A\[b1 b2 b3 ...],这其实是矩阵除法。
decomposition(A)  A的分解因子对象,用于加速多次矩阵除法,decomposition(A)\b=A\b.
迭代法求解方程组,此处不列。

矩阵分解,矩阵可以分解为多个矩阵的积,有:Cholesky,LU,QR分解等。
平方根,使用sqrt函数逐元素求根;其他根,nthroot(A,n) %求n次方根
eig(A)     返回一个列向量,其中包含方阵A的特征值。也可用来返回特征值和特征向量。
log1p(x)   值log(1+x)
expm1(x)   值e^x-1

特征值与特征向量
[V,D]=eig(A) %满足A*V=V*D,其中,V是特征向量,D是特征值。
当V非奇异矩阵时,特征值可分解:A=V*D/V;
Schur分解,A=U*S*U',U是正交矩阵,S是对角线上为1×1和2×2块的块上三角矩阵,特征值根据S的对角线上块决定。

奇异值分解
对于方阵有特征值分解,而对于普通矩阵有奇异值分解:A=U*S*V',A是m×n矩阵,U是m×m矩阵,S是m×n矩阵,V是n×n矩阵。
有U'*U=I(单位矩阵)=V'*V,A*A'的特征向量组成U,A'*A的特征向量组成V,S包含的奇异值可由A*A'或A'*A的特征值开方求得。
奇异值分解并不始终可行,大型稀疏矩阵一般只需要知道几个最大的奇异值,那么可以用svds和svdsketch函数加速。


多变量数据
help datafun    获取matlab提供的数据分析函数的列表
mean(A)    对矩阵A每一列求均值
std(A)     对矩阵A每一列求标准差
median(A)  对矩阵A每一列求中位数
mode(A)    对矩阵A每一列求众数
var(A)     对矩阵A每一列求方差
sum(A,n)   对矩阵的第n维求和,默认n为1(同一列求和,返回行向量),n为2时,同一行求和,返回列向量。

repmat(A,r1,...,rn)   返回一个多维数阵,将维度r1×...×rn的数阵元素替换为A,返回扩展後的数阵
convn(A,B)            返回A和B的n维卷积
filter(b,a,X)   使用由分子系数b和分母系数a定义的有理传递函数,对输入数据X进行滤波。和一维卷积计算方法一样,但有延迟。
scatter(x,y)    在向量x和y指定的位置创建一个散点图
scatter3(x,y,z) 创建一个三维散点图
cov(A)          协方差,矩阵A的列向量之间的协方差矩阵
corrcoef(A)     相关系数矩阵,对于向量ai,aj,其相关系数为cov(ai,aj)/sqrt(std(ai)*std(aj)).

polyfit(x,y,n)    返回点集拟合的n次多项式降幂排列的系数
一般线性回归使用矩阵除法计算即可(最小二乘法)。

fft(X,n,dim)    快速傅里叶变换


图窗窗口,绘图函数在图窗绘制,需要则自动创建一个图窗。
figure      创建一个新的图窗作为当前图窗,编号从1开始
figrue(n)   指定当前图窗的编号
多数绘图命令使用当前图窗绘制,其不会重置图窗属性。可以使用clf命令清空图窗。
clf             此命令返回图窗句柄,删除可见的绘图
clf('reset')    重置图窗
clf(fig)或clf(fig,'reset')    删除或重置fig绘图
savefig(figs,filename)       保存图窗句柄(数组)到fig格式文件
saveas(fig,filename)         将图窗fig保存到filename中,格式由文件名决定
openfig(filename)            打开图窗并返回图窗句柄

[A,map,transparency]=imread(filename,fmt,idx) %输入和输出参数都至少有一个
读取filename的图像,fmt是其格式(可不指定),idx是其(多图像文件)索引;
A是图像数据,灰度图像则为矩阵,彩色图像则为三维数组;
map是颜色图,如果有,则A存储map的索引,map存储颜色数据;
transparency是透明通道。

imshow(I,map)                显示I的图像数据,以map为颜色图
imshow(I,[low high])         显示I的灰度图像,以值low为黑色,值high为白色
imwrite(A,map,filename,fmt)  将图像数据存储为文件,参数意义见imread

colormap    查看并设置当前颜色图(hsv是内置的颜色图数组)
alphamap    指定图窗的alphama(透明度)
colorbar    在当前坐标区或图的右侧显示一个垂直颜色栏。颜色栏显示当前颜色图并指示数据值到颜色图的映射。
alpha       向坐标区中的对象添加透明度
camlight    在照相机坐标系中创建或移动光源对象
lighting    指定光照算法

print(filename,fmt)          打印当前图窗到文件,fmt是文件格式(以'-d'开头,如'-dpng')
print('-clipboard','-dmeta') 打印当前图窗到剪切板
print(fig,...)               打印fig图窗


用于处理对象的函数
allchild   查找指定对象的所有子级。
ancestor   查找图形对象的父级。
copyobj    复制图形对象。
delete     删除对象。
findall    查找所有图形对象(包括隐藏句柄)。
findobj    查找具有指定属性值的对象的句柄。
gca        返回当前轴的句柄。
gcf        返回当前图窗的句柄。
gco        返回当前对象的句柄。
ishandle   如果值是有效对象句柄,则为 True。
get(h)             查询图形对象属性
set(H,Name,Value)  设置图形对象属性

查找特定属性的对象
h=findobj('PropertyName',PropertyValue,...)  在根对象中查找
h=findobj(objhandles,...)                    在objhandles中查找

isequal(A,B)    确定数组相等性
isempty(A,B)    确定数组是否为空
all(A)          确定所有的数组元素是为非零(或为true)
any(A)          确定任何数组元素是否为非零(或为true)

特殊函数提供常量值
pi      圆周率
i或j    虚数单位
eps     浮点相对精度,eps=2^-52
realmin 最小浮点实数,2^-1022
realmax 最大浮点实数,(2-eps)*2^1023
Inf     无穷大
NaN     非数字
这些特殊函数可以被赋值语句覆盖,用clear命令恢复之。


help elfun %有关初等函数的列表
help specfun %有关高等函数的列表
help elmat %有关矩阵函数的列表
某些函数是内置的,如:sqrt和sin.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值