Matlab笔记_郭彦甫

说明:

  1. 视频链接:https://www.bilibili.com/video/BV1GJ41137UH
  2. 以下代码为Matlab语法格式,拷贝至Matlab运行查看更加直观

(一)数据结构与文件存取_P4

1 数据结构之 Structure

% Bilibili 台大郭彦甫 P4
% 数据结构之 matrix,strut,cell 的创建与索引
% 文件的读取与存储

%% 1 数据结构之 structure: 存储异质数据
% struct name;
% field name;
% nest structure;

% 利用语句struct()语句创建nesting structure;
% 其中name是field名,Chen qian是其存储值;
% data是第二层嵌套结构,age和grade分别是其field名;
A = struct('name','Chen qian','data',struct('age',24,'grade','95'));

% 随后用另一种方法添加第2条数据;
A(2).name = 'Zhang san';
A(2).data.age = 27;
A(2).data.grade = 88;

2 数据结构之Cell

%% 2 数据结构之cell:类似矩阵,但可以存储异质而非数值型数据;用{}声明;

B{1,1} = [1 2 3;4 6 9;2 6 8];
B{1,2} = 'chen qian';
B{2,1} = 100;
B{2,2} = 'male';
disp(B);

% 索引出位置{1,1}处的矩阵
disp('B{1,1}为:')
disp(B{1,1});  % 用花括号

% 索引出位置{1,1}处矩阵内第3行第3列的元素8
disp('B{1,1}(3,3)为:')
disp(B{1,1}(3,3));  % 先用花括号,再用圆括号

3 矩阵matrix到cell的转化

%% 3 矩阵matrix到cell的转化
% num2cell() 将矩阵每个元素分块
% mat2cell() 矩阵分块

a = magic(6); % 生成一个66列的矩阵
disp('a的输出为:');
disp(a);

b = num2cell(a);
disp('b的输出为:');
disp(b);

c = mat2cell(a,[3 3],[4 2]); % 分块模式:前3行,后3行;前4列,后2列;
disp('c的输出为:');
disp(c)

4 三维数组的构建

%% 4 三维数组的构建
% 三维数组有3个方向,分别是:row;column;layer;对应参数分别为:123% 例如现有两个22列的cellA和B,欲将其拼接成一个2层的结构;可运用指令:cat(3,A,B)
% cat(3,A,B)中第一个参数表示拼接的方向,这里为3表示按前后方向拼接为双layer结构
% 其他1:cat(1,A,B)表示常见的横向拼接,等价于[A B]
% 其他2:cat(2,A,B)表示竖向拼接,等价于[A;B]

A{1,1} = [1 1;2 2];
A{1,2} = 'chenqian';
A{2,1} = [98;92;87];
A{2,2} = 'male';
B{1,1} = [3 3;4 4];
B{1,2} = 'zhangsan';
B{2,1} = [60;59;63];
B{2,2} = 'female';

C1 = cat(1,A,B);  % 横向拼接,等价于 C1 =[A B]
C2 = [A;B];       % 竖向拼接,等价于C2 =cat(2,A,B)
C3 = cat(3,A,B);

5 Mat、Txt数据的存储与读取

%% 5 mat,text数据的存储与读取
% 存储:save  '文件名.mat'
% 读取:load('文件名.mat')
clear;
a = magic(4);
save mydata1.mat % 存储为mat文件

% 读取mat文件: load('mydata1.mat')

6 Excel数据的存储与读取

%% 6 Excel数据的存储与读取
% 存储(写入):xlswrite('文件名.xlsx',写入数据,sheet的编号,写入区域)
% 读取:xlsread('文件名.xlsx')  或 指定读取区域:xlsread('文件名.xlsx', 'B2:D4')

% 读取数据
Score = xlsread('04Score');
% Score = xlsread('04Score','B2:D4' ); % 指定读取区域

% 计算均值后写入数据
M = mean(Score')'; % 转置计算均值后,再转置回来
xlswrite('04Score.xlsx',M,1,'E2:E4'); % M为写入数据,1表示写入该Excel的sheet1,'E2:E4'表示写入区域
xlswrite('04Score.xlsx',{'Mean'},1,'E1');

(二)初阶绘图_P5

1 将多条曲线绘制于同一个坐标系中

% Bilibili 台大郭彦甫 P5
% 初阶绘图

%% 1 将多条曲线绘制于同一个坐标系中

% 第一种:用hold指令
hold on
plot(cos(0:pi/20:2*pi));  
plot(sin(0:pi/20:2*pi)); 
hold off 

% 第二种:plot函数多参输入
x = 0:pi/20:2*pi;
plot(x,sin(x),x,cos(x));

2 更改图形外观

%% 2 更改图形外观;3要素:Marker,Line,Color
hold on
plot(cos(0:pi/20:2*pi),'ok--'); % o代表圆圈,k表示black,--表示段划线 
plot(sin(0:pi/20:2*pi),'sr:');  % s代表方块,r表示red,:表示点划线 
hold off

3 添加标题、添加图例、坐标轴名称、网格线等

%% 3 添加标题、添加图例、坐标轴名称、网格线等

% 添加标题:title('str')
% 图例命令:legend('str1','str2','str3')
% 坐标轴标签:xlabel('str'),ylabel('str'),zlabel('str')
hold on
plot(cos(0:pi/20:2*pi),'ok--'); % o代表圆圈,k表示black,--表示段划线 
plot(sin(0:pi/20:2*pi),'sr:');  % s代表方块,r表示red,:表示点划线 
hold off

title('Sin(x)与Cos(x)示意图');
xlabel('x的范围');
ylabel('y的取值');
legend('cos(x)','sin(x)');

grid(); % 网格线

4 添加注释和箭头

%% 4 添加注释和箭头

% 注释用text()结合LaTeX语法
% 箭头用annotation()

% 画基础图形
x = linspace(0,3); % 均分计算
y = x.^2 .* sin(x); plot(x,y);
line([2,2],[0,2^2 .* sin(2)]); % 画一条竖线,[2,2]表示两个点的横坐标,其余同理

% 添加注释和箭头
str = '$$ \int_{0}^{2} x^2\sin(x) dx $$'; % 编写Latex语法
text(0.25,2.5,str,'Interpreter','latex'); 
annotation('arrow','X',[0.32,0.5],'Y',[0.6,0.4]); % 绘制箭头

5 图形外观进一步优化

%% 5 图形外观进一步优化
% 一、常见需要修改的特性主要有:
% Font
% Fontsize
% Line width
% Axes limit
% Tick position
% Tick label

% 二、一张图形由很多object组成,他们之间存在parent与child的隶属关系,如以下几种层级关系
% Figure object
    % Axes object
    % Line object
        % Marker
            % MarkerSize
            % MarkerEdgeColor
            % MarkerFaceColor
        % Color
        % LineStyle
        % LineWidth
% 于是如果要获取或修改某项object的特性,操作策略如下:
% 1)首先辨识出该object的handle(ID)
%   gcf: get current figure's handle
%   gca: get current axes' handle
%   而线条line的handel,不需要用呼叫函数,其被赋值的变量即为其handle(ID)...
%   如下文的 h = plot(x,y),h即为绘制出曲线的handle
% 2)得到handle后,根据需要,获取或修改其特性
%   get():获取object的特性
%   set():修改object的特性

% 代码示例
x = linspace(0,2*pi,10);
y = sin(x);
h = plot(x,y,'vr-.'); % h即为曲线Line的handle

% 修改某项object的特性,这里为修改axes limits
set(gca,'xlim',[0,2*pi]); % gca为:get current axes' handle
set(gca,'ylim',[-1.2,1.2]);

% 坐标轴Axes设置:Fontsize、Tick、TickLable
set(gca,'FontSize',15); % 修改坐标轴字体大小
set(gca,'Xtick',0:pi/2:2*pi); % Tick是刻度线的绘制情况
set(gca,'Xticklabel',0:90:360);

% 曲线Line设置:LineStyle、LineWidth、Color
set(h,'LineStyle',':','LineWidth',1.5,'Color','b') % 其中,h是曲线的handle(ID)

6 将多条曲线绘制于多张_figure_window

%% 6 将多条曲线绘制于多张_figure_window_中的方法

% 通过呼叫figure语句来实现功能
x = -10:0.1:10;
y1 = x.^2 - 8;
y2 = exp(x);
figure,plot(x,y1);
figure,plot(x,y2);

%% 7 将多条曲线绘制于同一张_figure_window_中的方法(排列式绘制)

% subplot(m,n,1),m为整个figure划分为m*n个格子,1表示将图形画在第一行第一列处

x = 0:0.1:10;
y1 = x.^2 - 8;
y2 = exp(x);
y3 = 2*x.^2;
y4 = 1./x;
subplot(2,2,1),plot(x,y1);
subplot(2,2,2),plot(x,y2);
subplot(2,2,3),plot(x,y3);
subplot(2,2,4),plot(x,y4);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值