欢迎关注公众号,更多线性代数、机器学习资料免费赠送~此外还有节点分享哦

Krylov方法是一种 “降维打击” 手段,有利有弊。其特点一是牺牲了精度换取了速度,二是在没有办法求解大型稀疏矩阵时,他给出了一种办法,虽然不精确。

假设你有一个线性方程组:

其中A是已知矩阵,b是已知向量,x是需要求解的未知向量。

当你有这么个问题需要解决时,一般的思路是直接求A的逆矩阵,然后x就出来了:

但是,如果A的维度很高,比方说1000*1000的矩阵,那么A就是一个大型矩阵,大型矩阵是很难求逆的,如果A还是一个稀疏矩阵,那就更难求了。这时聪明的Krylov想到了一种方法来替换A的逆

其中都是未知标量,m是你来假设的一个值,最大不能超过矩阵的维度,比如这里例子里是1000.
瞧,这么一处理,我们就不用算了。我们只要求出方程里那些的值,就齐活儿了。

(Krylov通过数学上的推导证明了,当m趋近于矩阵维度时(这里是1000),算出来的值就是精确解了。当然很少有人会真的把m提到那个数量级来算,那样就等于新构建了一个大型线形方程组,计算量还是很大。不过这么转换一下也不是没有好处,毕竟从稀疏矩阵变为了非稀疏矩阵,好求一点,没准就能直接求逆了。)

(这里省略了几步,还要用Arnoldi方法做个循环,先留个空,有同学需要我再补上)

值要带回第一个公式,得到以下方程:

有细心的同学一看,说不对劲啊。b的维度是1000,那就是有1000个方程,的数量小于1000. 那不是方程数大于未知数了吗?这种情况应该没法儿求解啊。对的,这种情况确实没法儿精确求解,只能求近似解。方程数大于未知数时常用的方法之一是最小二乘法。那么这里可不可以用最小二乘法呢?

一般来说,最小二乘法应用的最重要的条件之一,就是方程须是线性的,最小二乘法一般只用来解线性方程,解非线性的就非常困难,需要进行一些“魔改”,比如基于最小二乘法的Levenberg-Marquardt and trust-region methods,就是matlab里的fsolve函数调用的算法,这里我就不铺开讲了,免得读者分心。我们观察了一下这个方程,正好就是线性的,那么就可以用。

岔个话,非线性方程组的求解一直是个“老大难”的问题,一般可用的方法只有Newton(牛顿)法,对就是三百年前英国那个牛顿,这么些年一直没啥进步。我们研究Krylov方法,其最重要最广泛的应用,就是可以跟Newton法结合起来,把牛顿法里一般需要手动求解的一个非常复杂的Jacobian矩阵给省去了。

创造这一天才结合的科学家将这种耦合算法称作JFNK,就是Jacobian-free Newton Krylov的缩写,意图一目了然,从此科学家们省去了手推Jacobian矩阵的烦恼,人人用了都说好,所以学Krylov算法的同学不顺便学一学JFNK就是“入宝山而空手归”了。

这里r(m)是指当m为m时的残量,所谓残量,就是error,就是我们不想要他存在的一个量。从上面的第一个公式就可以看出来,如果我们最终得出的x完全精确,那么r应该等于0. 于是现在这个问题转变为求一个含有多个自变量的表达式的最小值问题。

含有多个自变量的表达式的最小值问题,可以用最小二乘法来解决。最小二乘法的核心就是以下这些个公式:

意思就是在r为最小值的时候,r关于所有变量的偏导都应当为0,这是毫无疑问的。

于是问题转化为了一个求m个方程m个未知数的方程组的问题,而且m通常不大(当然,m是你自己设定的,设那么大不是自找麻烦么)

这种问题就很好解了,一般用前面的方法就可以搞定了。

然后问题解决,战斗结束。回顾一下,大概是这样一个流程:

大型稀疏矩阵求逆-->Krylov方法-->线性方程最小二乘问题-->小矩阵求逆

感谢知乎作者 @陈与论,原答案链接:如何使用Krylov方法求解矩阵的运算尤其是逆?

三段话搞明白什么是Krylov子空间迭代法相关推荐

  1. 1句话搞明白啥是码元、啥是比特率、啥是波特率

    1句话搞明白啥是码元.啥是比特率.啥是波特率 一个码元就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2bit数据.4bit数据!你发送一个脉冲信号,如果就可以携带4bit数据,肯定 ...

  2. krylov子空间迭代法

    krylov子空间迭代法_lizhengjiang的博客-CSDN博客_krylov子空间 如何使用Krylov方法求解矩阵的运算尤其是逆? - 知乎

  3. 运维篇—几句话搞明白nginx正向和反向代理的区别

    文章目录 一.区别 二.为什么有正向代理及举例 2.1为什么有正向代理 2.2配置正向代理举例 三.为什么有反向代理及举例 3.1为什么有反向代理 3.2配置反向代理举例 一.区别 1.代理服务器如果 ...

  4. 几句话搞明白数据中心的 “大二层网络设计”

    一.数据中心为什么需要大二层网络? 在开始之前,首先要明确一点,大二层网络基本上都是针对数据中心场景的,因为它实际上就是为了解决数据中心的服务器虚拟化之后的虚拟机动态迁移这一特定需求而出现的.对于普通 ...

  5. 用通俗易懂的大白话彻底搞明白mysql的数据类型以及mysql中的int(11),这个11到底是啥?

    今天抽时间来讲一下mysql里的知识点,之前有不少人问过我,mysql中的int(11),这个11到底是啥意思?是11位的意思吗?你是否也想过这个问题,是否也有这个疑问? ok,今天就展开来讲一下,用 ...

  6. excel计算二元线性回归_用人话讲明白梯度下降Gradient Descent(以求解多元线性回归参数为例)...

    文章目录 1.梯度 2.多元线性回归参数求解 3.梯度下降 4.梯度下降法求解多元线性回归 梯度下降算法在机器学习中出现频率特别高,是非常常用的优化算法. 本文借多元线性回归,用人话解释清楚梯度下降的 ...

  7. 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

    今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式 为什么引入函数式编程,lambda表达式? 大家都知道,JDK1.8引入了函数式编程,lambda表达式. 那有没有想过 ...

  8. 用例子来彻底搞明白Virtual 和 非 virtual(C#)

    对于Virtual的使用,有时候总有些犹豫,特别是最近学的东西太杂,今天化了点时间,把C#里面的Virtual彻底搞明白了. virtual出问题主要是由于声明对象的类和对象实际所属的类不是一个类,一 ...

  9. 终于搞明白gluPerspective和gluLookAt的关系了

    2019独角兽企业重金招聘Python工程师标准>>> 终于搞明白gluPerspective和gluLookAt的关系了 函数原型 gluLookAt(GLdoble eyex,G ...

  10. python20个常用语法_这20个常规Python语法你都搞明白了吗?

    原标题:这20个常规Python语法你都搞明白了吗? 还没关注? Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯 ...

最新文章

  1. Tomcat日志中文乱码问题解决
  2. java -Math类
  3. leetcode1111. 有效括号的嵌套深度(栈)
  4. 英特尔发布全新显卡品牌“锐炫” 首款显卡将于 2022 年上市
  5. C语言返回值深入研究
  6. 自动登录SAP系统(流星程序集之十八)
  7. 2018-2-13-win10-uwp-如何让WebView标识win10手机
  8. 如何去掉版块前边的有无新帖图标
  9. 华为p8升级android8系统资源,华为畅享8官方固件rom刷机包_畅享8完整版系统升级包下载...
  10. android模拟器虚拟机的下载、安装和使用
  11. Linux find 命令
  12. python运行时不让电脑休眠_python实现windows休眠
  13. 图片轮换-jQuery
  14. 使用结构体输入参加某会议成员的信息,并计算男女比例C++
  15. 怎样在Mac上的Safari中观看YouTube画中画?
  16. Elasticsearch+Kerberos认证
  17. 阿里云是一个什么样的企业,为什么能成为行业第一
  18. SQL语句习题总练习
  19. 网络搭建与应用2022国赛环境无误版
  20. [APIO2016]烟火表演

热门文章

  1. Centos6.5优化Tomcat7
  2. Leetcode题解(十九)
  3. WinDbg / SOS Cheat Sheet
  4. Smack 4.3.4 API
  5. 面向对象 阶段性总结
  6. [转帖] BMC安全隐患
  7. 架构实战项目心得(一):技术和工具
  8. C# 调用C/C++动态链接库,结构体中的char*类型
  9. 第一课 控制div属性
  10. win7 下安装ubuntu14.04 本人实测撰写