首页 > 其他分享 >MatLab学习笔记

MatLab学习笔记

时间:2024-07-29 11:39:57浏览次数:11  
标签:index end 元素 矩阵 笔记 学习 索引 MatLab col

目录

前言:

MatLab 与 Python 对比:
MatLab:数值计算、微分方程求解、仿真等
Python:爬虫、数据挖掘、机器学习、深度学习等

入门:

基础知识点:

知识点 说明
Ctrl键 + N 创建(普通)脚本文件(后缀:.m)
%
Ctrl键 + R
Ctrl键 + T
注释
添加注释
取消注释
实时脚本文件(后缀:.mlx)
Ctrl键 + E
Ctrl键 + Alt +Enter
Ctrl键 + Enter
文件特点:代码与文本分离;可插入图片与公式;运行结果实时显现;交互式文档
切换文本与代码
分节符
运行当前节代码
对应代码运行结果在命令行窗口不显示(也可以起到分隔语句的作用)
数据文件 后缀:.mat

常用命令行:

命令 作用
clc 清空命令行窗口
clear
clear 变量名
清空工作区
删除指定变量
format long g 长固定小数点格式
上/下键 查找历史命令
doc 命令名称 查看官方文档

特殊变量:

变量名称 描述
ans 默认用于保存运算结果
pi 圆周率
inf / -inf 无穷大[^1] / 负无穷大
NaN 缺失值或未定值
i / j 复数单位
eps 浮点相对精度(大小约为 2.22e-16,近似为零)

数学运算函数:

函数名 作用
abs 绝对值或复数求模
floor 向下取整
ceil 向上取整
fix 保留整数
round
round(x,n)
四舍五入取整
保留 n 位小数(若 n 为负数,则反向取零[^2])
mod(x,y) 取余
sqrt(a) 开平方根(若 a 为负数,结果为复数)
exp(x) ex
log(x) lg x
log2 / log10 计算以2 / 10为底的对数[^3]
sin / cos / tan
sind / cosd / tand
asin / acos / atan
三角函数(以弧度为单位)
三角函数(以角度为单位)
反三角函数(以弧度为单位)

向量:

创建:

1.直接创建法
将数据用 "[ ]" 括入,数据之间以空格、逗号(行向量)或者分号、回车(列向量)分隔
2.冒号法
A : step : B
A为起始值,step为步长,B为终止边界[^4]
3.函数创建法(linspace / logspace)

linspace(a,b):创建元素总数为100,以a为起点,b为终点的等差数列行向量(若 a>b,步长为负数)
linspace(a,b,n):创建元素总数为n,以a为起点,b为终点的等差数列行向量

logspace(a,b):创建元素总数为50,以10^a^ 为起点,10^b^ 为终点的等比数列行向量
logspace(a,b,n):创建元素总数为n,以10^a^ 为起点,10^b^ 为终点的等比数列行向量

索引:

length(a) / numel(a):返回向量维度
MatLab中,元素的索引从"1" 开始,最大索引即为向量维度

a = [2 3 5 6 8 1 0]
单元素提取:
a(index)

多元素提取(将index设置为向量,存放需访问索引):
index = [1 2 3 4]
a(index)
或者a([1 2 3 4])
或者a(1:1:4)
MatLab支持元素重复提取:
a([1 2 2 2])

end索引:指向向量末元素的索引
a(3:end)
注意:使用end之后,不可以将其赋值给变量(如下代码)
index = 3:end

修改与删除:

a(1) = 2
a([1 2]) = [8 9] (注意左右两侧向量长度需相等)
a(1:3) = [7 8 9]
a[1:3] = 100 (若右侧为常数,则表示将左侧指定元素全赋值为该常数)

a(1) = [] (删除指定元素)
a(end-3:end) (删除指定区域元素)

矩阵:

创建:

1.直接输入法
将数据用 "[ ]" 括入,同行数据之间以空格、逗号分隔,行与行之间以分号、回车分隔
2.函数创建法

zeros(n)    创建 n 阶零矩阵
zeros(m,n)  创建 mxn 阶零矩阵
ones 的用法与 zeros 类似;用于创建元素均为"1"的矩阵

eye(n)      创建 n 阶单位矩阵
% 根据线性代数的知识可知,单位矩阵必须为方阵
% 但在MatLab中,可以使用 eye 函数来创建类似于单位矩阵的 "mxn 阶单位矩阵"
% eye(2,3)
% [1 0 0
%  0 1 0]

rand(n)     n 阶矩阵
rand(m,n)   mxn 阶矩阵
数据来源:[0,1]随机、均匀分布取样

randi([min,max],n)     n 阶矩阵
randi([min,max],m,n)   mxn 阶矩阵
randi(max,m,n)         min == 1
数据来源:[min,max]随机、均匀分布取样(整数)

randn(n)     n 阶矩阵
randn(m,n)   mxn 阶矩阵
数据来源:(0,1)随机、标准正态分布取样
% 标准正态分布:以0为均值、1为标准差的正态分布

创建对角矩阵(首参数为向量):
diag([1 2 3])
[1 0 0
 0 2 0
 0 0 3]
diag([1 2 3],-1)
[0 0 0 0
 1 0 0 0
 0 2 0 0
 0 0 3 0]
diag([1 2 3],2)
[0 0 1 0 0
 0 0 0 2 0
 0 0 0 0 3
 0 0 0 0 0
 0 0 0 0 0]
 获取对角线元素(首参数为方阵):
 A =
[6 0 1 0 9
 3 0 0 2 0
 0 0 8 0 3
 0 0 5 0 0
 0 0 1 9 0]
 diag(A) == [6 0 8 0 0]
 diag(A,-1) == [3 0 5 9]
 diag(A,2) == [1 2 3]
-------------------------------------------------------------------------------------------------------------------
创建分块对角矩阵:
A1 = [1 2 3
      3 4 5]
A2 = [4 5 6 7
      0 1 2 4
      2 3 4 0]
A3 = [0 1
      0 9
      8 1]
blkdiag(A1,A2,A3) ==
[1 2 3 0 0 0 0 0 0
 3 4 5 0 0 0 0 0 0
 0 0 0 4 5 6 7 0 0
 0 0 0 0 1 2 4 0 0
 0 0 0 2 3 4 0 0 0 
 0 0 0 0 0 0 0 0 1
 0 0 0 0 0 0 0 0 9
 0 0 0 0 0 0 0 8 1]

3.文件导入法
MatLab 支持读取本地文件:
.txt 、.dat 、.csv (适用于带分隔符的文本文件)
.xls 、.xlsb 、.xlsm 、.xlsx 、.xltm 、.xltx 、.ods (适用于电子表格文件)

行列索引:

 A =
[6 0 1 0 9
 3 0 0 2 0
 0 0 8 0 3
 0 0 5 0 0
 0 0 1 9 0]
 单元素索引:
 A(row_index,col_index)
 多元素索引:
 A([1 3],[1 2 6])   提取1,3行、1,2,6列元素
 A(1:2:end,1:2:end) 提取奇数行、奇数列元素
 % 简写:起始"1"与终止"end"可以省略
 A(:,n)              提取矩阵中第n列元素
 A(m,:)              提取矩阵中第m行元素
 A([2 3],:)          提取矩阵中第2,3行元素
 A(2:2:end,:)        提取矩阵中偶数行元素
 A(1:2:end,3:3:end)  提取矩阵中奇数行、3的倍数列元素

size(A)   即返回[A_row,A_col]
size(A,1) 即返回A_row
size(A,2) 即返回A_col
返回值可以直接使用向量来接收,也可以使用两个常数接收
vector = size(A) 
[A_r,A_c] = size(A)

length(A) 即返回max(A_row,A_col)
numel(A)  即返回元素总数

线性索引:

image-20240728192538046
MatLab 中数据的存储方式为 "列线性"

 A =
[6 0 1 0 9
 3 0 0 2 0
 0 0 8 0 3
 0 0 5 0 0
 0 0 1 9 0]
A(7) == A(2,2)
A(6:9) == A([1 2 3 4],2)
A(:) 	 表示将A中所有元素按照线性索引顺序重构成列向量
A(1:end) 表示将A中所有元素按照线性索引顺序重构成行向量

% 线性索引与行列索引转换
index = sub2ind([A_row,A_col],row,col)    输入矩阵大小,求解行列、数,返回相应线性索引
[row,col] = ind2sub([A_row,A_col],index)  输入矩阵大小,求解线性索引,返回相应行列、数

修改与删除:

% 行列索引
A(2,3) = 10
A(1,:) = 100
A([2 3],[3 4]) = [8 8;8 8] 2x2矩阵大小需匹配
% 线性索引
A(3) = 5
A(1:end) = 0
A(2:4) = [8 8 8]

% 若修改索引越界矩阵,此时并不会报错, MatLab会将空缺位置以"0"补充
A =
[2 3 1
 1 7 8]
A(3,4) = 7
A ==
[2 3 1 0
 1 7 8 0
 0 0 0 7]

% 利用行列索引进行矩阵删除操作只能整行或整列
A =
[2 3 1 0
 1 7 8 0
 0 0 0 7]
A(:,1) = []
A(:,[2,end]) = []

% 利用线性索引进行矩阵删除操作无需对整行或整列操作,不过其返回结果为剩余元素按照线性索引排列的行向量
A =
[2 3 1 0
 1 7 8 0
 0 0 0 7]
A(1:4) = []
A == [7 0 1 8 0 0 0 7]

拼接与重复:

image-20240728195825540

% 横向拼接
C = [A B]
C = horzcat(A,B)
C = cat(dim,A,B) //dim == 2
% 纵向拼接
C = [A
     B]
C = vertcat(A,B)
C = cat(dim,A,B) //dim == 1

标签:index,end,元素,矩阵,笔记,学习,索引,MatLab,col
From: https://www.cnblogs.com/code-yiyi/p/18329752

相关文章

  • 二手车交易预测模型笔记
    一、梯度下降法梯度下降法就是一种通过求目标函数的导数来寻找目标函数最小化的方法。梯度下降目的是找到目标函数最小化时的取值所对应的自变量的值,目的是为了找自变量X。梯度:是一个矢量,其方向上的方向导数最大(意味着在这个方向上,函数的值增加最快。从图形上看,就是函数图形在某......
  • 二手车交易价格预测笔记
    任务:利用神经网络完成对二手车交易价格的预测代码解析导入库importpandasaspdimportnumpyasnpfromtorchimportnn,optimimporttorchimportmatplotlib.pyplotasplt配置参数config={'epoch':10,'batch_size':512,'learning_rate':8e-......
  • C++自学笔记32(虚析构函数)
    在以往的笔记中我们讲到过析构函数和虚函数。析构函数是释放被初始化的变量,虚函数是告诉编译器有重名的函数被复写去派生类找对应函数。虚析构函数就是在基类析构函数前加入virtual表示派生类引用析构函数需要找派生类。看以下栗子。#include<iostream>classBase{publi......
  • Qt+OpenCascade开发笔记(二):windows开发环境搭建(二):Qt引入occ库,搭建基础工程模板Demo和发
    前言  OpenCASCADE是由OpenCascadeSAS公司开发和支持的开源软件开发平台,旨在为特定领域快速开发程序而设计。它是一个面向对象的C++类库,提供了丰富的几何造型、数据交换和可视化等功能,成为许多CAD软件的核心组件。  本篇描述搭建Qt开发occ环境过程。 Demo  ......
  • 省心的笔记软件Notability for Mac v4.4.4中文激活版
    NotabilityMac版是Macos平台上的一款帮助用户备注文件的得力工具,NotabilityMac版可用于注释文稿、草拟想法、录制演讲、记录备注等。它将键入、手写、录音和照片结合在一起,便于您根据需要创建相应的备注。NotabilityforMac(最省心的笔记软件)v4.4.4中文激活版软件下载地......
  • 华南理工大学线性代数笔记整理3——向量代数与应用几何
    本人华工21级电信本科生,目前大四,前段时间收拾书本时发现了自己保存完整的线代笔记和一些整理,应该会对大一新生的期末考试起作用,故作分享。注:大一时本人都是用手写A4纸的方式做笔记做复习,所以这里上传的都是一些纸质笔记的扫描件,尽量可以保证清晰。以分章节的方式,本章为第3章......
  • 7.29第三周周一学习总结
    洛谷题单https://www.luogu.com.cn/training/9349字符串读入getline(cin,a);//读入一行包括空格for(inti=0;i<a.size();i++){ if(a[i]!=''&&a[i]!='\n') ans++;}打表和ascl运用点击查看代码#include<stdio.h>intmain(void){chara[14],mod[1......
  • 【Python学习手册(第四版)】学习笔记06-Python动态类型-赋值模型详解
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。主要介绍Python的动态类型(也就是Python自动为跟踪对象的类型,不需要在脚本中编写声明语句),Python中变量和对象是如何通过引用关联,垃圾收集的概念,对象共享引用是如何影响多个变量......
  • Python学习手册(第四版)】学习笔记09.3-Python对象类型-分类、引用VS拷贝VS深拷贝、比较
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。这部分稍杂,视需要选择目录读取。主要讲的是对之前的所有对象类型作复习,以通俗易懂、由浅入深的方式进行介绍,所有对象类型共有的特性(例如,共享引用),引用、拷贝、深拷贝,以及比较、......
  • 日常学习--调用第三方接口和提供第三方接口时的注意事项--20240728
    1、调用第三方接口的注意事项   接口测试与验证:对第三方接口进行充分的测试,包括功能测试、性能测试和安全测试,确保接口的稳定性和安全性。 验证接口的可用性,包括接口地址、请求方式、请求参数、响应格式等是否正确。   参数校验与日志记录:在调用接口前,对请求......