如何求近奇异矩阵的逆矩阵?

2024-02-16

我正在使用 C++ 和 CUDA 实现一个算法。但当我试图找到特殊矩阵的逆矩阵时,我遇到了麻烦。 该矩阵具有以下特点:

  1. 它是一个方阵(假设:(m+3)x(m+3),m>0);
  2. 它的转置矩阵是它本身;
  3. 它的主对角线必须为零;
  4. 它的右下角必须有一个 3x3 零矩阵;
  5. 你可以考虑这种形式的矩阵:H = [A ,B ;B' ,0];

我尝试了一些方法但都失败了:

  1. 伪逆矩阵:

    我最初使用 matlab,当我尝试使用 inv(H'*H) 时出现错误或警告:警告:矩阵对于工作精度来说是奇异的 or 矩阵接近奇异或缩放不良

  2. 一些近似方法:

    参考资料在这里:近似 http://hgpu.org/?p=6093我发现了两种方法:高斯乔丹消除法和乔列斯基分解法。当我在matlab中尝试chol时,我得到以下结果错误:矩阵必须是正定的

有人可以给我一些建议吗?


最好了解有关您的具体问题的更多信息,特别是如果您需要逆per se或者如果您只需要反转线性方程组。我将尽力为您提供这两种情况的指导。

让我首先考虑一下您的矩阵几乎是奇异的,因此您的系统是病态的。

确定近奇异矩阵的逆

正如上面的评论和答案中已经阐明的那样,求近奇异矩阵的逆是没有意义的。有意义的是构建一个正则化的你的矩阵的逆矩阵。您可以通过矩阵的谱分解(奇异值分解或 SVD)来实现这一点。更详细地说,您可以构造奇异系统,删除最不重要的奇异值(这些奇异值是矩阵近奇异行为的来源),然后使用奇异值和向量形成近似逆矩阵。当然,在这种情况下A*A_inv只会给出单位矩阵的近似值。

如何在 GPU 上完成此操作?首先,我要说的是,用 C++ 或 CUDA 实现 SVD 算法绝非易事。您应该根据所需的精度(例如,确定奇异值)来选择多种技术。不管怎样,Matlab有一套在 GPU 上运行的线性代数函数 http://www.mathworks.it/discovery/matlab-gpu.html. Also, CULA http://www.culatools.com/ and Magma http://icl.cs.utk.edu/magma/是两个提供 SVD 计算例程的库。另外,您可以考虑使用阵列火 http://www.accelereyes.com/products/arrayfire它还提供线性代数例程,包括 SVD。

反转一个近乎奇异的系统

在这种情况下,您应该考虑使用某种吉洪诺夫正则化,其中包括将线性系统的反演表示为优化问题并添加正则化项,这可能取决于您已经了解的有关未知数的特征。

对于上述两种情况,我建议阅读一些理论。这本书

M. Bertero,P. Boccacci,成像反问题简介 https://rads.stackoverflow.com/amzn/click/com/0750304359

如果您必须找到近似逆函数或者您有显式逆线性系统,那么这将很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何求近奇异矩阵的逆矩阵? 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • UDP接收和发送Matlab

    我目前正在努力从外部设备接收数据包 然后将数据发送到另一个设备 我有一个工作 Simulink 模型 但我不知道如何在 Matlab 中对其进行编码 Matlab 中 UDP 接收块的参数如下图所示UDP 接收参数 https i stac
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p

随机推荐