通信系统仿真

崔春雷

目录

  • 1 第一单元: MATLAB基础
    • 1.1 课程说明与资料
      • 1.1.1 作业参考答案
      • 1.1.2 移动22级作业答案
    • 1.2 MATLAB安装与运行环境
      • 1.2.1 MATLAB介绍
    • 1.3 基本数据类型:数值类型
    • 1.4 基本数据类型:字符类型
    • 1.5 数据类型转换与输出
    • 1.6 数组与矩阵基础
      • 1.6.1 矩阵运算进阶
    • 1.7 数组与矩阵常用函数
    • 1.8 matlab中的逻辑运算
    • 1.9 实验: MATLAB常用数学函数
      • 1.9.1 实验 作业答案
    • 1.10 元胞数组
    • 1.11 结构体数组
      • 1.11.1 结构体进阶
      • 1.11.2 元胞数组与结构体数组对比
      • 1.11.3 map 容器
    • 1.12 附录:MATLAB常用基础命令
    • 1.13 拓展内容:实时脚本
      • 1.13.1 实时脚本示例
    • 1.14 课程作业与答案
      • 1.14.1 《通信系统仿真》期末考试
  • 2 第二单元:Matlab 程序设计
    • 2.1 顺序结构程序
    • 2.2 分支结构—— if语句
    • 2.3 分支结构—— switch语句
    • 2.4 循环结构—— while语句
    • 2.5 循环结构—— for语句
    • 2.6 图像处理基础
    • 2.7 Matlab的函数
      • 2.7.1 函数内容的课外扩展
    • 2.8 本章实验:for循环的应用
      • 2.8.1 素数问题
        • 2.8.1.1 素数的螺旋线排列
      • 2.8.2 3X+1猜想
      • 2.8.3 7 行代码计算 π
    • 2.9 排序算法
      • 2.9.1 冒泡排序
      • 2.9.2 选择排序
      • 2.9.3 插入排序
      • 2.9.4 快速排序
      • 2.9.5 基数排序
      • 2.9.6 计数排序
      • 2.9.7 堆排序
    • 2.10 动态规划算法
      • 2.10.1 动态规划编程实例
      • 2.10.2 动态规划:01背包问题
      • 2.10.3 动态规划常见题目分析
      • 2.10.4 动态规划题目分析2
    • 2.11 常用算法简介
      • 2.11.1 剪枝算法
      • 2.11.2 二分查找
      • 2.11.3 递归算法
      • 2.11.4 回溯算法
        • 2.11.4.1 Leetcode回溯题目合集
        • 2.11.4.2 回溯算法总结
        • 2.11.4.3 回溯法解数独问题
        • 2.11.4.4 DFS与BFS
          • 2.11.4.4.1 DFS/BFS原理
          • 2.11.4.4.2 BFS的应用:Dijkstra算法
      • 2.11.5 n 皇后问题专题
      • 2.11.6 双指针算法
      • 2.11.7 数组模拟链表(约瑟夫环)
      • 2.11.8 Hash(哈希表)
      • 2.11.9 图论与路径规划
        • 2.11.9.1 迪杰斯特拉算法
        • 2.11.9.2 A*算法
          • 2.11.9.2.1 A*算法的MATLAB实现
        • 2.11.9.3 RRT路径规划算法
          • 2.11.9.3.1 RRT算法 MATLAB代码
          • 2.11.9.3.2 参考资料
      • 2.11.10 数据结构
        • 2.11.10.1 数据结构例题
      • 2.11.11 前缀和 差分 双指针
      • 2.11.12 位运算
      • 2.11.13 常用算法代码模板
    • 2.12 练习题库
    • 2.13 code
      • 2.13.1 简易计算器gui代码
      • 2.13.2 五子棋
      • 2.13.3 连连看小游戏
      • 2.13.4 递归算法与汉诺塔
      • 2.13.5 有理数的小数循环节
    • 2.14 MATLAB编程风格
      • 2.14.1 向量化编程专题
  • 3 第三单元:Matlab 图形图像处理
    • 3.1 二维图形绘图基础
    • 3.2 二维图形绘图进阶
    • 3.3 三维图形绘图
      • 3.3.1 MATLAB绘图小结
        • 3.3.1.1 用matlab绘制好看图像
    • 3.4 MATLAB高级绘图
    • 3.5 文件操作
    • 3.6 Matlab图像处理进阶
      • 3.6.1 补充:Matlab图像处理常用函数
      • 3.6.2 RGB/HSV/HSI颜色模型
      • 3.6.3 图片切换动画效果
      • 3.6.4 图像连通域标记
      • 3.6.5 图像旋转与插值
      • 3.6.6 图像的形态学
      • 3.6.7 空间滤波
        • 3.6.7.1 图像中常见的噪声类型与滤波方法
        • 3.6.7.2 matlab中的滤波函数
        • 3.6.7.3 BM3D 去噪算法
        • 3.6.7.4 双边滤波
      • 3.6.8 图像的频域处理
    • 3.7 本章总结
    • 3.8 实验 : matlab 绘图练习1
    • 3.9 实验: matlab 绘图练习2
    • 3.10 实验 :数学函数图像绘制
    • 3.11 实验:绘图综合练习
    • 3.12 实验:曲线拟合
    • 3.13 实验:牛顿法求解方程的根
    • 3.14 实验:信号的傅里叶变换
      • 3.14.1 傅里叶变换、小波变换、希尔伯特变换
      • 3.14.2 新建目录
    • 3.15 课外补充:图像处理基础1
    • 3.16 课外补充:图像处理基础2
    • 3.17 课外补充:图像处理基础3
    • 3.18 课外补充:PYTHON基础
  • 4 第五单元:MATLAB通信仿真
    • 4.1 现代通信系统的介绍
    • 4.2 模拟通信系统的仿真原理
    • 4.3 HDB3编解码的仿真实现
    • 4.4 SIMULINK和其模块简介
    • 4.5 数字通信系统的仿真原理
    • 4.6 模拟通信系统Simulink仿真
    • 4.7 数字通信系统Simulink仿真
    • 4.8 音频信号测处理与仿真
    • 4.9 图像数字水印技术
      • 4.9.1 三角函数到傅里叶变换再到语音识别与数字水印
    • 4.10 信息系统与算法
      • 4.10.1 递归算法
        • 4.10.1.1 递归与堆栈的关系
      • 4.10.2 哈希表
      • 4.10.3 双指针算法
        • 4.10.3.1 双指针算法实战
        • 4.10.3.2 双指针进阶:滑动窗口算法
      • 4.10.4 字符串匹配 KMP算法
        • 4.10.4.1 字符串匹配B-M算法
      • 4.10.5 快速傅里叶变换
      • 4.10.6 回溯算法
      • 4.10.7 动态规划
      • 4.10.8 分治算法
      • 4.10.9 Dijkstra算法
  • 5 第六单元: systemview通信仿真
    • 5.1 SystemView概述
    • 5.2 模拟通信系统 数字系统的仿真分析
    • 5.3 SystemView通信系统仿真进阶
    • 5.4 新建课程目录
  • 6 第四单元:MATLAB高级应用
    • 6.1 符号运算基础
      • 6.1.1 利用Matlab自动推导公式
    • 6.2 Matlab中的数值计算
      • 6.2.1 积分的计算
      • 6.2.2 龙格库塔:常微分方程的数值解法
      • 6.2.3 fmincon函数与非线性方程最小值
    • 6.3 统计、拟合、插值
      • 6.3.1 协方差与相关系数
    • 6.4 GUI设计初步
    • 6.5 matlab GUI界面编程
      • 6.5.1 gui实例
      • 6.5.2 gui编程中常用函数
      • 6.5.3 App Designer入门
    • 6.6 实验:GUI设计图像空间变换系统
    • 6.7 作业:利用GUI设计 计算器、信号发生器等
    • 6.8 MTALB数据导入方法
    • 6.9 课外补充:MATLAB的App会取代GUI吗?
    • 6.10 模拟退火算法matlab实现
    • 6.11 遗传算法的Matlab实现
      • 6.11.1 进化算法(Evolutionary Algorithm)及相关函数介绍
    • 6.12 粒子群算法 matlab实现
      • 6.12.1 粒子群算法及MATLAB实例仿真
    • 6.13 BP网络的应用
    • 6.14 matlab 结构体
    • 6.15 群智能算法合集
  • 7 拓展知识
    • 7.1 什么是算法的时间复杂度?
    • 7.2 Notepad++使用教程
    • 7.3 MATLAB常用函数总结
    • 7.4 MATLAB常用知识点总结
    • 7.5 MATLAB命令大全
    • 7.6 视频:MATLAB官方基础教程
    • 7.7 经典书籍:Matlab2012经典超强教程
    • 7.8 经典书籍:MATLAB揭秘(自学宝典)
    • 7.9 经典资料:MATLAB N个实用技巧
    • 7.10 Matlab编程小技巧
    • 7.11 寻优算法
      • 7.11.1 Dijkstra算法python实现
    • 7.12 PYTHON基础教程
      • 7.12.1 Python进阶
      • 7.12.2 Python小技巧
      • 7.12.3 Python总结
        • 7.12.3.1 Python循环语句总结
        • 7.12.3.2 24个顶级Python库
        • 7.12.3.3 魔法函数
      • 7.12.4 廖雪峰python
      • 7.12.5 正则表达式基础
      • 7.12.6 numpy
        • 7.12.6.1 101道Numpy习题
        • 7.12.6.2 Numpy简要语法教程
        • 7.12.6.3 Numpy实现全连接神经网络 (手写数字识别)
        • 7.12.6.4 图解NumPy
      • 7.12.7 matplotlib
        • 7.12.7.1 matplotlib练习50题
        • 7.12.7.2 Matplotlib速查表
        • 7.12.7.3 Matplotlib 实操指南
      • 7.12.8 Python3 模块 import
      • 7.12.9 Python 小项目
    • 7.13 参考资源:数据结构与算法
      • 7.13.1 十大经典排序算法总结
    • 7.14 机器学习概述
      • 7.14.1 反向传播算法
        • 7.14.1.1 反向传播的数学原理
      • 7.14.2 极大似然估计
        • 7.14.2.1 极大似然估计与最小二乘法
      • 7.14.3 Batch Normalization
        • 7.14.3.1 Batch Normalization&Dropout浅析
        • 7.14.3.2 ​BN层的梯度反向传播计算
        • 7.14.3.3 Batch Size的大小与神经网络的性能
        • 7.14.3.4 标准化和归一化
      • 7.14.4 主成分分析PCA与SVD奇异值分解
        • 7.14.4.1 岭回归 与 PCA
        • 7.14.4.2 PCA原理推导
        • 7.14.4.3 PCA原理新解
        • 7.14.4.4 svd
        • 7.14.4.5 PCA数学原理
      • 7.14.5 正则化
        • 7.14.5.1 L1、L2正则化和过拟合 总结
        • 7.14.5.2 L1 和 L2 正则化的直观解释
      • 7.14.6 SVM
        • 7.14.6.1 从零推导支持向量机(SVM)
        • 7.14.6.2 支持向量机(SVM)介绍
        • 7.14.6.3 SVM推导与实战
        • 7.14.6.4 支持向量机的直观理解
        • 7.14.6.5 浅显易懂的支持向量机SVM
      • 7.14.7 线性回归
      • 7.14.8 逻辑回归
      • 7.14.9 BP算法
        • 7.14.9.1 万能逼近——神经网络拟合任意函数原理
      • 7.14.10 激活与池化
        • 7.14.10.1 激活函数与损失函数 小结
      • 7.14.11 深度学习简述
        • 7.14.11.1 MATLAB2020深度学习实例
      • 7.14.12 损失函数与误差反向传播
        • 7.14.12.1 梯度下降与损失函数
      • 7.14.13 深度学习优化问题
      • 7.14.14 梯度下降法
        • 7.14.14.1 各类梯度下降算法的Python实现
        • 7.14.14.2 梯度下降的直观理解
        • 7.14.14.3 动量、RMSProp、Adam
      • 7.14.15 卷积的概念
        • 7.14.15.1 卷积的矩阵化算法
      • 7.14.16 局部连接
      • 7.14.17 RNN
      • 7.14.18 LSTM
      • 7.14.19 CNN-四大经典CNN技术浅析
      • 7.14.20 熵(Entropy)与交叉熵
      • 7.14.21 softmax函数详解
      • 7.14.22 自编码算法详细理解与代码实现
      • 7.14.23 pytorch
        • 7.14.23.1 ​PyTorch简介
          • 7.14.23.1.1 Pytorch快速入门资料
        • 7.14.23.2 CNN的PyTorch实现
        • 7.14.23.3 pytorch总结
        • 7.14.23.4 PyTorch trick 集锦
        • 7.14.23.5 在PyTorch上加载自定义数据集
        • 7.14.23.6 实战:Pytorch识别验证码
        • 7.14.23.7 实战:Transformer的最简洁pytorch实现
        • 7.14.23.8 使用PyTorch实现神经网络分类
      • 7.14.24 卷积神经网络CNN概述
        • 7.14.24.1 CNN 简易原理
        • 7.14.24.2 卷积神经网络CNN原理详解
        • 7.14.24.3 自己手写一个卷积神经网络
        • 7.14.24.4 CNN反向传播算法
        • 7.14.24.5 卷积计算、作用与思想
        • 7.14.24.6 用卷积神经网络CNN识别手写数字集
        • 7.14.24.7 卷积 池化 参数的计算
        • 7.14.24.8 im2col方法实现卷积算法
        • 7.14.24.9 卷积核的梯度计算
        • 7.14.24.10 卷积层反向传播推导及实现
        • 7.14.24.11 反向传输算法
          • 7.14.24.11.1 resnet残差网络
        • 7.14.24.12 CNN反向传播的MATLAB实现
      • 7.14.25 神经网络的调参技巧
      • 7.14.26 BP神经网络
        • 7.14.26.1 零开始搭建bp神经网络
        • 7.14.26.2 MATLAB自带的bp工具箱
        • 7.14.26.3 神经网络中偏置(bias)的作用
      • 7.14.27 聚类分析 k-means
        • 7.14.27.1 matlab做聚类分析(k-means)
        • 7.14.27.2 聚类模型探讨综述
        • 7.14.27.3 5种经典聚类算法
      • 7.14.28 深度学习的一些概念
      • 7.14.29 人工智能简述:AI的过去和现在
      • 7.14.30 k-NN(k近邻算法)
      • 7.14.31 神经网络中的优化器:BGD、SGD、MBGD、Momentum
      • 7.14.32 卷积神经网络的经典网络总结
        • 7.14.32.1 卷积神经网络中十大拍案叫绝的操作
      • 7.14.33 GAN 对抗样本攻击
      • 7.14.34 蒙特卡洛模拟
      • 7.14.35 dropout与随机部分连接
      • 7.14.36 Jupyter 等 IDE概览
      • 7.14.37 分类算法常用评价指标
      • 7.14.38 Inception 网络与不变性
      • 7.14.39 卷积神经网络的可视化
      • 7.14.40 隐马尔可夫模型HMM
        • 7.14.40.1 马尔科夫链
    • 7.15 MATLAB音频处理
      • 7.15.1 python处理音频信号
    • 7.16 图像处理
      • 7.16.1 图像处理中的指标
    • 7.17 代码集
    • 7.18 论文写作与阅读方法
      • 7.18.1 期刊投稿攻略
      • 7.18.2 论文排版教程
      • 7.18.3 SCI-HUB论文下载技巧
      • 7.18.4 几种论文写作神器,提高写作效率
      • 7.18.5 latex入门
      • 7.18.6 LaTeX教程
    • 7.19 机器学习常用的网站以及资源
      • 7.19.1 很详细的ML&DL学习博客
    • 7.20 SymPy 符号计算基本教程
  • 8 程序设计数学基础
    • 8.1 编程数学基础
      • 8.1.1 概率的历史
      • 8.1.2 概率
        • 8.1.2.1 常见概率分布
          • 8.1.2.1.1 二维正态分布
        • 8.1.2.2 蒙特卡罗方法
        • 8.1.2.3 置信区间
        • 8.1.2.4 协方差与相关系数
      • 8.1.3 矩阵 向量求导法则
      • 8.1.4 雅可比矩阵 海森矩阵
      • 8.1.5 矩阵的几种分解方式
      • 8.1.6 行列式和代数余子式
      • 8.1.7 向量
      • 8.1.8 矩阵的基本运算
      • 8.1.9 矩阵分析
      • 8.1.10 矩阵的LU分解
      • 8.1.11 矩阵奇异值分解(SVD)
        • 8.1.11.1 SVD分解2
        • 8.1.11.2 SVD分解逐步推导
        • 8.1.11.3 奇异值与特征值的意义
      • 8.1.12 随机向量
        • 8.1.12.1 随机过程简述
      • 8.1.13 投影矩阵和最小二乘
      • 8.1.14 知乎数学精选集
        • 8.1.14.1 高数问题集
      • 8.1.15 小波变换
      • 8.1.16 程序设计数学基础1:高等数学
      • 8.1.17 程序设计数学基础2:线性代数
      • 8.1.18 程序设计数学基础3:概率论和数理统计
      • 8.1.19 向量的距离与相似度计算
      • 8.1.20 复数
      • 8.1.21 高等数学——幂级数
      • 8.1.22 无穷小的本质
      • 8.1.23 数列极限和收敛性
      • 8.1.24 不定积分技巧总结
    • 8.2 有趣的数学题目
    • 8.3 高等数学
      • 8.3.1 泰勒级数
  • 9 路径规划与智能算法
    • 9.1 常见路径规划算法简介
    • 9.2 Dijkstra算法详细
  • 10 教学文档
    • 10.1 授课计划
    • 10.2 课程标准
元胞数组


  

                         Matlab中元胞数组


1、Matlab中的元胞数组(cell)

元胞数组(Cell Array)将类型不同的相关数据集成到一个单一的变量中,使得大量相关数据的引用和处理变得简单方便。元胞数组每个元素为一个元胞,元胞可以是任意类型、任意尺寸的数据。cell元胞数组功能强大,内部可以混搭存储不同类型的数据。

如下图为一个2*2类型的元胞数组

元胞数组

可以把整个元胞数组想象成一栋楼,里面有四个房间(两行两列分布),每个房间内的存储的数据类型可以完全不同(甚至可以嵌套)。

1.1 元胞数组(Cell Array)创建方法:

(1)使用大括号 { }  直接创建元胞数组(的所有单元)

格式:元胞数组名 = {元胞...元胞}

cellname={[cell 1,1] , [cell 1,2],......,[cell 1,n] ; ...... ; [cell m,1],[cell m,2],......,[cell m,n]};  

%此即为创建了一个 m×n 的元胞数组,并将单元进行了初始化。

这是一种快捷的元胞数组创建方法,利用{ }可以直接快速地创建所需元胞数组。在大括号中一次列出所需创建元胞数组的内容,它们之间用逗号()隔开,行与行之间用分号()隔开,这样就可以创建一个已经初始化好的元胞数组。

例1:

1

2

3

%% 使用大括号创建元胞数组

a = {rand(3,4),zeros(3);ones(4),rand(4,3)};

size(a) %  2  2

例2:


(2)单元索引法创建元胞数组使用元胞创建元胞数组

  格式:元胞数组名指定索引= {元胞}

赋值语句的左边用小括号()将标识单元的下标括起来,右边用大括号将存储于单元中的数据括起来。

例1:

1

2

3

4

5

%% 使用元胞创建元胞数组

a(1,1) = {rand(2,3)};

a(1,2) = {ones(4)};

a(2,1) = {zeros(6)};

a(2,2) = {rand(6,4)};

        例2:



把元胞数组想象成大楼,大楼的某个楼层的某个位置有一个房间(1*1的元胞),房间内部又有一个柜子(矩阵),柜子内部有很多小格子,每个小格子里存一个数字。

单元索引法元胞数组名指定索引= {元胞}   %相当于指定了大楼的某个楼层的某个位置,这个位置处必然有一个房间

内容索引法元胞数组名指定索引= 元胞内容 %相当于指定了某个大楼的具体某个房间,这个房间内部存在一个柜子(矩阵)


(3)由元胞内容创建元胞数组

格式:元胞数组名指定索引= 元胞内容 

ps: 利用函数cell() 可以创建一个元胞数组,还可以规定其大小。


  例1:

1

2

3

4

5

a=cell(2,2)  %% 由元胞内容创建元胞数组

a{1,1} = rand(2,3);

a{1,2} = ones(4);

a{2,1} = zeros(6);

a{2,2} = rand(6,4);


  例2:

c1=cell(2,3)


c1{1,1}='dog' ;

c1{1,2}='cat' ;

c1{1,3}='bird' ;

c1{2,1}=800 ;

c1{2,2}=500 ;

c1{2,3}=120 ;


disp(c1)

  

 例3:



例4:分别使用三种方法创建一个2*3类型的元胞数组

方法1:大括号{ }法,直接创建元胞数组
c11=[0:2:10]
c12=[3,-15,0;12,-9,11]
c13='matlab'
c21=['abcd';'efgh']
c22=randn(3,4,2)
c23={'gdcp',2019 ;'room',[16,512]}
%c23本身也是一个元胞数组

A={c11,c12,c13;c21,c22,c23}   %元胞数组的嵌套:A内部的c23也是元胞数组



方法2:单元索引法创建元胞数组;
%右边为一个个小元胞,左边指定其在大的元胞的单元格位置
A(1,1)={[0:2:10]};  
A(1,2)={[3,-15,0;12,-9,11]};
A(1,3)={'matlab'};
A(2,1)={['abcd';'efgh']};
A(2,2)={randn(3,4,2)};
A(2,3)={ {'gdcp',2019 ;'room',[16,512]} };
%元胞数组的嵌套...
A



方法3:内容索引法创建元胞数组
%左边表示元胞的某个单元格的内容,右边为内容的具体数据

A{1,1}=[0:2:10];
A{1,2}=[3,-15,0;12,-9,11];
A{1,3}='matlab';
A{2,1}=['abcd';'efgh'];
A{2,2}=randn(3,4,2);
A{2,3}={'gdcp',2019 ;'room',[16,512]} ;  
%元胞数组的嵌套...
A


上面三种方式是等价的,其中第二种方式使用单元索引赋值,而第三种方式使用内容索引赋值.


1.2元胞数组(Cell Array)显示:

(1)使用celldisp显示元胞数组

1

2

3

4

5

6

%% 使用celldisp显示元胞数组

a{1,1} = rand(2,3);

a{1,2} = ones(4);

a{2,1} = zeros(6);

a{2,2} = rand(6,4);celldisp(a) 

% 每一个元胞都会具体显示出来

(2)使用cellplot显示元胞数组

1

2

3

4

5

6

%% 使用cellplot显示元胞数组

a(1,1) = {rand(2,3)};

a(1,2) = {ones(4)};

a(2,1) = {zeros(6)};

a(2,2) = {rand(6,4)};

cellplot(a)





1.3元胞数组(Cell Array)访问

在编程时,一个元胞数组的每一个单元都是一个指针,指向其他的数据结构,而这些数据结构可以是不同的数据类型。在MATLAB中,元胞数组创建时,没有显示内容单元的内容,显示的只是它相应的数据类型。而MATLAB可以通过单元的名称来寻访其单元包含的内容。

通过()访问cell数组时访问到的是cell单元,通过{ }访问cell数组时访问到的是cell单元储存的内容

(1)使用大括号{ } 访问元胞数组的内容

  元胞数组{下标}

  元胞数组{下标}(下标)

1

2

3

4

5


6

7

8

%% 使用大括号访问元胞数组

a(1,1) = {rand(2,3)};

a(1,2) = {ones(4)};

a(2,1) = {zeros(6)};

a(2,2) = {rand(6,4)};


a{1,1} % 访问第一个元胞

a{1,1}(1,2) % 访问第一个元胞中的第1行第2列那个元素

a{1,1}(1,3) = 10 % 修改第一个元胞中第1行第3列的元素为10


(2)使用小括号( ) 访问元胞数组的单元

  元胞数组(下标)

1

2

3

4

5


6

7

%% 使用小括号访问元胞数组

a(1,1) = {rand(2,3)};

a(1,2) = {ones(4)};

a(2,1) = {zeros(6)};

a(2,2) = {rand(6,4)};


a(1,1) % 访问元胞数组的元素,不是元胞的元素

a(1,:) % 访问元胞数组的一行



例1:元胞数组内容的索引

A{1,1}=[0:2:10];

A{1,2}=[3,-15,0;12,-9,11];

A{1,3}='matlab';

A{2,1}=['abcd';'efgh'];

A{2,2}=randn(3,4,2);

A{2,3}={'gdcp',2019 ;'room',[16,512]} ;

A


A{1,2}           %找到元胞数组A中第1行第2列的内容

A{1,2}(2,1)    %找到元胞数组A中第1行第2列的内容,然后再在内容里面找第2行第1列的元素

A{1,3}

A{1,3}(3)

A{2,1}(2,2)

A{2,2}(2,3,1)

A{2,3}

A{2,3}{2,1}

A{2,3}{2,1}(4)







1.4元胞数组(Cell Array)删除

元胞数组普通数组的删除都可以通过空矩阵[ ] 来实现,

实现元胞数组删除操作区别就在于{ } 和 ( )



1.5元胞数组(Cell Array)的相关函数

元胞数组的常用函数                                          

函数作用
cell创建一个元胞数组
iscell判断某变量是否为元胞数组
reshape改变cell的形状
cell2mat将元胞数组转为矩阵
cell2struct将元胞数组转为结构体
mat2cell将数组转换为指定大小元胞数组
num2cell将数组转换为相同大小的元胞数组
struct2cell将结构体转换为元胞数组
celldisp递归显示元胞数组中的内容
cellplot以图像形式绘制元胞数组的结构
cellfun对元胞数组的每个元胞应用某函数


(1)· cellplot:利用图形方式显示内容


  

(2)reshape函数改变元胞数组的形状



1.6 高维元胞数组

一个三维的元胞数组可以有(row),(column),(layer)三个维度.在对元胞数组进行索引时,优先级从高到低的顺序分别是: 行→列→层.

高维元胞数组


使用cat函数可以在指定维度上对元胞数组进行拼接.

元胞数组的拼接


=================================



作业1:

(1)创建一个5行4列的元胞数组,要求:第一行是4个字符串,依次为:'姓名','籍贯','学号','电话';第2-5行分别是4个具体同学的实例。

(2)创建好之后,显示输出(celldisp)该元胞数组内容,并画出(cellplot)其结构。

(3)分别对具体某个学生的姓名或者学号、电话等,进行索引。


作业2:

创建一个4行5列的元胞数组,此元胞数组中的每一个单元都是一个字符串(假设为网站中用户注册时分配的初始用户名),此字符串长度为6,这6个字母是从62个字符(26个字母的大小写,加上10个数字字符)中随机选择的。

提示:

>> x='a':1:'z'

x =

    'abcdefghijklmnopqrstuvwxyz'

>> x( [randi(26,1,3)] )

ans =

    'vxd'


或:

x='a':1:'z'

y=x( [randperm(26)] )

y(1:3)

x =

    'abcdefghijklmnopqrstuvwxyz'

y =

    'mnideoywjbukzacsthrpxqvlfg'

ans =

    'mni'












==================================

===================================                      =======================================



补充:

(1)num2cell函数

将数组转换为相同大小的元胞数组

C = num2cell(A)

C = num2cell(A,dim)

C = num2cell(A) 通过将 A 的每个元素放置于 C 的一个单独元胞中,来将数组 A 转换为元胞数组 C。

num2cell 函数转换具有任意数据类型(甚至是非数值类型)的数组。


C = num2cell(A,dim) 将 A 的内容划分成 C 中单独的元胞,其中 dim 指定每个元胞包含 A 的哪个维度。dim 可以是维度的标量或向量。例如,如果 A 有 2 行 3 列,那么:

num2cell(A,1) 创建一个 1×3 元胞数组 C,其中每个元胞包含 A 的 2×1 列。

num2cell(A,2) 创建一个 2×1 元胞数组 C,其中每个元胞包含 A 的 1×3 行。

num2cell(A,[1 2]) 创建一个 1×1 元胞数组 C,其中每个元胞包含 A 整个数组。


示例:将一个数值数组的所有元素放入单独的元胞。

a = magic(3)

a = 3×3


     8     1     6

     3     5     7

     4     9     2


c = num2cell(a)

c=3×3 cell array

    {[8]}    {[1]}    {[6]}

    {[3]}    {[5]}    {[7]}

    {[4]}    {[9]}    {[2]}


将一个单词的各个字母放入数组的各个元胞中。

a = ['four';'five';'nine']

a = 3x4 char array

    'four'

    'five'

    'nine'

c = num2cell(a)

c = 3x4 cell

    {'f'}    {'o'}    {'u'}     {'r'}

    {'f'}    {'i' }    {'v'}     {'e'}

    {'n'}    {'i'}    {'n'}     {'e'}



(2)矩阵分块函数 mat2cell

  mat2cell 函数就是将矩阵转化成胞元数组(cell array),用数学的语言讲就是矩阵分块。x是60*50的大矩阵。

例:Divide Array and Return Subarrays in Cell Array

A = reshape(1:20,5,4)'

A = 4×5

     1     2      3      4      5

     6     7      8      9     10

    11    12    13    14    15

    16    17    18    19    20


%Divide A into two 2-by-3 and two 2-by-2 subarrays. Return the subarrays in a cell array.

C = mat2cell(A,[2 2],[3 2])

C=2×2 cell array

    {2x3 double}    {2x2 double}

    {2x3 double}    {2x2 double}


%Display the subarrays in C using the celldisp function.


celldisp(C)

 

C{1,1} =

 

     1     2     3

     6     7     8

 

C{2,1} =

 

    11    12    13

    16    17    18

 

C{1,2} =

 

     4     5

     9    10

 

C{2,2} =

 

    14    15

    19    20




mat2cell和num2cell综合演示: