黎曼几何与切空间之间的投影

2023-10-21 10:36

本文主要是介绍黎曼几何与切空间之间的投影,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

公式:

从黎曼空间投影到切空间,其中P为黎曼均值,也是切空间的参考中心点,Pi是要投影到切空间的点。

 从切空间投影回来,其中Si为切空间中的向量。

function Tcov = CovToTan(cov,Mcov)Cm12 = Mcov^(-1/2);X_new = logm(Cm12 * cov * Cm12);C12 = Mcov^(1/2);Tcov = Mupper(C12 * X_new * C12);
endfunction Cov = TanToCov(vec,Mcov)X = Munupper(vec);Cm12 = Mcov^(-1/2);X = Cm12 * X * Cm12;C12 = Mcov^(1/2);Cov = C12 * expm(X) * C12;
endfunction T = Mupper(X)% Upper triangular part vectorization with diagonal preservation.% This function keeps the upper triangular part of the matrix and% vectorizes it while multiplying non-diagonal elements by sqrt(2).% Get the size of X[M, N] = size(X);% Check if matrices are squareif M ~= Nerror('Matrices must be square');end% Initialize T with zerosT = zeros(M, M, 'like', X);% Calculate the multiplier for non-diagonal elementsmultiplier = sqrt(2);% Fill T with the upper triangular part, preserving the diagonalfor i = 1:Mfor j = i:Mif i == jT(i, j) = X(i, j);  % Diagonal element remains the sameelseT(i, j) = X(i, j) * multiplier;  % Non-diagonal elements multiplied by sqrt(2)endendend% Flatten the upper triangular part of T to a vectorT = T(triu(true(size(T))) == 1);T = T';
endfunction X = Munupper(T, n)% Reverse the operation to reconstruct the matrix from its upper triangular part.% Calculate the size of the square matrix based on the length of the input vector Tn = round((sqrt(1 + 8 * length(T)) - 1) / 2);% Check if T is a valid upper triangular vectorm = n * (n + 1) / 2;if numel(T) ~= merror('Invalid input. Input vector size does not match the expected size for upper triangular vectors.');end% Initialize the symmetric matrix X with zerosX = zeros(n, n, 'like', T);% Calculate the indices for the upper triangular part[I, J] = find(triu(ones(n)));% Reverse the vectorization and apply the appropriate scaling to non-diagonal elementsfor k = 1:numel(I)i = I(k);j = J(k);if i == jX(i, j) = T(k);  % Diagonal elements remain the sameelseX(i, j) = T(k) / sqrt(2);  % Reverse scaling for non-diagonal elementsX(j, i) = X(i, j);  % Symmetric matrixendend
end

这篇关于黎曼几何与切空间之间的投影的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/253825

相关文章

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

MySQL表空间结构详解表空间到段页操作

《MySQL表空间结构详解表空间到段页操作》在MySQL架构和存储引擎专题中介绍了使用不同存储引擎创建表时生成的表空间数据文件,在本章节主要介绍使用InnoDB存储引擎创建表时生成的表空间数据文件,对... 目录️‍一、什么是表空间结构1.1 表空间与表空间文件的关系是什么?️‍二、用户数据在表空间中是怎么