C++矩阵库Armadillo出现warning solve() system is singular错误的解决

这篇具有很好参考价值的文章主要介绍了C++矩阵库Armadillo出现warning solve() system is singular错误的解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  本文介绍使用C++ 语言的矩阵库Armadillo时,出现报错system is singular; attempting approx solution的解决方法。

  在之前的文章中,我们介绍过Armadillo矩阵库在Visual Studio软件C++环境中的配置方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/127123511),并且也介绍过Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换(https://blog.csdn.net/zhebushibiaoshifu/article/details/128274327)。而在使用Armadillo模块加以矩阵计算时,出现了1个问题——我这里会经常出现warning: solve(): system is singular; attempting approx solution字样的报错。而且因为我代码中调用Armadillo模块加以矩阵计算的次数非常多,导致这个报错会出现非常多次,如下图所示。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  虽然这个错误倒不会引发程序中断,程序还是会继续运行,相当于这个warning只是1个输出提示信息而已;但是,如果大量出现这种报错提示信息,会使得原本程序运行的速度被拖慢。如下图所示,我这里需要循环4710万次,如果一直出现这个报错的话就会使得程序运行很慢。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  因此,需要对这个报错加以解决。

  之所以出现这个错误,是因为Armadillo模块在执行矩阵计算时,遇到了秩缺陷系统,导致某些数值求解方法可能无法找到精确的解,进而导致其需要尝试找到近似解——此时,就会触发这个报错提示。其中,当线性方程组的系数矩阵不是满秩矩阵时,其被称为秩缺陷系统

  解决的思路也很简单,一个是直接隐藏这个级别的错误提示——相当于还是有这个问题,但是不让他再输出这个错误提示了;还有一个就是针对这个出错的原因加以处理。

  首先先看第一个思路。在Armadillo模块的官方网站中,提到了取消这个错误提示的方法,如下图所示。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  我们只需要在代码最开头,在#include <armadillo>这句代码前,添加如下的代码,从而将上述错误提示信息隐藏掉,在之后每次运行程序时屏蔽这个报错。

#define ARMA_WARN_LEVEL 1

  添加上述代码,如下图所示。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  此时,再运行我这里的程序,就会发现原本的错误提示信息消失了;如下图所示,不再出现原本的错误提示信息,而是直接输出了代码的进度提示。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  第二种思路,就是从报错的源头代码入手,避免出现这个错误。

  在本文的代码中,是在调用Armadillo模块的solve()函数时出现这个错误的;如下图所示。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  对于此,我们可以在solve()函数中添加solve_opts::no_approx这个参数,使得solve()函数不要寻找近似解;如下图所示。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  当然,这种方法就会带来1个新的问题——既然我们通过这种方式,设定了solve()函数不能找近似解;那么与此同时,如果精确解也无法找到的话,就会直接报错。如下图所示,本文这个场景下,solve()函数就无法找到精确解;那么如果我用上面的方式,不让他找近似解,就会直接报错。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  从上图的报错中点进来,可以发现报错的代码就是solve()函数这里;如下图所示。

C++矩阵库Armadillo出现warning solve() system is singular错误的解决,C++学习与应用,计算机高效操作,C++,Armadillo,矩阵库,矩阵计算,矩阵,solve函数,报错信息

  所以,对于本文这种场景,我们就只能用第1种思路,通过隐藏报错信息来解决这一问题了。

  至此,大功告成。

欢迎关注:疯狂学习GIS文章来源地址https://www.toymoban.com/news/detail-850206.html

到了这里,关于C++矩阵库Armadillo出现warning solve() system is singular错误的解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安装pyautogui出现错误WARNING: You are using pip version 20.2.3; however, version 22.3.1 is available.

     点击下面这个地方,然后输入下面代码: 如果出现错误: 解决方法: 先点击file,然后点击Setting 然后点击Project:pythonProject1-点击Python Interpreter 然后双击pip,会出来下面界面 网速不太好的多试几次,下面将对勾打上,然后点击Install Package 最后再重新输入pip install pyautogui即

    2024年02月12日
    浏览(24)
  • 为何出现Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes ...

    当在IDEA中连接Redis时出现\\\"Java HotSpot™ 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended\\\"错误,通常是因为类加载器(ClassLoader)的共享机制引发的警告。 Java的类加载机制涉及到Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoade

    2024年02月10日
    浏览(38)
  • Armadillo:矩阵类、向量类、Cube类和泛型类

    密集矩阵的类,其元素按列优先顺序存储(即逐列) 根矩阵类是 Mattype ,其中 type 是以下项之一: float 、 double 、 std::complexfloat 、 std::complexdoubleshort 、 int 、 long 和无符号的 short 、 int 、 long 为方便起见,定义了以下 typedef: 在本文档中,为了方便起见,使用了垫子类型;

    2024年04月15日
    浏览(30)
  • 奇异矩阵报错处理numpy.linalg.LinAlgError: singular matrix

    奇异矩阵出现的原因是因为出现了相同的一行或者一列 numpy.linalg.LinAlgError: singular matrix报错位置在 a数据转置发生了错误,因为a数据在添加数据的时候,添加重复了一列。 或者因为产生了a奇异矩阵,用异常处理语句 try: except:重新处理a矩阵

    2024年02月15日
    浏览(30)
  • windows pip安装出现 error: Microsoft Visual C++ 14.0 is required

    可参考:如何解决 Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“_不吃香菜的小趴菜的博客-CSDN博客 1、下载:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux         我这使用的是社区2022 ,然后默认进行安装, 2、下载桌面开发工具  2.1、社区版点

    2024年02月06日
    浏览(45)
  • 解决python安装依赖包出现 Microsoft Visual C++ 14.0 or greater is required问题

    解决python在安装第三方包出现的问题:error Microsoft Visual C++ 14.0 or greater is required. Get it with Microsoft C++ Build Tools httpsvisualstudio.microsoft.comvisual-cpp-build-tools 问题 出现这个问题 着实让人很头疼啊! 我从网上也找到了一些解决方案,但这些都不成功 网上提供了一些包 例如: 等类似

    2024年02月05日
    浏览(40)
  • FM的算法理解,以及Windows下安装pyFM,出现microsoft visual c++ 14.0 is required的解决

    FM具体的算法思路理解可以参考 FM算法理解 本文主要讲解的是pyFM的使用 本文主要是作者在学习FM代码使用时候遇到的问题,主要问题有以下几个 microsoft visual c++ 14.0 is required LINK : fatal error LNK1181: cannot open input file ‘m.lib’ 有几篇博客是说可以在线安装,但其实对于FM这个库,

    2024年02月06日
    浏览(43)
  • 安装第三方库,出现“error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual……”解决方案

    .我们再安装python的各种包时,有时候会出现如下图情况: 从报错可以看出,需要安装 Microsoft Visual C++ 14.0,但是安装后还是没有解决。因此只能退一步,从Python安装包大全中,找到我们想要安装的包进行安装。步骤如下: 1.在网址中下载安装包。 2.,这里我选择gdal包下载。

    2024年02月13日
    浏览(44)
  • ubuntu warning: gpg (GnuPG) is not available. 解决办法

    warning: gpg (GnuPG) is not available. warning: Installing it is strongly encouraged. fatal: cannot make /home/xxxx/work/dove13/.repo/repo directory: File ex kkkkcom@kkkkcom-virtual-machine:/snap/bin$ ls -l repo lrwxrwxrwx 1 root root 13 5月 16 09:38 repo - git-repo.repo kkkkcom@kkkkcom-virtual-machine:/snap/bin$ ls -l git-repo.repo lrwxrwxrwx 1 root root 1

    2024年02月15日
    浏览(38)
  • WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. I... it

    查看防火墙状态时,日志中有警告: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. I... it now.   解决: 在  firewalld  中添加了一个配置参数来禁用区域偏移 在以前的版本中, firewalld  服务包含一个未记录的行为,称为\\\"zone drifting\\\"。RHEL 7.8 删除了此行

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包