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

为什么需要预处理?

工程中出现的大规模线性方程组往往是病态的, 对数值求解带来很大的困难:
▶ 使得迭代法(比如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.rhkb.cn/news/421434.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter的升级和降级步骤

升级 1.版本升级 // 升级到指定版本 flutter upgrade 版本号 // 升级到最新版本 flutter upgrade 2. 更新开发配置 启动 Android Studio。 打开 Settings 对话框,查看 SDK Manager。 如果你已经打开了一个项目,请打开 Tools > SDK Manager。 如果…

strtok函数讲解使用

目录 1.头文件 2.strtok函数介绍 3.解释strtok函数 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff01;没这个必要&#xff0c;方源面色淡然一把抓住&#xff01;顷刻炼化&#xff01; 1.头文件 strtok函数的使用需要头文件 #include<string.h> 2.strto…

运维工程师需要掌握什么技能?

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 运维工程师作为确保IT基础设施稳定运行的关键角色&#xff0c;需要掌握一系列核心技能。这些技能涵盖了从系统监控到故障排查&#xff0c;从自动化脚本编写到云服…

Linux基本

一、安装 &#xff08;一&#xff09;bios basic input / output system cpu虚拟化技术需要开启 intel amd 不同品牌进入bios快捷键不一样 &#xff08;二&#xff09;vmware 新建 配置硬件 硬盘 建议单个虚拟硬盘文件&#xff0c;比较好管理 r如果有转移的需求&#xff…

Android Studio下载Gradle失败问题解决

问题说明 使用 Android Studio 构建程序报错如下 Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-7.5.1-bin.zip. Reason: java.net.SocketTimeoutException: Connect timed out问题解决 下载对应版本的压缩包 gradle-7.5.1…

【微服务】⭐️华为云obs功能抽取到公共服务,供所有项目使用

目录 &#x1f378;前言 &#x1f37b;一、公共服务搭建 &#x1f37a;二、代码实现 1.工具类编写 2.项目引入使用 &#x1f379;三、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上次讲了如何本地对接华为云Obs对象存储服务&#xff0c;在本地项目中通过sdk引入调用…

推理与训练,分布式训练

什么是推理training 在人工智能领域&#xff0c;推理是指经过训练的机器学习模型从全新的数据&#xff08;输入&#xff09;中得出结论&#xff08;输出&#xff09;的过程。通俗地讲&#xff0c;推理是模型的实际运行。 什么是训练 inference 在人工智能领域&#xff0c;训…

【JAVA多线程】JDK线程同步工具:Semaphore、CountDownLatch、CyclicBarrier

目录 1.可能会遇到的线程协作场景 2.Semaphore 3.CountDownLatch 4.CyclicBarrier 1.可能会遇到的线程协作场景 在并发编程中&#xff0c;线程除了独自向前运行&#xff0c;还可能相互之间要进行协作&#xff0c;以保证完成最终总的目标。可能会遇到的几种任务之间的协作&…

算法知识点————背包问题【动态规划】【打家劫舍】

万能头文件#include<bits/stdc.h> 01 背包 定义&#xff1a; 物品只能用1次。01对应选还是不选第i个物品 .N个物品、V容量的最大价值。 思路&#xff1a; &#xff08;1&#xff09;f[ i ] [j] 表示前i个物品容量j的最大价值。 &#xff08;2&#xff09;当前背包容量…

中国人民银行:数字人民币交易额已达7万亿元!中俄考虑使用国家数字货币进行双边结算!

近年来&#xff0c;数字货币的迅速发展引起了全球的广泛关注。中国人民银行&#xff08;PBOC&#xff09;近日透露&#xff0c;数字人民币&#xff08;e-CNY&#xff09;的交易额已接近1万亿美元&#xff0c;这标志着中国在数字货币领域的重大进展。同时俄罗斯也表示&#xff0…

file | 某文件夹【解耦合】下的文件查找功能实现及功能单元测试

文件查找工具 概要思路OS模块 --- 学习版os.getcwd()os.path.dirname(os.getcwd())os.path.dirname() 和 os.path.basename() OS模块 — 实战版单元测试解耦合 概要 梳理业务主逻辑&#xff1a; 查看存放被采集JSON数据的文件夹内的文件列表【所有 包含文件夹下的文件夹下的文…

C语言 | Leetcode C语言题解之第395题至少有K个重复字符的最长子串

题目&#xff1a; 题解&#xff1a; int longestSubstring(char* s, int k) {int ret 0;int n strlen(s);for (int t 1; t < 26; t) {int l 0, r 0;int cnt[26];memset(cnt, 0, sizeof(cnt));int tot 0;int less 0;while (r < n) {cnt[s[r] - a];if (cnt[s[r] - …

论文阅读:3D Gaussian Splatting for Real-Time Radiance Field Rendering

论文地址&#xff1a;https://arxiv.org/abs/2308.04079 代码地址&#xff1a;graphdeco-inria/gaussian-splatting: Original reference implementation of "3D Gaussian Splatting for Real-Time Radiance Field Rendering" (github.com) 概要 提出一个实时且能够…

论文解读 | ACL2024 Outstanding Paper:因果指导的主动学习方法:助力大语言模型自动识别并去除偏见...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击阅读原文观看作者直播讲解回放&#xff01; 作者简介 孙洲浩&#xff0c;哈尔滨工业大学SCIR实验室博士生 概述 尽管大语言模型&#xff08;LLMs&#xff09;展现出了非常强大的能力&#xff0c;但它们仍然…

ApplicationVerifier介绍说明

文章目录 1、介绍1、安装2、配置需要验证的项目2、在WinDbg中调试3、其他配置项 1、介绍 AppVerifier 特别用于检测和帮助调试内存损坏、危险的安全漏洞以及受限的用户帐户特权问题。 AppVerifier 有助于创建可靠且安全的应用程序&#xff0c;方法是监视应用程序与Windows操作…

53 - I. 在排序数组中查找数字 I

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9853%20-%20I.%20%E5%9C%A8%E6%8E%92%E5%BA%8F%E6%95%B0%E7%BB%84%E4%B8%AD%E6%9F%A5%E6%89%BE%E6%95%B0%E5%AD%97%20I/README.md 面试题 53 - I. 在排序数组中查找数字 …

Mysql基础练习题 1757.可回收且低脂的产品(力扣)

编写解决方案找出既是低脂又是可回收的产品编号。 题目链接&#xff1a; https://leetcode.cn/problems/recyclable-and-low-fat-products/description/ 建表插入数据&#xff1a; Create table If Not Exists Products (product_id int, low_fats ENUM(Y, N), recyclable …

mysql 之 information_schema

information_schema 是 MySQL 中的一个特殊数据库&#xff0c;它提供了关于 MySQL 服务器中所有数据库、表、列、索引、存储过程、函数、触发器等对象的元数据信息。information_schema 是一个只读数据库&#xff0c;主要用于查询数据库的结构信息&#xff0c;而不是存储用户数…

【网络安全】-文件上传漏洞

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录 前言 什么是文件上传漏洞&#xff1f; 文件上传的验证与绕过&#xff1a; 1.前端js验证&#xff1a;   Microsft Edge浏览器&#xff1a; Google Chrome浏览器&#xff1a; 2.后端…

[WEBPWN]BaseCTF week1 题解(新手友好教程版)

WEB A Dark Room 这道题的考点是查看网页源代码 网页源代码这里看到的是网页的html css js在用户浏览器上执行的代码 有时候很多铭感信息&#xff0c;或者关键信息。 查看网页源代码的几种方式 1 右键点击查看网页源代码 2 F12 3 Ctrl U 快捷键 HTTP是什么 HTTP&#x…