【MatLab手记】 --从0到了解超超超详过程!!!

文章目录

  • MatLab笔记
    • 一、命令行窗口
    • 二、变量命名规则
    • 三、数据类型
      • [1. 数字](#1. 数字)
      • [2. 字符与字符串](#2. 字符与字符串)
      • [3. 矩阵](#3. 矩阵)
        • [3.1 矩阵创建](#3.1 矩阵创建)
        • [3.2 矩阵的修改和删除](#3.2 矩阵的修改和删除)
        • [3.3 矩阵的拼接与重构重排](#3.3 矩阵的拼接与重构重排)
        • [3.4 矩阵的运算方法](#3.4 矩阵的运算方法)
        • [3.5 矩阵的下标](#3.5 矩阵的下标)
      • [4. 元胞数组(类似数据容器)](#4. 元胞数组(类似数据容器))
      • [5. 结构体](#5. 结构体)
    • 四、逻辑与流程控制
    • 五、函数
      • [1. 基础函数](#1. 基础函数)
      • [2. 匿名函数](#2. 匿名函数)
      • [3. 常用函数](#3. 常用函数)
      • [4. 特殊函数](#4. 特殊函数)
    • 六、绘图
      • [1. 二维图](#1. 二维图)
      • [2. 三维图](#2. 三维图)
      • [3. 图形窗口分割](#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. 字符与字符串

单引号和双引号定义表示:

matlab 复制代码
%% 字符与字符串
id = 'a'
id2 = 'cd'
id + id2 % 字符串的计算是ASCII码值的运算

num = 155
char(num) % 将输入数值转换为对应的字符
num2str(id) % 将数字(包括整数、浮点数等)转换为字符串表示。

str = 'I Love You'
length(str) % 空格也占一个字符

3. 矩阵

3.1 矩阵创建

直接创建:

matlab 复制代码
A = [1 2 3;2 5 8;9 8 2] % 分号表示换行

函数创建:

matlab 复制代码
% 函数创建
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 矩阵的修改和删除
  • 修改:
matlab 复制代码
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扩展
  • 删除:
matlab 复制代码
% 删除行列
A(:,[1]) = [] % 删除所有行的第1列
A(:,[1,end]) = [] % 删除所有行的第1和最后一列
A(:,[2:end]) = [] % 删除所有行的第2到最后一列

% 删除单个 -- 通过线性索引
A(4) = [] % 删除之后由于矩阵形式发生变化,按列铺排成一行显示
3.3 矩阵的拼接与重构重排
  • 拼接:
matlab 复制代码
% 横向拼接(行数相同):
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表示横向拼接
  • 重构重排:
matlab 复制代码
% 重构:
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 矩阵的运算方法
  • 函数运算:
matlab 复制代码
% 函数运算:
% sum(A,dim)
A = randi(10,2,6)
sum(A,1) % 按列求和
sum(A,2) % 按行求和
sum(A,"all") % 全部求和

% prod()求乘积
% mean()求平均值
% median()计算中位数
% mode()计算众数
% min()求最小值
% max()求最大值
  • 算数运算:

五种兼容模式:

注意:算术符号加点意味对应位置单独进行计算

matlab 复制代码
% 矩阵的四则运算
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) % 对方阵矩阵求逆
  • 关系运算:

==、>、<、>=、<=、~=对应位置比对,返回布尔值:

matlab 复制代码
% 关系运算
A = [1:4]
B = ones(3,4)
A == B
===========================
1   0   0   0
1   0   0   0
1   0   0   0
  • 逻辑运算:

    &与,|或,~非,xor异或,&&双与,||双或

    对应位置进行逻辑运算。

3.5 矩阵的下标
matlab 复制代码
% 矩阵的下标(起始值为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. 元胞数组(类似数据容器)

matlab 复制代码
A = cell(1,6) % cell(行,列)
A{2} = eye(3) % 生成一个3*3的,对角线位1的单位矩阵 切记索引位置从1开始
A{5} = magic(5) % 幻方矩阵(矩阵的每行、每列以及主副对角线上的数之和相等)
B = A{5}

5. 结构体

matlab 复制代码
% 类似于字典
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)

四、逻辑与流程控制

matlab 复制代码
%% 逻辑和流程控制
% 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. 基础函数

基本结构:

matlab 复制代码
function[返回的形参:output1,output2......] = 函数名(输入的形参:input1,input2......)
............
end
matlab 复制代码
%% 函数
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文件,然后先从另一个文件调用它:

matlab 复制代码
A = 1:20
[max,min] = max_min_val(A);
max
min
==============
max =
    20
min =
     1

2. 匿名函数

不需要单独创建-m文件,基本结构:

matlab 复制代码
f = @(参数1,参数2) 函数表达式
matlab 复制代码
ff = @(x,y)x^2 + y^2;
vv = @(x,y)x.^2 + y.^2;

调用:

matlab 复制代码
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. 常用函数

matlab 复制代码
%% 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. 二维图

matlab 复制代码
%% 二维平面绘图
% 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. 三维图

matlab 复制代码
%% 三维立体绘图
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. 图形窗口分割

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. 绘图的方法

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. 绘图的方法
相关推荐
raysync88815 分钟前
替代传统FTP传输,镭速大数据传输系统实现安全高效数据流转!
开发语言·安全·php
mask哥17 分钟前
算法:LeetCode470_用Rand7()实现Rand10()_java实现
java·开发语言
cr.sheeper27 分钟前
CTFHUB-web进阶-php
开发语言·php
Clockwiseee1 小时前
PHP之伪协议
android·开发语言·php
开心工作室_kaic1 小时前
springboot498基于javaweb的宠物猫认养系统(论文+源码)_kaic
java·开发语言·数据库·美食
秋雨凉人心1 小时前
上传npm包加强
开发语言·前端·javascript·webpack·npm·node.js
凡人的AI工具箱1 小时前
每天40分玩转Django:Django文件上传
开发语言·数据库·后端·python·django
cloud___fly1 小时前
Java线程池面试题
java·开发语言
chhanz1 小时前
MATLAB符号计算-符号表达式基础运算操作
数学建模·matlab