MATLAB基本使用
.jpg)
MATLAB基本使用
Alive~o.0向量
基础运算
1 | x=0:0.1:50; %冒号法:0-50相信间隔值组成的向量x,间隔值为0.1 |
特殊变量
单元型变量
赋值语句定义
1 | A=[1 2;3 4]; |
对单元语句逐个赋值——cell()
1 | E=cell(1,3); |
cell(size(A)):生成与A相同形式的单元型置空矩阵
引用
- 大括号显示单元具体的值
- 小括号显示单元压缩值
常用函数
1.celldisp()显示内容
2.cedllplot()用图形显示
结构型变量
1 | mn=struct('color',{'red', 'black'},'number',{1,2}) |
矩阵运算
矩阵生成
利用M文件创建
1 | % sample.m |
利用文本文件创建
1 | load goods.txt |
创建特殊矩阵
1 | zeros(3) |
矩阵元素的运算
元素的修改
- D=[A,B C],A- 原矩阵,B C-包含要扩充的元素,D-扩充后的矩阵
- A=(m,),A的m行
矩阵的变维
reshape(X,m,n)——将已知矩阵变成m行n列的矩阵
:法
1 | A=1:12 |
矩阵的变向
- rot90(A):A逆时针旋转90°
- rot90(A,k):A逆时针旋转90°*k
- fliplr(X):X左右翻转
- flipud(X):X上下翻转
- flipdim(X,dim):dim=1——行翻转;dim=2——列翻转
矩阵的提取
矩阵数学运算
加减法
乘法
- 叉乘:一行乘一列
- 点乘:相同位置的进行乘法运算
除法
- 左除 B.\A:B的相应位置除A的相应位置
- 右除 B/A:A的相应位置除B的相应位置
基本运算
- 幂函数 A.^2
- 逆 inv(X)
- 逆条件数 rcond(A)
- 逆的更新 updateinv(A)
- 2-范数 norm(A)
- 2-范数估计值 normest(A)
- 行列式 det(A)
矩阵分解
楚列斯基分解(正定矩阵)
1 | A=[1 1 1 1;1 2 3 4;1 3 6 10;1 4 10 20]; %创建正定矩阵A |
LU分解(三角分解)
1 | A=[1 2 3 4;5 6 7 8;2 3 4 1;7 8 5 6]; |
和分解
- 分解
1 | function [L,D,M]=ldm(A) |
1 | A=[1 2 3 4;4 6 10 2;1 1 0 1;0 0 2 3]; |
- 分解
1 | function [L,D]=ldlt(A) |
1 | A=[1 2 3 4;2 5 7 8;3 7 6 9;4 8 9 1]; |
QR分解(正交三角形分解)
1 | A=rand(4) |
qrdelete & qrinsert
SVD分解
[U,S,V]=svd(A)
m*m矩阵U,对角矩阵S,n*n矩阵V
舒尔分解
海森伯格分解
二维绘图
plot
- plot(x,y)
- subplot(m,n,p) m*n个视图区域,当前为第p个(按行排列)
- tiledlayout(m,n)+nexttile
- tiledlayout(2,2) 布局为2*2的区域
1 | x=0:pi/10:2*pi; |
- fplot 一元函数图像
1 | x=linspace(0.01,0.02,50); |
不同坐标系下的绘图命令
极坐标系——polarplot
- polarplot(thera,rho) thera——弧度,rho——半径
- polarplot(thera,rho,LineSpace) LineSpace——样式
- pol2cart(t,r) 极坐标下的数据点换到直角坐标系下
半对数坐标系——semilogx/semilogy
双对数坐标系——loglog
双y轴坐标——yyaxis
- yyaxis left
- yyaxis right
图形窗口
- finger——创建图形窗口
- set(n)——返回图像属性名称和所有属性值
- get(n)——返回图像属性名称和当前属性值
图形标注
属性设置
坐标系与坐标轴
axis(xmin,xmax,ymin,ymax,zmin,zmax)——设置坐标系
1 | t=0:2*pi/99:2*pi; |
fill(X,Y,C) X,Y——创建的图形,C——颜色
title——标题
x/ylabel——轴注释
text(x,y,string)——在图中(x,y)位置显示string
gtext——鼠标在任意位置进行标注
legend——添加图例
特殊图形
统计图形
- 条形图
- 二维:bar——竖直条形图;barh——水平条形图
- 三维:bar3——竖直条形图;bar3h——水平条形图
- 面积图:area(Y)
- 饼图:pie/pie3
- 柱状图
- 直角坐标系:histogram
- 极坐标系:ploarhistogram
离散数据图形
- 误差棒图:errorbar(y,err)
- 火柴杆图:stem(Y)
- 阶梯图:stairs(Y)
向量图形
-
罗盘图:compass(U,V)
-
羽毛图:feather(U,V)
-
箭头图:quiver(U,V)/quiver3
返回数值梯度:gradient(Z,2,2)
三维绘图
绘图命令
-
plot3/fplot3
-
三维网格命令
- mesh(X,Y,Z) 网线面
- mesh(X,Y) x-y为底,y对应的值为z轴
- meshc 加基本等高线
- meshz 网格线与零平面连起来
- fmesh(f)
-
三维曲面命令
- surf
- surfc 加基本等高线
- surfl 有亮度的曲面
- fsurf
- surf
-
柱面与球面
-
[X,Y,Z]=cylinder 返回对应函数的x,y,z坐标值
cylinder(2,6) 正六边形,半径为2的棱柱
-
sphere 生成球面
[X,Y,Z]=cylinder(n) 绘制n*n个面的球面,返回球面坐标
-
-
三维图形等值线
-
contour3(x,y,z)
-
contourf 填充颜色的二维等值图
colormap gray 应用灰度颜色图
-
C=contourc(Z) 计算等值线矩阵C
-
clabel 在二维等值图中添加高度标签
-
fcontour 符号函数等值线图
-
三维图形修饰处理
视角处理
view(az,el) az——方位角,el——仰角
颜色处理
-
brighten(beat) 明暗处理0<beat<1
-
caxi([cmin,cmax]) 色轴刻度
colorbar 显示垂直色轴
-
shading 颜色渲染设置
-
colormap(M) 将M作为当前窗口颜色映像
光照处理
- surfl 带光照模式
- light/lightangle 确定光源位置
图像处理
- imread 图像读入
- imwrite 图像写入
- image/imageesc/imshow 图像显示
- imfinfo 图像信息查询
程序设计
M文件
-
命令文件
-
函数文件
function开始
程序设计
- 程序结构
- 顺序结构
- 循环结构
- 分支结构
- 流程控制
- break
- pause(10) 暂停10秒
- continue
- return
- echo on 显示执行过程中每一行语句的执行过程
- waring(massage) 不影响正常运行
- error(massage) 终止运行
- 交互式输入
- input(massage)
- keyboard 暂停程序,使用键盘调用命令
- menu
- 程序调试
- 系统提示
- 断点
函数句柄
1.创建
1 | fun_handle=@save %创建函数save()的句柄 |
2.调用——feval()
矩阵分析
特征值与特征向量
-
[V,D]=eig(A,balanceOption) 求矩阵A的特征值和特征向量
balanceOption:默认平衡处理
-
[T,B]=balance(A) 求相似变换矩阵T,平衡矩阵B
[S,P,B]=balance(A) 缩放向量S,置换向量P
-
c=ploy(A) 求特征多项式
-
r=roots© 求特征多项式的根
-
eigs 部分特征值
-
eig(A,B) 求广义特征值
矩阵对角化
判断矩阵能否对角化
1 | function y=isdiag1(A) |
矩阵对角化
1 | function[P,D]=reduce_diag(A) |
若尔当标准型
[P,J]=jordam(A) 若尔当标准形矩阵J,相似变换矩阵P
矩阵的反射与旋转变换
豪斯霍尔德反射波变换
避免上溢求豪斯霍尔德向量函数
1 | function [v,beta]=house(x) |
豪斯霍尔德矩阵求法
1 | x=[2 3 4]'; |
吉文斯旋转变换
[G,y]=planerot(x) y=Gx且y(2)=0,x——二维列向量
符号运算
符号与数值
- eval(expression) 符号->数值
- subs(s) 数值->符号
- digits(D) 有效数字个数为D
- vpa(x) 算数精度
- B=sparse(A) 将A转换为稀疏格式
- B=sparse(A) 创建A的伴随矩阵
符号矩阵
创建
-
直接输入
-
sym(‘x’) sym(‘a’,n)
matlab1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18x = sym('x');
y = sym('y');
a=[x+y,x;y,y+5]
a = sym('a', [1 4])%用自动生成的元素创建符号向量
a = sym('x_%d', [1 4])
a(1)
a(2:3)
a =
[a1, a2, a3, a4]
a =
[x_1, x_2, x_3, x_4]
ans =
x_1
ans =
[x_2, x_3] -
数值矩阵->符号矩阵
B=sym(A)
计算不同精度的pi值
1 | pi%默认精度 |
其他运算
- 转置
- B=A.’
- B=transpose(A)
- 行列式运算 d=det(A)
- 逆 inv(A)
- 求秩 rank(A)
- 特征值,特征向量 eig()
- 奇异值 svd()
- 若尔当标准型 jordan()
符号多项式简化
-
因式分解 factor(x) 返回x的所有不可约因子
-
符号矩阵的展开 expand(S)
matlab1
2
3
4
5
6syms x y
expand((x+3)^4)
expand(cos(x+y))
ans = x^4 + 12*x^3 + 54*x^2 + 108*x + 81
ans = cos(x)*cos(y) - sin(x)*sin(y) -
符号简化 simplify
-
分式通分 [n,d]=numden(A) 表达式分子n,分母d
matlab1
2
3
4
5syms x y
[n,d]=numden(x/y-y/x+x.^2)
n = x^3*y + x^2 - y^2
d = x*y -
“秦九韶型”重写 horner(p)
matlab1
2
3
4syms x
horner(x^4-3*x^2+1)
ans =x^2*(x^2 - 3) + 1
数列与极限
数列
数列求和
- sum(A,dim)
- 向量——所有元素和 dim=1:不求和;dim=2:求和
- 矩阵——每一列元素和 dim=1:列求和,行显示;dim=2:行求和,列显示
- sum(·,nanflag) nanflag=includenan——计算NaN,nanflag=omitnan——计算NaN,
- nansum(A) 忽略NaN累计求和函数
- cumsum(A) 求此元素之前的元素和函数
- cumtrapz(Y) 求梯形累计和函数(积分)
数列求积
-
元素连续相乘函数 B=prod(A)
矩阵:按列向量的所有元素的积
-
求累计积函数 B=cumprod(A)
-
阶乘函数 f=factorial(n)
-
伽马函数(非整数的阶乘) gamma()
matlab1
2
3
4
5
6
7
8
9
10
11
12
13
14>> factorial(6)
ans =
720
>> gamma(6)
ans =
120
>> 6*gamma(6)
ans =
720
极限和导数
极限
-
x->0
limit(f)
-
x->∞
limit(f,inf,’right’) right:右极限
导数
- diff(f,n) 求函数f的n阶导数
- diff(f,x) 求函数f对x的导数
级数求和
- 有限项级数求和 symsum(f,k,a,b) 计算级数f关于指数k从a到b的有限项和
- 无穷级数求和 将b改为inf
积分
积分
- 定积分和广义积分 int(f,x,a,b)
- 不定积分 int(f,x)
多重积分
-
二重积分 intergral2(fun,xmin,xmax,ymin,ymax)
fzero(‘2*x-0.5*x’,0) 求f1-f2=0,即f1,f2的交点
泰勒展开
taylor(f,m,a)
taylor(f,’order’,5) 五阶麦克劳林型近似展开
傅里叶展开
1 | function [a0,an,bn]=Fourierzpi(f) |
积分变换
- 傅里叶积分变换 fourier(f,u,v)
- 傅里叶逆变换 ifourier(F,v,u)
- 快速傅里叶变换
- 拉普拉斯变换 laplace(F,w,z)
- 拉普拉斯逆变换 ilaplace(L,x,y)
方程求解
线性方程组求解
判断线性方程组的解
Z=null(A) 求矩阵A的核空间矩阵Z,Z的列向量是Ax=0的基础解系,满足
Z=null(A,’r’) Z的列向量是Ax=0的有理基,Z不满足
判断线性方程组Ax=b的解的存在性
1 | function y=isexist(A,b) |
利用矩阵的逆(伪逆)与除法求解
Ax=b
- 为恰定方程组且A是非奇异的,
- 不为为恰定方程组或A奇异,x=A\b
1 | format rat |
利用行阶梯型求解
只适用于恰定方程组,且系数矩阵非奇异
矩阵->行阶梯型 [R,jb]=rref(A) jb:非零主元列
利用矩阵分解法求解
-
LU分解法
matlab1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50function x=solvebyLU(A,b)
%该函数利用LU分解法求线性方程组Ax=b的解
flag=isexist(A,b);%调用函数isexist()判断方程组解的情况
if flag==0
disp('该方程组无解!');
x=[];
return;
else
r=rank(A);
[m,n]=size(A);
[L,U,P]=lu(A);
b=P*b;
%解Ly=b
y(1)=b(1);
if m>1
for i=2:m
y(i)=b(i)-L(i,1:i-1)*y(1:i-1)';
end
end
y=y';
%解Ux=y得原方程组的一个特解
x0(r)=y(r)/U(r,r);
if r>1
for i=r-1:-1:1
x0(i)=(y(i)-U(i,i+1:r)*x0(i+1:r)')/U(i,i);
end
end
x0=x0';
if flag==1%若方程组有唯一解
x=x0;
return;
else%若方程组有无穷多解
format rat;
Z=null(A,'r');%求出对应齐次方程组的基础解系
[mZ,nZ]=size(Z);
x0(r+1:n)=0;
for i=1:nZ
t=sym(char([107 48+i]));
k(i)=t; %取k=[k1,k2,…];
end
x=x0;
for i=1:nZ
x=x+k(i)*Z(:,i); %将方程组的通解表示为特解加对应齐次通解形式
end
end
end
format%恢复数据显示格式 -
QR分解法
matlab1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41function x=solvebyQR(A,b)
%该函数利用QR分解法求线性方程组Ax=b的解
flag=isexist(A,b);%调用函数isexist()判断方程组解的情况
if flag==0
disp('该方程组无解!');
x=[];
return;
else
r=rank(A);
[m,n]=size(A);
[Q,R]=qr(A);
b=Q'*b;
%解Rx=b得原方程组的一个特解
x0(r)=b(r)/R(r,r);
if r>1
for i=r-1:-1:1
x0(i)=(b(i)-R(i,i+1:r)*x0(i+1:r)')/R(i,i);
end
end
x0=x0';
if flag==1 %若方程组有唯一解
x=x0;
return;
else%若方程组有无穷多解
format rat;
Z=null(A,'r');%求出对应齐次方程组的基础解系
[mZ,nZ]=size(Z);
x0(r+1:n)=0;
for i=1:nZ
t=sym(char([107 48+i]));
k(i)=t;%取k=[k1,…,kr];
end
x=x0;
for i=1:nZ
x=x+k(i)*Z(:,i);%将方程组的通解表示为特解加对应齐次通解形式
end
end
end
format%恢复数据显示格式 -
楚列斯基分解法
matlab1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26function x=solvebyCHOL(A,b)
%该函数利用楚列斯基分解法求线性方程组Ax=b的解
lambda=eig(A);
if lambda>eps&isequal(A,A')
[n,n]=size(A);
R=chol(A);
%解R'y=b
y(1)=b(1)/R(1,1);
if n>1
for i=2:n
y(i)=(b(i)-R(1:i-1,i)'*y(1:i-1)')/R(i,i);
end
end
%解Rx=y
x(n)=y(n)/R(n,n);
if n>1
for i=n-1:-1:1
x(i)=(y(i)-R(i,i+1:n)*x(i+1:n)')/R(i,i);
end
end
x=x';
else
x=[];
disp('该方法只适用于对称正定的系数矩阵!');
end
非负最小二乘解
lsqnonneg(A,b)
方程与方程组的优化解
- 非线性方程基本函数
- x=fzero(fun,x0)
- x=fzero(fun,x0,options)
- x=fzero(problem)
- [x,fval,exitflag,output]=fzero(···)
- 非线性方程组基本函数
- x=fslove(fun,x0)
- x=fslove(fun,x0,options)
- x=fslove(problem)
- [x,fval,exitflag,output,jacobian]=fslove(···)
微分方程
微分方程
S=desolve(eqn,cond,Name,Value)
1 | syms x(t) y(t) |
常微分方程的数值解法
欧拉方法
根据欧拉公式
1 | function [x,y]=euler(f,x0,y0,xf,h) |
改进的欧拉公式:
1 | function [x,y]=adeuler(f,x0,y0,xf,h) |
龙格-库塔方法
-
非刚性
- ode23 二、三阶R-K函数
- ode45 四、五阶R-K函数
- ode113
-
刚性
- ode15s 多步法
- ode23s 单步法
- ode23t 难度适中
- ode23tb 较难
-
完全隐式 ode15i
偏微分方程 PDE
[PDE工具箱使用](matlab的PDE工具箱的简单使用_matlab pde-CSDN博客)
区域设置及网格化
-
创建偏微分方程定义的区域 文件名:pdegeom
-
ne=pdegeom
ne——几何区域边界的线段数
-
d=pdegeom(bs)
d——一个区域边界数据的矩阵
-
[x,y]=pdegeom(bs,s)
bs——指定的边界线段
s——相应线段弧长的近似值
-
-
网格化
matlab1
2
3
4
5
6
7
8
9
10
11
12
13model = createpde;
geometryFromEdges(model,@cardg);%根据自定义函数的几何形状创建模型对象的几何图形
mesh=generateMesh(model);
subplot(2,2,1),pdemesh(model)
title('初始网格图')
mesh=generateMesh(model,'Hmax',2);
subplot(2,2,2),pdemesh(model)
title('修改网格边界最大值')
mesh=generateMesh(model,'Hmin',2);
subplot(2,2,3),pdemesh(model),title('修改网格边界最小值')
mesh=generateMesh(model,'GeometricOrder','linear','Hgrad',1);
subplot(2,2,4),pdemesh(model)
title('修改网格几何秩序和增长率')
边界条件设置
M文件名:pdebound
调用格式:[q,g,h,r]=pdebound(p,e,u,time)
e——边界
工具箱自带文件squareb3,m 区域为单位正方形
PDE函数求解
result=solvepde(model) 稳态
result=solvepde(model,tlist) 时间相关
lplsfc.m
1 | model = createpde(); |
rcd.m
1 | model = createpde(); |
解特征值方程
result=slovepdeeig(model,evr) evr——特征值范围
1 | model = createpde(); |
数据可视化分析
样本空间
概率:p(A)
数据可视化
离散情况
1 | x=[25 28 26 26 29 22 21 22 26 27 30 28 29]; |
连续情况
1 | x=[25 28 26 26 29 22 21 22 26 27 30 28 29]; |
正交试验分析
极差分析(直观分析法)
1 | function [result,sum0]=zjjc(s,opt) |
例子:
1 | s=[ 1 1 1 1 857; |
方差分析
1 | function [result,error,errorDim]=zjfc(s,opt) |
例子:
1 | s=[ 51 25 18 32; |
回归分析和方差分析
回归分析
一元线性回归
ployfit()
1 | x=[82 93 105 130 144 150 160 180 270 300 400]; |
多元线性回归
[b,bint,r,rint,stats]=regress(y,X,alpha) 因变量y,自变量X
b——对回归系数的最小二乘估计
bint——回归系数b的95%置信度的置信区间
r——残差
rint——r的置信区间
stats——检验统计量
假设回归方程有常数项,计算stats时,X应该包含一个全1的列
alpha——指定的置信水平
1 | y=[11.9 22.8 18.7 20.1 12.9 21.7 27.1 25.4 21.3 19.3 25.4 27.2 11.7 17.8 12.8 23.9 22.6 25.4 14.8 21.1]; |
部分最小二乘回归
1 | function [beta,VIP]= pls(X,Y) |
提取主元
1 | function [omega,t,pp,XXX,r,YYY]=plsfactor(X0,Y0) |
例子:
1 | X=[191 36 50;%自变量 |
数理统计基础
样本均值
M=mean(A)
- 算术平均 nanmean
- 几何平均 geomean
- 调和平均 harmmean
- 调整平均 trimmean
样本方差与标准差
-
方差 var(A,w) w——权重向量
-
标准差 std(A,w)
w=0(默认),按N-1进行归一化
w=1,按观测数值量N进行归一化
协方差和相关系数
- 协方差 cov(A)
- 相关系数 corrcoef(A)
多元数据相关分析
主成分分析
1 | function [F,rate,maxlamda]=mainfactor(X) |
例子:
1 | X=[19.5 24.7 30.7 29.8 19.1 25.6 31.4 27.9 22.1 25.5 31.1 30.4 18.7 19.7 14.6 29.5 27.7 30.2 22.7 25.2;43.1 49.8 51.9 54.3 42.2 53.9 58.6 52.1 49.9 53.5 56.6 56.7 46.5 44.2 42.7 54.4 55.3 58.6 48.2 51; 29.1 28.2 37 31.1 30.9 23.7 27.6 30.6 23.2 24.8 30 28.3 23 28.6 21.3 30.1 25.6 24.6 27.1 27.5]; |
典型相关分析
看是否存在相关关系
1 | function [maxVV1,maxVV2,F,G]=dxxg(X,Y) |
例子:
1 | X=[191 36 50; 189 37 52; 193 38 58; 162 35 62; 189 35 46; 182 36 56; 211 38 56; 167 34 60; 176 31 74; 154 33 56; 169 34 50; 166 33 52; 154 34 64; 247 46 50; 193 36 46; 202 37 62; 176 37 54; 157 32 52; 156 33 54; 138 33 68]; |
方差分析
单因素方差分析
anoval(X,group) group——标识箱线图中的坐标
1 | X=[4.3 6.1 6.5 9.3 9.5; 7.8 7.3 8.3 8.7 8.8; 3.2 4.2 8.6 7.2 11.4; 6.5 4.1 8.2 10.1 7.8]; |
双因素方差分析
anova2(X,reps) reps——试验重复次数
1 | X=[58.2 52.6 56.2 41.2 65.3 60.8;49.1 42.8 54.1 50.5 51.6 48.4;60.1 58.3 70.9 73.2 39.2 40.7;75.8 71.5 58.2 51 48.7 41.4]; |
数据拟合与插值
数据插值
拉格朗日插值
v1.5.1