Matlab学习笔记(杂)

辨析:

大括号、中括号、小括号使用上的区别:

(): locate the element, function call
1 a=[1 2]; a(1)
2 sin(2)

[ ]: construct matrix and combine several strings
1 a = [1 2];
2 s = ['I love ' 'Matlab']

{}: mixed element
a{1} = [1 2]
a{2} = [1 2 3]
a{3} = 'I love matlab'

注意使用小括号取元胞数组值得到的还是元胞数组类型,应该使用大括号取值(大括号没有取值的意思,这里的取值是带引号的,而这里大括号的作用可以结合上面的说明理解)

Matlab中字符数组和字符串数组的区别:

1.字符串数组,注意这里之所以叫做字符串数组是因为单个字符串变量实际上是只有一个元素的字符串数组,所以在保证下标不超过数组元素个数的前提下可以用小括号取值。另外,很神奇的就是当我们用大括号对其取值时(同样保证下标不超过数组元素个数)会得到一个字符数组,这可能与其内部实现有关,所以我们不去深究

2.字符数组无论是c=‘char’还是c=['c','h','a','r']所得结果都是一样的,所以可以用小括号对它进行取值,同普通数组一样字符数组也不能用大括号取值

插值:

使用griddata进行插值(下面是一个绘制等高线图的例子):

%数据读取 
x=xlsread('data','附件1','b4:b322'); 
y=xlsread('data','附件1','c4:c322'); 
z=xlsread('data','附件1','d4:d322'); 
g=xlsread('data','附件1','e4:e322'); 
%系统函数插值 
[X,Y,Z]=griddata(x,y,z,linspace(1,30000)',linspace(1,20000),'v4'); 
contourf(X,Y,Z); %绘制等高线的方法,X和Y表示点的横纵坐标,Z表示点的高度,详见画图
colorbar('vert')%竖直海拔条(只要是颜色与数值有关的图都可以用)

关于griddata方法:用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z,并返回曲面z在点(XI,YI)处的插值,因此第四个、第五个参数通常是规则的格点(像用命令meshgrid生成的一样),当然也可以是两个向量(一个行向量一个列向量),griddata会自动生成相应格点

详见:Matlab griddata函数功能介绍_syy_1797的博客-CSDN博客_griddata

克里金插值:

[dmodel, perf] = dacefit(S, Y, @regpoly0, @corrgauss, theta, lob, upb); %高斯模型  
[dmodel, perf] = dacefit(S, Y, @regpoly0, @corrspherical, theta, lob, upb); %球状模型
[dmodel, perf] = dacefit(S, Y, @regpoly0, @correxp, theta, lob, upb); %指数模型
X = gridsamp([0 0;30000 20000], 200);
[YX] = predictor(X,dmodel);

%dacefit的第一个参数表示平面点的x坐标和y坐标(每一行表示一个点,一行有两个列,分别是x坐标和y坐标),第二个参数表示该点对应的某个指标值,第三个参数可以直接照抄,意义不明,第四个参数表示用到的模型,有上面三种模型,可以逐个尝试根据结果确定使用哪个模型,剩下的三个参数分别表示差值、下限、上限,详细意义不明,一般分别取[0.1,0.1],[20,20],[10,10]。第一个返回值表示产生的模型,第二个参数不明
%predictor用于使用dacefit产生的模型进行预测,第一个参数表示点的位置,形式和意义与S一致,第二个参数表示用的模型。返回每个点预测的指标值

可视化:

基本操作:

set(gca,'fontsize',15); %gca-坐标属性,这里设置的是坐标轴上文字字体的大小
set(gca,'XTickLabel',{'高斯模型','球状模型','指数模型'}); %常用于柱状图中设置一个或一组柱子表示什么
subplot(2,4,i); %画图之前调用,2,4表示将figure分为2行4列,从左上到右上,从左下到右下标号为1-8,i即表示接下来要在标号为i的区域画图
title('功能区分布图','fontsize',20,'fontname','黑体');
xlabel('x/m','fontsize',15);
ylabel('y/m','fontsize',15);
legend('HelpText'); %附加图例说明,根据不同图可加多个或单个参数

画柱状图:

b=bar([1,2;3,4;5,6]); %每个数值代表一个柱子,同一组的柱子间隔较小;组与组之间用分号分隔,在图形上组和组之间的间距较大;注意如果只有分号或者只有逗号,那么所有柱子间隔一样
set(b,'FaceColor',[0 0 0]); %设置所有柱子的颜色

常见三维图的绘制见清风课程代码

image可以将矩阵可视化为图像,常见用法:

%创建 C 作为真彩色三维数组。将该数组的最后两页设为零,以便仅使用红色
C = zeros(3,3,3);
C(:,:,1) = [.1 .2 .3; .4 .5 .6; .7 .8 .9];
%C = 
%C(:,:,1) =

%    0.1000    0.2000    0.3000
%    0.4000    0.5000    0.6000
%    0.7000    0.8000    0.9000


%C(:,:,2) =

%     0     0     0
%     0     0     0
%     0     0     0


%C(:,:,3) =

%     0     0     0
%     0     0     0
%     0     0     0

%显示C中数据的图像
image(C);

详见:从数组显示图像 - MATLAB image- MathWorks 中国 

画地图可以使用M_Map工具箱,使用方法见该工具箱的使用说明

其它:

可以使用set改变矩阵的值,如:

set(Ch,'cdata',Se);
%Ch和Se都是矩阵

cat方法用于拼接矩阵,详见:MATLAB: cat函数使用_Cche的博客-CSDN博客

matlab中在只知道x和y的数据,但不知道它们之间的函数表达式时求y在x上的积分:MATLAB中trapz和cumtrapz函数 - SteveWang - 博客园

matlab中的符号变量:matlab中的符号变量由变量名和值组成,大部分情况下变量名和值都是相等的,如:syms x,这里的x变量名和值都是x,但也有一些不等的,如:

syms x;
y=x*2;
%y的变量名为y,值为x*2
z=sym('123');
%z的变量为z,值为123,该变量的值同int变量一样,都可以正常进行算术运算

xlsread:读取本地的excel表格数据,第一个参数表示表格的路径,第二个参数表示工作簿的名称,第三个参数表示读取的单元格范围,如:

nongdu1=xlsread('data','1','e2:l44');
nongdu2=xlsread('data','2','e2:l36');
nongdu3=xlsread('data','3','e2:l66');
nongdu4=xlsread('data','4','e2:l137');
nongdu5=xlsread('data','5','e2:l35');

gridsamp,详见:函数 gridsamp(range , q)的作用介绍 – MATLAB中文论坛

tabulate用于统计一个数组中各元素的出现次数和频率,详见:MATLAB自带的函数tabulate统计一个数组中各数字(元素)出现的频数、频率_梁121的博客-CSDN博客_tabulate

meshgrid根据x和y的取值范围生成网格坐标,网格坐标用来画网格图(如mesh、surf等方法的参数都是网格坐标),例如:

给定参数X为[1,2,3,4,5],Y为[1,2,3],则X将被拓展为[1,2,3,4,5;1,2,3,4,5;1,2,3,4,5],Y将被拓展为[1,1,1,1,1;2,2,2,2,2;3,3,3,3,3],这样拓展是为了保证X和Y分量的充分组合,与XY对应的Z也应该是5*3大小的矩阵

注意:

1.第一个参数无论传入是否为行向量都会被转为行向量,第二个参数无论传入是否为列向量都会被转为列向量

2.如果只有一个参数说明x和y的取值范围相同

详见:二维和三维网格 - MATLAB meshgrid- MathWorks 中国

reshape可以用来改变矩阵大小,如

A = [1 2 3 4];
A = reshape(A, [2 2])
A = [1 3; 2 4]
%1 3
%2 4
%另外,如果对两个(其实多个也行)向量reshape,则它们的对应关系仍不变,如:
X=[1,2,3,4];
Y=[1,2,3,4];
%对应值相等,执行上述reshape后:
X=[1,3;2,4];
Y=[1,3;2,4];
%对应二维坐标下的值相等

randperm

A = randperm(5) %1-5的数字随机排列
A = randperm(5, 2) %1-5的数字中任选两个,随机排列

repmat

repmat(A, 2)%将A作为一个整体,生成2*2的矩阵
repmat(A, 1, 3)%将A作为一个整体,生成1*3的矩阵
repmat(2, 3)%生成3*3的子元素全是2的矩阵

linspace

x = linspace(0, 4*pi, 10);生成0到4*pi之间均匀的10个数,并以行向量的形式返回
x1 = min(X(:,1)):0.01:max(X(:,1));
x2 = min(X(:,2)):0.01:max(X(:,2));
%将x1和x2划分的更细
[x1G,x2G] = meshgrid(x1,x2);
%x1G的每一行都是一个x的副本,x2G的每一列都是一个y的副本,之所以这样做是为了后面的组合
XGrid = [x1G(:),x2G(:)];
%x1G(:)将原本的多维矩阵变为一维列向量,x2G(:)同理,之后再将这两个列向量并在一起
%上面的一系列操作实现了将x1和x2细化后再组合(指x1中的每一个值与x2中的每一个值进行组合)的功能

hold on 用于在同一figure上绘制两个不重叠图像

figure是用来新建一个figure(可理解为画布),后面可以加一个参数表示figure名,如果不加默认是1,新建figure时如果有同名figure,则新的覆盖旧的

ax = worldmap('World');
setm(ax, 'Origin', [0 180 0])

画地图时的setm第三维表示一个顺时针旋转的度数,前两维表示以地球上的该点为地图中心

eps非常小的一个小数

matlab中行列向量可以加减,如[1,2,3]-[1;2;3],结果为[0,1,2;-1,0,1;-2,-1,0],也就是行向量的每个分量减去列向量的第一个分量作为第一行,行向量的每个分量减去列向量的第二个分量作为第二行......,加把减改成加即可

rand:均匀分布的随机数 - MATLAB rand- MathWorks 中国

randperm:整数的随机排列 - MATLAB randperm- MathWorks 中国

注意matlab也有随机数种子(通过rng可设置),详见:控制随机数生成器 - MATLAB rng- MathWorks 中国

matlab图像识别教程:【人工智能】最简单的图像识别教程——MATLAB的Alexnet迁移学习_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值