【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. 绘图的方法
相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ll7788115 小时前
LeetCode每日精进:20.有效的括号
c语言·开发语言·算法·leetcode·职场和发展
Jackson@ML6 小时前
Python数据可视化简介
开发语言·python·数据可视化
赵琳琅6 小时前
Java语言的云计算
开发语言·后端·golang
lly2024067 小时前
jQuery 杂项方法
开发语言
赵琳琅7 小时前
MDX语言的安全开发
开发语言·后端·golang
开开又心心的学嵌入式7 小时前
C语言——指针进阶应用
c语言·开发语言
开开又心心的学嵌入式7 小时前
C语言——指针基础知识
c语言·开发语言
lonelyhiker7 小时前
javascript的原型链
开发语言·javascript·原型模式
夏梓蕙8 小时前
Elixir语言的软件开发工具
开发语言·后端·golang