一、界面认识

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

没有当前文件夹和工作区就点击布局,选择"文件夹"和"工作区"
编写程序时通常会拷贝一份文件夹
意思是这个是你保存编辑好的文件的一个快捷路径 不用你在那里找你要把文件放在哪里
命令行窗口是直接与使用者交互的

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

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 %文件→导出设置

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

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


