使用 SymPy 操作三维向量的反对称矩阵

article/2025/8/3 23:21:07

在三维空间中,一个 3 × 1 3 \times 1 3×1 向量可以转换为一个 3 × 3 3 \times 3 3×3 的反对称矩阵。这种转换在物理学、机器人学和计算机视觉等领域非常有用。本文将详细介绍如何在 Python 的 SymPy 库中定义和使用这种反对称矩阵。
在这里插入图片描述

数学背景

对于一个三维向量 v = [ v 1 v 2 v 3 ] \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix} v= v1v2v3 ,其对应的反对称矩阵定义为:

[ v ] × = [ 0 − v 3 v 2 v 3 0 − v 1 − v 2 v 1 0 ] [\mathbf{v}]_{\times} = \begin{bmatrix} 0 & -v_3 & v_2 \\ v_3 & 0 & -v_1 \\ -v_2 & v_1 & 0 \end{bmatrix} [v]×= 0v3v2v30v1v2v10

这个矩阵满足反对称性质 [ v ] × T = − [ v ] × [\mathbf{v}]_{\times}^T = -[\mathbf{v}]_{\times} [v]×T=[v]×
它的一个重要应用是向量叉积的矩阵形式: v × w = [ v ] × w \mathbf{v} \times \mathbf{w} = [\mathbf{v}]_{\times} \mathbf{w} v×w=[v]×w

在 SymPy 中实现

定义符号向量和反对称矩阵

首先,我们需要导入 SymPy 并定义符号变量:

from sympy import symbols, Matrix# 定义符号变量
v1, v2, v3 = symbols('v1 v2 v3')# 创建3×1的符号向量
v = Matrix([v1, v2, v3])# 定义反对称矩阵的函数
def create_skew_symmetric_matrix(vector):return Matrix([[0,      -vector[2], vector[1]],[vector[2], 0,      -vector[0]],[-vector[1], vector[0], 0]])# 获取符号向量对应的反对称矩阵
skew_v = create_skew_symmetric_matrix(v)print("符号向量:")
print(v)print("\n对应的反对称矩阵:")
print(skew_v)

向量叉积的矩阵形式

利用反对称矩阵,我们可以方便地计算向量叉积:

# 定义另一个符号向量
w1, w2, w3 = symbols('w1 w2 w3')
w = Matrix([w1, w2, w3])# 计算向量叉积的矩阵形式
cross_product = skew_v * wprint("\n向量叉积的矩阵形式:")
print(cross_product)# 验证是否等于直接计算向量叉积
from sympy import simplify
fork = simplify(v.cross(w) - cross_product)
print("\n验证是否等于向量叉积(结果应为零矩阵):")
print(fork)

使用数值向量

我们也可以使用具体的数值向量来验证:

# 数值向量
v_num = Matrix([1, 2, 3])# 创建对应的反对称矩阵
skew_v_num = create_skew_symmetric_matrix(v_num)print("\n数值向量:")
print(v_num)print("\n对应的反对称矩阵:")
print(skew_v_num)# 数值叉积验证
w_num = Matrix([4, 5, 6])
cross_product_num = skew_v_num * w_num
print("\n数值叉积:")
print(cross_product_num)# 直接计算向量叉积对比
print("\n直接计算向量叉积:")
print(v_num.cross(w_num))

验证反对称性质

最后,我们可以验证反对称矩阵的性质:

print("\n验证反对称矩阵的转置是否等于其负矩阵:")
print(simplify(skew_v_num.transpose() + skew_v_num))

总结

通过 SymPy,我们可以方便地定义和操作三维向量的反对称矩阵。这种矩阵在几何变换和物理模拟中有广泛的应用。本文提供的代码示例展示了如何从符号到数值计算整个过程,帮助理解和应用这一数学工具。


http://www.hkcw.cn/article/exHXophdvO.shtml

相关文章

LangChain表达式(LCEL)实操案例1

案例1:写一篇短文,然后对这篇短文进行打分 from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.runnables import RunnableWithMessageHist…

CppCon 2014 学习:HOW UBISOFT MONTREAL DEVELOPS GAMES FOR MULTICORE

多核处理器(Multicore Processor) 的基本特性,下面是对每点的简要说明: 🔹 Multicore(多核) 指一个物理处理器上集成了 多个 CPU 核心,每个核心可以独立执行指令。 🔸…

STL解析——String类详解(使用篇)

目录 sring接口解析 1.string简介 2.默认成员函数 2.1构造函数 2.2析构函数 2.3赋值重载 3.迭代器 3.1初识迭代器 3.2迭代器的使用 3.3特殊迭代器 3.4范围for 4.大小接口 4.1字符长度相关接口 4.2空间大小相关接口 5.其他常用接口 5.1operator[ ] 5.2增 5.3查 5…

Android 代码阅读环境搭建:VSCODE + SSH + CLANGD(详细版)

在阅读Android源码(AOSP超过1亿行代码)时,开发者常面临索引失败、跳转卡顿等问题。本教程将手把手教你搭建基于VSCode SSH Clangd的终极阅读环境,实现秒级符号跳转、精准代码提示和高效远程开发。 一、环境架构解析 1.1 方案组…

JAVA 集合的进阶 泛型的继承和通配符

1 泛型通配符 可以对传递的类型进行限定 1.1 格式 ? 表示不确定的类型 ?extends E: 表示可以传递 E 或者 E 所有的子类类型 ?super E: 表示可以传递 E 或者 E 所有的父类类…

改写自己的浏览器插件工具 myChromeTools

1. 起因, 目的: 前面我写过, 自己的一个浏览器插件小工具 最近又增加一个小功能,可以自动滚动页面,尤其是对于那些瀑布流加载的网页。最新的代码都在这里 2. 先看效果 3. 过程: 代码 1, 模拟鼠标自然滚动 // 处理滚动控制逻辑…

由sigmod权重曲线存在锯齿的探索

深度学习的知识点,一般按照执行流程,有 网络层类型,归一化,激活函数,学习率,损失函数,优化器。如果是研究生上课学的应该系统一点,自学的话知识点一开始有点乱。 一、激活函数Sigmod…

仿腾讯会议——优化:多条tcp连接

1、添加用户信息结构 2、添加注册视频音频结构体 3、 完成函数注册视频音频

File—IO流

因为变量,数组,对象,集合这些数据容器都在内存中,一旦程序结束,或者断电,数据就丢失了。想要长久保存,就要存在文件中(File) 文件可以长久保存数据。 文件在电脑磁盘中…

【Zephyr 系列 2】用 Zephyr 玩转 Arduino UNO / MEGA,实现串口通信与 CLI 命令交互

🎯 本篇目标 在 Ubuntu 下将 Zephyr 运行在 Arduino UNO / MEGA 上 打通串口通信,实现通过串口发送命令与反馈 使用 Zephyr Shell 模块,实现 CLI 命令处理 🪧 为什么 Arduino + Zephyr? 虽然 Arduino 开发板通常用于简单的 C/C++ 开发,但 Zephyr 的支持范围远超 STM32…

最悉心的指导教程——阿里云创建ECS实例教程+Vue+Django前后端的服务器部署(通过宝塔面板)

各位看官老爷们,点击关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 阿里云创建ECS实例教程 注意: 阿里云有300元额度的免费适用期哟 白嫖~~~~ 注册了阿里云账户后&#x…

【Android】如何抓取 Android 设备的 UDP/TCP 数据包?

目录 前言理解抓包tcpdump 实时抓包Wireshark 解包抓包后的一些思考 前言 在真正接触 UDP/TCP 抓包之前,我一直以为这是一项高深莫测的技术。可当我们真正了解之后才发现,其实并没有那么复杂——不过如此。 所谓的大佬,往往只是掌握了你尚未…

VR看房系统,新生代看房新体验

VR看房系统的概念 虚拟现实(VirtualReality,VR)看房系统,是近年来随着科技进步在房地产行业中兴起的一种创新看房方式。看房系统利用先进的计算机技术模拟出一个三维环境,使用户能够身临其境地浏览和体验房源,无需亲自…

机器学习Day5-模型诊断

实现机器学习算法的技巧。当我们训练模型或使用模型时,发现预测误差很 大,可以考虑进行以下优化: (1)获取更多的训练样本 (2)使用更少的特征 (3)获取其他特征 &#xff…

STM32F103_Bootloader程序开发06 - IAP升级用的App.bin增加CRC32校验码,确保固件完整性,防止“变砖”

导言 《STM32F103_Bootloader程序开发05 - Keil修改生成文件的路径与文件名,自动生成bin格式文件》上一章节成功让Keil生成App.bin二进制文件,用于IAP升级。 为了保障IAP升级过程中的固件完整性,避免因损坏文件导致设备“变砖”,…

语言使用的国家概况统计

语言是文化的载体,也是沟通和协作的桥梁。随着全球化进程加快,了解主要语言的分布及其使用国家,对于数据分析师、产品经理、市场人员乃至技术开发者,都极为重要。本文将梳理全球几种主要语言(英语、法语、阿拉伯语、俄…

DeepSeek-R1-0528

深度思考能力强化​ DeepSeek-R1-0528 仍然使用 2024 年 12 月所发布的 DeepSeek V3 Base 模型作为基座,但在后训练过程中投入了更多算力,显著提升了模型的思维深度与推理能力。 更新后的 R1 模型在数学、编程与通用逻辑等多个基准测评中取得了当前国内…

MCU STM32搭配存储SD NAND(贴片式T卡)于智能皮电手环(Galvanic Skin Response, GSR 手环)的全方位评测

文章目录 卓越性能强化安全高效能效图形处理优势丰富集成特性模拟模块实时监控保障数据完整性提升安全性与可靠性测量原理采样率相关 在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业…

处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249

最近在做部门知识库,选用的dify,作为rag的工具,但是经过多个对比,最后发现, 比较好用的是,纳米搜索,但是可惜纳米搜索无法在内网使用,无法把知识库放到本地,导致 有信息…

Java 基础 常见知识

基本数据类型 Java 中基本数据类型?对应的包装类?占多少字节? Java 中有 8 种基本数据类型: 6 种数字类型: 4 种整数类型:byte、short、int、long2 种浮点类型:float、double 1 种字符类型&a…