矩阵
定义矩阵
定义格式:
矩阵用方括号“[ ]”括起;
元素与元素 之间用 空格 或 逗号 隔开;
行与行 之间用 分号 隔开(分号可用回车代替)
例:
a=[1,2
3,4
5,6
7,8];
查找矩阵元素
a(5); 从上往下,选中第五个
[m,n]=find(A>5); //A矩阵中第m行第n列的数大于5
K = length(z); //一维数组的长度
[m,n]=size(z); // 数组的维度,m行n列
b = class(A); //数组类型
特殊矩阵
x1 = linspace(-2,2,10); //定数线性采样法 x为起始值,y为终值,z为选取的数字个数
y = logspace(-3,3,10); //定数对数采样法 x为起始值(logx),y为终值(logy),z为选取的数字个数
ones(20,4) // x行y列的值全为1的矩阵
zeros(20,4) // x行y列的值全为0的矩阵
E=magic(4); //魔方数组 行、列、对角线的和都等于一个定值
D=eye(3); //对角—单位数组 x行x列
randn(2,3) //产生正态分布的x行y列的随机数组
diag(diag(a)) // 内diag取D阵的对角元素,外diag利用其生成对角阵
矩阵运算 (乘方与点乘)
x ^ 3; //数组的乘方,数组要为方阵
C=A .* B // 点乘(对应元素相乘,注意数组维度一致)
字符串数组
创建字符串
x = 'MATLAB is a good software',b=class(x),c=size(x)
//字符串的元素标识(用单引号扩起)
//空格也占一个元素位
查找字符
x1=x(8:9),//选择第8个和第9个字符,查找单个/多个字符
x2=x(end: -1:1) // * 倒序输出 //从左往右为1 —> n,从右往左为-1—>1.
e= find(x>=‘a’&x<=‘z’)%% find找字符串找的是位数,查询所找字符的位数
字符串转换
y=double(x),//查找字符串的 ASCII 码
char(y)//查找ASCII码所对应的字符串
Y=‘例"3.2"说明’ // 注:中文中有英文字符,要用双引号;
YX= [Y,’ ',x] //小字符串变大字符串( 扩展字符串)
upper(x)//字符串大写
m=5.8
x=['there are ',num2str(m),'kg banana']//num2str()把数字转换为字符串
创建字符串数组
字符串数组以及转换函数
YY=['12345678'
'123 '
'456 '
'789 ']//创建数组时,要注意每行元素位数相同(维度一致)
元胞数组
//允许不同的数据类型合成新的数组
//元胞有两个以上则不再显示
元胞数组的创建
A = {'这是元胞数组',[1,2;3,4];ones(3,4),{'word','meet','again'}}//直接写
B(1,1)={'这是元胞数组'}//分开写
B(1,2)={[1,1;2,2]}
B(1,3)={[123;456;789]}
B(1,4)={'word'}
元胞数组的显示——celldisp和cellplot
celldisp(A)//显示所有
A{1,1}//只显示第一行第一列的元素
A{1,2}
A{2,1}
A{2,2}{1}
cellplot(A)//可视化,图片显示
元胞数组的扩充和收缩
D={[1-3*i;2+5i],{'bb';'cc';'dd'}}
C{1,1}='hello world',C{1,2}=randn(3)
CD=[C D] //列扩充
C_D=[C;D;C]//行扩充
cellplot(D)
cellplot( C )
cellplot(CD)
cellplot(C_D)
C_D(2,:)=[ ] //收缩 把空矩阵替换第二行
cellplot(C_D)
元胞数组的获取
Y=A{1,2}//被第一行,第二列的元素赋值(成为那个元素)
YG=A(1,2)//获取第一行第二列的元胞元素(一个整体获取)
结构数组
结构数组的创建
直接赋值法:结构数组名(结构序号).域 = 内容
str(1).age = '1'
str(1).name = 'str'
str(1).text = [1,2,3;4,5,6]
str(2).age = '2'
str(2).name = 'string'
str(3).text = [2,2,2;4,4,4]
struct函数赋值法
S(1) = struct('name','str','age','1','text',[1,2,3;4,5,6])
S(2) = struct('name','string','age','2','text',[1,1,1;2,2,2])
结构数组的获取和设置
M1 = str(1)//获取结构数组第一行内容
M2 = str(1).text(1,2) //获取结构数组第一行的矩阵的第一行第二个
M3 = str(1).text//获取结构数组第一行的矩阵
getfield 获取
M4 = getfield(str,{2},'name')//获取str结构数组第二行的'name'值
M5 = getfield(str,{2},'name',{2})///获取str结构数组第二行'name'值的第二个字母
setfield 设置
str = setfield(str,{2},'name','chi')//设置str结构数组第二行'name'的值为'chi'
fieldnames 获取所有域
M7 = fieldnames(str)
扩充
str(2,2)=struct('name','x','age','3','text',[2,2,3;4,4,6])//直接设置str结构数组的第二行第二个为结构数组。。。。
str (1,:) = [] // 让结构数组第一行为空
域名的增加与删除
str(1).zengjia = ‘增加’ // 直接增添新的域名
str = rmfield(str,‘age’) //通过 rmfield 移除
作图函数
多窗口 figure
t=0:pi/100:2*pi;
y1=sin(t);y2=sin(t+1);y3=sin(t+3);
plot(y1)
figure(2),plot(t,y2)
figure(3),plot(t,y3)
统一窗口多个子图 subplot
subplot (m,n,k) m*n 个图,第 k 个
x=0:pi/100:2*pi;
subplot(2,2,1),plot(x,sin(x))//可以逗号隔开
subplot(222),plot(x,sin(3*x))//可以不隔开
subplot(223),plot(x,sin(4*x))
subplot(224),plot(x,sin(5*x))
统一窗口多次叠绘 hold
hold on 使当前坐标系和图像保持不变
hold off 使当前坐标系和图像不保持
hold 在多个坐标系和图像中切换
t=0:pi/100:2*pi;
x=cos(3*t);y=0.001*sin(3*t+1);
plot(t,x,'-yo')
hold on
plot(t,y,'-rh')
opengl('save', 'software')
图形窗口的创建、选择、删除
plot、figure、close
t=0:pi/100:2*pi;
y1=sin(t);y2=sin(t+1);y3=sin(t+3);
plot(y1)
figure(2),plot(t,y2)
figure(3),plot(t,y3)
close(1)
双纵坐标图 plotyy
plotyy(x1,y1,x2,y2)
t=(-5):pi/100:2*pi;
y1=sin(t);y2=0.01*cos(t);
plotyy(t,y1,t,y2);grid // grid 网格
坐标轴控制 (放缩) axis
axis([xmin,xmax,ymin,ymax])
t=0:0.5:7;
x=sin(t);
plot(t,x,'r-x'),grid
axis([0,3*pi,-2,2])//扩大坐标轴
网格线控制 grid
grid on
grid off
grid
t=0:0.5:7;
x=sin(t);
plot(t,x,'r-x'),grid
添加图名 title
添加坐标轴名 xlabel ylabel
x=0:0.1:3*pi;y=exp(-0.5*x).*cos(x)
plot(x,y,'r'),grid on, title('衰减的余弦函数')
xlabel('x')//括号里加字符串
ylabel('(exp(-0.5*x))*cos(x)')
t=0:0.1:7;
x=sin(t)
plot(t,x,'r'),grid on,title('正弦函数')
xlabel('t')
ylabel('sin(t)')
设置坐标刻度标示 set
两种方法:标示向量表示、字符串表示
set(gca,‘xtick’,标示向量)
set(gca,‘ytick’,标示向量)
set(gca,‘xticklabel’,‘字符串|字符串|。。。’)
set(gca,‘yticklabel’,‘字符串|字符串|。。。’)
//用向量标示坐标轴的刻度
t=0:0.1:7;
x=sin(t),plot(t,x,'r')
set(gca,'xtick',[0 1.4 3.15 5.6 6.28],'ytick',[0.1 0.4 0.6 0.8])
//用字符串标示坐标轴的刻度
t=0:0.1:7;
x=sin(t),plot(t,x,'r')
set(gca,'xticklabel',{'one','two','three','four','five','six','seven','eight'})
添加图例 legend(s,pos)在指定位置添加图例
删除图例 legend off
t=(-5):pi/100:2*pi;
y1=sin(t);y2=0.01*cos(t);
plotyy(t,y1,'-g',t,y2,': o');grid
legend('sin(x)','cos(x)')
添加文字注释 text
text (xt,yt,‘s’) s 为特殊字符时,要加 \
gtext(s) 用鼠标在位置上标注
t=(-5):pi/100:2*pi;
y1=sin(t);
plot(t,y1)
text(2,sin(2),'\rightarrow this is zero for \omega')
x=0:0.1:2*pi;y1=sin(x);y2=cos(x);
plot(x,y1,"r",x,y2,'bo'),grid on
title('正弦曲线和余弦曲线'),
xlabel('弧度值')
ylabel('函数值')
legend('sin(x)','cos(x)')
text(2.3,0.8,'\leftarrow 正弦函数')
text(5,0.2,'\leftarrow 余弦函数')
特殊坐标二维图型
对数坐标图形 semilogx、semilogy、loglog
semilogx(x,y,‘参数’) x轴为以10为底的对数坐标
semilogy(x,y,‘参数’) y轴为以10为底的对数坐标
loglog(x,y,‘参数’) x轴和y轴都为以10为底的对数坐标
x=0:0.05:2;y=10.^x;subplot(221)
semilogx(x,y),grid,title('semilogx graph')
subplot(222),semilogy(x,y),title('semilogy graph'),grid
subplot(223),loglog(x,y),title('loglog graph'),grid
subplot(224),plot(x,y),title('linear graph'),grid
极坐标图形 polar
polar (theta,radius,‘参数’)
t=0:0.01:2*pi;r1=1*(1+sin(t))
polar(t,r1)
条形图 bar、barth、group、stacked
垂直、水平方向
bar(x,y,‘参数’) 垂直
barh(x,y,‘参数’) 水平
group 分组
stacked 叠加
x=3:5;y=[20 30 40;5 15 20;1 2 3];
subplot(221),bar(x,y,'group')
subplot(222),bar(x,y,'stacked')
subplot(223),barh(x,y,'group')
subplot(224),barh(x,y,'stacked')
阶梯图 stairs
x=3:0.2:7;y=cos(x);
stairs(x,y,':pr'), title('两个向量的阶梯图'),
stairs(x,'-or'), title('一个向量的阶梯图'), //相对于x = y 的函数
grid
基本三维图形 plot3
plot3(x,y,z,'s')
plot3(x1,y1,z1,'s1',x2,y2,z2,'s2',....)
t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t,':pg')
axis square* //产生正方形坐标系
grid on
xlabel('x'),ylabel('y'),zlabel('z'),
三维曲面 mesh、surf
[x,y]=meshgrid([-1:0.1:1])
z=x.^2 +y.^2;
subplot(121),mesh(x,y,z)
subplot(122),surf(x,y,z)
规整坐标 meshgrid
X、Y 为栅格点坐标
[X,Y]=meshgrid(x,y)
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R )./R;
今天逛@小默haa的博客时,又发现一位大佬,然后在这个大佬的博客里又发现了MATLAB相关的文章,整合得非常不错,挂这参考——
@stronger_er—— 常用的 Matlab 的函数。
后面我也或许会学习他的方式写一篇(或许吧~)。
2021.12.13.