【MATLAB】零基础入门

一、界面认识

预设→字体 可调整字体字号

没有当前文件夹和工作区就点击布局,选择"文件夹"和"工作区"

编写程序时通常会拷贝一份文件夹

意思是这个是你保存编辑好的文件的一个快捷路径 不用你在那里找你要把文件放在哪里

命令行窗口是直接与使用者交互的

新建→脚本 即可出现编译器

Ctrl + S键 可以保存脚本,脚本的命名方式与MATLAB变量的命名规则类似。

二、变量命名和数据类型

编辑器中的注释 两个百分号+空格 可以出现横线 %%

对于其他的注释只写一个百分号%即可

I. 清空环境变量及命令

clear all % 清除 Workspace 中的所有变量

clc % 清除 Command Window 中的所有命令

II. 变量命令规则

1. 变量名区分大小写

A = 2 a = 3

2. 变量名长度不超过 63 位

ABCDEFGHIJKLMNOPQRSTUVWXYZ123456ABCDEFGHIJKLMNOPQRSTUVWXYZ123456 = 3

3. 变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点

%3A = 4

%.a = 5

%/b = 5

a_2 = 3

% a.2 = 4

4. 变量名应简洁明了,通过变量名可以直观看出变量所表示的物理意义

A = rand(3,5)

rows = size(A, 1)

III. MATLAB数据类型

1. 数字

2 + 4

10 - 7

3 * 5

8 / 2

2. 字符与字符串

s = 'a'

abs(s) %ASCII码

char(65) %char是字符,str是字符串

num2str(65) %number to string,数字转换为字符串

str = 'I Love MATLAB & Machine Learning.'

length(str) % 计算字符串长度(空格也算)

字符串用单引号引用,引号内的内容不需要计算机理解,直接输出即可

3. 矩阵

A = 1 2 3; 4 5 2; 3 2 7; 4 6 8 %用空格分开,用分号换行

B = A' %转置

C = A(:) %竖向拉长矩阵

D = inv(A) %求逆,非方阵无法求逆

A * D %矩阵乘矩阵的逆为单位阵

E = zeros(10, 5, 3) %10行5列3维全零矩阵

E(:, :, 1) = rand(10, 5)

E(:, :, 2) = randi(5, 10, 5) %randi是整数

E(:, :, 3) = randn(10, 5) %randn是正态分布有正有负,因为生成的是标准正态分布的随机数,有正有负才能保证期望为 0

4. 元胞数组

A = cell(1, 6) %1行6列

A{2} = eye(3) %eye(n)生成n*n 对角线数值为1的单位矩阵,放入第二个"盒子"中

%索引 C语言从0开始,MATLAB从1开始

A{5} = magic(5) %幻方

B = A{5}

5. 结构体

相当于Python语言中的字典

books = struct('name',{{'Machine Learning','Data Mining'}},'price',30 40)

%创建一个结构体数组 books,包含两个字段:

% name 字段:元胞数组,存放两本书名 'Machine Learning'、'Data Mining'

% price 字段:数值数组,对应价格30、40; 最终得到 1×2 的结构体数组:books(1)、books(2)

books.name %在 books 中选择 name 属性

books.name(1) %圆括号 ():取元胞,返回的还是元胞类型

books.name{1} %大括号 {}:取元胞里面的内容,直接取出里面的字符向量(字符串)

三、矩阵构造和四则运算

IV. MATLAB矩阵操作

1. 矩阵的定义与构造

A = 1 2 3 5 8 5 4 6

%手动创建行向量(1 行 8 列),直接把数字写在方括号里,空格用来分隔同一行元素

B = 1:2:9

%冒号表达式,格式:起始:步长:终点 步长不可省略不写

%从 1 开始,每次 + 2,直到不超过 9

C = repmat(B, 3, 1)

% repmat(矩阵,重复行数,重复列数):复制平铺矩阵

%把向量 B 在垂直方向复制 3 份,横向复制 1 份,得到 3 行 5 列矩阵

D = ones(2, 4)

% ones(m, n):生成全部元素为 1 的 m 行 n 列矩阵

%这里生成 2 行 4 列、所有值都是 1 的矩阵。

2. 矩阵的四则运算

A = 1 2 3 4; 5 6 7 8

%定义矩阵 A,; 换行,得到2 行 4 列矩阵

B = 1 1 2 2; 2 2 1 1

%定义矩阵 B,同样是2 行 4 列矩阵

C = A + B

%矩阵加法:两个同型矩阵,对应位置元素相加,要求 A、B 行列数完全一致

D = A - B

%矩阵减法:同型矩阵,对应位置元素相减

E = A * B'

% B' :B 的转置(2×4 → 4×2)

% * :数学上标准矩阵乘法,不是对应元素相乘

% A 是 2×4,B 转置后 4×2,相乘结果 E 是 2×2 矩阵,遵循矩阵乘法规则。

F = A .* B

%点乘(元素乘),.是关键!

%A 和 B 同维度,对应项相乘,对应位置的数字一对一相乘,和矩阵乘法完全不同

G = A / B

% G * B = A G * B * pinv(B) = A * pinv(B) G = A * pinv(B),相当于a乘b的逆

%矩阵右除,等价于 G = A * pinv(B)(A 乘以 B 的伪逆) 含义:求 G 使得 G * B ≈ A,常用于最小二乘求解,B 不一定是方阵、不一定可逆。

H = A ./ B

%点除(元素除)

%同型矩阵,对应位置元素一对一相除

3. 矩阵的下标

A = magic(5)

%magic(n):生成n 阶幻方矩阵,每行、每列、两条对角线元素之和都相等。

%这里生成 5×5 幻方矩阵 A

B = A(2, 3)

%A (行号,列号),取出矩阵 A 中第 2 行、第 3 列的单个元素,赋值给 B

C = A(3, :)

% : 代表该维度全部元素。

% A(3, :):取出 A 的第 3 行的所有列,得到一行向量

D = A(:, 4)

% A(:, 4):取出 A 的第 4 列的所有行,得到一列向量

m, n = find(A > 20)

%找大于20的序号值/矩阵

% A > 20:逻辑判断,生成和 A 一样大小的逻辑矩阵,满足 > 20 的位置标记为 true(1),其余false(0)

% find():找到逻辑值为 true 的位置,输出对应的行下标 m、列下标 n

%m、n 是一一对应的向量:m(k) 和 n(k) 共同表示一个满足条件元素的坐标

四、程序结构

1.顺序结构

2.循环结构

【注】循环结构在做相加/求和问题的时候,需要赋初值,例:sum = 0;

3.分支结构

五、二维平面绘图

绘图一定要有初始值

Matlab 复制代码
x = 0:0.01:2*pi;    %冒号生成向量:x 从 0 到\(2\pi\),步长 0.01,是绘图的横坐标采样点
y = sin(x);    %计算每个 x 对应的正弦值,得到纵坐标 y
figure    %新建一个空白绘图窗口,防止新图覆盖之前的图
plot(x, y)    %二维绘图,以 x 为横坐标、y 为纵坐标画出曲线
title('y = sin(x)')    %给图像添加标题:y = sin(x)
xlabel('x')    %给 x 轴添加标签 `x`
ylabel('sin(x)')    %给 y 轴添加标签 `sin(x)`
xlim([0 2*pi])    %限定 x 轴的显示范围:0 ~ 2π

x = 0:0.01:20;    %重新生成一组横坐标:0 到 20,步长 0.01
y1 = 200*exp(-0.05*x).*sin(x);    %计算衰减正弦信号:y_1=200e^{-0.05x}\sin(x)
%⚠️ `.*` 是点乘,必须写!exp 结果和 sin 结果都是向按量,元素之间逐个相乘。

x = 0:0.01:20;    %生成横坐标向量:从 0 到 20,步长 0.01。
y1 = 200*exp(-0.05*x).*sin(x);    %慢衰减振荡信号:y_1=200e^{-0.05x}\sin(x),衰减系数小,衰减慢。
y2 = 0.8*exp(-0.5*x).*sin(10*x);    %快衰减高频振荡信号:y_2=0.8e^{-0.5x}\sin(10x),衰减系数大,衰减快,振荡频率更高。
%⚠️ `.*`,向量之间元素逐个相乘,不能直接写`*`
figure    %新建绘图窗口。
[AX, H1, H2] = plotyy(x, y1, x, y2, 'plot');
%`plotyy`:双 y 轴绘图(左右两个纵坐标,共用同一个 x 轴)
%  · AX:两个坐标轴的句柄,`AX(1)`是左侧 y 轴,`AX(2)`是右侧 y 轴
%  · H1:y1 曲线的句柄;H2:y2 曲线的句柄
%  · 'plot' 指定使用 plot 方式画线
set(get(AX(1),'Ylabel'),'String','Slow Decay')    %给左侧 y 轴设置标签文字:Slow Decay(慢衰减)
set(get(AX(2),'Ylabel'),'String','Fast Decay')    %给右侧 y 轴设置标签文字:Fast Decay(快衰减)
xlabel('Time (\musec)')    %x 轴标签:Time (μs,微秒),`\musec`是 LaTeX 格式,代表微秒符号 μ。
title('Multiple Decay Rates')    %图像标题:Multiple Decay Rates(多种衰减速率)
set(H1,'LineStyle','--')    %修改 y1 曲线线型:`--` 虚线
set(H2,'LineStyle',':')    %修改 y2 曲线线型:`:` 点线

【注意】新版本 MATLAB 推荐用 yyaxis left / yyaxis right 代替 plotyy,plotyy 属于偏旧的函数。

Matlab 复制代码
% 新版 yyaxis 写法(推荐,R2016a及以上版本支持,替代旧版plotyy)
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);

figure
yyaxis left        % 激活左侧Y轴
plot(x, y1, '--')  % y1使用虚线 --
ylabel('Slow Decay')

yyaxis right       % 激活右侧Y轴
plot(x, y2, ':')   % y2使用点线 :
ylabel('Fast Decay')

xlabel('Time (\musec)')
title('Multiple Decay Rates')

六、三维立体绘图

Matlab 复制代码
t = 0:pi/50:10*pi;    %生成参数向量 t:从 0 到 10π,步长 π/50,是螺旋线的参数。
plot3(sin(t), cos(t), t)
%`plot3`:三维曲线绘图函数,分别是 x、y、z 三个方向坐标
% x = sin(t), y = cos(t), z=t,画出一条空间螺旋线(圆柱螺旋线)。
xlabel('sin(t)')    %给 X 轴添加标签 `sin(t)`
ylabel('cos(t)')    %给 Y 轴添加标签 `cos(t)`
zlabel('t')    %给 Z 轴添加标签 `t`(三维图独有的 z 轴标注)
grid on    %打开图像网格线,方便观察三维坐标。
axis square    %设置坐标轴的外框为正方形,让画面比例更协调(注意:不是 xyz 等长,`axis equal`才是三轴等比例)。

【注意】

  • axis square:画布框是正方形,坐标轴比例不变
  • axis equal:x/y/z 三个轴单位长度一致,螺旋看起来不会被压扁

【补充】

hold on

保持当前画布,新画的图不擦掉旧图,多张曲线叠在同一张图里 默认情况下,每次调用 plot / plot3,都会清空图窗,用新曲线替换原来的。 写了 hold on 之后,后续绘图命令叠加在这张图上。

Matlab 复制代码
x = 0:0.01:2*pi;
plot(x,sin(x));
hold on        % 开启叠加
plot(x,cos(x));% cos曲线画在刚才sin的同一张图上

hold off

关闭叠加模式,下一次绘图会清空画布,覆盖之前所有图形(MATLAB 默认状态就是 hold off)

Matlab 复制代码
hold off
plot(x,tan(x)); % 这一句会把图上sin、cos全部清掉,只画tan

七、论文的图形导出

图形的保存与导出

(1) Edit → Copy Figure %编辑→复制图窗

编辑→复制选项 可调节相应的元素

编辑→图窗属性

(2) Toolbar → Save %文件→另存为→保存

(3) print('-depsc','-tiff','-r300','picture1')

(4) File → Export Setup %文件→导出设置

设置好宽度和高度后点击"应用于图形",然后再 编辑→复制图窗

【补】子图绘制------图形窗口的分割

相关推荐
且撷相思红豆枝1 天前
Simulink学习笔记(一)
笔记·学习·matlab
星夜离尘561 天前
MATLAB 角度解缠遇到丢样:先分段,再说明圈数为什么不可恢复
开发语言·matlab
chhttty2 天前
Simulink电机控制框架
matlab·simulink
星夜离尘562 天前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
大江东去浪淘尽千古风流人物3 天前
【HIMO】跨模态图像匹配算法:IMO方向场提取与PolarP描述符源码精讲
matlab·跨模态·遥感·图像匹配·1024程序员节·特征描述符
星夜离尘563 天前
MATLAB 因果采样保持:用历史匹配和数据年龄防止未来信息泄漏
数据结构·算法·matlab
星夜离尘565 天前
MATLAB 工程实验:从相邻块均值手写重叠 Allan 偏差,数清有效项
算法·matlab·均值算法
风巽·剑染春水5 天前
【数据处理】Matlab 环境下安装 SPM 与 CAT 工具并进行脑核磁数据预处理
matlab·spm·cat·脑部核磁·t1w图像
机器学习之心5 天前
把 PINN 塞进群智能反演:一次可审计的结构损伤识别 MATLAB 复现
matlab