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

MIT线性代数笔记-第27讲-复数矩阵,快速傅里叶变换

目录

  • 27.复数矩阵,快速傅里叶变换
    • 打赏

27.复数矩阵,快速傅里叶变换

对于实矩阵而言,特征值为复数时,特征向量一定为复向量,由此引入对复向量的学习

  1. 求模长及内积

    假定一个复向量 z ⃗ = [ z 1 z 2 ⋮ z n ] \vec{z} = \begin{bmatrix} z_1 \\ z_2 \\ \vdots\\ z_n \end{bmatrix} z = z1z2zn ,其中 z 1 , z 2 , ⋯ , z n z_1 , z_2 , \cdots , z_n z1,z2,,zn为复数,所以该向量不再属于 R n R^n Rn,而是属于 n n n维复空间 C n C^n Cn

    显然再使用 z ⃗ T z ⃗ \sqrt{\vec{z}^T \vec{z}} z Tz 无法求出模长,比如对于 z ⃗ = [ 1 i ] \vec{z} = \begin{bmatrix} 1 \\ i \end{bmatrix} z =[1i] z ⃗ T z ⃗ = [ 1 i ] [ 1 i ] = 0 ≠ 2 \sqrt{\vec{z}^T \vec{z}} = \begin{bmatrix} 1 & i \end{bmatrix} \begin{bmatrix} 1 \\ i \end{bmatrix} = 0 \ne \sqrt{2} z Tz =[1i][1i]=0=2

    由上一讲的内容可以得到 ∣ z ⃗ ∣ = z ⃗ ‾ T z ⃗ |\vec{z}| = \sqrt{\overline{\vec{z}}^T \vec{z}} z =z Tz ,我们把求共轭和转置两步操作一起记作 H H H(来自 H e r m i t e Hermite Hermite),即 z ⃗ H = z ⃗ ‾ T \vec{z}^H = \overline{\vec{z}}^T z H=z T

    同理,求内积时也使用 H H H,即对于两个复向量 x ⃗ , y ⃗ \vec{x} , \vec{y} x ,y ,有 x ⃗ ⋅ y ⃗ = x ⃗ H y ⃗ \vec{x} \cdot \vec{y} = \vec{x}^H \vec{y} x y =x Hy ,此时内积为 0 0 0仍然可以说明向量正交,对于矩阵也类似

  2. 对称矩阵的推广

    对于实矩阵,对称矩阵即满足 A T = A A^T = A AT=A的矩阵,推广到复矩阵,我们把满足 A H = A A^H = A AH=A的矩阵称作厄米特矩阵

    可以发现厄米特矩阵的对角线元素均为实数,因为它们在转置时不变,所以在求共轭时也不变,其它元素与转置后的对应元素互为共轭

    由上一讲可知厄米特矩阵的特征值一定为实数

  3. 正交矩阵的推广

    对于实矩阵,正交矩阵即满足 Q T Q = I Q^T Q = I QTQ=I的方阵,推广到复矩阵,我们把满足 Q H Q = I Q^H Q= I QHQ=I的方阵称作酉矩阵

    可以发现酉矩阵的列向量组成复空间下的一组标准正交基,其转置与正交一致且均为酉矩阵

  4. 傅里叶矩阵

    傅里叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅里叶变换用正弦波作为信号的成分。由于傅里叶变换经常用在计算机上,而在电子工程或计算机中,方阵的行和列都是从 0 0 0开始到 n − 1 n - 1 n1结束的,所以在讨论傅里叶矩阵时遵从这种下标规则。

    傅里叶矩阵是一种酉矩阵,它满足 ( F n ) i , j = 1 n w i ∗ j , i , j = 0 , ⋯ , n − 1 (F_n)_{i , j} = \dfrac{1}{n} w^{i * j} , i , j = 0 , \cdots , n - 1 (Fn)i,j=n1wij,i,j=0,,n1 w = e 2 π i / n w = e^{2 \pi i / n} w=e2πi/n),即:

    F n = 1 n [ 1 1 1 ⋯ 1 1 w w 2 ⋯ w n − 1 1 w 2 w 4 ⋯ w 2 ( n − 1 ) ⋮ ⋮ ⋮ ⋱ ⋮ 1 w n − 1 w 2 ( n − 1 ) ⋯ w ( n − 1 ) 2 ] F_n = \dfrac{1}{n} \begin{bmatrix} 1 & 1 & 1 & \cdots & 1 \\ 1 & w & w^2 & \cdots & w^{n - 1} \\ 1 & w^2 & w^4 & \cdots & w^{2(n - 1)} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & w^{n - 1} & w^{2(n - 1)} & \cdots & w^{(n - 1)^2} \end{bmatrix} Fn=n1 11111ww2wn11w2w4w2(n1)1wn1w2(n1)w(n1)2

    可以发现 w = e 2 π i / n = c o s 2 π n + i s i n 2 π n w = e^{2 \pi i / n} = cos\ \dfrac{2 \pi}{n} + i sin\ \dfrac{2 \pi}{n} w=e2πi/n=cos n2π+isin n2π,落在复平面原点为圆心的单位圆上,且对应的角度为一圈的 1 n \dfrac{1}{n} n1,所以 w w w乘上自己相当于增加角度 2 π n \dfrac{2 \pi}{n} n2π,因此 w k n = ( w n ) k = 1 , k ∈ Z w^{kn} = (w^n)^k = 1 , k \in Z wkn=(wn)k=1,kZ

    证明傅里叶矩阵是酉矩阵:

    ​    设 F n F_n Fn的列向量分别为 f ⃗ 0 , f ⃗ 2 , ⋯ , f ⃗ n − 1 \vec{f}_0 , \vec{f}_2 , \cdots , \vec{f}_{n - 1} f 0,f 2,,f n1,即证 f ⃗ a H f ⃗ b = { 0 , a ≠ b 1 , a = b \vec{f}_a^H \vec{f}_b = \left\{\begin{matrix} 0 , a \ne b \\ 1,a = b \end{matrix}\right. f aHf b={0,a=b1,a=b

    ​     f ⃗ a H f ⃗ b = ( F n ) 0 , a ‾ ∗ ( F n ) 0 , b + ( F n ) 1 , a ‾ ∗ ( F n ) 1 , b + ⋯ + ( F n ) n − 1 , a ‾ ∗ ( F n ) n − 1 , b = w 0 ( a + b ) + w a + b + ⋯ + w ( n − 1 ) ( a + b ) \begin{aligned} \vec{f}_a^H \vec{f}_b & = \overline{(F_n)_{0 , a}} * (F_n)_{0 , b} + \overline{(F_n)_{1 , a}} * (F_n)_{1 , b} + \cdots + \overline{(F_n)_{n - 1 , a}} * (F_n)_{n - 1 , b} \\ & = w^{0(a + b)} + w^{a + b} + \cdots + w^{(n - 1)(a + b)} \end{aligned} f aHf b=(Fn)0,a(Fn)0,b+(Fn)1,a(Fn)1,b++(Fn)n1,a(Fn)n1,b=w0(a+b)+wa+b++w(n1)(a+b)

    暂时不会证明 \color{OrangeRed}暂时不会证明 暂时不会证明

  5. 傅里叶变换

    n = 4 n = 4 n=4时, 2 π n = π 2 \dfrac{2 \pi}{n} = \dfrac{\pi}{2} n2π=2π,所以 w w w的乘方落在实轴和虚轴上2,由此得到四阶傅里叶矩阵 F 4 = 1 4 [ 1 1 1 1 1 i − 1 − i 1 − 1 1 − 1 1 − i − 1 i ] F_4 = \dfrac{1}{4} \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \end{bmatrix} F4=41 11111i1i11111i1i

    F 4 F_4 F4左乘四维向量即为四点离散傅里叶变换( D F T DFT DFT),用 F 4 − 1 F_4^{-1} F41左乘四维向量即为傅里叶逆变换

  6. 快速傅里叶变换

    实际上可以将傅里叶矩阵分解为一系列“稀疏矩阵”,这些矩阵具有大量零元素,可以很方便地求逆及用于相乘

    现在考虑 F 64 F_{64} F64 F 32 F_{32} F32之间的联系,假设 F 32 , F 64 F_{32} , F_{64} F32,F64中的 w w w分别为 w 32 , w 64 w_{32} , w_{64} w32,w64,则 w 64 2 = w 32 w_{64}^2 = w_{32} w642=w32

    先说结论: F 64 = 1 2 [ I D I − D ] [ F 32 O O F 32 ] [ 1 0 0 0 ⋯ 0 0 1 0 ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ 0 1 0 0 ⋯ 0 0 0 1 ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ ] F_{64} = \dfrac{1}{2} \begin{bmatrix} I & D \\ I & -D\end{bmatrix} \begin{bmatrix} F_{32} & O \\ O & F_{32}\end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 & \cdots \\ 0 & 0 & 1 & 0 & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 1 & 0 & 0 & \cdots \\ 0 & 0 & 0 & 1 & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \end{bmatrix} F64=21[IIDD][F32OOF32] 1000001001000001 ,其中 D = [ 1 0 0 ⋯ 0 0 w 0 ⋯ 0 0 0 w 64 2 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ w 64 31 ] D = \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ 0 & w_{} & 0 & \cdots & 0 \\ 0 & 0 & w_{64}^2 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & w_{64}^{31} \end{bmatrix} D= 10000w0000w6420000w6431

    证明: 可以发现 F 64 F_{64} F64拆分出的第三个矩阵将用于进行傅里叶变换的向量的偶数位元素提到了前面而将奇数位元素放到了后面,然后拆分出的第二个矩阵对刚才得到的新向量中的前后两部分分别做一次 32 32 32阶傅里叶变换

    ​    对于新向量前半部分,第 i i i个元素在求 32 32 32阶傅里叶变换后的第 j j j行时乘上了 w 32 j i w_{32}^{ji} w32ji,而新向量前半部分的第 i i i个元素是原向量的第 2 ∗ i 2*i 2i个元素,这说明它在求 64 64 64阶傅里叶变换后的第 j j j行时应该乘上 w 64 2 j i w_{64}^{2ji} w642ji,刚好 w 32 j i = w 64 2 j i w_{32}^{ji} = w_{64}^{2ji} w32ji=w642ji,所以 F 64 F_{64} F64拆分出的第一个矩阵左半部分上方是单位向量,对于下方,新向量前半部分的第 i i i个元素在求 64 64 64阶傅里叶变换后的第 32 + j 32 + j 32+j行时应乘上 w 64 2 ( 32 + j ) i = w 32 ( 32 + j ) i = w 32 j i w 32 32 i = w 32 j i ( − 1 ) i = w 32 j i w_{64}^{2(32 + j)i} = w_{32}^{(32 + j)i} = w_{32}^{ji} w_{32}^{32i} = w_{32}^{ji} (-1)^i = w_{32}^{ji} w642(32+j)i=w32(32+j)i=w32jiw3232i=w32ji(1)i=w32ji,所以左半部分下方也是单位矩阵

    ​    对于新向量后半部分,第 i i i个元素在求 32 32 32阶傅里叶变换后的第 j j j行时乘上了 w 32 j i w_{32}^{ji} w32ji,而在求 64 64 64阶傅里叶变换后的第 j j j行时应该乘上 w 64 j ( 2 i + 1 ) w_{64}^{j(2i + 1)} w64j(2i+1),即 w 32 j i ∗ w 64 j w_{32}^{ji} * w_{64}^j w32jiw64j,由此得到 D D D,对于拆分出的第一个矩阵右半部分下方,新向量后半部分的第 i i i个元素在求 64 64 64阶傅里叶变换后的第 32 + j 32 + j 32+j行时应乘上 w 64 2 ( 32 + j ) i = w 32 j i ( − 1 ) i = − w 32 j i w_{64}^{2(32 + j)i} = w_{32}^{ji} (-1)^i = -w_{32}^{ji} w642(32+j)i=w32ji(1)i=w32ji,所以右半部分下方是 − D -D D

    ​    最后说明 1 2 \dfrac{1}{2} 21,因为前面进行 32 32 32阶傅里叶变换时只除以了 32 32 32,所以最后还要再除以 2 2 2才能达到除以 64 64 64

    ​    为了直观地说明,此处只证明了 F 64 F_{64} F64 F 32 F_{32} F32的拆分,对于 F 2 n F_{2n} F2n F n F_n Fn的拆分,将具体的数字换为字母后也可得证

    直接进行 64 64 64阶傅里叶变换的时间复杂度是 O ( n 2 ) O(n^2) O(n2),而拆分为三个矩阵后,第三个矩阵和原向量相乘时间复杂度为 O ( n ) O(n) O(n),第二个矩阵和新向量相乘时间复杂度为 O ( n 2 2 ) O(\dfrac{n^2}{2}) O(2n2),此时得到的向量和第一个矩阵相乘时间复杂度为 O ( n ) O(n) O(n),总时间复杂度为 O ( 2 ( n 2 ) 2 + n ) O(2 (\dfrac{n}{2})^2 + n) O(2(2n)2+n),当然这还没有结束,因为第二个矩阵的 F 32 F_{32} F32可以进行类似的拆分得到含有 F 16 F_{16} F16的三个矩阵,这样刚才求得的总时间复杂度进一步简化得到 O ( 2 ( 2 ( n 4 ) 2 + n 2 ) + n ) = O ( 2 2 ( n 4 ) 2 + 2 n ) O(2(2 (\dfrac{n}{4})^2 + \dfrac{n}{2}) + n) = O(2^2 (\dfrac{n}{4})^2 + 2n) O(2(2(4n)2+2n)+n)=O(22(4n)2+2n),以此类推,一层层拆分下去,时间复杂度就会降为 O ( n + n l o g n ) O(n + n\ log\ n) O(n+n log n),即 O ( n l o g n ) O(n\ log\ n) O(n log n)


打赏

制作不易,若有帮助,欢迎打赏!
赞赏码

支付宝付款码

相关文章:

MIT线性代数笔记-第27讲-复数矩阵,快速傅里叶变换

目录 27.复数矩阵,快速傅里叶变换打赏 27.复数矩阵,快速傅里叶变换 对于实矩阵而言,特征值为复数时,特征向量一定为复向量,由此引入对复向量的学习 求模长及内积 假定一个复向量 z ⃗ [ z 1 z 2 ⋮ z n ] \vec{z} \…...

三维点通用排序

前言 NWAFU 2021阶段二 C 一、题目描述 题目描述 在三维笛卡尔坐标系中,可以用X,Y,Z三个坐标分量表示三维空间中的一个点。现有一系列用X,Y,Z表示的三维点,需要对其按指定的X、Y或Z分量进行升序或降序排序。请用C语言实现这一排序过程,程序…...

[架构之路-265]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 如何做好详细设计

目录 一、详细设计概述 1.1 什么是详细设计 1.2 软件概要设计、软件架构、软件详细设计比较 二、软件详细设计说明书 2.1 概述 2.2 撰写步骤 2.3 主要内容 三、详细设计详解 3.1 引言 3.2 系统架构设计 3.3 模块设计 3.3.1 模块描述 3.3.2 模块间接口设计与UML图 …...

java设计模式学习之【模板方法模式】

文章目录 引言模板方法模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用游戏设计示例代码地址 引言 设想你正在准备一顿晚餐,无论你想做意大利面、披萨还是沙拉,制作过程中都有一些共同的步骤:准备原料、加工食物、摆盘。…...

篇章二 | Python 入门指南:深入理解基础数据类型

Python 是一门强大而易学的编程语言,而深刻理解其基础数据类型是掌握 Python 编程的重要一步。本入门指南将详细介绍 Python 中的基础数据类型,包括整数、浮点数、字符串、布尔值、列表、元组、字典和集合等,同时提供注意事项和与 C 语言的区…...

循环冗余效验码的计算方法

循环冗余效验码的计算方法 G(x): 在了解计算方法之前我们首先要明白G(x)表明的意思,这一步非常重要! 例如,G(x) x^3 x^2 1 ,该式子表明的编…...

第P8周:YOLOv5-C3模块实现

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客** >- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** 一、 前期准备 1. 设…...

Java中常见的日志包分析(Log4j、Logback、SLF4J等)

Java中常见的日志jar包包括Log4j、Logback、SLF4J、java.util.logging等。它们各自的作用和应用场景如下: 1. Log4j 作用:Log4j是Apache的一个开源项目,提供日志记录的功能,支持多种输出目的地,如控制台、文件、GUI组…...

C++系列-第1章顺序结构-3-输出类cout

C系列-第1章顺序结构-3-输出类cout 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客,主要讲述输出类cout的用法 cout介绍与基本用法 在C中,cout 是用于输出(打印)数据的工具&…...

对于智能设备的一些设想1

最近发现脑子里经常会出现一些能够偷懒的想法,希望这些点子能一点点保存下来,希望有需要的人拿走点子,不用谢 1.泡脚桶 2023年12月28日 近两年泡脚桶的风着实很大,我差点也就入坑了,于是有了一种设想,为什么…...

Large-Precision Sign using PBS

参考文献: [CLOT21] Chillotti I, Ligier D, Orfila J B, et al. Improved programmable bootstrapping with larger precision and efficient arithmetic circuits for TFHE[C]//Advances in Cryptology–ASIACRYPT 2021: 27th International Conference on the T…...

【电商项目实战】MD5登录加密及JSR303自定义注解

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…...

2014,TEVC,A competitive swarm optimizer for large scale optimization(CSO)

PSO 分析(从而引入 CSO) CSO (competitive swarm optimizer) 算法是在PSO (particle swarm optimization) 算法的基础上改进而来的。PSO算法是一种功能强大、应用广泛的群体智能算法,主要用来解决优化问题。PSO算法包含一个粒子群&#xff0…...

【机器学习】【线性回归】梯度下降

文章目录 [toc]数据集实际值估计值估计误差代价函数学习率参数更新Python实现导包数据预处理迭代过程数据可视化完整代码 线性拟合结果代价结果 个人主页:丷从心 系列专栏:机器学习 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , …...

JMeter逻辑控制器之While控制器

JMeter逻辑控制器之While控制器 1. 背景2.目的3. 介绍4.While示例4.1 添加While控制器4.2 While控制器面板4.3 While控制器添加请求4.3 While控制器应用场景 1. 背景 存在一些使用场景,比如:某个请求必须等待上一个请求正确响应后才能开始执行。或者&…...

记录 Docker 外部访问的基本操作

目录 1. 启动 docker 时挂载本地目录2. 外部访问 docker 容器 (-p/-P)3. 无法连接 docker 内 SSH 解决方案 1. 启动 docker 时挂载本地目录 # 将本地 D:/SDK 目录 挂载到 容器里的 /mnt/host 目录中 # 注意:-v /d/SDK:/mnt/host/ 必须放到 IMAGE_ID 前面才行 # …...

【Android 13】使用Android Studio调试系统应用之Settings移植(六):BannerMessagePreference

文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、BannerMessagePreference的移植3.1 新的问题:找不到 R.dimen.settingslib_preferred_minimum_touch_target3.2 问题分析(一)3.2.1 资源定义的位置3.2.2 检查依赖3.2…...

Python 变量

打印输出内容 print(‘rumenle’) print(‘haode’) 缩进需要tab 注释将需要注释的部分开头用# 多行注释 1、用你也可以左键选中我们需要注释的代码,松开,按:Ctrl/,就完成相同效果注释 2、把要注释的内容放到三个引号对里面 …...

ComfyUI如何中文汉化

comfyui中文地址如下: https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translationhttps://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation如何安装? 1. git安装 进入项目目录下的custom_nodes目录下,然后进入控制台,运…...

Glary Utilities Pro - 电脑系统优化全面指南:详尽使用教程

软件简介: Glary Utilities Pro 是一款全面的电脑优化工具,它旨在帮助用户提升计算机的性能和稳定性。这款软件提供了多种功能,包括系统清理、优化、修复以及保护。通过一键扫描,它可以识别并清除无用文件、临时数据、注册表错误等…...

1.4分页和排序

排序: -- 分页(limit)和排序(order by) -- 排序:升序ASC,降序DESC -- ORDER BY 通过字段排序,怎么排 -- 查询的结果根据成绩降序,升序 SELECT s.studentno,studentname,sub.subjectname,studentresult FROM student s RIGHT JO…...

Modbus转Profinet,不会编程也能用!轻松快上手!

Modbus转Profinet是一种用于工业自动化领域的通信协议转换器,可以将Modbus协议转换为Profinet协议,实现设备之间的数据交换与通信。这个工具的使用非常简单,即使没有编程经验的人也可以轻松上手。即使不会编程的人也可以轻松快速上手使用Modb…...

鸿蒙原生应用/元服务开发-Stage模型能力接口(十)下

ohos.app.form.FormExtensionAbility (FormExtensionAbility) 系统能力:SystemCapability.Ability.Form 示例 import FormExtensionAbility from ohos.app.form.FormExtensionAbility; import formBindingData from ohos.app.form.formBindingData; import formP…...

QT QPluginloader 加载失败,出现Unknown error 0x000000c1的问题

最近在学习Qt的插件开发&#xff0c;在加载插件时&#xff0c;一直失败&#xff0c;用如下代码加载并打印错误信息。 QDir dir("./testplugin.dll"); QPluginLoader pluginLoader(dir.absolutePath());//需要绝对路径 pluginLoader.load(); qDebug()<< "…...

众和策略:今年首次!A股罕见一幕

岁末&#xff0c;A股走出了不常见的行情。 这儿指的不单单是指数上涨。今天上午&#xff0c;A股逾3900只个股上涨&#xff0c;昨日逾4400只个股上涨&#xff0c;前天逾3700只个股上涨。据通达信数据显现&#xff0c;这种连续的普涨行情在本年还是头一次。 本年10月底&#xf…...

EasyExcel实现动态表头(注解实现)

要实现上述动态头&#xff0c;按每日统计&#xff0c;每月统计&#xff0c;每年统计。而时间是一直变化&#xff0c;所以我们需要表头也一直动态生成。 首先&#xff0c;我们需要定义所需要实体类 public class CountDayData {ExcelProperty(value "业务员姓名")p…...

什么是工厂方法模式,工厂方法模式解决了什么问题?

工厂方法模式是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但将实际的实例化过程延迟到子类中。这样&#xff0c;客户端代码在不同的子类中实例化具体对象&#xff0c;而不是直接实例化具体类。工厂方法模式允许一个类的实例化延迟到其子类&…...

Flink 输出至 Elasticsearch

【1】引入pom.xml依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-elasticsearch6_2.12</artifactId><version>1.10.0</version> </dependency>【2】ES6 Scala代码&#xff0c;自动导入的…...

web三层架构

目录 1.什么是三层架构 2.运用三层架构的目的 2.1规范代码 2.2解耦 2.3代码的复用和劳动成本的减少 3.各个层次的任务 3.1web层&#xff08;表现层) 3.2service 层(业务逻辑层) 3.3dao 持久层(数据访问层) 4.结合mybatis简单实例演示 1.什么是三层架构 三层架构就是把…...

智能优化算法应用:基于厨师算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于厨师算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于厨师算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.厨师算法4.实验参数设定5.算法结果6.参考文献7.MA…...

固原网站建设/域名查询系统

一、SDK的安装 安装过程中不要插相机&#xff0c;且一定注意SDK和realsense_ros之间的版本对应关系 我这里使用的版本是2.42.0&#xff0c;对应成功的包&#xff0c;可以到该链接下直接下载&#xff0c;https://download.csdn.net/download/YOULANSHENGMENG/87672407 然后再N…...

做算命网站挣钱吗/百度云

1、%取余运算符只能用于整型 2、 1) malloc 函数&#xff1a; void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间&#xff0c;如果分配成功&#xff0c;则返回所分配内存空间的首地址&#xff0c;否则返回NULL&#xff0c;申请的内存不会…...

网站用什么布局/洛阳网站seo

前言&#xff1a;似乎直接使用 anaconda Navigator 或者使用 conda 安装 libsvm无效&#xff0c;故而转而手动安装&#xff0c;安装步骤非常简洁。安装 libsvm 和安装 liblinear 方法完全相同&#xff0c;下面只以为anaconda手动安装 liblinear 为例进行描述。 下载 libsvm 和…...

网站建设柒首先金手指8/电商培训班一般多少钱一个月

11.3 继承中的多态 在子类中定义了和父类中同名的成员变量和方法&#xff0c;这就涉及成员的隐藏与重载。 成员的隐藏与重载属于多态特性的一种。 通过继承&#xff0c;子类拥有除构造方法以外的所有成员&#xff08;变量及方法&#xff09;&#xff0c;这类成员统称为子类的继…...

什么网站可以做微官网/谷歌搜索引擎官网

一、为什么需要GC 应用程序对资源操作&#xff0c;通常简单分为以下几个步骤&#xff1a; 1、为对应的资源分配内存 2、初始化内存 3、使用资源 4、清理资源 5、释放内存 应用程序对资源&#xff08;内存使用&#xff09;管理的方式&#xff0c;常见的一般有如下几种&#xff1…...

甘肃兰州流感最新消息/南京百度seo代理

我们在内存里可以串起一棵树&#xff0c; 但是我们总得想办法保存下来。 比如机器要关了&#xff0c;内存里的东西都要销毁了&#xff0c; 我们需要怎么样才能将指针那些东西保存成文件的格式&#xff01;以便于我们下回重建出这棵树。 这就是本节要讲的 序列化和反序列化的问题…...