当前位置: 首页 > article >正文

【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笔记

一、命令行窗口

  1. 直接交互,类似终端命令
  2. 命令符:
    1. clc–清除所有命令
    2. clear all–清空工作区所有变量
    3. %% --注释(有分割线)
    4. % --注释(无割线)
    5. ctrl + r --多行注释
    6. ctrl + t --取消注释
    7. iskeyword --关键字

二、变量命名规则

  1. 区分大小写
  2. 以字母开头,由字母、数字、下划线组成,不能使用标点
  3. 不超过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])

总结

  1. 矩阵的创建以及基本运算
  2. 函数的定义方法
  3. 逻辑控制的结构
  4. 绘图的方法

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])

总结

本篇介绍了:

  1. 矩阵的创建以及基本运算
  2. 函数的定义方法
  3. 逻辑控制的结构
  4. 绘图的方法

http://www.kler.cn/a/395323.html

相关文章:

  • 大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载
  • C++中的std::tuple和std::pair
  • 批量重命名Excel文件并排序
  • Oracle ADB 导入 BANK_GRAPH 的学习数据
  • C++ 的协程
  • OpenGL ES 共享上下文实现多线程渲染
  • JWT深度解析:Java Web中的安全传输与身份验证
  • 雷光联动自动化标校方法
  • Python自动化小技巧24——实现自动化输出模板表格报告
  • react 受控组件和非受控组件
  • 使用git命令实现对gitee仓库的下载、更新、上传、上传更新操作。
  • FluentUI使用
  • kafka 生产经验——数据积压(消费者如何提高吞吐量)
  • 图像处理技术椒盐噪声
  • [C++刷题] 基础小知识点(5) 数字反转\求数字位数
  • Vue2:脚手架 vue-cli
  • UDP/TCP 简述
  • Elasticsearch集群和Kibana部署流程
  • 【OceanBase 诊断调优】—— OceanBase 数据库统计信息被禁用,状态为 broken 的原因和解决方法
  • 【论文阅读】Virtual Compiler Is All You Need For Assembly Code Search
  • 数位DP学习
  • 人工智能:重塑医疗、企业与生活的未来知识管理——以HelpLook为例
  • 【数字图像处理+MATLAB】基于 Sobel 算子计算图像梯度并进行边缘增强:使用 imgradientxy 函数
  • 《Java核心技术 卷I》Swing处理2D图形
  • 探索 Python HTTP 的瑞士军刀:Requests 库
  • JavaScript逆向爬虫教程-------基础篇之深入JavaScript运行原理以及内存管理