线性方程组求解——预处理Preconditioning介绍

news2024/11/14 11:57:08

为什么需要预处理?

工程中出现的大规模线性方程组往往是病态的, 对数值求解带来很大的困难:
▶ 使得迭代法(比如Krylov 子空间迭代法) 收敛变得非常缓慢
▶ 对数值解的精度产生很大的影响(在有限精度计算情形下)
对于第一个问题, 当前的有效处理方法是预处理, 预处理是当前公认的能有效改善迭代法(特别是Krylov 子空间迭代法) 收敛性质的有效手段.

什么是预处理

通俗地说, 预处理就是将难以求解的问题转化成等价容易求解的新问题
 对于线性方程组而言, 预处理就是对(病态) 系数矩阵进行适当的线性变换,转换为一个(良态) 新矩阵, 从而达到改善迭代法收敛性的目的.
 

预处理子选取基本准则:

一个好的预处理子P 通常需满足下面两个要求:
(1) P^{-1} A具有更小的条件数和(或) 更好的特征值分布; P是A的一个很好的近似。
(2) 线性方程组Pz = r 容易求解, 即预处理子P 的使用成本低廉.
▶ 第一条是为了确保预处理后的线性方程组更容易求解, 即预处理子有效
▶ 第二条是因为在用Krylov 子空间方法求解预处理后的方程组时, 每步迭代都需要额外求解一个以P 为系数矩阵的线性方程组, 为了不增加太多额外的运算成本, 必须很容易求解.

Note:一个比较有意思的事情是, 对病态矩阵A 做预处理, 要使得其条件数大大降低,预处理子P 也通常是病态的.

预处理子的种类

预处理子的分类(按构造方式)

  • (a) 代数预处理子(Algebraic Preconditioner), 即仅仅根据所给方程组的系数矩阵来构造预处理子, 这类预处理子具有一定的通用性, 便于做成黑盒子.
  • (b) 专属预处理子(Problem-Specific Preconditioner), 即根据问题的机理或物理背景所构造的专属预处理子, 这类预处理子往往具有很好的数值表现.

这里我们只介绍代数预处理子

1. 基于矩阵分裂的预处理子

理论上讲,任何一个矩阵分裂都可以定义一个预处理子. 但为了使得预处理子能有很好的预处理效果, 往往需要其在一定意义下与A 充分接近.

                                                                A=D-L-U,

其中D, −L, −U 分别是A 的对角部分, 严格下三角部分和严格上三角部分, 并假定D 非奇异. 则由我们之前讨论的定常迭代法, 可以立即得到下面的预处理子:

 Jacobi 预处理子(或对角预处理子): P = D;
 Gauss-Seidel 预处理子(或三角预处理子): P = D − L 或P = D − U;
 SOR 预处理子: P = D − ωL 或P = D − ωU;
 SSOR 预处理子: P = (D − ωL)D^{-1}(D − ωU);
 SGS 预处理子: P = (D − L)D^{-1}(D − U).
 HSS 预处理子: P = (αI + H)(αI + S)
 ADI 预处理子: P = (αI + A1)(αI + A2)

2. 不完全分解预处理子

对于大规模稀疏矩阵, 不完全分解(incomplete factorization) 是一类比较通用预处理方法, 在实际应用中通常具有比较好的数值效果。

不完全分解是当前针对大规模稀疏线性方程组的主流预处理技术之一.

比如有ILU(Incomplete LU),  ICC (Incomplete Cholesky)

不完全矩阵分解预处理方法可以看作是融合直接法与迭代法的混合算法.

参考:

KSP: Linear System Solvers — PETSc v3.21.5-522-gd31083bd1c8 documentation

潘建瑜课件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIO不止有群晖,极空间虚拟机部署免费开源的『TrueNAS』

AIO不止有群晖,极空间虚拟机部署免费开源的『TrueNAS』 哈喽小伙伴们好,我是Stark-C~ 很多小伙伴在买到极空间的NAS之后,总要各种折腾,毕竟配置高,硬件强,折腾起来也确实得心应手,乐趣多多。 …

Android相关线程基础

线程基础 进程与线程 进程:可以被看做是程序的实体, 是系统进行资源分配和调度的基本单位. 线程:是操作系统调度的最小单元, 也叫轻量级进程 使用多线程的优点 可以减少程序的响应时间。如果某个操作很耗时, 能够避免陷入长时间的等待, 从而有着更好的交互性. 线程较之进…

Android V 广播注册和配置注意事项问题

现象 在Android V平台上,应用注册非Protected广播时,如果没有加导出flag会抛出异常导致进程crash。 E/AndroidRuntime: FATAL EXCEPTION: main java.lang.SecurityException: com.demo.myapplication: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORT…

【运维监控】Prometheus+grafana监控zookeeper运行情况

本示例通过zookeeper自带的监控信息暴露出来,然后将数据收集到prometheus中,最后通过grafana的dashboard导入模板进行可视化。本示例分为三个部分,即prometheus、grafana部署和最后的集成。说明:本示例中的部署环境没有要求&#…

BC173 牛牛逆序输出(c 语言)

1.// 描述 //牛牛在尝试把一个整数逆序地输出。 //输入描述: //输入一个正整数 n。保证个位数不是 0 //输出描述: //逆序输出这个正整数。 //2345 //5432 2.我们先输入n,然后我们进行取余,然后将余数存储起来在arr中,然后除10。…

用 Python 和 Tkinter 做游戏?5分钟打造Python贪吃蛇游戏

大家好!贪吃蛇游戏是一款经典的休闲游戏,相信大家都不陌生。 今天,我们将用 Python 的 Tkinter 库快速创建一个贪吃蛇游戏。你不需要成为一个编程专家,只需跟着本文的步骤走,你就可以亲手制作属于自己的贪吃蛇游戏&am…

TikTok Shop9.9大促爆单忙不过来?EasyBoss ERP给你全方位的助力!

又是一年9.9大促,想必大多数Shopee/TikTok本土卖家的店铺订单量都远超日常了吧? 图源:网络 爆单是件大好事,但背后却是店铺运营的一场硬仗。因为出单后,多店铺的订单处理、仓库发货、售后、数据分析等环节都有大量的工…

QEMU虚拟机

vmware中创建虚拟机 创建虚拟磁盘 qemu-img create -f qcow2 sda.qcow2 100G qemu-img create -f qcow2 sdb.qcow2 100G创建桥接口 brctl addbr br0 brctl addif br0 ens36 brctl stp br0 on ifconfig ens36 0 dhclient br0brctl addbr br1 brctl addif br1 ens37 brctl stp …

信息安全工程师(3)TCP/IP协议簇

前言 TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式。它不仅仅指的是TCP和IP两个协议,而是由一系列协议组成的协议簇,这些协议共同支持着互联网上的数据传输和通信。以下是对TCP/IP协议簇的详细概述: 一、组成 TCP/IP协…

什么是期权对冲?

今天期权懂带你了解什么是期权对冲?期权对冲的选择取决于投资者的市场预期和风险承受能力,通过合理使用期权对冲策略,可以有效减少风险并优化投资组合的表现。 期权对冲是什么? 期权是一种支持双向交易的投资产品,期…

【Go】Go语言中的基本数据类型与类型转换

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

报告 | 中国信通院《大模型落地路线图研究报告(2024年)》(附下载)

前言 近年来,以大模型为代表的新一代人工智能技术加速迭代,向着更为智能化、通用化、普惠化的方向迈进,成为新一轮科技和产业变革的重要驱动力。然而,当前大模型发展仍存在工程实践复杂、技术选型困难、能力评估不全面等问题&…

基于 TDMQ for Apache Pulsar 的跨地域复制实践

导语 自2024年9月6日起,TDMQ Pulsar 版专业集群支持消息、元数据两级跨地域复制功能,消息级复制解决用户全球地域的数据统一归档问题,元数据级复制提供解决用户核心业务跨地域容灾的场景。 用户在跨地域场景遇到的疑问和挑战 在跨地域相关…

FCP-D 报表交付认证考试题

学习目标 帆软 基础知识:通过系统学习,了解帆软BI的基本概念、架构和功能。深入理解报表设计、数据集成和分析等关键模块,为将来的实际应用奠定坚实基础。 报表设计与定制学习如何设计各类报表,包括但不限于表格、图表、仪表盘等。…

springboot luttuc redis 集成protobuf,手动序列化反序列化

前置需知: 1.本文章和网上大部分博客配置不太一样,各位看官要分析一下自己的需求。集成protobuf 本文章主要是手动调用protobuf的序列化方法,而不是交由springboot 去做,会偏向原生java 使用方式 2.由于为了和公司其他的项目达成…

QQueue调用dequeue闪退解决方法

QQueue调用dequeque闪退的解决方法 先看一下Qt帮助文档里面的说明 这个函数假设队列不是空的。 那么我们在调用之前,需要先判断队列是不是空的,如果不是空的,就调用该函数。 if (!queue.isEmpty()) {QString info queue.dequeue(); }这样…

【RabbitMQ 项目】Muduo 库快速上手

Muduo 库快速上手 一.Muduo 库简介二.五个常用类介绍三.结合 Protobuf 定制的应用层协议 一.Muduo 库简介 一句话概括,Muduo 库是基于非阻塞 IO 和事件驱动的 C 高并发 TCP 网络编程库。使用主从 Reactor 模型,使用的线程模型是是 one thread one loop R…

JWT令牌——详解

目录 一、JWT是什么? 二、JWT的组成 三、JWT应用场景 四、生成和校验JWT令牌 五、具体应用 一、JWT是什么? 在当今的Web开发中,安全认证和授权变得尤为重要。JWT(JSON Web Tokens)是一种开放标准(RFC …

大厂中秋福利哪家强?字节发被子,京东联名三星堆!网友:最强的还是我们......

又是一年中秋佳节,大家公司发的中秋福利都拿到手了嘛? 从上周开始,各社交网络平台上就有人陆续晒出了公司发放的中秋礼盒。 其中,财大气粗的互联网大厂的礼盒尤为精致亮眼。 今天,小码就带大家一起来看看大厂那些让人…

在线机房迁移之“玩转TiDB迁移”

作者: 代晓磊_Mars 原文来源: https://tidb.net/blog/02df4029 要想搞定在线机房迁移之TiDB数据库迁移,看完本文基本上所有的迁移方案你都可以搞定了(数据库迁移方案和流程大同小异)。本文给了3种TiDB在线迁移的场景…