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

【矩阵微分】在不涉及张量的前提下计算矩阵对向量的导数并写出二阶泰勒展开

本篇内容摘自CMU 16-745最优控制的第10讲 “Nonlinear Trajectory Optimization”。

如何在不涉及张量运算的前提下,计算矩阵对向量的导数并写出二阶泰勒展开

在多维微积分中,计算矩阵对向量的导数和二阶泰勒展开是一项重要的任务。本文将介绍如何在不涉及张量运算的前提下,完成该导数计算。

1. 导数计算的背景和动机

在许多工程问题中,我们需要计算一个矩阵函数对一个向量变量的导数,这些导数在求解优化问题过程中非常重要。但是矩阵对向量的求导结果,是一个三维张量。这导致在不具有张量运算知识的情况下很难进行数学推导和代码编写。

为了避免复杂的张量运算,我们可以利用矩阵的向量化和克罗内克积等技巧,简化计算过程。主要思想是将矩阵对向量的导数(这是一个张量)转换为向量对向量的导数(这是一个矩阵)。然后通过“Vec技巧”,使得求得的矩阵可以用于泰勒展开式或其他数学推导中,作为张量的代替。

1.1. 克罗内克积(Kronecker Product)

克罗内克积是一种用于计算多维数组(如矩阵)的运算。假设 A ∈ R l × m \mathbf{A} \in \mathbb{R}^{l \times m} ARl×m B ∈ R n × p \mathbf{B} \in \mathbb{R}^{n \times p} BRn×p,则它们的克罗内克积定义为:

A ⊗ B = [ a 11 B ⋯ a 1 m B ⋮ ⋱ ⋮ a l 1 B ⋯ a l m B ] ∈ R l n × m p . \mathbf{A} \otimes \mathbf{B} = \begin{bmatrix} a_{11} \mathbf{B} & \cdots & a_{1m} \mathbf{B} \\ \vdots & \ddots & \vdots \\ a_{l1} \mathbf{B} & \cdots & a_{lm} \mathbf{B} \end{bmatrix} \in \mathbb{R}^{ln \times mp}. AB= a11Bal1Ba1mBalmB Rln×mp.

1.2. 向量化操作符(Vectorization Operator)

向量化操作符用于将矩阵转换为向量。假设:

A = [ a 1 a 2 ⋯ a m ] ∈ R l × m . \mathbf{A} = \begin{bmatrix} \mathbf{a}_1 & \mathbf{a}_2 & \cdots & \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{l \times m}. A=[a1a2am]Rl×m.

向量化操作符定义为:

vec ( A ) = [ a 1 a 2 ⋮ a m ] ∈ R l m × 1 . \text{vec}(\mathbf{A}) = \begin{bmatrix} \mathbf{a}_1 \\ \mathbf{a}_2 \\ \vdots \\ \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{lm \times 1}. vec(A)= a1a2am Rlm×1.

2. Vec技巧

Vec技巧是利用向量化和克罗内克积简化矩阵导数计算的一个方法。具体公式如下:
vec ( A B C ) = ( C ⊤ ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}\mathbf{C}) = (\mathbf{C}^{\top} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(ABC)=(CA)vec(B).

对于两个矩阵 A \mathbf{A} A B \mathbf{B} B,可以进一步简化为:
vec ( A B ) = ( B ⊤ ⊗ I ) vec ( A ) = ( I ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \text{vec}(\mathbf{A}) = (\mathbf{I} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(AB)=(BI)vec(A)=(IA)vec(B).

引入该技巧后,这使得我们可以通过向量化操作计算矩阵对向量的导数。考虑到记号简明性,在未加说明的情况下,我们将“向量化后的矩阵对向量的导数”来指代“矩阵对向量的导数”:
∂ A ( x ) ∂ x = ∂ vec ( A ( x ) ) ∂ x ∈ R l m × n . \frac{\partial \mathbf{A}(\mathbf{x})}{\partial \mathbf{x}} = \frac{\partial \text{vec}(\mathbf{A}(\mathbf{x}))}{\partial \mathbf{x}} \in \mathbb{R}^{lm \times n}. xA(x)=xvec(A(x))Rlm×n.

3. 应用于二阶泰勒展开

通过上述技巧,我们可以计算出二阶泰勒展开的结果。设 A = ∂ f ∂ x \mathbf{A} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} A=xf,则二阶导数为:
∂ ∂ x ( vec ( I A Δ x ) ) = ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x . \frac{\partial}{\partial\mathbf{x}}\left(\text{vec}\left(\mathbf{I}\mathbf{A}\Delta \mathbf{x}\right)\right) = \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}}. x(vec(IAΔx))=(ΔxI)xvec(A).

最终,我们得到二阶泰勒展开式:
f ( x + Δ x ) = f ( x ) + A Δ x + 1 2 ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x Δ x . \mathbf{f}(\mathbf{x}+\Delta \mathbf{x}) = \mathbf{f}(\mathbf{x}) + \mathbf{A} \Delta \mathbf{x} + \frac{1}{2} \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}} \Delta \mathbf{x}. f(x+Δx)=f(x)+AΔx+21(ΔxI)xvec(A)Δx.

这样对于接下来的数学推导或者代码编写都带来了便利。

在某些情况下,我们需要对转置矩阵求导,此时可以使用换位矩阵(commutator matrix) T \mathbf{T} T,满足 T vec ( A ) = vec ( A ⊤ ) \mathbf{T}\text{vec}(\mathbf{A}) = \text{vec}(\mathbf{A}^{\top}) Tvec(A)=vec(A)。公式如下:
∂ ∂ x ( A ⊤ ( x ) B ) = ( B ⊤ ⊗ I ) T ∂ A ∂ x . \frac{\partial }{\partial \mathbf{x}}(\mathbf{A}^{\top}(\mathbf{x}) \mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \mathbf{T}\frac{\partial \mathbf{A}}{\partial \mathbf{x}}. x(A(x)B)=(BI)TxA.

相关文章:

【矩阵微分】在不涉及张量的前提下计算矩阵对向量的导数并写出二阶泰勒展开

本篇内容摘自CMU 16-745最优控制的第10讲 “Nonlinear Trajectory Optimization”。 如何在不涉及张量运算的前提下,计算矩阵对向量的导数并写出二阶泰勒展开 在多维微积分中,计算矩阵对向量的导数和二阶泰勒展开是一项重要的任务。本文将介绍如何在不涉…...

数据结构之判断平衡二叉树详解与示例(C,C++)

文章目录 AVL树定义节点定义计算高度获取平衡因子判断是否为平衡二叉树完整示例代码结论 在计算机科学中,二叉树是一种非常重要的数据结构。它们被广泛用于多种算法中,如排序、查找等。然而,普通的二叉树在极端情况下可能退化成链表&#xff…...

深入解析仓颉编程语言:函数式编程的核心特性

摘要 仓颉编程语言以其独特的语法和功能,为开发者提供了强大的编程工具。本文将深入探讨仓颉语言中的嵌套函数、Lambda 表达式和闭包等函数式编程的核心特性,帮助开发者更好地理解和利用这些工具。 引言 在现代编程语言中,函数式编程范式越…...

springboot惠农服务平台-计算机毕业设计源码50601

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 惠农服务平台app 系统分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 惠农服务平台app 总体设计 3.1 系统功能模块设计 3.2 数据库设计 表access_token (…...

Lua脚本简单理解

目录 1.安装 2.语法 2.1Lua数据类型 2.2变量 2.3lua循环 2.4流程控制 2.5函数 2.6运算符 2.7关系运算符 3.lua脚本在redis中的使用 3.1lua脚本再redis简单编写 3.2普通锁Lua脚本 3.3可重入锁lua脚本 1.安装 centos安装 安装指令: yum -y update yum i…...

AutoSAR自适应平台架构总览--AP的初认识

AutoSAR自适应平台架构总览:AP 基础设施层(Foundation Layer)核心操作系统(Core OS)通信管理(Communication Management) 服务层(Services Layer)诊断服务(Diagnostics S…...

GPT-4o Mini:探索最具成本效益的小模型在软件开发中的应用

随着人工智能技术的迅猛发展,自然语言处理(NLP)领域也取得了显著的进步。OpenAI 最新发布的 GPT-4o Mini 模型,以其卓越的性能和极具竞争力的价格,成为了广大开发者关注的焦点。作为一名长期关注人工智能及其在软件开发…...

{Spring Boot 原理篇} Spring Boot自动装配原理

SpringBootApplication 1,Spring Boot 应用启动,SpringBootApplication标注的类就是启动类,它去实现配置类中的Bean的自动装配 SpringBootApplication public class SpringbootRedis01Application {public static void main(String[] args)…...

QEMU源码全解析 —— CPU虚拟化(10)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 《深度探索Linux系统虚拟化原理与实现》—— 王柏生 谢广军, 机械工业出版社 特此致谢! 二、x86架构CPU虚拟化 3. VMX 上一回讲解了支…...

46、PHP实现矩阵中的路径

题目: PHP实现矩阵中的路径 描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向…...

c++笔记2

目录 2.2 栈底(bottom) } 大数乘大数 节点:包含一个数据元素及若干指向子树分支的信息 。 节点的度:一个节点拥有子树的数目称为节点的度 。 叶子节点:也称为终端节点,没有子树的节点或者度为零的节点…...

通过Lua脚本手写redis分布式锁

1、手写 Redis 分布式锁,包括上锁、解锁、自动续期。 此功能实现采用 Lua脚本实现,Lua脚本可以保证原子性。 setnx可以实现分布式锁,但是无法实现可重入锁,所以用hset来代替setnx实现可重入的分布式锁。 -- lock if redis.call…...

解析银行个人征信系统

银行个人征信系统,也被称为个人信用信息基础数据库或金融信用信息基础数据库,是我国社会信用体系的重要基础设施。该系统由中国人民银行组织国内相关金融机构建立,旨在依法采集、整理、保存、加工自然人(法人)及其他组…...

AttributeError: ‘list‘ object has no attribute ‘text‘

AttributeError: ‘list‘ object has no attribute ‘text‘ 目录 AttributeError: ‘list‘ object has no attribute ‘text‘ 【常见模块错误】 【解决方案】 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英…...

Codeforces Round 874 (Div. 3)(A~D题)

A. Musical Puzzle 思路: 用最少的长度为2的字符串按一定规则拼出s。规则是&#xff1a;前一个字符串的尾与后一个字符串的首相同。统计s中长度为2的不同字符串数量。 代码: #include<bits/stdc.h> #include <unordered_map> using namespace std; #define N 20…...

[Python][基础语法]详细讲解

目录 1.顺序语句2.条件语句3.缩进和代码块4.空语句 pass5.循环语句1.while2.for3.continue4.break ∞.积累 1.顺序语句 默认情况下&#xff0c;Python的代码执行顺序是按照从上到下的顺序&#xff0c;依次执行# 输出结果&#xff1a;"123" print("1") pri…...

Layui---输入事件

输入实时监听 //监听表单单选框复选框选择 form.on(radio, function (data) {console.log(data.value); //得到被选中的值 });//监听表单下拉菜单选择form.on(select, function (data) //监听表单下拉菜单选择form.on(select, function (data) ​ //监听表单复选框选择form.…...

甄选范文“论软件测试中缺陷管理及其应用”软考高级论文,系统架构设计师论文

论文真题 软件缺陷指的是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。在目前的软件开发过程中,缺陷是不可避免的。软件测试是发现缺陷的主要手段,其核心目标就是尽可能多地找…...

spring框架实现滑动验证码功能

spring框架实现滑动验证码功能 1. 整体描述2. 具体实现2.1 滑动验证码实体类2.2 滑动验证码登录VO2.3 滑动验证码接口返回类2.4 滑动验证码工具类2.5 滑动验证码Service2.6 滑动验证码Controller 3 工程源码4 总结 1. 整体描述 之前项目需要在验证码模块&#xff0c;增加滑动验…...

Pytorch使用教学8-张量的科学运算

在介绍完PyTorch中的广播运算后&#xff0c;继续为大家介绍PyTorch的内置数学运算&#xff1a; 首先对内置函数有一个功能印象&#xff0c;知道它的存在&#xff0c;使用时再查具体怎么用其次&#xff0c;我还会介绍PyTorch科学运算的注意事项与一些实用小技巧 1 基本数学运算…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...