(1)直接法:a = [1,2,3;4,5,6;7,8,9];也可A = [5 7 8; 0 1 9; 4 3 6];
(2)冒号一维矩阵: a = 开始:步长:结束,步长为1可省略
b = 1:1:10;
b = 1:10; (与上面等价)
(3)函数生成:
linspace(开始,结束,元素个数),等差生成指定元素数的一维矩阵,省略个数则生成100个
c = linspace(0,10,5);
(4)特殊矩阵:
zeros函数:产生零矩阵
ones函数:产生全1矩阵
eye函数:产生对角线为1的矩阵
rand函数:产生(0,1)区间均匀分布的随机矩阵
randn函数:产生均值为0,方差为1的标准正态分布随机矩阵
magic(n)(魔方方阵):
n阶魔方阵由1,2,3,…,n2 共n2 个整数组成,且每行、每列以及主副对角线上个元素之和都相等。
n阶魔方阵每行每列元素的和为(1+2+3+…+,n2)/n=(n+n3)/2。
Matlab函数magic(n)产生一个特定的魔方阵。
eg:
vander(v):生成以向量V为基础的范德蒙矩阵。
hilb(n):生成n阶希尔伯特矩阵。
eg:
compan(n):生成多项式n的伴随矩阵
其中n是一个多项式的系数向量,高次幂系数排在前,低次幂系数排在后。例如,生成多项式x.^3-2x- 5x+6的伴随矩阵。
帕斯卡矩阵
符号 | 作用 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 矩阵乘法 |
.* | 数组乘法(只有维数相同的矩阵才能用这种,即相同位置相乘) |
/ | 斜杠或者矩阵右除 (B/A等于公式B*inv(A)) |
./ | 数组右除(A./B等于A(i,j)/B(i,j)) |
\ | 反斜杠或者矩阵左除 A\B等于inv(A)*B |
.\ | 数组左除(A.\B等于B(i,j)/A(i,j)) |
^ | 矩阵幂计算 |
.^ | 数组幂计算( A.^B等于A(i,j)的B(i,j)次幂) |
’ | 矩阵转置 |
[]:表示空矩阵,A(m,:)删除A中的一行,A(:,n)删除A中的一列
{}:元胞组赋值
关系操作符:< <= > >= == ~ =
逻辑操作符 : 逻辑:&& || 数组:& | ~
函数diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量
函数diag(V):以向量V为主对角线元素,产生对角矩阵
函数diag(V,k):以向量V为第k条对角线元素,产生对角矩阵
函数triu(A):提取矩阵A的主对角线及以上的元素
函数triu(A,k):提取矩阵A的第k条对角线及以上的元素
函数tril用于产生下三角矩阵,用法同triu函数一样
转置运算符是小数点后面接单引号(’)(我也不太清楚他为什么这么写我寻思B=(A’)也可)
函数norm(A):求矩阵A的模。
共轭转置,其运算符是单引号(’),它在转置的基础上还要取每个数的复共轭
函数rot90(A,k):将矩阵A逆时针方向旋转90°的k倍,当k为1时可省略
函数fliplr(A),对矩阵A实施左右翻转
函数flipud(A),对矩阵A实施上线翻转
函数pinv(A),求方阵A的逆矩阵(伪逆矩阵,当a不是方阵,求广义逆矩阵;当a是可逆方阵,结果与逆矩阵相同)
函数det(A):求方阵对应的行列式的值
函数rank(A):求矩阵的秩
函数trace(A):求矩阵的迹(迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和)
函数reshape(A,m,n):将指定的矩阵变换成特定维数矩阵一种函数。
a = a;
a(2,3) = 4; % (行,列)元素替换
a(1,:) = [2,2,2]; % (行,:)替换行,[]为删除该行
a(:,1) = []; % (:,列)替换列,[]为删除该列
C = cat(1,A,B); % 垂直拼接,相当于[A; B]
C = cat(2,A,B); % 水平拼接,相当于[A, B]
其他基本函数
format:设置数据输出格式。format(‘command’)
disp:在commandwindow中显示字符和矩阵。
disp(x)—x为矩阵
disp(‘x’)—x为字符
disp([‘x’ a ‘y’])—打印字符合集
clear:清空工作空间的所有变量
clear name—clear(‘name’):清空以name命名的m文件,mex文件或变量名
clear globe name:完全清空以name命名的全局变量,清空后该全局变量不能被函数调用。
help:在MATLAB命令窗口中显示MATLAB的m函数,mdl文件,工具箱等的帮助信息。
break:终止执行for循环或者while循环, break语句结束循环,把语句控制返回给循环结束后的语句。
continue:传递控制给下一个for或while循环
case:条件为真时执行代码,case是switch语法中的允许有条件执行语句的一部分。case语句块由case函数,case表达式和其后的一条或多条语句构成。
switch:有条件执行的代码,在基本语法中,当switch_expr ==case_expr时执行相关语句,如果没有实例表达式与switch表达式相匹配,则语句控制传递给otherwise语句块。
If:如果条件为真,则执行相关语句 if expression, statements, end
elseif:—if expression1,statement1,elseifexpresstion,statement2,end
else:如果条件为假时执行语句
end:终止代码块,或为数组的最后一位数字索引, end用来终止for、while、switch、try和if语句—end函数也作为数组的最后一个索引,如X(3:end)和X(1,1:2:end-1)。可以用end增加数组,如X存在的情况下使用X(end+1)=5。
error:显示信息并终止函数—error(‘说明信息’)
for:反复运算指定代码块 forvariable=initval:endval, statements, end
while:当条件为真时重复执行语句—whileexpression,statement,end
return:从调用函数中返回
创建
直接法
A(:,:,1) = [1,2,3;2,3,4];
A(:,:,2) = [3,4,5;4,5,6];
扩展法
A = [1,2,3;2,3,4];
A(:,:,2) = [3,4,5;4,5,6]; % 若不赋值第一页,第一页全为0
cat法
A = [1,2,3;2,3,4];
A = [3,4,5;4,5,6];
A= cat(3,B,C); % 把B,C按照“3”维连接
(matlab默认1为行向量,2为列向量)
字符串
创建
str0 = ‘hello world’; % 单引号引起
str1 = ‘I’‘m a student’; % 字符串中单引号写两遍
str3 = [‘I’‘m’ ‘a’ ‘student’]; % 方括号链接多字符串
str4 = strcat(str0, str1); % strcat连接字符串函数
str5 = strvcat(str0, str1); % strvcat连接产生多行字符串
str6 = double(str0); % 取str0的ASCII值,也可用abs函数
str7 = char(str6); % 把ASCII转为字符串
操作
比较
strcmp(str0, str1); % 相等为1,不等为0
strncmp(str0, str1, 3); % 比较前3个是否相等(n)
strcmpi(str0, str1); % 忽略大小写比较(i)
strncmpi(str0, str1, 3); % 忽略大小写比较前3个是否相等
查找替换
strfind(str0, str1); % 在str0找到str1的位置
strmatch(str1, str0); % 在str0字符串数组中找到str1开头的行数
strtok(str0); % 截取str0第一个分隔符(空格,tab,回车)前的部分
strrep(str0, str1, str2); % 在str0中用str2替换str1
其他
upper(str0); % 转大写,lower转小写
strjust(str0, ‘right’); % 将str0右对齐,left左对齐,center中间对齐
strtrim(str0); % 删除str0开头结尾空格
eval(str0); % 将str0作为代码执行
single:转换为单精度浮点数
double:转换为双精度浮点数
base2dec :把指定进制的数字字符串转换为十进制数 d=base2dec(‘strn’, base)
bin2dec :把二进制数字字符串转换为十进制数 bin2dec(binarystr)
hex2dec :把十六进制数字字符串转换为十进制数 d=hex2dec(‘hex_value’)
hex2num :把十六进制数字字符串转换为双精度浮点数 n=hex2num(S)
str2double :把字符串转换为双精度浮点数
str2num :把字符串转换为数字
dec2base:把十进制数转换为指定基下的数值字符串 str=dec2base(d, base)
dec2bin :把十进制数转换为二进制数值字符串
dec2hex :把十进制数转换为十六进制的数值字符串
int2str :把整数转换为字符串
mat2str :把矩阵转换为字符串
num2str :把数字转换为字符串
display:显示字符或者数组
isempty :判断数组是否为空,空返回1,不空返回0
isequal :判断数组是否相同 (认为NaN不同)
isequalwithequalnans:判断数组是否相同,把NaN看成相同的数
isfinite :判断数组元素是否为有限数
isfloat :判断数组元素是否为浮点数
isinf :判断数组元素是否为无限数
isinteger :判断元素是否为整数
islogical :判断元素是否为逻辑变量
isnan :判断元素是否为NaN
isnumeric :判断数组元素是否为数值
isscalar :判断输入是不是离散量
issparse :判断矩阵是否为稀疏矩阵
isvector :判断输入是否为向量
length :计算向量的长度
max :找出向量中的最大元素
C=max(A) A为一个向量,返回向量最大值,矩阵A,返回每列向量最大值
C=max(A,B) A、B维数一样,返回对应位置最大元素
max(A,[],dim)
[C,I]=max(A)找出最大值和索引
min :找出向量中的最小元素
ndims :计算矩阵的维数 ndims同length(size(x)) 一致
numel:计算数组中元素的个数或者下标数组表达式的个数
size :计算数组维数大小 d=size(X) [m,n]=size(X)m行n列 m=size(X,dim)
bsxfun:两个数组间元素逐个计算 C=bsxfun(fun,A,B)
@plus(加)@minus(减)@times(数组乘)@rdivide(左除)@ldivide(右除)@power(幂)@max@min@rem(整除)@mod(模除)
dot :向量点乘 C=dot(A,B)
create :生成随机数流 [s1,s2,…]=RandStream.create(‘gentype’,‘NumStreams’,n)
sort :把数组元素按升序或降序排列
B=sort(A,dim) B=sort(…,mode) [B,IX]=sort(A,2)返回B元素在A中的位置的索引
sortrows :矩阵行按照升序排列
det :求方阵行列式值
norm :计算向量或者矩阵范数 n=norm(A) n=norm(A,p)
normest :返回矩阵2-范数估计值
null :计算矩阵零空间
rank :返回矩阵的秩
rand:产生由在(0, 1)之间均匀分布的随机数组成的数组
subspace :返回两个子空间夹角
trace :返回矩阵的迹(对角元素之和)
eig :计算矩阵特征值和特征向量
condeig :计算特征值对应的条件数
eigs :计算矩阵的最大特征值和特征向量
gsvd :矩阵广义奇异值分解
svd :矩阵奇异值分解
sort :数组元素按升序或降序排列 B=sort(A) B=sort(A,dim) B=sort(…,mode)[B,IX]=sort(A,…)
sortrows :把矩阵中每行按照升序排列 B=sortrows(A) B=sortrows(A,column)
sum :求数列元素的和 B=sum(A) A是向量,向量求和,A是矩阵就没列求和 B=sum(A,dim)
mean :求数组的平均数或者均值 M=mean(A) M=mean(A,dim)
median :返回数组的中间值 M=median(A) M=median(A,dim)
mode :求数组中出现频率最多的值 M=mode(X) M=mode(X, dim)
[M,F]=mode(X, …)
std :计算标准差 s=std(X)
var :计算方差 V=var(X)
exp :计算指数
log :计算自然对数
log10 :计算平凡对数(以10为底)
log2 :计算以2为底数的对
pow2 :计算以2为底的幂
nthroot:计算实数值的实n阶方根。y=nthroot(X,n)
sqrt :计算平方根,例:sqrt(4)=2
abs :计算绝对值和复数模值
除法
ceil :向正无穷方向舍入
fix :向零方向舍入
floor :向负无穷方向舍入
idivide :舍入操作 C=idivide(A,B, opt)
mod :计算相除后的模值
factorial:阶乘—factorial(N),N!
perms:元素所有可能的全排列
dblquad :计算矩形区域的二重定积分
q=dblquad(fun,xmin,xmax,ymin,ymax)
q=dblquad(fun,xmin,xmax,ymin,ymax,tol)q=dblquad(fun,xmin,xmax,ymin,ymax,tol,method)
quad :求基于变步长Simpson法的函数定积分数值解 q=quad(fun,a,b)
quad2d :在平面区域求二重积分的数值解 q=quad2d(fun,a,b,c,d)
dblquad :计算矩形区域的二重定积分 q=dblquad(fun,xmin,xmax,ymin,ymax)
cumtrapz :累积梯形数值积分 Z=cumtrapz(Y)Z=cumtrapz(X,Y) 对于多维数组从第一维开始计算 Z=cumtrapz(X,Y,dim)
diff :差分与微分近似 Y=diff(X) Y=diff(X,n) Y=diff(X,n,dim)
gradient :计算函数数值梯度 FX=gradient(F) [FX,FY]=gradient(F)
biltin:重载方法中执行MATLAB内部自带的函数 builtin(…) 函数和 feval(…)函数相同
evalc :计算表达式值 T=evalc(S):同函数eval(S)用法相同
feval :计算函数值 [y1, y2, …]=feval(fhandle, x1, …, xn)
linsolve :使用部分主元LU因子分解法求解线性方程组 X = linsolve(A,B) [X, R] = linsolve(A,B) X = linsolve(A,B,opts)
lscov :已知协方差时求解方程的最小二乘解
x = lscov(A,b) 线性方程组Ax = b的一般最小二乘解
x = lscov(A,b,w) 线性方程组Ax = b的加权最小二乘解
x = lscov(A,b,V) 线性方程组A*x = b 的广义最小二乘解
x =lscov(A,b,V,alg)
bicg :求解线性方程的双共轭梯度法
x=bicg(A,b) bicg(A,b,tol)bicg(A,b,tol,maxit)
bicg(A,b,tol,maxit,M1,M2)bicg(A,b,tol,maxit,M1,M2,x0)[x,flag]=bicg(A,b,…)
[x,flag,relres]=bicg(A,b,…)[x,flag,relres,iter]=bicg(A,b,…)
[x,flag,relres,iter,resvec]=bicg(A,b,…)
bicgstab :求解线性方程的稳定的双共轭梯度法
bicgstabl :求解线性方程的双共轭梯度l稳定法
bicgstab :求解线性方程的稳定的双共轭梯度法
bicgstabl :求解线性方程的双共轭梯度l稳定法
cgs :求解线性方程的共轭梯度平方法
gmres :求线性方程的广义最小残差法
lsqr :求解线性方程的LSQR 方法
minres :求解线性方程的最小残差法
pcg :求解线性方程的预处理共轭梯度法
qmr :求解线性方程的准最小残差法
symmlq :求解线性方程的对称 LQ 法
tfqmr :求解线性方程的自由转置准最小残差法
syms:定义符号变量的函数
log:默认以e为底,如果需要计算以10为底的对数,那么需要用log10()函数。
复合函数
用compose函数来实现,格式:compose(f,g) //f(g(x))
反函数
用finverse函数来实现,格式:g=finverse(f) //g为反函数
函数的极限
格式:limit(f(x),x,a)
x趋近于a
一元函数符号求导
y=f(x)的各阶导数为y’,y’’,y’’’…或记为yx,yxx,yxxx…
符号求导的函数是diff,
调用格式:
yx=diff(f(x),x)
yxx=diff(f(x),x,2)或yx=diff(yx,x)
yxxx=diff(f(x),x,3)或yxx=diff(yxx,x)
不定积分
运算函数是int,格式:F=int(f(x),x)
定积分
格式:int(f(x),x,a,b)
常微分方程的符号解
解析解
函数为dsolve
调用格式:
求通解:y=dsolve(‘常微分方程表达式’,’自变量’)
求特解:y=desolve(‘常微分方程表达式’,‘初始条件’,‘自变量’)
数值解
函数为solver
调用格式:
[x,y]=solver(‘fun’,ts, x 0 x_0 x0,options)
x为自变量,y为函数值,ts=[ t 0 t_0 t0, t f t_f tf], x 0 x_0 x0为函数的初值,options用于设定误差限。
fminbnd :在指定区间上求解单变量函数的最小值x=fminbnd(fun,x1,x2)x=fminbnd(fun,x1,x2,options) 结构体options用于指定优化参数
[x,fval]=fminbnd(…) [x,fval,exitflag]=fminbnd(…)
[x,fval,exitflag,output]=fminbnd(…)
fminsearch :利用derivative-free算法求无约束多变量函数的最小值
x=fminsearch(fun,x0)x=fminsearch(fun,x0,options)
[x,fval,exitflag]=fminsearch(…)
fzero:求单变量连续函数的零值点 x=fzero(fun,x0) x=fzero(fun,x0,options)
isqnonneg :求解非负最小二乘法约束问题
x=lsqnonneg(C,d)返回一个向量x,满足x >= 0时(C*x-d)的范数最小。
x=lsqnonneg(C,d,x0) x=lsqnonneg(C,d,x0,options)
linprog函数:主要用来求线型规划中的最小值问题(最大值的镜像问题,求最大值只需要加个“-”)
%调用格式:
x=linprog(f,A,b)
x=linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
f:目标函数
A:不等式约束条件矩阵
b:对应不等式右侧的矩阵
Aeq:等式约束条件矩阵
beq:不等式右侧的矩阵
Aeq:等式约束条件矩阵
beq:对应等式右侧的矩阵
lb:x的下界
ub:x的上界
x0:设置初始点x0
%例:
% 求最大值 :f= 7·x1 + 4·x2
% 约束条件为:
% x1 + x2 ≤ 12
% 3·x1 + 2·x2 ≤ 26
% 2·x1 + x2 ≤ 16
% x1≥0,x2≥0
% 根据目标函数f= 7·x1 + 4·x2可得:
%代码
f = [ 7 4 ];
A = [1 1;3 2;2 1];
b = [12 26 16];
lb = [0 0];
[ x , fval ] = linprog( -f , A , b , [] , [] , lb , ub);
disp(x)
disp(-fval)
多项式函数
polyfit :多项式拟合
p=polyfit(x,y,n) 根据拟合数据x,y求n阶多项式p(x)的系数,p是系数
[p,S]=polyfit(x,y,n) p是系数,使用S和多项式的值能得到误差估计值或预测
polyval :多项式求值 y=polyval(p,x)
poly :根据根求解多项式
polyder :解析求解多项式微分表达式k=polyder§ k=polyder(a,b)
polyint :解析求解多项式积分表达式系数 polyint(p,k)
mkpp :构建分段多项式 pp=mkpp(breaks,coefs)
breaks是一个长度为L+1的向量,该向量元素严格递增。coefs为L*k的矩阵,每行元素代表
[breaks(i),breaks(i+1)]的k阶多项式的系数。
(注:本人小白一个,文章部分文字摘自于
作者:glanny
https://www.bilibili.com/read/cv7966685?spm_id_from=333.788.b_636f6d6d656e74.6
出处: bilibili
仅供个人学习)
1、view:视点处理
view(az,el),其中az为方位角,el为仰角。
view(x,y,z),x,y,z为视点在笛卡尔坐标系下的位置。
view(2),从二维平面观察图形,其方位角为0度,仰角为90度。
view(3),从三维空间观察图形,视点为默认方位角和仰角。
2、colormap:色图矩阵
第一列为R(红色)
第二列为G(绿色)
第三列为B(蓝色)
3、imshow:imshow(I,[low high]) 显示灰度图像
4、imread:从图形文件读取图像
(可以将图形中需要剪裁部分对应的函数值设置为NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来
例:
t=linspace(0,2*pi,100);
x=sin(t);
y=cos(t);
p=y>0.5;
y(p)=NaN;
plot(x,y)
axis([-1.1,1.1,-1.1,1.1])
axis square
grid on