【MatLab手记】 --从0到了解超超超详过程!!!
文章目录
- MatLab笔记
- 一、命令行窗口
- 二、变量命名规则
- 三、数据类型
- 1. 数字
- 2. 字符与字符串
- 3. 矩阵
- 3.1 矩阵创建
- 3.2 矩阵的修改和删除
- 3.3 矩阵的拼接与重构重排
- 3.4 矩阵的运算方法
- 3.5 矩阵的下标
- 4. 元胞数组(类似数据容器)
- 5. 结构体
- 四、逻辑与流程控制
- 五、函数
- 1. 基础函数
- 2. 匿名函数
- 3. 常用函数
- 4. 特殊函数
- 六、绘图
- 1. 二维图
- 2. 三维图
- 3. 图形窗口分割
- 总结
- 总结
MatLab笔记
一、命令行窗口
- 直接交互,类似终端命令
- 命令符:
- clc–清除所有命令
- clear all–清空工作区所有变量
- %% --注释(有分割线)
- % --注释(无割线)
- ctrl + r --多行注释
- ctrl + t --取消注释
- iskeyword --关键字
二、变量命名规则
- 区分大小写
- 以字母开头,由字母、数字、下划线组成,不能使用标点
- 不超过63位
三、数据类型
数字、字符与字符串、矩阵、元胞数结构体
1. 数字
整数和浮点数
运算符(+,-,*,/,^)
2. 字符与字符串
单引号和双引号定义表示:
%% 字符与字符串
id = 'a'
id2 = 'cd'
id + id2 % 字符串的计算是ASCII码值的运算
num = 155
char(num) % 将输入数值转换为对应的字符
num2str(id) % 将数字(包括整数、浮点数等)转换为字符串表示。
str = 'I Love You'
length(str) % 空格也占一个字符
3. 矩阵
3.1 矩阵创建
直接创建:
A = [1 2 3;2 5 8;9 8 2] % 分号表示换行
函数创建:
% 函数创建
E = zeros(10,5,3) % 创建一个10行5列,3维度的全0矩阵
F = ones(13,5,3) % 创建一个10行5列,3维度的全1矩阵
G = eye(3,3) % 创建一个3*3的单位矩阵
E(:,:,1) = rand(10,5) % 生成的随机数在 (0, 1) 区间内均匀分布
E(:,:,2) = randi(5,10,5) % 生成一个10行5列的、在 [1, 5] 范围内的伪随机整数矩阵
E(:,:,3) = randn(10,5) % 生成标准正态分布的伪随机数(均值为 0,方差为 1)
3.2 矩阵的修改和删除
- 修改:
A = [1 2 3 4;2:5;3:6]
% 位置索引
A(2,3) = 10 % 将第2行第3列替换
A(2:) = 10 % 将第2行整行替换
A([1,3],[1,2]) = 0 % 将第1,3行的第1,2列替换
% 线性索引
A(4) = 8 % 按列从1开始第4个数替换
A(5,6) = 888 % 不够的列数以0扩展
- 删除:
% 删除行列
A(:,[1]) = [] % 删除所有行的第1列
A(:,[1,end]) = [] % 删除所有行的第1和最后一列
A(:,[2:end]) = [] % 删除所有行的第2到最后一列
% 删除单个 -- 通过线性索引
A(4) = [] % 删除之后由于矩阵形式发生变化,按列铺排成一行显示
3.3 矩阵的拼接与重构重排
- 拼接:
% 横向拼接(行数相同):
A = [1 2 3 4;2:5;3:6]
B = ones(3,4)
C = [A,B] % ,横向
% 或
D = cat(2,A,B) % 2表示横向拼接
% 竖向拼接(列数相同):
B2 = ones(2,4)
E = [A;B2] % ;竖向
% 或
E1 = cat(1,A,B2) % 1表示横向拼接
- 重构重排:
% 重构:
A = randi(10,2,6)
B = reshape(A,3,4) % 重构元素数量不变,按线性索引重构
B1 = reshape(A,3,[]) % 要求3行,列数自动匹配
% 重排sort(A,dim,descend):
A = randi(10,2,6)
B = sort(A,1,"ascend"); % 1表示对每列排序,ascend表示升序
B1 = sort(A,2,"descend") % 2表示对每行排序,descend表示降序
C = sortrows(A,4,"descend") % 以第4列降序排序为基准,整行排序
3.4 矩阵的运算方法
- 函数运算:
% 函数运算:
% sum(A,dim)
A = randi(10,2,6)
sum(A,1) % 按列求和
sum(A,2) % 按行求和
sum(A,"all") % 全部求和
% prod()求乘积
% mean()求平均值
% median()计算中位数
% mode()计算众数
% min()求最小值
% max()求最大值
- 算数运算:
五种兼容模式:
注意:算术符号加点意味对应位置单独进行计算
% 矩阵的四则运算
A = [1 2 3 4;5 6 7 8]
B = [1 1 2 2;2 2 1 1]
C = A + B % (对应矩阵位置相加)
D = A - B % (对应矩阵位置相减)
E = A * B' % 两矩阵相乘,前矩阵列数与后一个矩阵行数相同
F = A .* B % 两矩阵对应项相乘
G = A / B % 相当于A * B的逆
H = A ./ B % 两矩阵对应项相除
%
A = [1 2 3;2 5 8;9 8 2]
B = A' % 对矩阵进行转置(列转为行)
C = A(:) % 将矩阵以列方向进行拉直
D = inv(A) % 对方阵矩阵求逆
- 关系运算:
==、>、<、>=、<=、~=对应位置比对,返回布尔值:
% 关系运算
A = [1:4]
B = ones(3,4)
A == B
===========================
1 0 0 0
1 0 0 0
1 0 0 0
-
逻辑运算:
&与,|或,~非,xor异或,&&双与,||双或
对应位置进行逻辑运算。
3.5 矩阵的下标
% 矩阵的下标(起始值为1)
A = magic(5)
B = A(2,3) % 取第2行第3列数据
C = A(3,:) % 取第3行所有列
D = A(:,4) % 取第4列所有行
[m,n] = find(A > 20) % 返回符合条件的索引值
[m,n] = find(A == 21)
4. 元胞数组(类似数据容器)
A = cell(1,6) % cell(行,列)
A{2} = eye(3) % 生成一个3*3的,对角线位1的单位矩阵 切记索引位置从1开始
A{5} = magic(5) % 幻方矩阵(矩阵的每行、每列以及主副对角线上的数之和相等)
B = A{5}
5. 结构体
% 类似于字典
books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30,40])
books.name % 取出结构体中,属性对应的值(cell类型)
books.name(1) % 切片,从1开始(cell类型)
books.name{1} % 用{}取出的值位字符串形式
books.price
books.price(1)
四、逻辑与流程控制
%% 逻辑和流程控制
% 1. for .. end
sum = 0;
for n = 1:5
sum = sum + n^2
end
summ = 0
for i = 1:5
p=1
for j = 1:i
p = p*j
end
summ = summ + p
end
% 2. while .. end
s = 0
n = 1
while n<=10
s = s+n
n = n+1
end
% 3. 分支结构 if .. end;if ..elseif .. else .. end;switch .. case .. end
a = 100
b = 50
c = 110
if a > b
'成立'
end
===============
if a > b & a > c
'成立'
else
'错误'
end
==================
switch a == 100
case a > 80
"hhh"
case a > 60
'ppp'
otherwise
'ttt'
end
% break结束循环
% continue 跳过本次循环
五、函数
1. 基础函数
基本结构:
function[返回的形参:output1,output2……] = 函数名(输入的形参:input1,input2……)
…………
end
%% 函数
function [max,min] = max_min_val(x)
max = subfuc1(x)
min = subfuc2(x)
function r = subfuc1(x) % 子函数
x1 = sort(x,'descend');
r = x1(1);
end
function r = subfuc2(x)
x1 = sort(x,'a');
r = x1(1);
end
end
调用:
创建一个新的-m文件,然后先从另一个文件调用它:
A = 1:20
[max,min] = max_min_val(A);
max
min
==============
max =
20
min =
1
2. 匿名函数
不需要单独创建-m文件,基本结构:
f = @(参数1,参数2) 函数表达式
ff = @(x,y)x^2 + y^2;
vv = @(x,y)x.^2 + y.^2;
调用:
f(2,3)
x = 1:5;
y = 0.1:0.1:0.5;
vv(x,y)
==============
ans =
13
ans =
1.0100 4.0400 9.0900 16.1600 25.2500
3. 常用函数
%% 1. 数值函数
x = -1.5;
y = -3 + 4i;
abs(x) % 取绝对值
abs(y) % 还可以求模
mod(11,3) % 取余
sqrt(8) % 开根号
sqrt(1:9) % 对向量中每个数开根
format long % 长精度
exp(2) % 计算以自然常数e为底的指数
exp(0)
log(2) % 以e为底的对数运算
log(exp(3))
log2(8) % 以2为底的对数运算
log10(100) % 以10为底的对数运算
round(2.5) % 四舍五入
round(3.1415926,2) % 指定小数点后几位四舍五入保存,n>0往右数
round(3141.59,-2) % n<0往左数
%% 三角函数
%% 常用函数
A = [1:9];
x = 8;
find(A == x)
isempty(find(A == x)) % 确定数组是否为空
x = 0:4;
y = 0:3;
[xx,yy] = meshgrid(x,y); % 返回网格坐标
xx
yy
seed = 3;
rng(seed) % 设置随机数种子
randi(10,3,3)
4. 特殊函数
六、绘图
1. 二维图
%% 二维平面绘图
% 1. 绘制简单二维线图
x = 0:0.01:2*pi
y = sin(x)
figure % 创建一个幕布
plot(x,y) % 画图
title('y = sin(x)') % 命名标题
xlabel('x') % x轴标名
ylabel('sin(x)') % y轴标名
xlim([0 2*pi]) % 设置x范围
text(2.5,sin(2.5),'sin(x)') % 在线上加标注文字
% 2. 设置颜色、线型、数据标记点
x = 0:0.01:20
y1 = 200*exp(-0.05*x).*sin(x)
y2 = 0.8*exp(-0.5*x).*sin(10*x)
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot') % 将两个y值同一个x轴绘制在一个图上
set(get(AX(1),'Ylabel'),'String','Slow Decay') % y轴命名
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time (\musec)') % x轴命名
title('Multiple Decay Rates')
set(H1,'LineStyle','--') % 设置线条形状
set(H2,'LineStyle',':')
legend('y1','y2') % 添加图例
% 3. 条形图
x = [2021,2022,2023];
y = [10,20;20,30;100,200]
bar(x,y)
% 4. 直方图
x = randn(1000);
nbins = 25 % 等间距条个数
H = histogram(x,nbins)
counts = H.Values % 每个bin的个数
% 5. 饼图
x =[1:2:9]
pie(x) % 1/sum(x)占比
% 6. 散点图
t = 0:pi/50:2*pi;
x = 16*sin(t).^3
y = 13*cos(t) - 5*cos(2*t) - 2*cos(3*t) - cos(4*t);
scatter(x,y,"red","filled")
% 7. 矢量类图形
a = [4,5];
quiver(0,0,a(1),a(2))
% 8. hold on 保持原有图形
2. 三维图
%% 三维立体绘图
t = 0:pi/50:10*pi
plot3(sin(t),cos(t),t) % (x,y,z),绘制三维图像
xlabel('sin(t)') % 坐标轴命名
ylabel('cos(t)')
zlabel('t')
grid on % 背景添加网格线
axis square % 限制坐标轴规整
%% 绘制三维曲面
x = -1:0.2:2;
[x,y] = meshgrid(x)
z = x.*exp(-x.^2-y.^2);
mesh(x,y,z)
surf(x,y,z)
%% 双峰函数
[x,y,z] = peaks(30)
mesh(x,y,z)
grid
3. 图形窗口分割
%% 图形窗口分割
x = linspace(0,2*pi,60)
subplot(2,2,1) % 将幕布划分为2*2大小,选择第1个区域
plot(x,sin(x)-1)
title('sin(x)-1');axis([0,2*pi,-2,0]) % axis设置了当前图像的坐标轴范围
% x轴的范围从0到2π,y轴的范围从-2到0。
subplot(2,1,2)
plot(x,cos(x)+1)
title('cos(x)+1');axis([0,2*pi,0,2])
总结
- 矩阵的创建以及基本运算
- 函数的定义方法
- 逻辑控制的结构
- 绘图的方法
quare % 限制坐标轴规整
%% 绘制三维曲面
x = -1:0.2:2;
[x,y] = meshgrid(x)
z = x.*exp(-x.2-y.2);
mesh(x,y,z)
surf(x,y,z)
%% 双峰函数
[x,y,z] = peaks(30)
mesh(x,y,z)
grid
### 3. 图形窗口分割
```matlab
%% 图形窗口分割
x = linspace(0,2*pi,60)
subplot(2,2,1) % 将幕布划分为2*2大小,选择第1个区域
plot(x,sin(x)-1)
title('sin(x)-1');axis([0,2*pi,-2,0]) % axis设置了当前图像的坐标轴范围
% x轴的范围从0到2π,y轴的范围从-2到0。
subplot(2,1,2)
plot(x,cos(x)+1)
title('cos(x)+1');axis([0,2*pi,0,2])
总结
本篇介绍了:
- 矩阵的创建以及基本运算
- 函数的定义方法
- 逻辑控制的结构
- 绘图的方法